[hdf5] 01/01: Imported Upstream version 1.8.14+docs
Gilles Filippini
pini at moszumanska.debian.org
Mon Dec 22 10:45:38 UTC 2014
This is an automated email from the git hooks/post-receive script.
pini pushed a commit to branch upstream
in repository hdf5.
commit eb6a32d9d47066e392467576db8caec513dca5ea
Author: Gilles Filippini <pini at debian.org>
Date: Sun Dec 21 11:21:12 2014 +0100
Imported Upstream version 1.8.14+docs
---
CMakeFilters.cmake | 6 +-
CMakeInstallation.cmake | 103 +-
CMakeLists.txt | 32 +-
MANIFEST | 59 +-
Makefile.in | 1 -
README.txt | 2 +-
bin/cmakehdf5 | 20 +-
bin/trace | 2 +
c++/CMakeLists.txt | 4 +-
c++/Makefile.in | 1 -
c++/examples/Makefile.in | 1 -
c++/src/CMakeLists.txt | 2 +-
c++/src/H5ArrayType.cpp | 53 +-
c++/src/H5Attribute.cpp | 12 +-
c++/src/H5CommonFG.cpp | 17 +
c++/src/H5CppDoc.h | 53 +-
c++/src/H5DataSet.cpp | 10 +-
c++/src/H5DataSpace.cpp | 2 +-
c++/src/H5DataSpace.h | 12 +-
c++/src/H5DataType.cpp | 10 +-
c++/src/H5EnumType.cpp | 1 +
c++/src/H5Exception.cpp | 6 +
c++/src/H5File.cpp | 18 +-
c++/src/H5Group.cpp | 8 +-
c++/src/H5IdComponent.cpp | 5 +-
c++/src/H5Location.cpp | 6 +-
c++/src/H5PropList.cpp | 7 +-
c++/src/H5StrType.cpp | 14 +
c++/src/Makefile.in | 7 +-
c++/src/cpp_doc_config | 6 +-
c++/test/CMakeTests.cmake | 3 +-
c++/test/Makefile.in | 1 -
c++/test/dsets.cpp | 1 +
c++/test/tfile.cpp | 4 +-
c++/test/th5s.cpp | 4 +-
c++/test/tlinks.cpp | 2 +-
config/apple | 24 +
config/cmake/ConfigureChecks.cmake | 778 +-
config/cmake/ConversionTests.c | 466 +-
config/cmake/FindHDF5.cmake.in | 172 +-
config/cmake/H5pubconf.h.in | 15 +-
config/cmake/HDF518_Examples.cmake.in | 233 +-
config/cmake/HDF5Macros.cmake | 2 +-
config/cmake/README.txt.cmake.in | 107 +-
config/cmake/cacheinit.cmake | 148 +-
config/cmake/hdf5-config-version.cmake.in | 54 +-
config/cmake/hdf5-config.cmake.build.in | 146 +-
config/cmake/hdf5-config.cmake.install.in | 162 +-
config/cmake/libhdf5.settings.cmake.in | 2 +-
config/cmake/mccacheinit.cmake | 155 +-
.../{cmake => cmake_ext_mod}/CPack.Info.plist.in | 0
config/cmake_ext_mod/CTestCustom.cmake | 16 +
.../{cmake => cmake_ext_mod}/CheckTypeSize.cmake | 12 +-
config/cmake_ext_mod/ConfigureChecks.cmake | 751 ++
config/{cmake => cmake_ext_mod}/FindMPI.cmake | 0
config/{cmake => cmake_ext_mod}/FindSZIP.cmake | 6 +-
.../{cmake => cmake_ext_mod}/GetTimeOfDayTest.cpp | 0
.../HDFCXXTests.cpp} | 8 +-
config/{cmake => cmake_ext_mod}/HDFLibMacros.cmake | 247 +-
config/{cmake => cmake_ext_mod}/HDFMacros.cmake | 131 +-
.../HDF5Tests.c => cmake_ext_mod/HDFTests.c} | 0
.../HDFUseFortran.cmake} | 28 +
.../NSIS.InstallOptions.ini.in | 2 +-
config/{cmake => cmake_ext_mod}/NSIS.template.in | 0
config/{cmake => cmake_ext_mod}/grepTest.cmake | 0
config/{cmake => cmake_ext_mod}/hdf.bmp | Bin
config/{cmake => cmake_ext_mod}/hdf.icns | Bin
config/{cmake => cmake_ext_mod}/hdf.ico | Bin
config/{cmake => cmake_ext_mod}/prunTest.cmake | 0
config/{cmake => cmake_ext_mod}/runTest.cmake | 34 +-
config/{cmake => cmake_ext_mod}/version.plist.in | 0
config/gnu-flags | 82 +-
config/lt_vers.am | 6 +-
configure | 203 +-
configure.ac | 101 +-
examples/CMakeLists.txt | 2 +-
examples/Makefile.in | 1 -
examples/h5_cmprss.c | 250 +-
examples/h5_crtatt.c | 126 +-
examples/h5_crtdat.c | 102 +-
examples/h5_crtgrp.c | 80 +-
examples/h5_crtgrpar.c | 96 +-
examples/h5_crtgrpd.c | 182 +-
examples/h5_rdwt.c | 106 +-
examples/h5_reference.c | 4 +-
fortran/Makefile.in | 1 -
fortran/examples/Makefile.in | 1 -
fortran/examples/h5_cmprss.f90 | 262 +-
fortran/src/CMakeLists.txt | 49 +-
fortran/src/H5Pf.c | 58 +-
fortran/src/H5Rf.c | 2 +-
fortran/src/H5Tf.c | 35 +-
fortran/src/H5Tff.f90 | 71 +-
fortran/src/H5_f.c | 14 +-
fortran/src/H5test_kind.f90 | 24 +-
fortran/src/H5test_kind_SIZEOF.f90 | 24 +-
...ind_SIZEOF.f90 => H5test_kind_STORAGE_SIZE.f90} | 70 +-
fortran/src/Makefile.am | 6 +-
fortran/src/Makefile.in | 24 +-
fortran/src/hdf5_fortrandll.def.in | 1144 +-
fortran/test/CMakeLists.txt | 15 +-
fortran/test/Makefile.am | 22 +-
fortran/test/Makefile.in | 64 +-
fortran/test/fortranlib_test_1_8.f90 | 8 +-
fortran/test/tH5L_F03.f90 | 2 +-
fortran/test/tH5MISC_1_8.f90 | 2 +-
fortran/test/tH5O_F03.f90 | 2 +-
fortran/test/tH5P_F03.f90 | 86 +-
fortran/test/tH5T_F03.f90 | 13 +-
fortran/test/tHDF5_1_8.f90 | 1 -
fortran/test/tf.f90 | 4 +-
fortran/test/tf_F03.f90 | 128 +
fortran/test/tf_F08.f90 | 128 +
fortran/test/{tHDF5_1_8.f90 => tf_F90.f90} | 27 +-
fortran/testpar/Makefile.in | 1 -
hl/CMakeLists.txt | 2 +-
hl/Makefile.in | 1 -
hl/c++/Makefile.in | 1 -
hl/c++/examples/Makefile.in | 1 -
hl/c++/src/Makefile.in | 7 +-
hl/c++/test/Makefile.in | 1 -
hl/examples/Makefile.in | 1 -
hl/fortran/Makefile.in | 1 -
hl/fortran/examples/Makefile.in | 1 -
hl/fortran/src/Makefile.am | 2 +-
hl/fortran/src/Makefile.in | 9 +-
hl/fortran/test/Makefile.in | 1 -
hl/fortran/test/tsttable.f90 | 21 +-
hl/src/H5DS.c | 170 +-
hl/src/H5DSprivate.h | 2 -
hl/src/H5HLprivate2.h | 40 +-
hl/src/H5IM.c | 145 +-
hl/src/H5LT.c | 107 +-
hl/src/H5LTanalyze.c | 1792 +--
hl/src/H5LTanalyze.l | 75 +-
hl/src/H5LTparse.c | 3087 +++--
hl/src/H5LTparse.h | 201 +-
hl/src/H5LTparse.y | 141 +-
hl/src/H5LTprivate.h | 2 +-
hl/src/H5PT.c | 51 +-
hl/src/H5TB.c | 3143 +++---
hl/src/Makefile.am | 2 +-
hl/src/Makefile.in | 9 +-
hl/test/Makefile.in | 1 -
hl/test/gen_test_ds.c | 4 +-
hl/test/test_ds.c | 10 +-
hl/test/test_dset_opt.c | 14 +-
hl/test/test_file_image.c | 10 +-
hl/test/test_image.c | 4 +-
hl/test/test_lite.c | 39 +-
hl/test/test_table.c | 9 +-
hl/tools/Makefile.in | 1 -
hl/tools/gif2h5/Makefile.in | 1 -
html/ADGuide.html | 389 +-
html/ADGuide/Changes.html | 11200 +------------------
html/ADGuide/Changes_1_4-1_6.html | 3401 ++++++
html/ADGuide/{Changes.html => Changes_1_8_x.html} | 3442 +-----
html/ADGuide/CompatFormat180.html | 24 +-
html/ADGuide/Compatibility_Report/CR_1.8.14.html | 1176 ++
html/ADGuide/ImageSpec.html | 26 +-
html/Advanced.html | 28 +-
html/Advanced/Chunking/index.html | 29 +-
html/Advanced/DirectChunkWrite/index.html | 23 +-
html/Advanced/HDF5_Metadata/index.html | 23 +-
html/Advanced/MetadataCache/index.html | 25 +-
html/Advanced/UsingIdentifiers/index.html | 95 +-
html/Advanced/UsingUnicode/index.html | 23 +-
html/Copyright.html | 23 +-
html/Glossary.html | 26 +-
html/Graphics/favicon.ico | Bin 0 -> 805 bytes
html/H5.format.html | 3103 +++--
html/H5.intro.html | 24 +-
html/HL/H5TB_Spec.html | 6 +-
html/HL/RM_H5DS.html | 7 +-
html/HL/RM_H5IM.html | 7 +-
html/HL/RM_H5LT.html | 7 +-
html/HL/RM_H5PT.html | 7 +-
html/HL/RM_H5PT_c++.html | 7 +-
html/HL/RM_H5TB.html | 47 +-
html/HL/RM_HDF5Optimized.html | 4 +-
html/HL/index.html | 7 +-
html/Intro/IntroExamples.html | 24 +-
html/RM/APICompatMacros.html | 24 +-
html/RM/CollectiveCalls.html | 24 +-
html/RM/H5A/H5Acreate.htm | 12 +-
html/RM/H5A/H5Acreate2.htm | 13 +-
html/RM/H5A/H5Acreate_by_name.htm | 16 +-
html/RM/H5A/H5Aget_type.htm | 38 +-
html/RM/H5A/H5Aopen.htm | 10 +-
html/RM/H5A/H5Aopen_by_idx.htm | 11 +-
html/RM/H5A/H5Aopen_by_name.htm | 16 +-
html/RM/H5A/H5Aread.htm | 11 +-
html/RM/H5A/H5Awrite.htm | 15 +-
html/RM/H5D/H5Dcreate.htm | 13 +-
html/RM/H5D/H5Dcreate2.htm | 32 +-
html/RM/H5D/H5Dcreate_anon.htm | 13 +-
html/RM/H5D/H5Dget_access_plist.htm | 8 +-
html/RM/H5D/H5Dget_create_plist.htm | 40 +-
html/RM/H5D/H5Dget_space.htm | 12 +-
html/RM/H5D/H5Dget_type.htm | 13 +-
html/RM/H5D/H5Dopen.htm | 11 +-
html/RM/H5D/H5Dopen2.htm | 47 +-
html/RM/H5D/H5Dread.htm | 16 +-
html/RM/H5D/H5Dwrite.htm | 16 +-
html/RM/H5E/H5Ecreate_msg.htm | 13 +-
html/RM/H5E/H5Ecreate_stack.htm | 40 +-
html/RM/H5F/H5Fcreate.htm | 13 +-
html/RM/H5F/H5Fget_access_plist.htm | 18 +-
html/RM/H5F/H5Fget_create_plist.htm | 18 +-
html/RM/H5F/H5Fopen.htm | 14 +-
html/RM/H5F/H5Freopen.htm | 44 +-
html/RM/H5G/H5Gcreate.htm | 18 +-
html/RM/H5G/H5Gcreate2.htm | 22 +-
html/RM/H5G/H5Gcreate_anon.htm | 16 +-
html/RM/H5G/H5Gget_objinfo.htm | 2 +-
html/RM/H5G/H5Gopen.htm | 12 +-
html/RM/H5G/H5Gopen2.htm | 21 +-
html/RM/H5I/H5Isearch.htm | 32 +-
html/RM/H5L/H5Ldelete.htm | 12 +-
html/RM/H5L/H5Lget_info.htm | 5 +-
html/RM/H5L/H5Literate.htm | 15 +-
html/RM/H5L/H5Literate_by_name.htm | 15 +-
html/RM/H5O/H5Oget_info.htm | 7 +-
html/RM/H5O/H5Oopen.htm | 19 +-
html/RM/H5O/H5Oopen_by_addr.htm | 20 +-
html/RM/H5O/H5Oopen_by_idx.htm | 12 +-
html/RM/H5P/H5Pcreate.htm | 44 +-
html/RM/H5P/H5Pget_char_encoding.htm | 17 +-
html/RM/H5P/H5Pget_core_write_tracking.htm | 8 +-
html/RM/H5P/H5Pset_cache.htm | 194 +-
html/RM/H5P/H5Pset_char_encoding.htm | 20 +-
html/RM/H5P/H5Pset_chunk_cache.htm | 94 +-
html/RM/H5P/H5Pset_core_write_tracking.htm | 169 +-
html/RM/H5P/H5Pset_fapl_multi.htm | 26 +-
html/RM/H5R/H5Rdereference.htm | 16 +-
html/RM/H5R/H5Rget_region.htm | 14 +-
html/RM/H5S/H5Screate.htm | 9 +-
html/RM/H5S/H5Screate_simple.htm | 14 +-
html/RM/H5T/H5Tarray_create2.htm | 2 +-
html/RM/H5T/H5Tcopy.htm | 13 +-
html/RM/H5T/H5Tcreate.htm | 15 +-
html/RM/H5T/H5Tdecode.htm | 11 +-
html/RM/H5T/H5Tget_class.htm | 13 +-
html/RM/H5T/H5Tget_cset.htm | 15 +-
html/RM/H5T/H5Tget_member_type.htm | 16 +-
html/RM/H5T/H5Tget_size.htm | 28 +-
html/RM/H5T/H5Tget_super.htm | 11 +-
html/RM/H5T/H5Topen.htm | 15 +-
html/RM/H5T/H5Topen2.htm | 41 +-
html/RM/H5T/H5Tregister.htm | 9 +-
html/RM/H5T/H5Tset_cset.htm | 22 +-
html/RM/PredefDTypes.html | 26 +-
html/RM/RM_H5.html | 29 +-
html/RM/RM_H5A.html | 33 +-
html/RM/RM_H5D.html | 28 +-
html/RM/RM_H5E.html | 28 +-
html/RM/RM_H5F.html | 28 +-
html/RM/RM_H5Front.html | 28 +-
html/RM/RM_H5G.html | 28 +-
html/RM/RM_H5I.html | 28 +-
html/RM/RM_H5L.html | 28 +-
html/RM/RM_H5O.html | 28 +-
html/RM/RM_H5P.html | 28 +-
html/RM/RM_H5R.html | 28 +-
html/RM/RM_H5S.html | 28 +-
html/RM/RM_H5T.html | 35 +-
html/RM/RM_H5Z.html | 26 +-
html/RM/Tools.html | 29 +-
html/RM/Tools/h5diff.htm | 2 +-
html/TechNotes.html | 73 +-
html/TechNotes/VFL.html | 7 +-
html/TechNotes/VFLfunc.html | 4 +-
html/TechNotes/Version.html | 83 +-
html/UG/13_Attributes.html | 4 +-
html/UG/14_PropertyLists.html | 650 +-
html/UG/17_Additional.html | 6 +-
html/UG/UG_UpdateStatus.html | 30 +-
html/UG/UG_front.html | 4 +-
html/UG/UG_nav00.html | 186 +-
html/UG/UG_nav03DataModel.html | 191 +-
html/UG/UG_nav04ProgModel.html | 211 +-
html/UG/UG_nav08TheFile.html | 203 +-
html/UG/UG_nav09Groups.html | 184 +-
html/UG/UG_nav10Datasets.html | 199 +-
html/UG/UG_nav11Datatypes.html | 205 +-
html/UG/UG_nav12Dataspaces.html | 197 +-
html/UG/UG_nav13Attributes.html | 191 +-
html/UG/UG_nav13ErrorHandling.html | 197 +-
html/UG/UG_nav14PropertyLists.html | 197 +-
html/UG/UG_nav17SpecialTopics.html | 181 +-
html/UG/UG_navObjectsIdentifiers.html | 174 +-
html/UG/ed_libs/Footer.lbi | 5 -
html/_topic/Chunking/index.html | 23 +-
html/cpplus/CppInterfaces.html | 22 +-
html/ddl.html | 27 +-
html/doc-info.html | 10 +-
html/ed_libs/Footer-THGonly.htm | 23 +
html/ed_libs/Footer-THGonly.lbi | 2 +-
html/ed_libs/{Footer.lbi => Footer-THGonly2.htm} | 9 +-
html/ed_libs/Footer-THGonly3.htm | 23 +
html/ed_libs/{Footer.lbi => Footer.htm} | 11 +-
html/ed_libs/Footer.lbi | 2 +-
html/ed_libs/{Footer.lbi => Footer2.htm} | 7 +-
html/ed_libs/{Footer.lbi => Footer3.htm} | 11 +-
html/ed_libs/Footer_Null.htm | 15 +
html/ed_libs/Footer_Null.lbi | 3 +-
html/fortran/FortranFlags.html | 29 +-
html/fortran/index.html | 9 +-
html/index.html | 6 +-
perform/CMakeLists.txt | 2 +-
perform/Makefile.in | 1 -
perform/sio_standalone.h | 1 +
perform/sio_timer.c | 394 +-
release_docs/HISTORY-1_8.txt | 764 ++
release_docs/INSTALL | 28 +-
release_docs/INSTALL_CMake.txt | 20 +-
release_docs/INSTALL_Cygwin.txt | 81 +-
release_docs/INSTALL_parallel | 25 +-
release_docs/RELEASE.txt | 776 +-
release_docs/USING_CMake_Examples.txt | 162 +-
release_docs/USING_HDF5_CMake.txt | 10 +-
release_docs/USING_HDF5_VS.txt | 6 +-
src/CMakeLists.txt | 60 +-
src/H5.c | 5 +-
src/H5A.c | 1096 +-
src/H5AC.c | 70 +-
src/H5ACpkg.h | 2 -
src/H5ACprivate.h | 2 +
src/H5Adeprec.c | 9 +-
src/H5Aint.c | 1155 ++
src/H5Apkg.h | 14 +-
src/H5B.c | 2 +-
src/H5C.c | 58 +-
src/H5Cprivate.h | 16 +-
src/H5D.c | 200 +-
src/H5Dchunk.c | 270 +-
src/H5Dint.c | 302 +-
src/H5Dio.c | 111 +-
src/H5Dmpio.c | 10 +-
src/H5Dprivate.h | 3 +
src/H5Dpublic.h | 4 +-
src/H5E.c | 127 +-
src/H5Epublic.h | 2 +-
src/H5F.c | 2350 +---
src/H5FD.c | 53 +-
src/H5FDint.c | 79 +-
src/H5FDmpio.c | 39 +-
src/H5FDmulti.c | 2 +-
src/H5FDprivate.h | 6 +-
src/H5FDwindows.h | 98 +-
src/H5Faccum.c | 519 +-
src/H5Fefc.c | 7 +-
src/{H5F.c => H5Fint.c} | 1688 +--
src/H5Fio.c | 17 +-
src/H5Fpkg.h | 21 +-
src/H5Fprivate.h | 52 +-
src/H5Fsuper.c | 71 +-
src/H5Fsuper_cache.c | 28 +-
src/H5G.c | 13 +-
src/H5Gint.c | 2 +-
src/H5Gname.c | 4 +-
src/H5Gtraverse.c | 2 +-
src/H5HG.c | 2 +-
src/H5I.c | 101 +-
src/H5Ipkg.h | 8 +-
src/H5Ipublic.h | 4 +-
src/H5Lpublic.h | 4 +-
src/H5MF.c | 13 +-
src/H5PL.c | 1 +
src/H5PLextern.h | 40 +-
src/H5PLprivate.h | 14 +-
src/H5Pacpl.c | 9 +-
src/H5Pdapl.c | 11 +-
src/H5Pdcpl.c | 11 +-
src/H5Pdeprec.c | 1 +
src/H5Pdxpl.c | 9 +-
src/H5Pfapl.c | 21 +-
src/H5Pfcpl.c | 9 +-
src/H5Pfmpl.c | 10 +-
src/H5Pgcpl.c | 11 +-
src/H5Pint.c | 330 +-
src/H5Plapl.c | 9 +-
src/H5Plcpl.c | 9 +-
src/H5Pocpl.c | 7 +-
src/H5Pocpypl.c | 10 +-
src/H5Ppkg.h | 13 +-
src/H5Pprivate.h | 42 +-
src/H5Ppublic.h | 127 +-
src/H5Pstrcpl.c | 8 +-
src/H5R.c | 23 +-
src/H5S.c | 14 +-
src/H5Smpio.c | 60 +-
src/H5Spublic.h | 2 +-
src/H5T.c | 41 +-
src/H5Tbit.c | 16 +-
src/H5Tcommit.c | 2 +-
src/H5Z.c | 34 +-
src/H5Zprivate.h | 2 +-
src/H5Zszip.c | 2 +-
src/H5config.h.in | 10 +-
src/H5private.h | 3 +
src/H5public.h | 7 +-
src/H5trace.c | 2 +-
src/Makefile.am | 2 +-
src/Makefile.in | 16 +-
test/CMakeLists.txt | 6 +-
test/CMakeTests.cmake | 89 +-
test/Makefile.in | 1 -
test/accum.c | 199 +-
test/cache_api.c | 14 +-
test/cmpd_dset.c | 34 +-
test/dsets.c | 88 +-
test/dt_arith.c | 96 +-
test/dtypes.c | 88 +-
test/dynlib2.c | 3 +
test/dynlib3.c | 3 +
test/err_compat.c | 2 +-
test/error_test.c | 2 +-
test/file_image.c | 2 +-
test/fillval.c | 28 +-
test/filter_fail.c | 5 +-
test/gen_bogus.c | 2 +-
test/getname.c | 16 +-
test/h5test.c | 6 +-
test/links.c | 129 +-
test/ntypes.c | 6 +-
test/objcopy.c | 16 +-
test/tarray.c | 6 +-
test/tattr.c | 18 +-
test/tconfig.c | 4 +-
test/tcoords.c | 22 +-
test/testfiles/err_compat_1 | 5 +-
test/testframe.c | 23 +-
test/testhdf5.c | 6 +-
test/tfile.c | 22 +-
test/tgenprop.c | 2 +-
test/tid.c | 160 +-
test/tmisc.c | 4 +-
test/trefer.c | 107 +-
test/tselect.c | 447 +-
test/ttsafe.c | 80 +-
test/ttsafe_acreate.c | 4 +-
test/ttsafe_cancel.c | 4 +-
test/tunicode.c | 2 +-
testpar/CMakeLists.txt | 7 +-
testpar/CMakeTests.cmake | 7 +-
testpar/Makefile.in | 1 -
testpar/t_cache.c | 2 +-
testpar/t_chunk_alloc.c | 16 +-
testpar/t_coll_chunk.c | 8 +-
testpar/t_dset.c | 124 +-
testpar/t_filter_read.c | 4 +-
testpar/t_mdset.c | 57 +
testpar/t_mpi.c | 922 +-
testpar/testphdf5.c | 393 +-
testpar/testphdf5.h | 1 +
tools/CMakeLists.txt | 2 +-
tools/Makefile.in | 1 -
tools/h5copy/CMakeLists.txt | 6 +-
tools/h5copy/CMakeTests.cmake | 2 +-
tools/h5copy/Makefile.in | 1 -
tools/h5copy/h5copygentest.c | 20 +-
tools/h5diff/CMakeLists.txt | 6 +-
tools/h5diff/CMakeTests.cmake | 4 +-
tools/h5diff/Makefile.in | 1 -
tools/h5diff/h5diffgentest.c | 50 +-
tools/h5diff/ph5diff_main.c | 5 +-
tools/h5diff/testfiles/h5diff_101w.txt | 22 +-
tools/h5diff/testfiles/h5diff_102w.txt | 20 +-
tools/h5diff/testh5diff.sh.in | 7 +-
tools/h5diff/testph5diff.sh.in | 0
tools/h5dump/CMakeLists.txt | 6 +-
tools/h5dump/CMakeTests.cmake | 24 +-
tools/h5dump/CMakeTestsPBITS.cmake | 2 +-
tools/h5dump/CMakeTestsXML.cmake | 2 +-
tools/h5dump/Makefile.in | 1 -
tools/h5dump/h5dump_xml.c | 2 +-
tools/h5dump/h5dumpgentest.c | 28 +-
tools/h5import/CMakeLists.txt | 6 +-
tools/h5import/CMakeTests.cmake | 14 +-
tools/h5import/Makefile.in | 1 -
tools/h5import/h5import.c | 9 +-
tools/h5jam/CMakeLists.txt | 6 +-
tools/h5jam/CMakeTests.cmake | 18 +-
tools/h5jam/Makefile.in | 1 -
tools/h5jam/getub.c | 4 +-
tools/h5ls/CMakeLists.txt | 6 +-
tools/h5ls/CMakeTests.cmake | 2 +-
tools/h5ls/Makefile.in | 1 -
tools/h5ls/h5ls.c | 11 +-
tools/h5repack/CMakeLists.txt | 8 +-
tools/h5repack/CMakeTests.cmake | 16 +-
tools/h5repack/Makefile.in | 1 -
tools/h5repack/h5repack_copy.c | 2 +-
tools/h5repack/h5repack_main.c | 3 +-
tools/h5repack/h5repack_refs.c | 2 +-
tools/h5repack/h5repacktst.c | 72 +-
tools/h5stat/CMakeLists.txt | 6 +-
tools/h5stat/CMakeTests.cmake | 2 +-
tools/h5stat/Makefile.in | 1 -
tools/h5stat/h5stat.c | 16 +-
tools/lib/CMakeLists.txt | 17 +-
tools/lib/Makefile.in | 1 -
tools/lib/h5diff.c | 293 +-
tools/lib/h5diff_dset.c | 6 +-
tools/lib/h5tools.c | 24 +-
tools/lib/h5tools_dump.c | 49 +-
tools/lib/h5tools_dump.h | 2 +-
tools/lib/h5tools_str.c | 4 +-
tools/misc/CMakeLists.txt | 6 +-
tools/misc/CMakeTests.cmake | 4 +-
tools/misc/Makefile.in | 1 -
tools/misc/h5debug.c | 54 +-
tools/misc/h5repart.c | 4 +-
tools/misc/talign.c | 4 +-
vms/c++/test/H5srcdir_str.h | 46 +-
vms/src/h5pubconf.h | 16 +-
vms/test/H5srcdir_str.h | 44 +-
518 files changed, 27115 insertions(+), 34954 deletions(-)
diff --git a/CMakeFilters.cmake b/CMakeFilters.cmake
index 1a74460..f52b99b 100644
--- a/CMakeFilters.cmake
+++ b/CMakeFilters.cmake
@@ -17,7 +17,9 @@ HDF5_SETUP_FILTERS (NBIT)
HDF5_SETUP_FILTERS (SCALEOFFSET)
include (ExternalProject)
-option (HDF5_ALLOW_EXTERNAL_SUPPORT "Allow External Library Building (NO SVN TGZ)" "NO")
+#option (HDF5_ALLOW_EXTERNAL_SUPPORT "Allow External Library Building (NO SVN TGZ)" "NO")
+set (HDF5_ALLOW_EXTERNAL_SUPPORT "NO" CACHE STRING "Allow External Library Building (NO SVN TGZ)")
+set_property (CACHE HDF5_ALLOW_EXTERNAL_SUPPORT PROPERTY STRINGS NO SVN TGZ)
if (HDF5_ALLOW_EXTERNAL_SUPPORT MATCHES "SVN" OR HDF5_ALLOW_EXTERNAL_SUPPORT MATCHES "TGZ")
option (ZLIB_USE_EXTERNAL "Use External Library Building for ZLIB" 1)
option (SZIP_USE_EXTERNAL "Use External Library Building for SZIP" 1)
@@ -110,7 +112,7 @@ if (HDF5_ENABLE_SZIP_SUPPORT)
endif (HDF5_ALLOW_EXTERNAL_SUPPORT MATCHES "SVN" OR HDF5_ALLOW_EXTERNAL_SUPPORT MATCHES "TGZ")
endif (SZIP_FOUND)
set (LINK_LIBS ${LINK_LIBS} ${SZIP_LIBRARIES})
- INCLUDE_DIRECTORIES (${SZIP_INCLUDE_DIR})
+ INCLUDE_DIRECTORIES (${SZIP_INCLUDE_DIRS})
message (STATUS "Filter SZIP is ON")
if (H5_HAVE_FILTER_SZIP)
set (EXTERNAL_FILTERS "${EXTERNAL_FILTERS} DECODE")
diff --git a/CMakeInstallation.cmake b/CMakeInstallation.cmake
index 84aedb6..1e6a5bf 100644
--- a/CMakeInstallation.cmake
+++ b/CMakeInstallation.cmake
@@ -26,7 +26,7 @@ endif (NOT HDF5_EXTERNALLY_CONFIGURED)
# Export all exported targets to the build tree for use by parent project
#-----------------------------------------------------------------------------
if (NOT HDF5_EXTERNALLY_CONFIGURED)
- EXPORT (
+ export (
TARGETS ${HDF5_LIBRARIES_TO_EXPORT} ${HDF5_LIB_DEPENDENCIES}
FILE ${HDF5_PACKAGE}${HDF_PACKAGE_EXT}-targets.cmake
)
@@ -39,12 +39,12 @@ set (HDF5_INCLUDES_BUILD_TIME
${HDF5_SRC_DIR} ${HDF5_CPP_SRC_DIR} ${HDF5_HL_SRC_DIR}
${HDF5_TOOLS_SRC_DIR} ${HDF5_BINARY_DIR}
)
-set (HDF5_VERSION_STRING @HDF5_PACKAGE_VERSION@)
-set (HDF5_VERSION_MAJOR @HDF5_PACKAGE_VERSION_MAJOR@)
-set (HDF5_VERSION_MINOR @HDF5_PACKAGE_VERSION_MINOR@)
+set (HDF5_VERSION_STRING ${HDF5_PACKAGE_VERSION})
+set (HDF5_VERSION_MAJOR ${HDF5_PACKAGE_VERSION_MAJOR})
+set (HDF5_VERSION_MINOR ${HDF5_PACKAGE_VERSION_MINOR})
configure_file (
- ${HDF5_RESOURCES_DIR}/hdf5-config.cmake.build.in
+ ${HDF_RESOURCES_DIR}/hdf5-config.cmake.build.in
${HDF5_BINARY_DIR}/${HDF5_PACKAGE}${HDF_PACKAGE_EXT}-config.cmake @ONLY
)
@@ -53,7 +53,7 @@ configure_file (
#-----------------------------------------------------------------------------
if (NOT HDF5_EXTERNALLY_CONFIGURED)
configure_file (
- ${HDF5_RESOURCES_DIR}/FindHDF5.cmake.in
+ ${HDF_RESOURCES_DIR}/FindHDF5.cmake.in
${HDF5_BINARY_DIR}/CMakeFiles/FindHDF5${HDF_PACKAGE_EXT}.cmake @ONLY
)
install (
@@ -68,7 +68,7 @@ endif (NOT HDF5_EXTERNALLY_CONFIGURED)
#-----------------------------------------------------------------------------
if (NOT HDF5_EXTERNALLY_CONFIGURED)
configure_file (
- ${HDF5_RESOURCES_DIR}/hdf5-config.cmake.install.in
+ ${HDF_RESOURCES_DIR}/hdf5-config.cmake.install.in
${HDF5_BINARY_DIR}/CMakeFiles/${HDF5_PACKAGE}${HDF_PACKAGE_EXT}-config.cmake @ONLY
)
install (
@@ -83,7 +83,7 @@ endif (NOT HDF5_EXTERNALLY_CONFIGURED)
#-----------------------------------------------------------------------------
if (NOT HDF5_EXTERNALLY_CONFIGURED)
configure_file (
- ${HDF5_RESOURCES_DIR}/hdf5-config-version.cmake.in
+ ${HDF_RESOURCES_DIR}/hdf5-config-version.cmake.in
${HDF5_BINARY_DIR}/CMakeFiles/${HDF5_PACKAGE}${HDF_PACKAGE_EXT}-config-version.cmake @ONLY
)
install (
@@ -102,7 +102,7 @@ else (H5_WORDS_BIGENDIAN)
set (BYTESEX little-endian)
endif (H5_WORDS_BIGENDIAN)
configure_file (
- ${HDF5_RESOURCES_DIR}/libhdf5.settings.cmake.in
+ ${HDF_RESOURCES_DIR}/libhdf5.settings.cmake.in
${HDF5_BINARY_DIR}/libhdf5.settings @ONLY
)
install (
@@ -117,7 +117,7 @@ install (
option (HDF5_PACK_EXAMPLES "Package the HDF5 Library Examples Compressed File" OFF)
if (HDF5_PACK_EXAMPLES)
configure_file (
- ${HDF5_RESOURCES_DIR}/HDF518_Examples.cmake.in
+ ${HDF_RESOURCES_DIR}/HDF518_Examples.cmake.in
${HDF5_BINARY_DIR}/HDF518_Examples.cmake @ONLY
)
install (
@@ -139,50 +139,7 @@ endif (HDF5_PACK_EXAMPLES)
#-----------------------------------------------------------------------------
# Configure the README.txt file for the binary package
#-----------------------------------------------------------------------------
-set (BINARY_SYSTEM_NAME ${CMAKE_SYSTEM_NAME})
-set (BINARY_PLATFORM "${CMAKE_SYSTEM_NAME}")
-if (WIN32)
- set (BINARY_EXAMPLE_ENDING "zip")
- set (BINARY_INSTALL_ENDING "exe")
- if (CMAKE_CL_64)
- set (BINARY_SYSTEM_NAME "win64")
- else (CMAKE_CL_64)
- set (BINARY_SYSTEM_NAME "win32")
- endif (CMAKE_CL_64)
- if (${CMAKE_SYSTEM_VERSION} MATCHES "6.1")
- set (BINARY_PLATFORM "${BINARY_PLATFORM} 7")
- elseif (${CMAKE_SYSTEM_VERSION} MATCHES "6.2")
- set (BINARY_PLATFORM "${BINARY_PLATFORM} 8")
- endif (${CMAKE_SYSTEM_VERSION} MATCHES "6.1")
- set (BINARY_PLATFORM "${BINARY_PLATFORM} ${MSVC_C_ARCHITECTURE_ID}")
- if (${CMAKE_C_COMPILER_VERSION} MATCHES "16.*")
- set (BINARY_PLATFORM "${BINARY_PLATFORM}, using VISUAL STUDIO 2010")
- elseif (${CMAKE_C_COMPILER_VERSION} MATCHES "15.*")
- set (BINARY_PLATFORM "${BINARY_PLATFORM}, using VISUAL STUDIO 2008")
- elseif (${CMAKE_C_COMPILER_VERSION} MATCHES "17.*")
- set (BINARY_PLATFORM "${BINARY_PLATFORM}, using VISUAL STUDIO 2012")
- else (${CMAKE_C_COMPILER_VERSION} MATCHES "16.*")
- set (BINARY_PLATFORM "${BINARY_PLATFORM}, using VISUAL STUDIO ${CMAKE_C_COMPILER_VERSION}")
- endif (${CMAKE_C_COMPILER_VERSION} MATCHES "16.*")
-elseif (APPLE)
- set (BINARY_EXAMPLE_ENDING "tar.gz")
- set (BINARY_INSTALL_ENDING "dmg")
- set (BINARY_PLATFORM "${BINARY_PLATFORM} ${CMAKE_SYSTEM_VERSION} ${CMAKE_SYSTEM_PROCESSOR}")
- set (BINARY_PLATFORM "${BINARY_PLATFORM}, using ${CMAKE_C_COMPILER_ID} C ${CMAKE_C_COMPILER_VERSION}")
-else (WIN32)
- set (BINARY_EXAMPLE_ENDING "tar.gz")
- set (BINARY_INSTALL_ENDING "sh")
- set (BINARY_PLATFORM "${BINARY_PLATFORM} ${CMAKE_SYSTEM_VERSION} ${CMAKE_SYSTEM_PROCESSOR}")
- set (BINARY_PLATFORM "${BINARY_PLATFORM}, using ${CMAKE_C_COMPILER_ID} C ${CMAKE_C_COMPILER_VERSION}")
-endif (WIN32)
-if (HDF4_BUILD_FORTRAN)
- set (BINARY_PLATFORM "${BINARY_PLATFORM} / ${CMAKE_Fortran_COMPILER_ID} Fortran")
-endif (HDF4_BUILD_FORTRAN)
-
-configure_file (
- ${HDF5_RESOURCES_DIR}/README.txt.cmake.in
- ${HDF5_BINARY_DIR}/README.txt @ONLY
-)
+HDF_README_PROPERTIES(HDF5_BUILD_FORTRAN)
#-----------------------------------------------------------------------------
# Add Document File(s) to CMake Install
@@ -261,11 +218,11 @@ if (NOT HDF5_EXTERNALLY_CONFIGURED AND NOT HDF5_NO_PACKAGES)
endif (EXISTS "${HDF5_SOURCE_DIR}/release_docs")
set (CPACK_PACKAGE_RELOCATABLE TRUE)
set (CPACK_PACKAGE_INSTALL_DIRECTORY "${CPACK_PACKAGE_VENDOR}/${CPACK_PACKAGE_NAME}/${CPACK_PACKAGE_VERSION}")
- set (CPACK_PACKAGE_ICON "${HDF5_RESOURCES_DIR}/hdf.bmp")
+ set (CPACK_PACKAGE_ICON "${HDF_RESOURCES_EXT_DIR}/hdf.bmp")
set (CPACK_GENERATOR "TGZ")
if (WIN32)
- LIST (APPEND CPACK_GENERATOR "NSIS")
+ list (APPEND CPACK_GENERATOR "NSIS")
# Installers for 32- vs. 64-bit CMake:
# - Root install directory (displayed to end user at installer-run time)
# - "NSIS package/display name" (text used in the installer GUI)
@@ -280,27 +237,27 @@ if (NOT HDF5_EXTERNALLY_CONFIGURED AND NOT HDF5_NO_PACKAGES)
endif (CMAKE_CL_64)
# set the install/unistall icon used for the installer itself
# There is a bug in NSI that does not handle full unix paths properly.
- set (CPACK_NSIS_MUI_ICON "${HDF5_RESOURCES_DIR}\\\\hdf.ico")
- set (CPACK_NSIS_MUI_UNIICON "${HDF5_RESOURCES_DIR}\\\\hdf.ico")
+ set (CPACK_NSIS_MUI_ICON "${HDF_RESOURCES_EXT_DIR}\\\\hdf.ico")
+ set (CPACK_NSIS_MUI_UNIICON "${HDF_RESOURCES_EXT_DIR}\\\\hdf.ico")
# set the package header icon for MUI
- set (CPACK_PACKAGE_ICON "${HDF5_RESOURCES_DIR}\\\\hdf.bmp")
- set (CPACK_NSIS_DISPLAY_NAME "@CPACK_NSIS_PACKAGE_NAME@")
+ set (CPACK_PACKAGE_ICON "${HDF_RESOURCES_EXT_DIR}\\\\hdf.bmp")
+ set (CPACK_NSIS_DISPLAY_NAME "${CPACK_NSIS_PACKAGE_NAME}")
set (CPACK_PACKAGE_INSTALL_DIRECTORY "${CPACK_PACKAGE_VENDOR}\\\\${CPACK_PACKAGE_NAME}\\\\${CPACK_PACKAGE_VERSION}")
set (CPACK_MONOLITHIC_INSTALL ON)
set (CPACK_NSIS_CONTACT "${HDF5_PACKAGE_BUGREPORT}")
set (CPACK_NSIS_MODIFY_PATH ON)
elseif (APPLE)
- LIST (APPEND CPACK_GENERATOR "DragNDrop")
+ list (APPEND CPACK_GENERATOR "DragNDrop")
set (CPACK_COMPONENTS_ALL_IN_ONE_PACKAGE ON)
set (CPACK_PACKAGING_INSTALL_PREFIX "/${CPACK_PACKAGE_INSTALL_DIRECTORY}")
- set (CPACK_PACKAGE_ICON "${HDF5_RESOURCES_DIR}/hdf.icns")
-
+ set (CPACK_PACKAGE_ICON "${HDF_RESOURCES_EXT_DIR}/hdf.icns")
+
if (HDF5_PACK_MACOSX_BUNDLE)
- LIST (APPEND CPACK_GENERATOR "Bundle")
+ list (APPEND CPACK_GENERATOR "Bundle")
set (CPACK_BUNDLE_NAME "${HDF5_PACKAGE_STRING}")
set (CPACK_BUNDLE_LOCATION "/") # make sure CMAKE_INSTALL_PREFIX ends in /
set (CMAKE_INSTALL_PREFIX "/${CPACK_BUNDLE_NAME}.framework/Versions/${CPACK_PACKAGE_VERSION}/${CPACK_PACKAGE_NAME}/")
- set (CPACK_BUNDLE_ICON "${HDF5_RESOURCES_DIR}/hdf.icns")
+ set (CPACK_BUNDLE_ICON "${HDF_RESOURCES_EXT_DIR}/hdf.icns")
set (CPACK_BUNDLE_PLIST "${HDF5_BINARY_DIR}/CMakeFiles/Info.plist")
set (CPACK_APPLE_GUI_INFO_STRING "HDF5 (Hierarchical Data Format 5) Software Library and Utilities")
set (CPACK_APPLE_GUI_COPYRIGHT "Copyright © 2006-2014 by The HDF Group. All rights reserved.")
@@ -312,15 +269,15 @@ if (NOT HDF5_EXTERNALLY_CONFIGURED AND NOT HDF5_NO_PACKAGES)
# Configure the Info.plist file for the install bundle
#-----------------------------------------------------------------------------
configure_file (
- ${HDF5_RESOURCES_DIR}/CPack.Info.plist.in
+ ${HDF_RESOURCES_EXT_DIR}/CPack.Info.plist.in
${HDF5_BINARY_DIR}/CMakeFiles/Info.plist @ONLY
)
configure_file (
- ${HDF5_RESOURCES_DIR}/PkgInfo.in
+ ${HDF_RESOURCES_DIR}/PkgInfo.in
${HDF5_BINARY_DIR}/CMakeFiles/PkgInfo @ONLY
)
configure_file (
- ${HDF5_RESOURCES_DIR}/version.plist.in
+ ${HDF_RESOURCES_EXT_DIR}/version.plist.in
${HDF5_BINARY_DIR}/CMakeFiles/version.plist @ONLY
)
install (
@@ -328,16 +285,16 @@ if (NOT HDF5_EXTERNALLY_CONFIGURED AND NOT HDF5_NO_PACKAGES)
${HDF5_BINARY_DIR}/CMakeFiles/version.plist
DESTINATION ..
)
- ENDIF(HDF5_PACK_MACOSX_BUNDLE)
+ endif (HDF5_PACK_MACOSX_BUNDLE)
else (WIN32)
- LIST (APPEND CPACK_GENERATOR "STGZ")
+ list (APPEND CPACK_GENERATOR "STGZ")
set (CPACK_PACKAGING_INSTALL_PREFIX "/${CPACK_PACKAGE_INSTALL_DIRECTORY}")
set (CPACK_COMPONENTS_ALL_IN_ONE_PACKAGE ON)
set (CPACK_DEBIAN_PACKAGE_SECTION "Libraries")
set (CPACK_DEBIAN_PACKAGE_MAINTAINER "${HDF5_PACKAGE_BUGREPORT}")
-# LIST (APPEND CPACK_GENERATOR "RPM")
+# list (APPEND CPACK_GENERATOR "RPM")
set (CPACK_RPM_PACKAGE_RELEASE "1")
set (CPACK_RPM_COMPONENT_INSTALL ON)
set (CPACK_RPM_PACKAGE_RELOCATABLE ON)
@@ -372,8 +329,8 @@ The HDF5 data model, file format, API, library, and tools are open and distribut
# By default, do not warn when built on machines using only VS Express:
if (NOT DEFINED CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_NO_WARNINGS)
set (CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_NO_WARNINGS ON)
- ENDIF(NOT DEFINED CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_NO_WARNINGS)
- INCLUDE(InstallRequiredSystemLibraries)
+ endif (NOT DEFINED CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_NO_WARNINGS)
+ include (InstallRequiredSystemLibraries)
set (CPACK_INSTALL_CMAKE_PROJECTS "${HDF5_BINARY_DIR};HDF5;ALL;/")
diff --git a/CMakeLists.txt b/CMakeLists.txt
index a82dcfa..8b8d5c7 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -136,7 +136,8 @@ set (HDF5_HL_F90_C_LIB_TARGET ${HDF5_HL_F90_C_LIB_CORENAME})
#-----------------------------------------------------------------------------
# Define some CMake variables for use later in the project
#-----------------------------------------------------------------------------
-set (HDF5_RESOURCES_DIR ${HDF5_SOURCE_DIR}/config/cmake)
+set (HDF_RESOURCES_DIR ${HDF5_SOURCE_DIR}/config/cmake)
+set (HDF_RESOURCES_EXT_DIR ${HDF5_SOURCE_DIR}/config/cmake_ext_mod)
set (HDF5_SRC_DIR ${HDF5_SOURCE_DIR}/src)
set (HDF5_TEST_SRC_DIR ${HDF5_SOURCE_DIR}/test)
set (HDF5_CPP_SRC_DIR ${HDF5_SOURCE_DIR}/c++)
@@ -215,9 +216,9 @@ set (HDF5_PACKAGE_BUGREPORT "help at hdfgroup.org")
#-----------------------------------------------------------------------------
# Include some macros for reusable code
#-----------------------------------------------------------------------------
-include (${HDF5_RESOURCES_DIR}/HDFMacros.cmake)
-include (${HDF5_RESOURCES_DIR}/HDFLibMacros.cmake)
-include (${HDF5_RESOURCES_DIR}/HDF5Macros.cmake)
+include (${HDF_RESOURCES_EXT_DIR}/HDFMacros.cmake)
+include (${HDF_RESOURCES_EXT_DIR}/HDFLibMacros.cmake)
+include (${HDF_RESOURCES_DIR}/HDF5Macros.cmake)
#-----------------------------------------------------------------------------
# Setup output Directories
@@ -264,7 +265,7 @@ set (EXTERNAL_LIBRARYDLL_LIST "")
#-----------------------------------------------------------------------------
# Run all the CMake configuration tests for our build environment
#-----------------------------------------------------------------------------
-include (${HDF5_RESOURCES_DIR}/ConfigureChecks.cmake)
+include (${HDF_RESOURCES_DIR}/ConfigureChecks.cmake)
set (CMAKE_INCLUDE_CURRENT_DIR_IN_INTERFACE ON)
@@ -632,7 +633,7 @@ INCLUDE_DIRECTORIES (${HDF5_BINARY_DIR} ${HDF5_SRC_DIR} ${CMAKE_RUNTIME_OUTPUT_D
#-----------------------------------------------------------------------------
# Option to Enable MPI Parallel
#-----------------------------------------------------------------------------
-set (CMAKE_MODULE_PATH ${HDF5_RESOURCES_DIR} ${CMAKE_MODULE_PATH})
+set (CMAKE_MODULE_PATH ${HDF_RESOURCES_DIR} ${HDF_RESOURCES_EXT_DIR} ${CMAKE_MODULE_PATH})
option (HDF5_ENABLE_PARALLEL "Enable parallel build (requires MPI)" OFF)
if (HDF5_ENABLE_PARALLEL)
include (FindMPI)
@@ -642,8 +643,6 @@ if (HDF5_ENABLE_PARALLEL)
# MPI checks, only do these if MPI_C_FOUND is true, otherwise they always fail
# and once set, they are cached as false and not regenerated
set (CMAKE_REQUIRED_LIBRARIES "${MPI_C_LIBRARIES}" )
- CHECK_FUNCTION_EXISTS (MPI_File_get_size H5_HAVE_MPI_GET_SIZE)
- set (H5_MPI_FILE_SET_SIZE_BIG 1)
# Used by Fortran + MPI
CHECK_SYMBOL_EXISTS (MPI_Comm_c2f "${MPI_C_INCLUDE_PATH}/mpi.h" H5_HAVE_MPI_MULTI_LANG_Comm)
CHECK_SYMBOL_EXISTS (MPI_Info_c2f "${MPI_C_INCLUDE_PATH}/mpi.h" H5_HAVE_MPI_MULTI_LANG_Info)
@@ -694,7 +693,6 @@ if (NOT HDF5_EXTERNALLY_CONFIGURED)
endif (HDF5_ENABLE_SZIP_SUPPORT AND SZIP_FOUND)
endif (HDF5_PACKAGE_EXTLIBS)
endif (NOT HDF5_EXTERNALLY_CONFIGURED)
-
#-----------------------------------------------------------------------------
# Option to use threadsafe
# Note: Currently CMake only allows configuring of threadsafe on
@@ -777,7 +775,7 @@ if (BUILD_TESTING)
endif (HDF5_TEST_VFD)
include (${HDF5_SOURCE_DIR}/CTestConfig.cmake)
- configure_file (${HDF5_RESOURCES_DIR}/CTestCustom.cmake ${HDF5_BINARY_DIR}/CTestCustom.ctest @ONLY)
+ configure_file (${HDF_RESOURCES_DIR}/CTestCustom.cmake ${HDF5_BINARY_DIR}/CTestCustom.ctest @ONLY)
endif (BUILD_TESTING)
#-----------------------------------------------------------------------------
@@ -795,7 +793,7 @@ if (EXISTS "${HDF5_SOURCE_DIR}/fortran" AND IS_DIRECTORY "${HDF5_SOURCE_DIR}/for
message (FATAL_ERROR " **** Shared FORTRAN libraries are unsupported **** ")
endif (BUILD_SHARED_LIBS AND APPLE)
option (HDF5_ENABLE_F2003 "Enable FORTRAN 2003 Standard" OFF)
- include (${HDF5_RESOURCES_DIR}/HDF5UseFortran.cmake)
+ include (${HDF_RESOURCES_EXT_DIR}/HDFUseFortran.cmake)
if (HDF5_ENABLE_F2003)
if (NOT FORTRAN_HAVE_ISO_C_BINDING)
set (HDF5_ENABLE_F2003 OFF)
@@ -861,8 +859,18 @@ if (EXISTS "${HDF5_SOURCE_DIR}/hl" AND IS_DIRECTORY "${HDF5_SOURCE_DIR}/hl")
endif (EXISTS "${HDF5_SOURCE_DIR}/hl" AND IS_DIRECTORY "${HDF5_SOURCE_DIR}/hl")
#-----------------------------------------------------------------------------
+# Check if Fortran's default real is double precision. If it is and HL is
+# being built then configure should fail due to bug HDFFV-889.
+#-----------------------------------------------------------------------------
+ if (HDF5_BUILD_FORTRAN AND HDF5_BUILD_HL_LIB )
+ if (NOT FORTRAN_DEFAULT_REAL_NOT_DOUBLE)
+ message (FATAL_ERROR " **** Fortran high-level routines are not supported when the default REAL is DOUBLE PRECISION, use HDF5_BUILD_HL_LIB:BOOL=OFF **** ")
+ endif (NOT FORTRAN_DEFAULT_REAL_NOT_DOUBLE)
+ endif (HDF5_BUILD_FORTRAN AND HDF5_BUILD_HL_LIB )
+
+#-----------------------------------------------------------------------------
# Generate the H5pubconf.h file containing user settings needed by compilation
#-----------------------------------------------------------------------------
-configure_file (${HDF5_RESOURCES_DIR}/H5pubconf.h.in ${HDF5_BINARY_DIR}/H5pubconf.h @ONLY)
+configure_file (${HDF_RESOURCES_DIR}/H5pubconf.h.in ${HDF5_BINARY_DIR}/H5pubconf.h @ONLY)
include (CMakeInstallation.cmake)
diff --git a/MANIFEST b/MANIFEST
index ae83f44..3944ffa 100644
--- a/MANIFEST
+++ b/MANIFEST
@@ -57,6 +57,7 @@
./bin/distdep
./bin/errors _DO_NOT_DISTRIBUTE_
./bin/gcov_script _DO_NOT_DISTRIBUTE_
+./bin/genltanalyze _DO_NOT_DISTRIBUTE_
./bin/h5vers
./bin/install-sh
./bin/iostats
@@ -248,6 +249,7 @@
./fortran/src/H5f90proto.h
./fortran/src/H5test_kind.f90
./fortran/src/H5test_kind_SIZEOF.f90
+./fortran/src/H5test_kind_STORAGE_SIZE.f90
./fortran/src/H5match_types.c
./fortran/src/HDF5.f90
./fortran/src/HDF5mpio.f90
@@ -268,6 +270,9 @@
./fortran/test/t.c
./fortran/test/t.h
./fortran/test/tf.f90
+./fortran/test/tf_F90.f90
+./fortran/test/tf_F03.f90
+./fortran/test/tf_F08.f90
./fortran/test/tH5A.f90
./fortran/test/tH5A_1_8.f90
./fortran/test/tH5D.f90
@@ -570,6 +575,7 @@
./src/H5Fdbg.c
./src/H5Fefc.c
./src/H5Ffake.c
+./src/H5Fint.c
./src/H5Fio.c
./src/H5Fmount.c
./src/H5Fmpi.c
@@ -2281,42 +2287,45 @@
./vms/tools/testfiles/tperror.ddl
# CMake-specific Files
-./config/cmake/FindSZIP.cmake
+./config/cmake/cacheinit.cmake
./config/cmake/ConversionTests.c
-./config/cmake/GetTimeOfDayTest.cpp
-./config/cmake/HDF5CXXTests.cpp
-./config/cmake/HDF5Tests.c
-./config/cmake/CheckTypeSize.cmake
+./config/cmake/ConfigureChecks.cmake
+./config/cmake/CTestCustom.cmake
+./config/cmake/FindHDF5.cmake.in
./config/cmake/H5cxx_config.h.in
./config/cmake/H5pubconf.h.in
-./config/cmake/FindHDF5.cmake.in
-./config/cmake/FindMPI.cmake
./config/cmake/hdf5-config.cmake.build.in
./config/cmake/hdf5-config.cmake.install.in
./config/cmake/hdf5-config-version.cmake.in
-./config/cmake/HDFMacros.cmake
-./config/cmake/HDFLibMacros.cmake
./config/cmake/HDF5Macros.cmake
-./config/cmake/HDF5UseFortran.cmake
./config/cmake/libhdf5.settings.cmake.in
-./config/cmake/cacheinit.cmake
./config/cmake/mccacheinit.cmake
-./config/cmake/grepTest.cmake
-./config/cmake/prunTest.cmake
-./config/cmake/runTest.cmake
-./config/cmake/userblockTest.cmake
-./config/cmake/vfdTest.cmake
-./config/cmake/CTestCustom.cmake
-./config/cmake/ConfigureChecks.cmake
-./config/cmake/CPack.Info.plist.in
-./config/cmake/hdf.bmp
-./config/cmake/hdf.icns
-./config/cmake/hdf.ico
./config/cmake/PkgInfo.in
-./config/cmake/version.plist.in
-./config/cmake/NSIS.template.in
-./config/cmake/NSIS.InstallOptions.ini.in
./config/cmake/README.txt.cmake.in
+./config/cmake/userblockTest.cmake
+./config/cmake/vfdTest.cmake
+
+./config/cmake_ext_mod/CheckTypeSize.cmake
+./config/cmake_ext_mod/ConfigureChecks.cmake
+./config/cmake_ext_mod/CPack.Info.plist.in
+./config/cmake_ext_mod/CTestCustom.cmake
+./config/cmake_ext_mod/FindMPI.cmake
+./config/cmake_ext_mod/FindSZIP.cmake
+./config/cmake_ext_mod/GetTimeOfDayTest.cpp
+./config/cmake_ext_mod/grepTest.cmake
+./config/cmake_ext_mod/hdf.bmp
+./config/cmake_ext_mod/hdf.icns
+./config/cmake_ext_mod/hdf.ico
+./config/cmake_ext_mod/HDFCXXTests.cpp
+./config/cmake_ext_mod/HDFLibMacros.cmake
+./config/cmake_ext_mod/HDFMacros.cmake
+./config/cmake_ext_mod/HDFTests.c
+./config/cmake_ext_mod/HDFUseFortran.cmake
+./config/cmake_ext_mod/NSIS.InstallOptions.ini.in
+./config/cmake_ext_mod/NSIS.template.in
+./config/cmake_ext_mod/prunTest.cmake
+./config/cmake_ext_mod/runTest.cmake
+./config/cmake_ext_mod/version.plist.in
# CMake-specific User Files
./config/cmake/UserMacros/Windows_MT.cmake
diff --git a/Makefile.in b/Makefile.in
index 9343560..a8e0b61 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -344,7 +344,6 @@ MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MPE = @MPE@
-MPI_GET_SIZE = @MPI_GET_SIZE@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
diff --git a/README.txt b/README.txt
index 7da8038..4850f47 100644
--- a/README.txt
+++ b/README.txt
@@ -1,4 +1,4 @@
-HDF5 version 1.8.13 released on 2014-05-05
+HDF5 version 1.8.14 released on 2014-11-12
Please refer to the release_docs/INSTALL file for installation instructions.
------------------------------------------------------------------------------
diff --git a/bin/cmakehdf5 b/bin/cmakehdf5
index 5da3cca..68a550e 100755
--- a/bin/cmakehdf5
+++ b/bin/cmakehdf5
@@ -26,6 +26,16 @@ installlog="#${progname}_5install.log"
srcdir="../hdf5" # expected source directory
exit_code=0
+# Cmake build options
+hdf5_src=../hdf5
+cacheinit=$hdf5_src/config/cmake/cacheinit.cmake
+build_cpp_lib=-DHDF5_BUILD_CPP_LIB:BOOL=ON # C++ interface default on
+build_fortran=-DHDF5_BUILD_FORTRAN:BOOL=ON # Fortran interface default on
+build_hl_lib=-DHDF5_BUILD_HL_LIB:BOOL=ON # High Level interface default on
+build_testing=-DBUILD_TESTING:BOOL=ON # Build tests default on
+build_tools=-DHDF5_BUILD_TOOLS:BOOL=ON # Build tools default on
+
+
#=============
# Function definitions
#=============
@@ -99,7 +109,13 @@ fi
echo Running Cmake for HDF5-${version} ...
# 4. Configure the C library, tools and tests with this command:
-STEP "Configure..." "cmake -G 'Unix Makefiles' -DBUILD_TESTING:BOOL=ON -DHDF5_BUILD_TOOLS:BOOL=ON ../hdf5" $configlog
+STEP "Configure..." "cmake \
+ $build_cpp_lib \
+ $build_fortran \
+ $build_hl_lib \
+ $build_testing \
+ $build_tools \
+ $hdf5_src" $configlog
# 5. Build the C library, tools and tests with this command:
STEP "Build the library, tools and tests, ..." "cmake --build . --config Release" $makelog
@@ -197,7 +213,7 @@ set (SITE_BUILDNAME_SUFFIX "cmakehdf5")
# -- URL set for internal check, default is to not update
set (LOCAL_SKIP_UPDATE TRUE)
-set (REPOSITORY_URL "http://svn.hdfgroup.uiuc.edu/hdf5/branches/hdf5_1_8")
+set (REPOSITORY_URL "http://svn.${hdfgroup_url}/hdf5/branches/hdf5_1_8")
# -- Standard build options
set (ADD_BUILD_OPTIONS "-DCMAKE_INSTALL_PREFIX:PATH=${CTEST_BINARY_DIRECTORY} -DHDF5_ALLOW_EXTERNAL_SUPPORT:STRING=\"SVN\" -DHDF5_PACKAGE_EXTLIBS:BOOL=ON")
diff --git a/bin/trace b/bin/trace
index a42d2e3..4720680 100755
--- a/bin/trace
+++ b/bin/trace
@@ -75,6 +75,7 @@ $Source = "";
"hobj_ref_t" => "r",
"H5R_type_t" => "Rt",
"char" => "s",
+ "unsigned char" => "s",
"H5S_class_t" => "Sc",
"H5S_seloper_t" => "Ss",
"H5S_sel_type" => "St",
@@ -138,6 +139,7 @@ $Source = "";
"H5T_conv_except_func_t" => "x",
"H5Z_func_t" => "x",
"H5Z_filter_func_t" => "x",
+ "va_list" => "x",
"size_t" => "z",
"H5Z_SO_scale_type_t" => "Za",
"H5Z_class_t" => "Zc",
diff --git a/c++/CMakeLists.txt b/c++/CMakeLists.txt
index 89426c5..63fc083 100644
--- a/c++/CMakeLists.txt
+++ b/c++/CMakeLists.txt
@@ -4,7 +4,7 @@ PROJECT (HDF5_CPP)
#-----------------------------------------------------------------------------
# Apply Definitions to compiler in this directory and below
#-----------------------------------------------------------------------------
-add_definitions (${HDF5_EXTRA_C_FLAGS})
+add_definitions (${HDF_EXTRA_C_FLAGS})
#-----------------------------------------------------------------------------
# Shared/Static Libs
@@ -18,7 +18,7 @@ endif (BUILD_SHARED_LIBS)
#-----------------------------------------------------------------------------
# Generate configure file
#-----------------------------------------------------------------------------
-configure_file (${HDF5_RESOURCES_DIR}/H5cxx_config.h.in
+configure_file (${HDF_RESOURCES_DIR}/H5cxx_config.h.in
${HDF5_BINARY_DIR}/H5cxx_pubconf.h
)
diff --git a/c++/Makefile.in b/c++/Makefile.in
index c56cfc4..de87fa5 100644
--- a/c++/Makefile.in
+++ b/c++/Makefile.in
@@ -504,7 +504,6 @@ MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MPE = @MPE@
-MPI_GET_SIZE = @MPI_GET_SIZE@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
diff --git a/c++/examples/Makefile.in b/c++/examples/Makefile.in
index eb74609..90dfed3 100644
--- a/c++/examples/Makefile.in
+++ b/c++/examples/Makefile.in
@@ -452,7 +452,6 @@ MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MPE = @MPE@
-MPI_GET_SIZE = @MPI_GET_SIZE@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
diff --git a/c++/src/CMakeLists.txt b/c++/src/CMakeLists.txt
index 7a48260..b07ab2b 100644
--- a/c++/src/CMakeLists.txt
+++ b/c++/src/CMakeLists.txt
@@ -11,7 +11,7 @@ endif (BUILD_SHARED_LIBS)
#-----------------------------------------------------------------------------
# Generate configure file
#-----------------------------------------------------------------------------
-configure_file (${HDF5_RESOURCES_DIR}/H5cxx_config.h.in
+configure_file (${HDF_RESOURCES_DIR}/H5cxx_config.h.in
${HDF5_BINARY_DIR}/H5cxx_pubconf.h
)
diff --git a/c++/src/H5ArrayType.cpp b/c++/src/H5ArrayType.cpp
index 852658b..8807dca 100644
--- a/c++/src/H5ArrayType.cpp
+++ b/c++/src/H5ArrayType.cpp
@@ -54,15 +54,16 @@ ArrayType::ArrayType( const hid_t existing_id ) : DataType( existing_id )
rank = H5Tget_array_ndims(existing_id);
if (rank < 0)
{
- throw DataTypeIException("ArrayType overloaded constructor", "H5Tget_array_ndims failed");
+ throw DataTypeIException("ArrayType constructor (existing id)", "H5Tget_array_ndims failed");
}
- // Get the dimensions of the existing array and store it in this array
- dimensions = new hsize_t[rank];
- //hsize_t rdims2[H5S_MAX_RANK];
- int ret_value = H5Tget_array_dims2(id, dimensions);
- if (ret_value < 0)
- throw DataTypeIException("ArrayType::getArrayDims", "H5Tget_array_dims2 failed");
+ // Allocate space for the dimensions
+ dimensions = new hsize_t[rank];
+
+ // Get the dimensions of the existing array and store it in this array
+ int ret_value = H5Tget_array_dims2(id, dimensions);
+ if (ret_value < 0)
+ throw DataTypeIException("ArrayType constructor (existing id)", "H5Tget_array_dims2 failed");
}
//--------------------------------------------------------------------------
@@ -72,10 +73,13 @@ ArrayType::ArrayType( const hid_t existing_id ) : DataType( existing_id )
//--------------------------------------------------------------------------
ArrayType::ArrayType( const ArrayType& original ) : DataType( original )
{
- rank = original.rank;
- dimensions = new hsize_t[rank];
- for (int i = 0; i < rank; i++)
- dimensions[i] = original.dimensions[i];
+ // Copy the rank of the original array
+ rank = original.rank;
+
+ // Allocate space then copy the dimensions from the original array
+ dimensions = new hsize_t[rank];
+ for (int i = 0; i < rank; i++)
+ dimensions[i] = original.dimensions[i];
}
//--------------------------------------------------------------------------
@@ -90,14 +94,19 @@ ArrayType::ArrayType( const ArrayType& original ) : DataType( original )
//--------------------------------------------------------------------------
ArrayType::ArrayType(const DataType& base_type, int ndims, const hsize_t* dims) : DataType()
{
- hid_t new_type_id = H5Tarray_create2(base_type.getId(), ndims, dims);
- if (new_type_id < 0)
- throw DataTypeIException("ArrayType constructor", "H5Tarray_create2 failed");
- id = new_type_id;
- rank = ndims;
- dimensions = new hsize_t[rank];
- for (int i = 0; i < rank; i++)
- dimensions[i] = dims[i];
+ // Call C API to create an array data type
+ hid_t new_type_id = H5Tarray_create2(base_type.getId(), ndims, dims);
+ if (new_type_id < 0)
+ throw DataTypeIException("ArrayType constructor", "H5Tarray_create2 failed");
+
+ // Set the id and rank for this object
+ id = new_type_id;
+ rank = ndims;
+
+ // Allocate space then set the dimensions as provided by caller
+ dimensions = new hsize_t[rank];
+ for (int i = 0; i < rank; i++)
+ dimensions[i] = dims[i];
}
//--------------------------------------------------------------------------
@@ -132,19 +141,19 @@ int ArrayType::getArrayNDims()
//--------------------------------------------------------------------------
int ArrayType::getArrayDims(hsize_t* dims)
{
- // if the array's dimensions have not been stored, retrieve them via C API
+ // If the array's dimensions have not been stored, retrieve them via C API
if (dimensions == NULL)
{
int ndims = H5Tget_array_dims2(id, dims);
if (ndims < 0)
throw DataTypeIException("ArrayType::getArrayDims", "H5Tget_array_dims2 failed");
- // store the array's info in memory
+ // Store the array's info in memory
rank = ndims;
dimensions = new hsize_t[rank];
for (int i = 0; i < rank; i++)
dimensions[i] = dims[i];
}
- // otherwise, simply copy what's in 'dimensions' to 'dims'
+ // Otherwise, simply copy what's in 'dimensions' to 'dims'
for (int i = 0; i < rank; i++)
dims[i] = dimensions[i];
return(rank);
diff --git a/c++/src/H5Attribute.cpp b/c++/src/H5Attribute.cpp
index 1182b69..0c135a9 100644
--- a/c++/src/H5Attribute.cpp
+++ b/c++/src/H5Attribute.cpp
@@ -50,7 +50,7 @@ class H5_DLLCPP H5Object; // forward declaration for UserData4Aiterate
///\brief Default constructor: Creates a stub attribute
// Programmer Binh-Minh Ribler - May, 2004
//--------------------------------------------------------------------------
-Attribute::Attribute() : AbstractDs(), IdComponent(), id(0) {}
+Attribute::Attribute() : AbstractDs(), IdComponent(), id(H5I_INVALID_HID) {}
//--------------------------------------------------------------------------
// Function: Attribute copy constructor
@@ -162,13 +162,13 @@ void Attribute::read( const DataType& mem_type, void *buf ) const
// Mar 2008
// Corrected a misunderstanding that H5Aread would allocate
// space for the buffer. Obtained the attribute size and
-// allocated memory properly. - BMR
+// allocated memory properly. -BMR
// Apr 2009
-// Used getInMemDataSize to get attribute data size. - BMR
+// Used getInMemDataSize to get attribute data size. -BMR
// Jul 2009
// Divided into specific private functions for fixed- and
// variable-len string data: p_read_fixed_len and
-// p_read_variable_len. This should improve readability.
+// p_read_variable_len. This should improve readability. -BMR
//--------------------------------------------------------------------------
void Attribute::read(const DataType& mem_type, H5std_string& strg) const
{
@@ -586,7 +586,7 @@ void Attribute::p_read_fixed_len(const DataType& mem_type, H5std_string& strg) c
// Modification
// Jul 2009
// Separated the variable length case from the original
-// Attribute::read
+// Attribute::read. -BMR
//--------------------------------------------------------------------------
void Attribute::p_read_variable_len(const DataType& mem_type, H5std_string& strg) const
{
@@ -648,7 +648,7 @@ void Attribute::close()
throw AttributeIException("Attribute::close", "H5Aclose failed");
}
// reset the id
- id = 0;
+ id = H5I_INVALID_HID;
}
}
diff --git a/c++/src/H5CommonFG.cpp b/c++/src/H5CommonFG.cpp
index d296db4..3aa0386 100644
--- a/c++/src/H5CommonFG.cpp
+++ b/c++/src/H5CommonFG.cpp
@@ -33,6 +33,9 @@
#include "H5Alltypes.h"
#include "H5private.h" // for HDstrcpy
+#include <iostream>
+using namespace std;
+
// There are a few comments that are common to most of the functions
// defined in this file so they are listed here.
// - getLocId is called by all functions, that call a C API, to get
@@ -440,7 +443,10 @@ H5std_string CommonFG::getLinkval( const char* name, size_t size ) const
ret_value = H5Lget_val(getLocId(), name, value_C, val_size, H5P_DEFAULT);
if( ret_value < 0 )
+ {
+ delete []value_C;
throwException("getLinkval", "H5Lget_val failed");
+ }
value = H5std_string(value_C);
delete []value_C;
@@ -913,6 +919,12 @@ H5std_string CommonFG::getObjnameByIdx(hsize_t idx) const
name_len = H5Lget_name_by_idx(getLocId(), ".", H5_INDEX_NAME, H5_ITER_INC, idx, name_C, name_len+1, H5P_DEFAULT);
+ if (name_len < 0)
+ {
+ delete []name_C;
+ throwException("getObjnameByIdx", "H5Lget_name_by_idx failed");
+ }
+
// clean up and return the string
H5std_string name = H5std_string(name_C);
delete []name_C;
@@ -957,10 +969,15 @@ ssize_t CommonFG::getObjnameByIdx(hsize_t idx, H5std_string& name, size_t size)
char* name_C = new char[size+1]; // temporary C-string for object name
HDmemset(name_C, 0, size+1); // clear buffer
+ // call overloaded function to get the name
ssize_t name_len = getObjnameByIdx(idx, name_C, size+1);
if(name_len < 0)
+ {
+ delete []name_C;
throwException("getObjnameByIdx", "H5Lget_name_by_idx failed");
+ }
+ // clean up and return the string
name = H5std_string(name_C);
delete []name_C;
return (name_len);
diff --git a/c++/src/H5CppDoc.h b/c++/src/H5CppDoc.h
index 8ab2531..388fc25 100644
--- a/c++/src/H5CppDoc.h
+++ b/c++/src/H5CppDoc.h
@@ -23,39 +23,48 @@
// ------------------------------------------------------------------------
/*! \mainpage notitle
- *
+ * <br />
* \section intro_sec Introduction
*
- * The C++ API provides C++ wrappers for the HDF5 C library.
- * It is assumed that the user has knowledge of the HDF5 file format
- * and its components. If you are not familiar with HDF5 file format,
- * and would like to find out more, please refer to the HDF5 documentation
- * at http://www.hdfgroup.org/HDF5/doc/index.html
+ * The C++ API provides C++ wrappers for the HDF5 C Library.
+ *
+ * It is assumed that the user has knowledge of the
+ * <a href="http://www.hdfgroup.org/HDF5/doc/H5.format.html">
+ * HDF5 file format</a> and its components.
+ * For more information on the HDF5 C Library, see the
+ * <a href="http://www.hdfgroup.org/HDF5/doc/index.html">
+ * HDF5 Software Documentation</a> page.
*
- * Because the HDF5 library maps very well to
+ * Because the HDF5 C Library maps very well to
* the object oriented design approach, classes in the C++ API can
- * closely represent the interfaces of the HDF5 APIs, as followed:
+ * closely represent the interfaces of the C APIs as follows:
*
* \verbatim
- HDF5 C APIs C++ Classes
- ----------- -----------
- Attribute Interface (H5A) Attribute
- Datasets Interface (H5D) DataSet
- Error Interface (H5E) Exception
- File Interface (H5F) H5File
- Group Interface (H5G) Group
- Identifier Interface (H5I) IdComponent
- Property List Interface (H5P) PropList and subclasses
- Dataspace Interface (H5S) DataSpace
- Datatype Interface (H5T) DataType and subclasses
+ HDF5 C APIs C++ Classes
+ ----------- -----------
+ Attribute Interface (H5A) Attribute
+ Datasets Interface (H5D) DataSet
+ Error Interface (H5E) Exception
+ File Interface (H5F) H5File
+ Group Interface (H5G) Group
+ Identifier Interface (H5I) IdComponent
+ Property List Interface (H5P) PropList and subclasses
+ Dataspace Interface (H5S) DataSpace
+ Datatype Interface (H5T) DataType and subclasses
\endverbatim
+ * <br />
* \section install_sec Installation
*
- * Please refer to the file release_docs/INSTALL_Windows.txt
- * under the top directory for information about installing, building,
+ * The HDF5 C++ API is included with the HDF5 source code and can
+ * be obtained from
+ * <a href="http://www.hdfgroup.org/HDF5/release/obtainsrc.html">
+ * http://www.hdfgroup.org/HDF5/release/obtainsrc.html</a>.
+ *
+ * Please refer to the release_docs/INSTALL file under the top directory
+ * of the HDF5 source code for information about installing, building,
* and testing the C++ API.
*
- *
+ * <br />
*/
/// This example shows how to create datasets.
diff --git a/c++/src/H5DataSet.cpp b/c++/src/H5DataSet.cpp
index 12ea455..83621f5 100644
--- a/c++/src/H5DataSet.cpp
+++ b/c++/src/H5DataSet.cpp
@@ -52,7 +52,7 @@ namespace H5 {
///\brief Default constructor: creates a stub DataSet.
// Programmer Binh-Minh Ribler - 2000
//--------------------------------------------------------------------------
-DataSet::DataSet() : AbstractDs(), H5Object(), id(0) {}
+DataSet::DataSet() : AbstractDs(), H5Object(), id(H5I_INVALID_HID) {}
//--------------------------------------------------------------------------
// Function: DataSet overloaded constructor
@@ -85,7 +85,6 @@ DataSet::DataSet(const DataSet& original) : AbstractDs(original), H5Object(origi
/// object that the dataset is located within.
///\param ref - IN: Reference pointer
///\param ref_type - IN: Reference type - default to H5R_OBJECT
-///\param plist - IN: Property list - default to PropList::DEFAULT
///\exception H5::DataSetIException
///\par Description
/// \c loc can be DataSet, Group, H5File, or named DataType, that
@@ -95,7 +94,7 @@ DataSet::DataSet(const DataSet& original) : AbstractDs(original), H5Object(origi
// Jul, 2008
// Added for application convenience.
//--------------------------------------------------------------------------
-DataSet::DataSet(const H5Location& loc, const void* ref, H5R_type_t ref_type) : AbstractDs(), H5Object(), id(0)
+DataSet::DataSet(const H5Location& loc, const void* ref, H5R_type_t ref_type) : AbstractDs(), H5Object(), id(H5I_INVALID_HID)
{
id = H5Location::p_dereference(loc.getId(), ref, ref_type, "constructor - by dereferenced");
}
@@ -107,14 +106,13 @@ DataSet::DataSet(const H5Location& loc, const void* ref, H5R_type_t ref_type) :
///\param attr - IN: Specifying location where the referenced object is in
///\param ref - IN: Reference pointer
///\param ref_type - IN: Reference type - default to H5R_OBJECT
-///\param plist - IN: Property list - default to PropList::DEFAULT
///\exception H5::ReferenceException
// Programmer Binh-Minh Ribler - Oct, 2006
// Modification
// Jul, 2008
// Added for application convenience.
//--------------------------------------------------------------------------
-DataSet::DataSet(const Attribute& attr, const void* ref, H5R_type_t ref_type) : AbstractDs(), H5Object(), id(0)
+DataSet::DataSet(const Attribute& attr, const void* ref, H5R_type_t ref_type) : AbstractDs(), H5Object(), id(H5I_INVALID_HID)
{
id = H5Location::p_dereference(attr.getId(), ref, ref_type, "constructor - by dereference");
}
@@ -788,7 +786,7 @@ void DataSet::close()
throw DataSetIException("DataSet::close", "H5Dclose failed");
}
// reset the id
- id = 0;
+ id = H5I_INVALID_HID;
}
}
diff --git a/c++/src/H5DataSpace.cpp b/c++/src/H5DataSpace.cpp
index 6ad8c8d..20b4e5e 100644
--- a/c++/src/H5DataSpace.cpp
+++ b/c++/src/H5DataSpace.cpp
@@ -630,7 +630,7 @@ void DataSpace::close()
throw DataSpaceIException("DataSpace::close", "H5Sclose failed");
}
// reset the id
- id = 0;
+ id = H5I_INVALID_HID;
}
}
diff --git a/c++/src/H5DataSpace.h b/c++/src/H5DataSpace.h
index 75d4ff8..fd4b1d6 100644
--- a/c++/src/H5DataSpace.h
+++ b/c++/src/H5DataSpace.h
@@ -33,6 +33,12 @@ class H5_DLLCPP DataSpace : public IdComponent {
// Creates a simple dataspace
DataSpace(int rank, const hsize_t * dims, const hsize_t * maxdims = NULL);
+ // Creates a DataSpace object using an existing dataspace id.
+ DataSpace(const hid_t space_id);
+
+ // Copy constructor: makes a copy of the original DataSpace object.
+ DataSpace(const DataSpace& original);
+
// Assignment operator
DataSpace& operator=( const DataSpace& rhs );
@@ -109,12 +115,6 @@ class H5_DLLCPP DataSpace : public IdComponent {
///\brief Returns this class name.
virtual H5std_string fromClass () const { return("DataSpace"); }
- // Creates a DataSpace object using an existing dataspace id.
- DataSpace(const hid_t space_id);
-
- // Copy constructor: makes a copy of the original DataSpace object.
- DataSpace(const DataSpace& original);
-
// Gets the dataspace id.
virtual hid_t getId() const;
diff --git a/c++/src/H5DataType.cpp b/c++/src/H5DataType.cpp
index 016a3d5..0d7d61b 100644
--- a/c++/src/H5DataType.cpp
+++ b/c++/src/H5DataType.cpp
@@ -53,7 +53,7 @@ namespace H5 {
///\brief Default constructor: Creates a stub datatype
// Programmer Binh-Minh Ribler - 2000
//--------------------------------------------------------------------------
-DataType::DataType() : H5Object(), id(0) {}
+DataType::DataType() : H5Object(), id(H5I_INVALID_HID) {}
//--------------------------------------------------------------------------
// Function: DataType overloaded constructor
@@ -98,14 +98,13 @@ DataType::DataType( const H5T_class_t type_class, size_t size ) : H5Object()
///\param loc - IN: Location referenced object is in
///\param ref - IN: Reference pointer
///\param ref_type - IN: Reference type - default to H5R_OBJECT
-///\param plist - IN: Property list - default to PropList::DEFAULT
///\exception H5::ReferenceException
// Programmer Binh-Minh Ribler - Oct, 2006
// Modification
// Jul, 2008
// Added for application convenience.
//--------------------------------------------------------------------------
-DataType::DataType(const H5Location& loc, const void* ref, H5R_type_t ref_type) : H5Object(), id(0)
+DataType::DataType(const H5Location& loc, const void* ref, H5R_type_t ref_type) : H5Object(), id(H5I_INVALID_HID)
{
id = H5Location::p_dereference(loc.getId(), ref, ref_type, "constructor - by dereference");
}
@@ -117,14 +116,13 @@ DataType::DataType(const H5Location& loc, const void* ref, H5R_type_t ref_type)
///\param attr - IN: Specifying location where the referenced object is in
///\param ref - IN: Reference pointer
///\param ref_type - IN: Reference type - default to H5R_OBJECT
-///\param plist - IN: Property list - default to PropList::DEFAULT
///\exception H5::ReferenceException
// Programmer Binh-Minh Ribler - Oct, 2006
// Modification
// Jul, 2008
// Added for application convenience.
//--------------------------------------------------------------------------
-DataType::DataType(const Attribute& attr, const void* ref, H5R_type_t ref_type) : H5Object(), id(0)
+DataType::DataType(const Attribute& attr, const void* ref, H5R_type_t ref_type) : H5Object(), id(H5I_INVALID_HID)
{
id = H5Location::p_dereference(attr.getId(), ref, ref_type, "constructor - by dereference");
}
@@ -710,7 +708,7 @@ void DataType::close()
throw DataTypeIException(inMemFunc("close"), "H5Tclose failed");
}
// reset the id
- id = 0;
+ id = H5I_INVALID_HID;
}
}
diff --git a/c++/src/H5EnumType.cpp b/c++/src/H5EnumType.cpp
index 04bb9e0..a91c053 100644
--- a/c++/src/H5EnumType.cpp
+++ b/c++/src/H5EnumType.cpp
@@ -159,6 +159,7 @@ H5std_string EnumType::nameOf( void *value, size_t size ) const
// If H5Tenum_nameof returns a negative value, raise an exception,
if( ret_value < 0 )
{
+ delete []name_C;
throw DataTypeIException("EnumType::nameOf", "H5Tenum_nameof failed");
}
// otherwise, create the string to hold the datatype name and return it
diff --git a/c++/src/H5Exception.cpp b/c++/src/H5Exception.cpp
index 2d18825..daf6a74 100644
--- a/c++/src/H5Exception.cpp
+++ b/c++/src/H5Exception.cpp
@@ -80,8 +80,11 @@ H5std_string Exception::getMajorString( hid_t err_major ) const
// Check for failure again
if( mesg_size < 0 )
+ {
+ delete []mesg_C;
throw IdComponentException("Exception::getMajorString",
"H5Eget_msg failed");
+ }
// Convert the C error description and return
H5std_string major_str(mesg_C);
@@ -116,8 +119,11 @@ H5std_string Exception::getMinorString( hid_t err_minor ) const
// Check for failure again
if( mesg_size < 0 )
+ {
+ delete []mesg_C;
throw IdComponentException("Exception::getMinorString",
"H5Eget_msg failed");
+ }
// Convert the C error description and return
H5std_string minor_str(mesg_C);
diff --git a/c++/src/H5File.cpp b/c++/src/H5File.cpp
index 6e04fc1..0620070 100644
--- a/c++/src/H5File.cpp
+++ b/c++/src/H5File.cpp
@@ -50,7 +50,7 @@ namespace H5 {
///\brief Default constructor: creates a stub H5File object.
// Programmer Binh-Minh Ribler - 2000
//--------------------------------------------------------------------------
-H5File::H5File() : H5Location(), id(0) {}
+H5File::H5File() : H5Location(), id(H5I_INVALID_HID) {}
//--------------------------------------------------------------------------
// Function: H5File overloaded constructor
@@ -69,6 +69,10 @@ H5File::H5File() : H5Location(), id(0) {}
/// the file.
/// \li \c H5F_ACC_EXCL - Fail if file already exists.
/// \c H5F_ACC_TRUNC and \c H5F_ACC_EXCL are mutually exclusive
+/// \li \c H5F_ACC_RDONLY - Open file as read-only, if it already
+/// exists, and fail, otherwise
+/// \li \c H5F_ACC_RDWR - Open file for read/write, if it already
+/// exists, and fail, otherwise
/// \li \c H5F_ACC_DEBUG - print debug information. This flag is
/// used only by HDF5 library developers; it is neither
/// tested nor supported for use in applications.
@@ -82,7 +86,7 @@ H5File::H5File() : H5Location(), id(0) {}
// to catch then re-throw it. -BMR 2013/03/21
// Programmer Binh-Minh Ribler - 2000
//--------------------------------------------------------------------------
-H5File::H5File( const char* name, unsigned int flags, const FileCreatPropList& create_plist, const FileAccPropList& access_plist ) : H5Location(), id(0)
+H5File::H5File( const char* name, unsigned int flags, const FileCreatPropList& create_plist, const FileAccPropList& access_plist ) : H5Location(), id(H5I_INVALID_HID)
{
try {
p_get_file(name, flags, create_plist, access_plist);
@@ -107,7 +111,7 @@ H5File::H5File( const char* name, unsigned int flags, const FileCreatPropList& c
// to catch then re-throw it. -BMR 2013/03/21
// Programmer Binh-Minh Ribler - 2000
//--------------------------------------------------------------------------
-H5File::H5File( const H5std_string& name, unsigned int flags, const FileCreatPropList& create_plist, const FileAccPropList& access_plist ) : H5Location(), id(0)
+H5File::H5File( const H5std_string& name, unsigned int flags, const FileCreatPropList& create_plist, const FileAccPropList& access_plist ) : H5Location(), id(H5I_INVALID_HID)
{
try {
p_get_file(name.c_str(), flags, create_plist, access_plist);
@@ -121,12 +125,15 @@ H5File::H5File( const H5std_string& name, unsigned int flags, const FileCreatPro
// This function is private and contains common code between the
// constructors taking a string or a char*
// Programmer Binh-Minh Ribler - 2000
+// Modification
+// - removed H5F_ACC_CREAT because H5Fcreate will fail with
+// H5F_ACC_CREAT. - BMR, Sep 17, 2014
//--------------------------------------------------------------------------
void H5File::p_get_file(const char* name, unsigned int flags, const FileCreatPropList& create_plist, const FileAccPropList& access_plist)
{
// These bits only set for creation, so if any of them are set,
// create the file.
- if( flags & (H5F_ACC_CREAT|H5F_ACC_EXCL|H5F_ACC_TRUNC|H5F_ACC_DEBUG))
+ if( flags & (H5F_ACC_EXCL|H5F_ACC_TRUNC|H5F_ACC_DEBUG))
{
hid_t create_plist_id = create_plist.getId();
hid_t access_plist_id = access_plist.getId();
@@ -147,6 +154,7 @@ void H5File::p_get_file(const char* name, unsigned int flags, const FileCreatPro
}
}
}
+
#endif // DOXYGEN_SHOULD_SKIP_THIS
//--------------------------------------------------------------------------
@@ -598,7 +606,7 @@ void H5File::close()
throw FileIException("H5File::close", "H5Fclose failed");
}
// reset the id
- id = 0;
+ id = H5I_INVALID_HID;
}
}
diff --git a/c++/src/H5Group.cpp b/c++/src/H5Group.cpp
index 38f8b9f..41e7fc6 100644
--- a/c++/src/H5Group.cpp
+++ b/c++/src/H5Group.cpp
@@ -51,7 +51,7 @@ namespace H5 {
///\brief Default constructor: creates a stub Group.
// Programmer Binh-Minh Ribler - 2000
//--------------------------------------------------------------------------
-Group::Group() : H5Object(), id(0) {}
+Group::Group() : H5Object(), id(H5I_INVALID_HID) {}
//--------------------------------------------------------------------------
// Function: Group copy constructor
@@ -99,7 +99,7 @@ Group::Group(const hid_t existing_id) : H5Object()
/// is a datatype that has been named by DataType::commit.
// Programmer Binh-Minh Ribler - Oct, 2006
//--------------------------------------------------------------------------
-Group::Group(const H5Location& loc, const void* ref, H5R_type_t ref_type) : H5Object(), id(0)
+Group::Group(const H5Location& loc, const void* ref, H5R_type_t ref_type) : H5Object(), id(H5I_INVALID_HID)
{
id = H5Location::p_dereference(loc.getId(), ref, ref_type, "constructor - by dereference");
}
@@ -113,7 +113,7 @@ Group::Group(const H5Location& loc, const void* ref, H5R_type_t ref_type) : H5Ob
///\exception H5::ReferenceException
// Programmer Binh-Minh Ribler - Oct, 2006
//--------------------------------------------------------------------------
-Group::Group(const Attribute& attr, const void* ref, H5R_type_t ref_type) : H5Object(), id(0)
+Group::Group(const Attribute& attr, const void* ref, H5R_type_t ref_type) : H5Object(), id(H5I_INVALID_HID)
{
id = H5Location::p_dereference(attr.getId(), ref, ref_type, "constructor - by dereference");
}
@@ -179,7 +179,7 @@ void Group::close()
throw GroupIException("Group::close", "H5Gclose failed");
}
// reset the id
- id = 0;
+ id = H5I_INVALID_HID;
}
}
diff --git a/c++/src/H5IdComponent.cpp b/c++/src/H5IdComponent.cpp
index 99a8dc4..4a9dcac 100644
--- a/c++/src/H5IdComponent.cpp
+++ b/c++/src/H5IdComponent.cpp
@@ -145,7 +145,7 @@ int IdComponent::getCounter() const
//--------------------------------------------------------------------------
H5I_type_t IdComponent::getHDFObjType(const hid_t obj_id)
{
- if (obj_id == 0)
+ if (obj_id <= 0)
return H5I_BADID; // invalid
H5I_type_t id_type = H5Iget_type(obj_id);
if (id_type <= H5I_BADID || id_type >= H5I_NTYPES)
@@ -317,6 +317,7 @@ H5std_string IdComponent::p_get_file_name() const
// Check for failure again
if( name_size < 0 )
{
+ delete []name_C;
throw IdComponentException("", "H5Fget_name failed");
}
@@ -339,7 +340,7 @@ H5std_string IdComponent::p_get_file_name() const
//--------------------------------------------------------------------------
bool IdComponent::p_valid_id(const hid_t obj_id)
{
- if (obj_id == 0)
+ if (obj_id <= 0)
return false;
H5I_type_t id_type = H5Iget_type(obj_id);
diff --git a/c++/src/H5Location.cpp b/c++/src/H5Location.cpp
index 42aa99a..70be5bf 100644
--- a/c++/src/H5Location.cpp
+++ b/c++/src/H5Location.cpp
@@ -33,6 +33,9 @@
#include "H5DataSet.h"
#include "H5Attribute.h"
#include "H5private.h" // for HDmemset
+#include <iostream>
+using namespace std;
+
#ifndef H5_NO_NAMESPACE
namespace H5 {
@@ -551,6 +554,7 @@ H5std_string H5Location::getComment(const char* name, size_t buf_size) const
ssize_t comment_len = getComment(name, tmp_len+1, comment_C);
if (comment_len < 0)
{
+ delete []comment_C;
throw LocationException("H5Location::getComment", "H5Oget_comment_by_name failed");
}
@@ -724,7 +728,6 @@ hid_t H5Location::p_dereference(hid_t loc_id, const void* ref, H5R_type_t ref_ty
///\param loc - IN: Location of the referenced object
///\param ref - IN: Reference pointer
///\param ref_type - IN: Reference type
-///\param plist - IN: Property list - default to PropList::DEFAULT
///\exception H5::ReferenceException
// Programmer Binh-Minh Ribler - Oct, 2006
// Modification
@@ -742,7 +745,6 @@ void H5Location::dereference(const H5Location& loc, const void* ref, H5R_type_t
///\param attr - IN: Attribute specifying the location of the referenced object
///\param ref - IN: Reference pointer
///\param ref_type - IN: Reference type
-///\param plist - IN: Property list - default to PropList::DEFAULT
///\exception H5::ReferenceException
// Programmer Binh-Minh Ribler - Oct, 2006
// Modification
diff --git a/c++/src/H5PropList.cpp b/c++/src/H5PropList.cpp
index 0b740d8..5afe80f 100644
--- a/c++/src/H5PropList.cpp
+++ b/c++/src/H5PropList.cpp
@@ -46,7 +46,7 @@ const PropList PropList::DEFAULT;
///\brief Default constructor: creates a stub property list object.
// Programmer Binh-Minh Ribler - 2000
//--------------------------------------------------------------------------
-PropList::PropList() : IdComponent(), id(0) {}
+PropList::PropList() : IdComponent(), id(H5P_DEFAULT) {}
//--------------------------------------------------------------------------
// Function: PropList copy constructor
@@ -74,7 +74,7 @@ PropList::PropList(const PropList& original) : IdComponent(original)
//--------------------------------------------------------------------------
PropList::PropList( const hid_t plist_id ) : IdComponent()
{
- if (plist_id == 0)
+ if (plist_id <= 0)
id = H5P_DEFAULT;
H5I_type_t id_type = H5Iget_type(plist_id);
@@ -277,7 +277,7 @@ void PropList::close()
throw PropListIException(inMemFunc("close"), "H5Pclose failed");
}
// reset the id
- id = 0;
+ id = H5I_INVALID_HID;
}
}
@@ -402,6 +402,7 @@ H5std_string PropList::getProperty(const char* name) const
// Throw exception if H5Pget returns failure
if (ret_value < 0)
{
+ delete []prop_strg_C;
throw PropListIException(inMemFunc("getProperty"), "H5Pget failed");
}
diff --git a/c++/src/H5StrType.cpp b/c++/src/H5StrType.cpp
index a906b72..0593a47 100644
--- a/c++/src/H5StrType.cpp
+++ b/c++/src/H5StrType.cpp
@@ -146,6 +146,13 @@ StrType::StrType( const DataSet& dataset ) : AtomType ()
///\brief Retrieves the character set type of this string datatype.
///\return Character set type, which can be:
/// \li \c H5T_CSET_ASCII (0) - Character set is US ASCII.
+///\note
+/// ASCII and UTF-8 Unicode are the only currently supported character
+/// encodings. Extended ASCII encodings (for example, ISO 8859) are not
+/// supported. This encoding policy is not enforced by the HDF5 Library.
+/// Using encodings other than ASCII and UTF-8 can lead to compatibility
+/// and usability problems. See the C API entry H5Pset_char_encoding for
+/// more information.
///\exception H5::DataTypeIException
// Programmer Binh-Minh Ribler - 2000
//--------------------------------------------------------------------------
@@ -166,6 +173,13 @@ H5T_cset_t StrType::getCset() const
///\brief Sets character set to be used.
///\param cset - IN: character set type, which can be:
/// \li \c H5T_CSET_ASCII (0) - Character set is US ASCII.
+///\note
+/// ASCII and UTF-8 Unicode are the only currently supported character
+/// encodings. Extended ASCII encodings (for example, ISO 8859) are not
+/// supported. This encoding policy is not enforced by the HDF5 Library.
+/// Using encodings other than ASCII and UTF-8 can lead to compatibility
+/// and usability problems. See the C API entry H5Pset_char_encoding for
+/// more information.
///\exception H5::DataTypeIException
// Programmer Binh-Minh Ribler - 2000
//--------------------------------------------------------------------------
diff --git a/c++/src/Makefile.in b/c++/src/Makefile.in
index 719b608..f056075 100644
--- a/c++/src/Makefile.in
+++ b/c++/src/Makefile.in
@@ -518,7 +518,6 @@ MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MPE = @MPE@
-MPI_GET_SIZE = @MPI_GET_SIZE@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
@@ -681,8 +680,10 @@ CHECK_CLEANFILES = *.chkexe *.chklog *.clog
# Add libtool shared library version numbers to the HDF5 library
# See libtool versioning documentation online.
-LT_VERS_INTERFACE = 8
-LT_VERS_REVISION = 2
+# After making changes, run bin/reconfigure to update other configure related
+# files like Makefile.in.
+LT_VERS_INTERFACE = 9
+LT_VERS_REVISION = 0
LT_VERS_AGE = 0
# This is our main target
diff --git a/c++/src/cpp_doc_config b/c++/src/cpp_doc_config
index ea10b04..4ebd796 100644
--- a/c++/src/cpp_doc_config
+++ b/c++/src/cpp_doc_config
@@ -38,7 +38,7 @@ PROJECT_NAME = "HDF5 C++ API"
# could be handy for archiving the generated documentation or if some version
# control system is used.
-PROJECT_NUMBER = 1.8.13
+PROJECT_NUMBER = 1.8.14
# Using the PROJECT_BRIEF tag one can provide an optional one line description
# for a project that appears at the top of each page and should give viewer a
@@ -58,7 +58,7 @@ PROJECT_LOGO = ./header_files/hdf_logo.jpg
# entered, it will be relative to the location where doxygen was started. If
# left blank the current directory will be used.
-OUTPUT_DIRECTORY = HTML
+OUTPUT_DIRECTORY = cpplus_RM
# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create 4096 sub-
# directories (in 2 levels) under the output directory of each output format and
@@ -1069,7 +1069,7 @@ GENERATE_HTML = YES
# The default directory is: html.
# This tag requires that the tag GENERATE_HTML is set to YES.
-HTML_OUTPUT = HTML
+HTML_OUTPUT = .
# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each
# generated HTML page (for example: .htm, .php, .asp).
diff --git a/c++/test/CMakeTests.cmake b/c++/test/CMakeTests.cmake
index 147972f..c725f69 100644
--- a/c++/test/CMakeTests.cmake
+++ b/c++/test/CMakeTests.cmake
@@ -57,9 +57,10 @@ if (HDF5_TEST_VFD)
-D "TEST_EXPECT=${resultcode}"
-D "TEST_OUTPUT=cpp_testhdf5"
-D "TEST_FOLDER=${PROJECT_BINARY_DIR}"
- -P "${HDF5_RESOURCES_DIR}/vfdTest.cmake"
+ -P "${HDF_RESOURCES_DIR}/vfdTest.cmake"
)
set_tests_properties (CPP_VFD-${vfdname}-cpp_testhdf5 PROPERTIES DEPENDS CPP_VFD-${vfdname}-cpp_testhdf5-clear-objects)
+ set_tests_properties (CPP_VFD-${vfdname}-cpp_testhdf5 PROPERTIES TIMEOUT 30)
endif (NOT HDF5_ENABLE_USING_MEMCHECKER)
ENDMACRO (ADD_VFD_TEST)
diff --git a/c++/test/Makefile.in b/c++/test/Makefile.in
index 621618e..49c08e4 100644
--- a/c++/test/Makefile.in
+++ b/c++/test/Makefile.in
@@ -509,7 +509,6 @@ MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MPE = @MPE@
-MPI_GET_SIZE = @MPI_GET_SIZE@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
diff --git a/c++/test/dsets.cpp b/c++/test/dsets.cpp
index d1ced1d..fc0ea3a 100644
--- a/c++/test/dsets.cpp
+++ b/c++/test/dsets.cpp
@@ -1083,6 +1083,7 @@ void test_dset()
// Close the file before testing data size.
file.close();
+
nerrors += test_datasize(fapl) <0 ? 1:0;
}
catch (Exception E)
diff --git a/c++/test/tfile.cpp b/c++/test/tfile.cpp
index 0f4ea33..e4e8d34 100644
--- a/c++/test/tfile.cpp
+++ b/c++/test/tfile.cpp
@@ -598,7 +598,7 @@ static void test_file_attribute()
} // end of try block
catch (Exception E) {
- issue_fail_msg("test_file_name()", __LINE__, __FILE__, E.getCDetailMsg());
+ issue_fail_msg("test_file_attribute()", __LINE__, __FILE__, E.getCDetailMsg());
}
} // test_file_attribute()
@@ -622,7 +622,7 @@ extern "C"
void test_file()
{
// Output message about test being performed
- MESSAGE(5, ("Testing File I/O operations\n"));
+ MESSAGE(5, ("Testing File I/O Operations\n"));
test_file_create(); // Test file creation (also creation templates)
test_file_open(); // Test file opening
diff --git a/c++/test/th5s.cpp b/c++/test/th5s.cpp
index cfdeb1f..b7a39b4 100644
--- a/c++/test/th5s.cpp
+++ b/c++/test/th5s.cpp
@@ -317,7 +317,7 @@ static void test_h5s_scalar_read()
SUBTEST("Scalar Dataspace Reading");
try {
- // Create file
+ // Open file
H5File fid1(DATAFILE, H5F_ACC_RDWR);
// Create a dataset
@@ -506,7 +506,7 @@ static void test_h5s_compound_scalar_read()
// Output message about test being performed
SUBTEST("Compound Dataspace Reading");
try {
- // Create file
+ // Open file
H5File fid1(DATAFILE, H5F_ACC_RDWR);
// Create a dataset
diff --git a/c++/test/tlinks.cpp b/c++/test/tlinks.cpp
index fca5918..291b649 100644
--- a/c++/test/tlinks.cpp
+++ b/c++/test/tlinks.cpp
@@ -15,7 +15,7 @@
/*****************************************************************************
FILE
tlinks.cpp - HDF5 C++ testing functionalities associated with the
- C attribute interface (H5L)
+ C link interface (H5L)
***************************************************************************/
diff --git a/config/apple b/config/apple
index ac93ea5..5203695 100644
--- a/config/apple
+++ b/config/apple
@@ -31,6 +31,20 @@ if test "X-" = "X-$CC"; then
*)
CC=clang
CC_BASENAME=clang
+
+ # Production
+ PROD_CFLAGS="-O3"
+ PROD_CPPFLAGS=
+
+ # Debug
+ DEBUG_CFLAGS="-g -O0"
+ DEBUG_CPPFLAGS=
+
+ # Profile
+ # Use this for profiling with gprof
+ # Just "-g" for now. More later.
+ PROFILE_CFLAGS="-g"
+ PROFILE_CPPFLAGS=
;;
esac
fi
@@ -89,6 +103,16 @@ if test "X-" = "X-$CXX"; then
esac
fi
+case $CXX_BASENAME in
+ clang++)
+ PROD_CXXFLAGS="-O3"
+ DEBUG_CXXFLAGS="-g -O0"
+ # Use this for profiling with gprof
+ # Just "-g" for now. More later.
+ PROFILE_CXXFLAGS="-g"
+ ;;
+esac
+
# compiler version strings
case $CC in
clang)
diff --git a/config/cmake/ConfigureChecks.cmake b/config/cmake/ConfigureChecks.cmake
index 9816755..444ce0b 100644
--- a/config/cmake/ConfigureChecks.cmake
+++ b/config/cmake/ConfigureChecks.cmake
@@ -1,44 +1,11 @@
#-----------------------------------------------------------------------------
# Include all the necessary files for macros
#-----------------------------------------------------------------------------
-include (${CMAKE_ROOT}/Modules/CheckFunctionExists.cmake)
-include (${CMAKE_ROOT}/Modules/CheckIncludeFile.cmake)
-include (${CMAKE_ROOT}/Modules/CheckIncludeFileCXX.cmake)
-include (${CMAKE_ROOT}/Modules/CheckIncludeFiles.cmake)
-include (${CMAKE_ROOT}/Modules/CheckLibraryExists.cmake)
-include (${CMAKE_ROOT}/Modules/CheckSymbolExists.cmake)
-include (${CMAKE_ROOT}/Modules/CheckTypeSize.cmake)
-include (${CMAKE_ROOT}/Modules/CheckVariableExists.cmake)
-include (${CMAKE_ROOT}/Modules/CheckFortranFunctionExists.cmake)
-include (${CMAKE_ROOT}/Modules/TestBigEndian.cmake)
+set (HDF_PREFIX "H5")
+include (${HDF_RESOURCES_EXT_DIR}/ConfigureChecks.cmake)
include (${CMAKE_ROOT}/Modules/TestForSTDNamespace.cmake)
#-----------------------------------------------------------------------------
-# APPLE/Darwin setup
-#-----------------------------------------------------------------------------
-if (APPLE)
- list (LENGTH CMAKE_OSX_ARCHITECTURES ARCH_LENGTH)
- if (ARCH_LENGTH GREATER 1)
- set (CMAKE_OSX_ARCHITECTURES "" CACHE STRING "" FORCE)
- message(FATAL_ERROR "Building Universal Binaries on OS X is NOT supported by the HDF5 project. This is"
- "due to technical reasons. The best approach would be build each architecture in separate directories"
- "and use the 'lipo' tool to combine them into a single executable or library. The 'CMAKE_OSX_ARCHITECTURES'"
- "variable has been set to a blank value which will build the default architecture for this system.")
- endif ()
- set (H5_AC_APPLE_UNIVERSAL_BUILD 0)
-endif (APPLE)
-
-# Check for Darwin (not just Apple - we also want to catch OpenDarwin)
-if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
- set (H5_HAVE_DARWIN 1)
-endif (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
-
-# Check for Solaris
-if (${CMAKE_SYSTEM_NAME} MATCHES "SunOS")
- set (H5_HAVE_SOLARIS 1)
-endif (${CMAKE_SYSTEM_NAME} MATCHES "SunOS")
-
-#-----------------------------------------------------------------------------
# Option to Clear File Buffers before write --enable-clear-file-buffers
#-----------------------------------------------------------------------------
option (HDF5_Enable_Clear_File_Buffers "Securely clear file buffers before writing to file" ON)
@@ -98,7 +65,13 @@ if (HDF5_ENABLE_CODESTACK)
endif (HDF5_ENABLE_CODESTACK)
MARK_AS_ADVANCED (HDF5_ENABLE_CODESTACK)
+#-----------------------------------------------------------------------------
+# Are we going to use HSIZE_T
+#-----------------------------------------------------------------------------
option (HDF5_ENABLE_HSIZET "Enable datasets larger than memory" ON)
+if (HDF5_ENABLE_HSIZET)
+ set (${HDF_PREFIX}_HAVE_LARGE_HSIZET 1)
+endif (HDF5_ENABLE_HSIZET)
# ----------------------------------------------------------------------
# Set the flag to indicate that the machine can handle converting
@@ -110,40 +83,6 @@ option (HDF5_ENABLE_HSIZET "Enable datasets larger than memory" ON)
# so far we have no check for this
set (H5_HAVE_TMPFILE 1)
-#-----------------------------------------------------------------------------
-# This MACRO checks IF the symbol exists in the library and IF it
-# does, it appends library to the list.
-#-----------------------------------------------------------------------------
-set (LINK_LIBS "")
-MACRO (CHECK_LIBRARY_EXISTS_CONCAT LIBRARY SYMBOL VARIABLE)
- CHECK_LIBRARY_EXISTS ("${LIBRARY};${LINK_LIBS}" ${SYMBOL} "" ${VARIABLE})
- if (${VARIABLE})
- set (LINK_LIBS ${LINK_LIBS} ${LIBRARY})
- endif (${VARIABLE})
-ENDMACRO (CHECK_LIBRARY_EXISTS_CONCAT)
-
-# ----------------------------------------------------------------------
-# WINDOWS Hard code Values
-# ----------------------------------------------------------------------
-
-set (WINDOWS)
-if (WIN32)
- if (MINGW)
- set (H5_HAVE_MINGW 1)
- set (WINDOWS 1) # MinGW tries to imitate Windows
- set (CMAKE_REQUIRED_FLAGS "-DWIN32_LEAN_AND_MEAN=1 -DNOGDI=1")
- endif (MINGW)
- set (H5_HAVE_WIN32_API 1)
- set (CMAKE_REQUIRED_LIBRARIES "ws2_32.lib;wsock32.lib")
- if (NOT UNIX AND NOT CYGWIN AND NOT MINGW)
- set (WINDOWS 1)
- set (CMAKE_REQUIRED_FLAGS "/DWIN32_LEAN_AND_MEAN=1 /DNOGDI=1")
- if (MSVC)
- set (H5_HAVE_VISUAL_STUDIO 1)
- endif (MSVC)
- endif (NOT UNIX AND NOT CYGWIN AND NOT MINGW)
-endif (WIN32)
-
# TODO --------------------------------------------------------------------------
# Should the Default Virtual File Driver be compiled?
# This is hard-coded now but option should added to match configure
@@ -152,7 +91,7 @@ set (H5_DEFAULT_VFD H5FD_SEC2)
if (NOT DEFINED "H5_DEFAULT_PLUGINDIR")
if (WINDOWS)
- set (H5_DEFAULT_PLUGINDIR "%ALLUSERSPROFILE%/hdf5/lib/plugin")
+ set (H5_DEFAULT_PLUGINDIR "%ALLUSERSPROFILE%\\\\hdf5\\\\lib\\\\plugin")
else (WINDOWS)
set (H5_DEFAULT_PLUGINDIR "/usr/local/hdf5/lib/plugin")
endif (WINDOWS)
@@ -168,30 +107,6 @@ if (WINDOWS)
endif (WINDOWS)
if (WINDOWS)
- set (H5_HAVE_STDDEF_H 1)
- set (H5_HAVE_SYS_STAT_H 1)
- set (H5_HAVE_SYS_TYPES_H 1)
- set (H5_HAVE_LIBM 1)
- set (H5_HAVE_STRDUP 1)
- set (H5_HAVE_SYSTEM 1)
- set (H5_HAVE_LONGJMP 1)
- if (NOT MINGW)
- set (H5_HAVE_GETHOSTNAME 1)
- endif (NOT MINGW)
- if (NOT UNIX AND NOT CYGWIN AND NOT MINGW)
- set (H5_HAVE_GETCONSOLESCREENBUFFERINFO 1)
- endif (NOT UNIX AND NOT CYGWIN AND NOT MINGW)
- set (H5_HAVE_FUNCTION 1)
- set (H5_GETTIMEOFDAY_GIVES_TZ 1)
- set (H5_HAVE_TIMEZONE 1)
- set (H5_HAVE_GETTIMEOFDAY 1)
- set (H5_LONE_COLON 0)
- if (MINGW)
- set (H5_HAVE_WINSOCK2_H 1)
- endif (MINGW)
- set (H5_HAVE_LIBWS2_32 1)
- set (H5_HAVE_LIBWSOCK32 1)
-
#-----------------------------------------------------------------------------
# These tests need to be manually SET for windows since there is currently
# something not quite correct with the actual test implementation. This affects
@@ -204,97 +119,6 @@ endif (WINDOWS)
# END of WINDOWS Hard code Values
# ----------------------------------------------------------------------
-if (CYGWIN)
- set (H5_HAVE_LSEEK64 0)
-endif (CYGWIN)
-
-#-----------------------------------------------------------------------------
-# Check for the math library "m"
-#-----------------------------------------------------------------------------
-if (NOT WINDOWS)
- CHECK_LIBRARY_EXISTS_CONCAT ("m" ceil H5_HAVE_LIBM)
- CHECK_LIBRARY_EXISTS_CONCAT ("dl" dlopen H5_HAVE_LIBDL)
- CHECK_LIBRARY_EXISTS_CONCAT ("ws2_32" WSAStartup H5_HAVE_LIBWS2_32)
- CHECK_LIBRARY_EXISTS_CONCAT ("wsock32" gethostbyname H5_HAVE_LIBWSOCK32)
-endif (NOT WINDOWS)
-
-CHECK_LIBRARY_EXISTS_CONCAT ("ucb" gethostname H5_HAVE_LIBUCB)
-CHECK_LIBRARY_EXISTS_CONCAT ("socket" connect H5_HAVE_LIBSOCKET)
-CHECK_LIBRARY_EXISTS ("c" gethostbyname "" NOT_NEED_LIBNSL)
-
-if (NOT NOT_NEED_LIBNSL)
- CHECK_LIBRARY_EXISTS_CONCAT ("nsl" gethostbyname H5_HAVE_LIBNSL)
-endif (NOT NOT_NEED_LIBNSL)
-
-# For other tests to use the same libraries
-set (CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} ${LINK_LIBS})
-
-set (USE_INCLUDES "")
-if (WINDOWS)
- set (USE_INCLUDES ${USE_INCLUDES} "windows.h")
-endif (WINDOWS)
-
-if (NOT WINDOWS)
- TEST_BIG_ENDIAN (H5_WORDS_BIGENDIAN)
-endif (NOT WINDOWS)
-
-# For other specific tests, use this MACRO.
-MACRO (HDF5_FUNCTION_TEST OTHER_TEST)
- if ("H5_${OTHER_TEST}" MATCHES "^H5_${OTHER_TEST}$")
- set (MACRO_CHECK_FUNCTION_DEFINITIONS "-D${OTHER_TEST} ${CMAKE_REQUIRED_FLAGS}")
- set (OTHER_TEST_ADD_LIBRARIES)
- if (CMAKE_REQUIRED_LIBRARIES)
- set (OTHER_TEST_ADD_LIBRARIES "-DLINK_LIBRARIES:STRING=${CMAKE_REQUIRED_LIBRARIES}")
- endif (CMAKE_REQUIRED_LIBRARIES)
-
- foreach (def ${HDF5_EXTRA_TEST_DEFINITIONS})
- set (MACRO_CHECK_FUNCTION_DEFINITIONS "${MACRO_CHECK_FUNCTION_DEFINITIONS} -D${def}=${${def}}")
- endforeach (def)
-
- foreach (def
- HAVE_SYS_TIME_H
- HAVE_UNISTD_H
- HAVE_SYS_TYPES_H
- HAVE_SYS_SOCKET_H
- )
- if ("${H5_${def}}")
- set (MACRO_CHECK_FUNCTION_DEFINITIONS "${MACRO_CHECK_FUNCTION_DEFINITIONS} -D${def}")
- endif ("${H5_${def}}")
- endforeach (def)
-
- if (LARGEFILE)
- set (MACRO_CHECK_FUNCTION_DEFINITIONS
- "${MACRO_CHECK_FUNCTION_DEFINITIONS} -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE"
- )
- endif (LARGEFILE)
-
- #message (STATUS "Performing ${OTHER_TEST}")
- TRY_COMPILE (${OTHER_TEST}
- ${CMAKE_BINARY_DIR}
- ${HDF5_RESOURCES_DIR}/HDF5Tests.c
- CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_FUNCTION_DEFINITIONS}
- "${OTHER_TEST_ADD_LIBRARIES}"
- OUTPUT_VARIABLE OUTPUT
- )
- if (${OTHER_TEST})
- set (H5_${OTHER_TEST} 1 CACHE INTERNAL "Other test ${FUNCTION}")
- message (STATUS "Performing Other Test ${OTHER_TEST} - Success")
- else (${OTHER_TEST})
- message (STATUS "Performing Other Test ${OTHER_TEST} - Failed")
- set (H5_${OTHER_TEST} "" CACHE INTERNAL "Other test ${FUNCTION}")
- file (APPEND ${CMAKE_BINARY_DIR}/CMakeFiles/CMakeError.log
- "Performing Other Test ${OTHER_TEST} failed with the following output:\n"
- "${OUTPUT}\n"
- )
- endif (${OTHER_TEST})
- endif ("H5_${OTHER_TEST}" MATCHES "^H5_${OTHER_TEST}$")
-ENDMACRO (HDF5_FUNCTION_TEST)
-
-#-----------------------------------------------------------------------------
-# Check for these functions before the time headers are checked
-#-----------------------------------------------------------------------------
-HDF5_FUNCTION_TEST (STDC_HEADERS)
-
CHECK_FUNCTION_EXISTS (difftime H5_HAVE_DIFFTIME)
#CHECK_FUNCTION_EXISTS (gettimeofday H5_HAVE_GETTIMEOFDAY)
# Since gettimeofday is not defined any where standard, lets look in all the
@@ -303,7 +127,7 @@ if (NOT MSVC)
if ("H5_HAVE_TIME_GETTIMEOFDAY" MATCHES "^H5_HAVE_TIME_GETTIMEOFDAY$")
TRY_COMPILE (HAVE_TIME_GETTIMEOFDAY
${CMAKE_BINARY_DIR}
- ${HDF5_RESOURCES_DIR}/GetTimeOfDayTest.cpp
+ ${HDF_RESOURCES_EXT_DIR}/GetTimeOfDayTest.cpp
COMPILE_DEFINITIONS -DTRY_TIME_H
OUTPUT_VARIABLE OUTPUT
)
@@ -316,7 +140,7 @@ if (NOT MSVC)
if ("H5_HAVE_SYS_TIME_GETTIMEOFDAY" MATCHES "^H5_HAVE_SYS_TIME_GETTIMEOFDAY$")
TRY_COMPILE (HAVE_SYS_TIME_GETTIMEOFDAY
${CMAKE_BINARY_DIR}
- ${HDF5_RESOURCES_DIR}/GetTimeOfDayTest.cpp
+ ${HDF_RESOURCES_EXT_DIR}/GetTimeOfDayTest.cpp
COMPILE_DEFINITIONS -DTRY_SYS_TIME_H
OUTPUT_VARIABLE OUTPUT
)
@@ -354,426 +178,6 @@ endif (NOT WINDOWS)
#-----------------------------------------------------------------------------
#-----------------------------------------------------------------------------
-# Check IF header file exists and add it to the list.
-#-----------------------------------------------------------------------------
-MACRO (CHECK_INCLUDE_FILE_CONCAT FILE VARIABLE)
- CHECK_INCLUDE_FILES ("${USE_INCLUDES};${FILE}" ${VARIABLE})
- if (${VARIABLE})
- set (USE_INCLUDES ${USE_INCLUDES} ${FILE})
- endif (${VARIABLE})
-ENDMACRO (CHECK_INCLUDE_FILE_CONCAT)
-
-#-----------------------------------------------------------------------------
-# Check for the existence of certain header files
-#-----------------------------------------------------------------------------
-CHECK_INCLUDE_FILE_CONCAT ("sys/resource.h" H5_HAVE_SYS_RESOURCE_H)
-CHECK_INCLUDE_FILE_CONCAT ("sys/time.h" H5_HAVE_SYS_TIME_H)
-CHECK_INCLUDE_FILE_CONCAT ("unistd.h" H5_HAVE_UNISTD_H)
-CHECK_INCLUDE_FILE_CONCAT ("sys/ioctl.h" H5_HAVE_SYS_IOCTL_H)
-CHECK_INCLUDE_FILE_CONCAT ("sys/stat.h" H5_HAVE_SYS_STAT_H)
-CHECK_INCLUDE_FILE_CONCAT ("sys/socket.h" H5_HAVE_SYS_SOCKET_H)
-CHECK_INCLUDE_FILE_CONCAT ("sys/types.h" H5_HAVE_SYS_TYPES_H)
-CHECK_INCLUDE_FILE_CONCAT ("stddef.h" H5_HAVE_STDDEF_H)
-CHECK_INCLUDE_FILE_CONCAT ("setjmp.h" H5_HAVE_SETJMP_H)
-CHECK_INCLUDE_FILE_CONCAT ("features.h" H5_HAVE_FEATURES_H)
-CHECK_INCLUDE_FILE_CONCAT ("dirent.h" H5_HAVE_DIRENT_H)
-CHECK_INCLUDE_FILE_CONCAT ("stdint.h" H5_HAVE_STDINT_H)
-
-# IF the c compiler found stdint, check the C++ as well. On some systems this
-# file will be found by C but not C++, only do this test IF the C++ compiler
-# has been initialized (e.g. the project also includes some c++)
-if (H5_HAVE_STDINT_H AND CMAKE_CXX_COMPILER_LOADED)
- CHECK_INCLUDE_FILE_CXX ("stdint.h" H5_HAVE_STDINT_H_CXX)
- if (NOT H5_HAVE_STDINT_H_CXX)
- set (H5_HAVE_STDINT_H "" CACHE INTERNAL "Have includes HAVE_STDINT_H")
- set (USE_INCLUDES ${USE_INCLUDES} "stdint.h")
- endif (NOT H5_HAVE_STDINT_H_CXX)
-endif (H5_HAVE_STDINT_H AND CMAKE_CXX_COMPILER_LOADED)
-
-# Darwin
-CHECK_INCLUDE_FILE_CONCAT ("mach/mach_time.h" H5_HAVE_MACH_MACH_TIME_H)
-
-# Windows
-CHECK_INCLUDE_FILE_CONCAT ("io.h" H5_HAVE_IO_H)
-if (NOT CYGWIN)
- CHECK_INCLUDE_FILE_CONCAT ("winsock2.h" H5_HAVE_WINSOCK2_H)
-endif (NOT CYGWIN)
-CHECK_INCLUDE_FILE_CONCAT ("sys/timeb.h" H5_HAVE_SYS_TIMEB_H)
-
-if (CMAKE_SYSTEM_NAME MATCHES "OSF")
- CHECK_INCLUDE_FILE_CONCAT ("sys/sysinfo.h" H5_HAVE_SYS_SYSINFO_H)
- CHECK_INCLUDE_FILE_CONCAT ("sys/proc.h" H5_HAVE_SYS_PROC_H)
-else (CMAKE_SYSTEM_NAME MATCHES "OSF")
- set (H5_HAVE_SYS_SYSINFO_H "" CACHE INTERNAL "" FORCE)
- set (H5_HAVE_SYS_PROC_H "" CACHE INTERNAL "" FORCE)
-endif (CMAKE_SYSTEM_NAME MATCHES "OSF")
-
-CHECK_INCLUDE_FILE_CONCAT ("globus/common.h" H5_HAVE_GLOBUS_COMMON_H)
-CHECK_INCLUDE_FILE_CONCAT ("pdb.h" H5_HAVE_PDB_H)
-CHECK_INCLUDE_FILE_CONCAT ("pthread.h" H5_HAVE_PTHREAD_H)
-CHECK_INCLUDE_FILE_CONCAT ("srbclient.h" H5_HAVE_SRBCLIENT_H)
-CHECK_INCLUDE_FILE_CONCAT ("string.h" H5_HAVE_STRING_H)
-CHECK_INCLUDE_FILE_CONCAT ("strings.h" H5_HAVE_STRINGS_H)
-CHECK_INCLUDE_FILE_CONCAT ("time.h" H5_HAVE_TIME_H)
-CHECK_INCLUDE_FILE_CONCAT ("stdlib.h" H5_HAVE_STDLIB_H)
-CHECK_INCLUDE_FILE_CONCAT ("memory.h" H5_HAVE_MEMORY_H)
-CHECK_INCLUDE_FILE_CONCAT ("dlfcn.h" H5_HAVE_DLFCN_H)
-CHECK_INCLUDE_FILE_CONCAT ("inttypes.h" H5_HAVE_INTTYPES_H)
-CHECK_INCLUDE_FILE_CONCAT ("netinet/in.h" H5_HAVE_NETINET_IN_H)
-
-#-----------------------------------------------------------------------------
-# Check for large file support
-#-----------------------------------------------------------------------------
-
-# The linux-lfs option is deprecated.
-set (LINUX_LFS 0)
-
-set (HDF5_EXTRA_C_FLAGS)
-set (HDF5_EXTRA_FLAGS)
-if (NOT WINDOWS)
- if (NOT H5_HAVE_SOLARIS)
- # Linux Specific flags
- # This was originally defined as _POSIX_SOURCE which was updated to
- # _POSIX_C_SOURCE=199506L to expose a greater amount of POSIX
- # functionality so clock_gettime and CLOCK_MONOTONIC are defined
- # correctly.
- # POSIX feature information can be found in the gcc manual at:
- # http://www.gnu.org/s/libc/manual/html_node/Feature-Test-Macros.html
- set (HDF5_EXTRA_C_FLAGS -D_POSIX_C_SOURCE=199506L)
- set (HDF5_EXTRA_FLAGS -D_BSD_SOURCE)
-
- option (HDF5_ENABLE_LARGE_FILE "Enable support for large (64-bit) files on Linux." ON)
- if (HDF5_ENABLE_LARGE_FILE)
- set (msg "Performing TEST_LFS_WORKS")
- TRY_RUN (TEST_LFS_WORKS_RUN TEST_LFS_WORKS_COMPILE
- ${HDF5_BINARY_DIR}/CMake
- ${HDF5_RESOURCES_DIR}/HDF5Tests.c
- CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=-DTEST_LFS_WORKS
- OUTPUT_VARIABLE OUTPUT
- )
- if (TEST_LFS_WORKS_COMPILE)
- if (TEST_LFS_WORKS_RUN MATCHES 0)
- set (TEST_LFS_WORKS 1 CACHE INTERNAL ${msg})
- set (LARGEFILE 1)
- set (HDF5_EXTRA_FLAGS ${HDF5_EXTRA_FLAGS} -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE)
- message (STATUS "${msg}... yes")
- else (TEST_LFS_WORKS_RUN MATCHES 0)
- set (TEST_LFS_WORKS "" CACHE INTERNAL ${msg})
- message (STATUS "${msg}... no")
- file (APPEND ${CMAKE_BINARY_DIR}/CMakeFiles/CMakeError.log
- "Test TEST_LFS_WORKS Run failed with the following output and exit code:\n ${OUTPUT}\n"
- )
- endif (TEST_LFS_WORKS_RUN MATCHES 0)
- else (TEST_LFS_WORKS_COMPILE )
- set (TEST_LFS_WORKS "" CACHE INTERNAL ${msg})
- message (STATUS "${msg}... no")
- file (APPEND ${CMAKE_BINARY_DIR}/CMakeFiles/CMakeError.log
- "Test TEST_LFS_WORKS Compile failed with the following output:\n ${OUTPUT}\n"
- )
- endif (TEST_LFS_WORKS_COMPILE)
- endif (HDF5_ENABLE_LARGE_FILE)
- set (CMAKE_REQUIRED_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS} ${HDF5_EXTRA_FLAGS})
- endif (NOT H5_HAVE_SOLARIS)
-endif (NOT WINDOWS)
-
-add_definitions (${HDF5_EXTRA_FLAGS})
-
-#-----------------------------------------------------------------------------
-# Check for HAVE_OFF64_T functionality
-#-----------------------------------------------------------------------------
-if (NOT WINDOWS OR MINGW)
- HDF5_FUNCTION_TEST (HAVE_OFF64_T)
- if (H5_HAVE_OFF64_T)
- CHECK_FUNCTION_EXISTS (lseek64 H5_HAVE_LSEEK64)
- CHECK_FUNCTION_EXISTS (fseeko64 H5_HAVE_FSEEKO64)
- CHECK_FUNCTION_EXISTS (ftello64 H5_HAVE_FTELLO64)
- CHECK_FUNCTION_EXISTS (ftruncate64 H5_HAVE_FTRUNCATE64)
- endif (H5_HAVE_OFF64_T)
-
- CHECK_FUNCTION_EXISTS (fseeko H5_HAVE_FSEEKO)
- CHECK_FUNCTION_EXISTS (ftello H5_HAVE_FTELLO)
-
- HDF5_FUNCTION_TEST (HAVE_STAT64_STRUCT)
- if (HAVE_STAT64_STRUCT)
- CHECK_FUNCTION_EXISTS (fstat64 H5_HAVE_FSTAT64)
- CHECK_FUNCTION_EXISTS (stat64 H5_HAVE_STAT64)
- endif (HAVE_STAT64_STRUCT)
-endif (NOT WINDOWS OR MINGW)
-
-#-----------------------------------------------------------------------------
-# Check the size in bytes of all the int and float types
-#-----------------------------------------------------------------------------
-MACRO (H5_CHECK_TYPE_SIZE type var)
- set (aType ${type})
- set (aVar ${var})
-# message (STATUS "Checking size of ${aType} and storing into ${aVar}")
- CHECK_TYPE_SIZE (${aType} ${aVar})
- if (NOT ${aVar})
- set (${aVar} 0 CACHE INTERNAL "SizeOf for ${aType}")
-# message (STATUS "Size of ${aType} was NOT Found")
- endif (NOT ${aVar})
-ENDMACRO (H5_CHECK_TYPE_SIZE)
-
-H5_CHECK_TYPE_SIZE (char H5_SIZEOF_CHAR)
-H5_CHECK_TYPE_SIZE (short H5_SIZEOF_SHORT)
-H5_CHECK_TYPE_SIZE (int H5_SIZEOF_INT)
-H5_CHECK_TYPE_SIZE (unsigned H5_SIZEOF_UNSIGNED)
-if (NOT APPLE)
- H5_CHECK_TYPE_SIZE (long H5_SIZEOF_LONG)
-endif (NOT APPLE)
-H5_CHECK_TYPE_SIZE ("long long" H5_SIZEOF_LONG_LONG)
-H5_CHECK_TYPE_SIZE (__int64 H5_SIZEOF___INT64)
-if (NOT H5_SIZEOF___INT64)
- set (H5_SIZEOF___INT64 0)
-endif (NOT H5_SIZEOF___INT64)
-
-H5_CHECK_TYPE_SIZE (float H5_SIZEOF_FLOAT)
-H5_CHECK_TYPE_SIZE (double H5_SIZEOF_DOUBLE)
-H5_CHECK_TYPE_SIZE ("long double" H5_SIZEOF_LONG_DOUBLE)
-
-H5_CHECK_TYPE_SIZE (int8_t H5_SIZEOF_INT8_T)
-H5_CHECK_TYPE_SIZE (uint8_t H5_SIZEOF_UINT8_T)
-H5_CHECK_TYPE_SIZE (int_least8_t H5_SIZEOF_INT_LEAST8_T)
-H5_CHECK_TYPE_SIZE (uint_least8_t H5_SIZEOF_UINT_LEAST8_T)
-H5_CHECK_TYPE_SIZE (int_fast8_t H5_SIZEOF_INT_FAST8_T)
-H5_CHECK_TYPE_SIZE (uint_fast8_t H5_SIZEOF_UINT_FAST8_T)
-
-H5_CHECK_TYPE_SIZE (int16_t H5_SIZEOF_INT16_T)
-H5_CHECK_TYPE_SIZE (uint16_t H5_SIZEOF_UINT16_T)
-H5_CHECK_TYPE_SIZE (int_least16_t H5_SIZEOF_INT_LEAST16_T)
-H5_CHECK_TYPE_SIZE (uint_least16_t H5_SIZEOF_UINT_LEAST16_T)
-H5_CHECK_TYPE_SIZE (int_fast16_t H5_SIZEOF_INT_FAST16_T)
-H5_CHECK_TYPE_SIZE (uint_fast16_t H5_SIZEOF_UINT_FAST16_T)
-
-H5_CHECK_TYPE_SIZE (int32_t H5_SIZEOF_INT32_T)
-H5_CHECK_TYPE_SIZE (uint32_t H5_SIZEOF_UINT32_T)
-H5_CHECK_TYPE_SIZE (int_least32_t H5_SIZEOF_INT_LEAST32_T)
-H5_CHECK_TYPE_SIZE (uint_least32_t H5_SIZEOF_UINT_LEAST32_T)
-H5_CHECK_TYPE_SIZE (int_fast32_t H5_SIZEOF_INT_FAST32_T)
-H5_CHECK_TYPE_SIZE (uint_fast32_t H5_SIZEOF_UINT_FAST32_T)
-
-H5_CHECK_TYPE_SIZE (int64_t H5_SIZEOF_INT64_T)
-H5_CHECK_TYPE_SIZE (uint64_t H5_SIZEOF_UINT64_T)
-H5_CHECK_TYPE_SIZE (int_least64_t H5_SIZEOF_INT_LEAST64_T)
-H5_CHECK_TYPE_SIZE (uint_least64_t H5_SIZEOF_UINT_LEAST64_T)
-H5_CHECK_TYPE_SIZE (int_fast64_t H5_SIZEOF_INT_FAST64_T)
-H5_CHECK_TYPE_SIZE (uint_fast64_t H5_SIZEOF_UINT_FAST64_T)
-
-if (NOT APPLE)
- H5_CHECK_TYPE_SIZE (size_t H5_SIZEOF_SIZE_T)
- H5_CHECK_TYPE_SIZE (ssize_t H5_SIZEOF_SSIZE_T)
- if (NOT H5_SIZEOF_SSIZE_T)
- set (H5_SIZEOF_SSIZE_T 0)
- endif (NOT H5_SIZEOF_SSIZE_T)
- if (NOT WINDOWS)
- H5_CHECK_TYPE_SIZE (ptrdiff_t H5_SIZEOF_PTRDIFF_T)
- endif (NOT WINDOWS)
-endif (NOT APPLE)
-
-H5_CHECK_TYPE_SIZE (off_t H5_SIZEOF_OFF_T)
-H5_CHECK_TYPE_SIZE (off64_t H5_SIZEOF_OFF64_T)
-if (NOT H5_SIZEOF_OFF64_T)
- set (H5_SIZEOF_OFF64_T 0)
-endif (NOT H5_SIZEOF_OFF64_T)
-
-if (NOT WINDOWS)
- #-----------------------------------------------------------------------------
- # Check if the dev_t type is a scalar type
- #-----------------------------------------------------------------------------
- HDF5_FUNCTION_TEST (DEV_T_IS_SCALAR)
-
- # ----------------------------------------------------------------------
- # Check for MONOTONIC_TIMER support (used in clock_gettime). This has
- # to be done after any POSIX/BSD defines to ensure that the test gets
- # the correct POSIX level on linux.
- CHECK_VARIABLE_EXISTS (CLOCK_MONOTONIC HAVE_CLOCK_MONOTONIC)
-
- #-----------------------------------------------------------------------------
- # Check a bunch of time functions
- #-----------------------------------------------------------------------------
- foreach (test
- HAVE_TM_GMTOFF
- HAVE___TM_GMTOFF
-# HAVE_TIMEZONE
- HAVE_STRUCT_TIMEZONE
- GETTIMEOFDAY_GIVES_TZ
- TIME_WITH_SYS_TIME
- HAVE_TM_ZONE
- HAVE_STRUCT_TM_TM_ZONE
- )
- HDF5_FUNCTION_TEST (${test})
- endforeach (test)
- if (NOT CYGWIN AND NOT MINGW)
- HDF5_FUNCTION_TEST (HAVE_TIMEZONE)
-# HDF5_FUNCTION_TEST (HAVE_STAT_ST_BLOCKS)
- endif (NOT CYGWIN AND NOT MINGW)
-
- # ----------------------------------------------------------------------
- # Does the struct stat have the st_blocks field? This field is not Posix.
- #
- HDF5_FUNCTION_TEST (HAVE_STAT_ST_BLOCKS)
-
- # ----------------------------------------------------------------------
- # How do we figure out the width of a tty in characters?
- #
- CHECK_FUNCTION_EXISTS (ioctl H5_HAVE_IOCTL)
- HDF5_FUNCTION_TEST (HAVE_STRUCT_VIDEOCONFIG)
- HDF5_FUNCTION_TEST (HAVE_STRUCT_TEXT_INFO)
- CHECK_FUNCTION_EXISTS (_getvideoconfig H5_HAVE__GETVIDEOCONFIG)
- CHECK_FUNCTION_EXISTS (gettextinfo H5_HAVE_GETTEXTINFO)
- CHECK_FUNCTION_EXISTS (_scrsize H5_HAVE__SCRSIZE)
- if (NOT CYGWIN AND NOT MINGW)
- CHECK_FUNCTION_EXISTS (GetConsoleScreenBufferInfo H5_HAVE_GETCONSOLESCREENBUFFERINFO)
- endif (NOT CYGWIN AND NOT MINGW)
- CHECK_SYMBOL_EXISTS (TIOCGWINSZ "sys/ioctl.h" H5_HAVE_TIOCGWINSZ)
- CHECK_SYMBOL_EXISTS (TIOCGETD "sys/ioctl.h" H5_HAVE_TIOCGETD)
-endif (NOT WINDOWS)
-
-#-----------------------------------------------------------------------------
-# Check for some functions that are used
-#
-CHECK_FUNCTION_EXISTS (alarm H5_HAVE_ALARM)
-#CHECK_FUNCTION_EXISTS (BSDgettimeofday H5_HAVE_BSDGETTIMEOFDAY)
-CHECK_FUNCTION_EXISTS (fork H5_HAVE_FORK)
-CHECK_FUNCTION_EXISTS (frexpf H5_HAVE_FREXPF)
-CHECK_FUNCTION_EXISTS (frexpl H5_HAVE_FREXPL)
-
-CHECK_FUNCTION_EXISTS (gethostname H5_HAVE_GETHOSTNAME)
-CHECK_FUNCTION_EXISTS (getpwuid H5_HAVE_GETPWUID)
-CHECK_FUNCTION_EXISTS (getrusage H5_HAVE_GETRUSAGE)
-CHECK_FUNCTION_EXISTS (lstat H5_HAVE_LSTAT)
-
-CHECK_FUNCTION_EXISTS (rand_r H5_HAVE_RAND_R)
-CHECK_FUNCTION_EXISTS (random H5_HAVE_RANDOM)
-CHECK_FUNCTION_EXISTS (setsysinfo H5_HAVE_SETSYSINFO)
-
-CHECK_FUNCTION_EXISTS (signal H5_HAVE_SIGNAL)
-CHECK_FUNCTION_EXISTS (longjmp H5_HAVE_LONGJMP)
-CHECK_FUNCTION_EXISTS (setjmp H5_HAVE_SETJMP)
-CHECK_FUNCTION_EXISTS (siglongjmp H5_HAVE_SIGLONGJMP)
-CHECK_FUNCTION_EXISTS (sigsetjmp H5_HAVE_SIGSETJMP)
-CHECK_FUNCTION_EXISTS (sigaction H5_HAVE_SIGACTION)
-CHECK_FUNCTION_EXISTS (sigprocmask H5_HAVE_SIGPROCMASK)
-
-CHECK_FUNCTION_EXISTS (snprintf H5_HAVE_SNPRINTF)
-CHECK_FUNCTION_EXISTS (srandom H5_HAVE_SRANDOM)
-CHECK_FUNCTION_EXISTS (strdup H5_HAVE_STRDUP)
-CHECK_FUNCTION_EXISTS (symlink H5_HAVE_SYMLINK)
-CHECK_FUNCTION_EXISTS (system H5_HAVE_SYSTEM)
-
-CHECK_FUNCTION_EXISTS (tmpfile H5_HAVE_TMPFILE)
-CHECK_FUNCTION_EXISTS (vasprintf H5_HAVE_VASPRINTF)
-CHECK_FUNCTION_EXISTS (waitpid H5_HAVE_WAITPID)
-
-CHECK_FUNCTION_EXISTS (vsnprintf H5_HAVE_VSNPRINTF)
-if (NOT WINDOWS)
- if (H5_HAVE_VSNPRINTF)
- HDF5_FUNCTION_TEST (VSNPRINTF_WORKS)
- endif (H5_HAVE_VSNPRINTF)
-endif (NOT WINDOWS)
-
-#-----------------------------------------------------------------------------
-# sigsetjmp is special; may actually be a macro
-#-----------------------------------------------------------------------------
-if (NOT H5_HAVE_SIGSETJMP)
- if (H5_HAVE_SETJMP_H)
- CHECK_SYMBOL_EXISTS (sigsetjmp "setjmp.h" H5_HAVE_MACRO_SIGSETJMP)
- if (H5_HAVE_MACRO_SIGSETJMP)
- set (H5_HAVE_SIGSETJMP 1)
- endif (H5_HAVE_MACRO_SIGSETJMP)
- endif (H5_HAVE_SETJMP_H)
-endif (NOT H5_HAVE_SIGSETJMP)
-
-#-----------------------------------------------------------------------------
-# Check for Symbols
-CHECK_SYMBOL_EXISTS (tzname "time.h" H5_HAVE_DECL_TZNAME)
-
-#-----------------------------------------------------------------------------
-# Check a bunch of other functions
-#-----------------------------------------------------------------------------
-if (NOT WINDOWS)
- foreach (test
- LONE_COLON
- HAVE_ATTRIBUTE
- HAVE_C99_FUNC
- HAVE_FUNCTION
- HAVE_C99_DESIGNATED_INITIALIZER
- SYSTEM_SCOPE_THREADS
- HAVE_SOCKLEN_T
- CXX_HAVE_OFFSETOF
- )
- HDF5_FUNCTION_TEST (${test})
- endforeach (test)
-endif (NOT WINDOWS)
-
-# For other CXX specific tests, use this MACRO.
-MACRO (HDF5_CXX_FUNCTION_TEST OTHER_TEST)
- if ("${OTHER_TEST}" MATCHES "^${OTHER_TEST}$")
- set (MACRO_CHECK_FUNCTION_DEFINITIONS "-D${OTHER_TEST} ${CMAKE_REQUIRED_FLAGS}")
- set (OTHER_TEST_ADD_LIBRARIES)
- if (CMAKE_REQUIRED_LIBRARIES)
- set (OTHER_TEST_ADD_LIBRARIES "-DLINK_LIBRARIES:STRING=${CMAKE_REQUIRED_LIBRARIES}")
- endif (CMAKE_REQUIRED_LIBRARIES)
-
- foreach (def ${HDF5_EXTRA_TEST_DEFINITIONS})
- set (MACRO_CHECK_FUNCTION_DEFINITIONS "${MACRO_CHECK_FUNCTION_DEFINITIONS} -D${def}=${${def}}")
- endforeach (def)
-
- foreach (def
- HAVE_SYS_TIME_H
- HAVE_UNISTD_H
- HAVE_SYS_TYPES_H
- HAVE_SYS_SOCKET_H
- )
- if ("${H5_${def}}")
- set (MACRO_CHECK_FUNCTION_DEFINITIONS "${MACRO_CHECK_FUNCTION_DEFINITIONS} -D${def}")
- endif ("${H5_${def}}")
- endforeach (def)
-
- if (LARGEFILE)
- set (MACRO_CHECK_FUNCTION_DEFINITIONS
- "${MACRO_CHECK_FUNCTION_DEFINITIONS} -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE"
- )
- endif (LARGEFILE)
-
- #message (STATUS "Performing ${OTHER_TEST}")
- TRY_COMPILE (${OTHER_TEST}
- ${CMAKE_BINARY_DIR}
- ${HDF5_RESOURCES_DIR}/HDF5CXXTests.cpp
- CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_FUNCTION_DEFINITIONS}
- "${OTHER_TEST_ADD_LIBRARIES}"
- OUTPUT_VARIABLE OUTPUT
- )
- if ("${OTHER_TEST}" EQUAL 0)
- set (${OTHER_TEST} 1 CACHE INTERNAL "CXX test ${FUNCTION}")
- message (STATUS "Performing CXX Test ${OTHER_TEST} - Success")
- else ("${OTHER_TEST}" EQUAL 0)
- message (STATUS "Performing CXX Test ${OTHER_TEST} - Failed")
- set (${OTHER_TEST} "" CACHE INTERNAL "CXX test ${FUNCTION}")
- file (APPEND ${CMAKE_BINARY_DIR}/CMakeFiles/CMakeError.log
- "Performing CXX Test ${OTHER_TEST} failed with the following output:\n"
- "${OUTPUT}\n"
- )
- endif ("${OTHER_TEST}" EQUAL 0)
- endif ("${OTHER_TEST}" MATCHES "^${OTHER_TEST}$")
-ENDMACRO (HDF5_CXX_FUNCTION_TEST)
-
-#-----------------------------------------------------------------------------
-# Check a bunch of cxx functions
-#-----------------------------------------------------------------------------
-if (CMAKE_CXX_COMPILER_LOADED)
- foreach (test
- OLD_HEADER_FILENAME
- H5_NO_NAMESPACE
- H5_NO_STD
- BOOL_NOTDEFINED
- NO_STATIC_CAST
- )
- HDF5_CXX_FUNCTION_TEST (${test})
- endforeach (test)
-endif (CMAKE_CXX_COMPILER_LOADED)
-
-#-----------------------------------------------------------------------------
# Check if Direct I/O driver works
#-----------------------------------------------------------------------------
if (NOT WINDOWS)
@@ -782,14 +186,14 @@ if (NOT WINDOWS)
set (msg "Performing TEST_DIRECT_VFD_WORKS")
set (MACRO_CHECK_FUNCTION_DEFINITIONS "-DTEST_DIRECT_VFD_WORKS -D_GNU_SOURCE ${CMAKE_REQUIRED_FLAGS}")
TRY_RUN (TEST_DIRECT_VFD_WORKS_RUN TEST_DIRECT_VFD_WORKS_COMPILE
- ${HDF5_BINARY_DIR}/CMake
- ${HDF5_RESOURCES_DIR}/HDF5Tests.c
+ ${CMAKE_BINARY_DIR}
+ ${HDF_RESOURCES_EXT_DIR}/HDFTests.c
CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_FUNCTION_DEFINITIONS}
OUTPUT_VARIABLE OUTPUT
)
if (TEST_DIRECT_VFD_WORKS_COMPILE)
if (TEST_DIRECT_VFD_WORKS_RUN MATCHES 0)
- HDF5_FUNCTION_TEST (HAVE_DIRECT)
+ HDF_FUNCTION_TEST (HAVE_DIRECT)
set (CMAKE_REQUIRED_DEFINITIONS "${CMAKE_REQUIRED_DEFINITIONS} -D_GNU_SOURCE")
add_definitions ("-D_GNU_SOURCE")
else (TEST_DIRECT_VFD_WORKS_RUN MATCHES 0)
@@ -809,148 +213,6 @@ if (NOT WINDOWS)
endif (HDF5_ENABLE_DIRECT_VFD)
endif (NOT WINDOWS)
-#-----------------------------------------------------------------------------
-# Check if InitOnceExecuteOnce is available
-#-----------------------------------------------------------------------------
-if (WINDOWS)
- if (NOT HDF5_NO_IOEO_TEST)
- message (STATUS "Checking for InitOnceExecuteOnce:")
- if ("${H5_HAVE_IOEO}" MATCHES "^${H5_HAVE_IOEO}$")
- if (LARGEFILE)
- set (CMAKE_REQUIRED_DEFINITIONS
- "${CURRENT_TEST_DEFINITIONS} -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE"
- )
- endif (LARGEFILE)
- set (MACRO_CHECK_FUNCTION_DEFINITIONS
- "-DHAVE_IOEO ${CMAKE_REQUIRED_FLAGS}")
- if (CMAKE_REQUIRED_LIBRARIES)
- set (CHECK_C_SOURCE_COMPILES_ADD_LIBRARIES
- "-DLINK_LIBRARIES:STRING=${CMAKE_REQUIRED_LIBRARIES}")
- else (CMAKE_REQUIRED_LIBRARIES)
- set (CHECK_C_SOURCE_COMPILES_ADD_LIBRARIES)
- endif (CMAKE_REQUIRED_LIBRARIES)
- if (CMAKE_REQUIRED_INCLUDES)
- set (CHECK_C_SOURCE_COMPILES_ADD_INCLUDES
- "-DINCLUDE_DIRECTORIES:STRING=${CMAKE_REQUIRED_INCLUDES}")
- else (CMAKE_REQUIRED_INCLUDES)
- set (CHECK_C_SOURCE_COMPILES_ADD_INCLUDES)
- endif (CMAKE_REQUIRED_INCLUDES)
-
- TRY_RUN(HAVE_IOEO_EXITCODE HAVE_IOEO_COMPILED
- ${CMAKE_BINARY_DIR}
- ${HDF5_RESOURCES_DIR}/HDF5Tests.c
- COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS}
- CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_FUNCTION_DEFINITIONS}
- -DCMAKE_SKIP_RPATH:BOOL=${CMAKE_SKIP_RPATH}
- "${CHECK_C_SOURCE_COMPILES_ADD_LIBRARIES}"
- "${CHECK_C_SOURCE_COMPILES_ADD_INCLUDES}"
- COMPILE_OUTPUT_VARIABLE OUTPUT)
- # if it did not compile make the return value fail code of 1
- if (NOT HAVE_IOEO_COMPILED)
- set (HAVE_IOEO_EXITCODE 1)
- endif (NOT HAVE_IOEO_COMPILED)
- # if the return value was 0 then it worked
- if ("${HAVE_IOEO_EXITCODE}" EQUAL 0)
- set (H5_HAVE_IOEO 1 CACHE INTERNAL "Test InitOnceExecuteOnce")
- message (STATUS "Performing Test InitOnceExecuteOnce - Success")
- file (APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
- "Performing C SOURCE FILE Test InitOnceExecuteOnce succeded with the following output:\n"
- "${OUTPUT}\n"
- "Return value: ${HAVE_IOEO}\n")
- else ("${HAVE_IOEO_EXITCODE}" EQUAL 0)
- if (CMAKE_CROSSCOMPILING AND "${HAVE_IOEO_EXITCODE}" MATCHES "FAILED_TO_RUN")
- set (H5_HAVE_IOEO "${HAVE_IOEO_EXITCODE}")
- else (CMAKE_CROSSCOMPILING AND "${HAVE_IOEO_EXITCODE}" MATCHES "FAILED_TO_RUN")
- set (H5_HAVE_IOEO "" CACHE INTERNAL "Test InitOnceExecuteOnce")
- endif (CMAKE_CROSSCOMPILING AND "${HAVE_IOEO_EXITCODE}" MATCHES "FAILED_TO_RUN")
-
- message (STATUS "Performing Test InitOnceExecuteOnce - Failed")
- file (APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
- "Performing InitOnceExecuteOnce Test failed with the following output:\n"
- "${OUTPUT}\n"
- "Return value: ${HAVE_IOEO_EXITCODE}\n")
- endif ("${HAVE_IOEO_EXITCODE}" EQUAL 0)
- endif ("${H5_HAVE_IOEO}" MATCHES "^${H5_HAVE_IOEO}$")
- endif (NOT HDF5_NO_IOEO_TEST)
-endif (WINDOWS)
-
-#-----------------------------------------------------------------------------
-# Determine how 'inline' is used
-#-----------------------------------------------------------------------------
-set (HDF5_EXTRA_TEST_DEFINITIONS INLINE_TEST_INLINE)
-foreach (inline_test inline __inline__ __inline)
- set (INLINE_TEST_INLINE ${inline_test})
- HDF5_FUNCTION_TEST (INLINE_TEST_${inline_test})
-endforeach (inline_test)
-
-set (HDF5_EXTRA_TEST_DEFINITIONS)
-if (INLINE_TEST___inline__)
- set (H5_inline __inline__)
-else (INLINE_TEST___inline__)
- if (INLINE_TEST___inline)
- set (H5_inline __inline)
- else (INLINE_TEST___inline)
- if (INLINE_TEST_inline)
- set (H5_inline inline)
- endif (INLINE_TEST_inline)
- endif (INLINE_TEST___inline)
-endif (INLINE_TEST___inline__)
-
-#-----------------------------------------------------------------------------
-# Check how to print a Long Long integer
-#-----------------------------------------------------------------------------
-if (NOT H5_PRINTF_LL_WIDTH OR H5_PRINTF_LL_WIDTH MATCHES "unknown")
- set (PRINT_LL_FOUND 0)
- message (STATUS "Checking for appropriate format for 64 bit long:")
- foreach (HDF5_PRINTF_LL l64 l L q I64 ll)
- set (CURRENT_TEST_DEFINITIONS "-DPRINTF_LL_WIDTH=${HDF5_PRINTF_LL}")
- if (H5_SIZEOF_LONG_LONG)
- set (CURRENT_TEST_DEFINITIONS "${CURRENT_TEST_DEFINITIONS} -DHAVE_LONG_LONG")
- endif (H5_SIZEOF_LONG_LONG)
- TRY_RUN (HDF5_PRINTF_LL_TEST_RUN HDF5_PRINTF_LL_TEST_COMPILE
- ${HDF5_BINARY_DIR}/CMake
- ${HDF5_RESOURCES_DIR}/HDF5Tests.c
- CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${CURRENT_TEST_DEFINITIONS}
- OUTPUT_VARIABLE OUTPUT
- )
- if (HDF5_PRINTF_LL_TEST_COMPILE)
- if (HDF5_PRINTF_LL_TEST_RUN MATCHES 0)
- set (H5_PRINTF_LL_WIDTH "\"${HDF5_PRINTF_LL}\"" CACHE INTERNAL "Width for printf for type `long long' or `__int64', us. `ll")
- set (PRINT_LL_FOUND 1)
- else (HDF5_PRINTF_LL_TEST_RUN MATCHES 0)
- message ("Width with ${HDF5_PRINTF_LL} failed with result: ${HDF5_PRINTF_LL_TEST_RUN}")
- endif (HDF5_PRINTF_LL_TEST_RUN MATCHES 0)
- else (HDF5_PRINTF_LL_TEST_COMPILE)
- file (APPEND ${CMAKE_BINARY_DIR}/CMakeFiles/CMakeError.log
- "Test H5_PRINTF_LL_WIDTH for ${HDF5_PRINTF_LL} failed with the following output:\n ${OUTPUT}\n"
- )
- endif (HDF5_PRINTF_LL_TEST_COMPILE)
- endforeach (HDF5_PRINTF_LL)
-
- if (PRINT_LL_FOUND)
- message (STATUS "Checking for apropriate format for 64 bit long: found ${H5_PRINTF_LL_WIDTH}")
- else (PRINT_LL_FOUND)
- message (STATUS "Checking for apropriate format for 64 bit long: not found")
- set (H5_PRINTF_LL_WIDTH "\"unknown\"" CACHE INTERNAL
- "Width for printf for type `long long' or `__int64', us. `ll"
- )
- endif (PRINT_LL_FOUND)
-endif (NOT H5_PRINTF_LL_WIDTH OR H5_PRINTF_LL_WIDTH MATCHES "unknown")
-
-# ----------------------------------------------------------------------
-# Set the flag to indicate that the machine can handle converting
-# denormalized floating-point values.
-# (This flag should be set for all machines, except for the Crays, where
-# the cache value is set in it's config file)
-#
-set (H5_CONVERT_DENORMAL_FLOAT 1)
-
-#-----------------------------------------------------------------------------
-# Are we going to use HSIZE_T
-#-----------------------------------------------------------------------------
-if (HDF5_ENABLE_HSIZET)
- set (H5_HAVE_LARGE_HSIZET 1)
-endif (HDF5_ENABLE_HSIZET)
#-----------------------------------------------------------------------------
# Macro to determine the various conversion capabilities
@@ -959,8 +221,8 @@ MACRO (H5ConversionTests TEST msg)
if ("${TEST}" MATCHES "^${TEST}$")
# message (STATUS "===> ${TEST}")
TRY_RUN (${TEST}_RUN ${TEST}_COMPILE
- ${HDF5_BINARY_DIR}/CMake
- ${HDF5_RESOURCES_DIR}/ConversionTests.c
+ ${CMAKE_BINARY_DIR}
+ ${HDF_RESOURCES_DIR}/ConversionTests.c
CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=-D${TEST}_TEST
OUTPUT_VARIABLE OUTPUT
)
@@ -1021,9 +283,7 @@ H5MiscConversionTest (H5_SIZEOF_LONG_DOUBLE H5_LDOUBLE_TO_INTEGER_ACCURATE "chec
# integers except 'unsigned long long'. Other HP-UX systems are unknown
# yet. (1/8/05 - SLU)
#
-if (NOT MSVC)
- H5ConversionTests (H5_LDOUBLE_TO_INTEGER_WORKS "Checking IF converting from long double to integers works")
-endif (NOT MSVC)
+H5ConversionTests (H5_LDOUBLE_TO_INTEGER_WORKS "Checking IF converting from long double to integers works")
# -----------------------------------------------------------------------
# Set flag to indicate that the machine can handle conversion from
# integers to long double. (This flag should be set "yes" for all
@@ -1101,9 +361,7 @@ endif (H5_LLONG_TO_FP_CAST_WORKS MATCHES ^H5_LLONG_TO_FP_CAST_WORKS$)
# where the last 2 bytes of mantissa are lost when compiler tries to do
# the conversion, and Cygwin where compiler doesn't do rounding correctly.)
#
-if (NOT MSVC)
- H5ConversionTests (H5_ULLONG_TO_LDOUBLE_PRECISION "Checking IF converting unsigned long long to long double with precision")
-endif (NOT MSVC)
+H5ConversionTests (H5_ULLONG_TO_LDOUBLE_PRECISION "Checking IF converting unsigned long long to long double with precision")
# ----------------------------------------------------------------------
# Set the flag to indicate that the machine can handle overflow converting
# all floating-point to all integer types.
diff --git a/config/cmake/ConversionTests.c b/config/cmake/ConversionTests.c
index 0e24954..1ee9842 100644
--- a/config/cmake/ConversionTests.c
+++ b/config/cmake/ConversionTests.c
@@ -2,13 +2,13 @@
int main(void)
{
- float f = 2147483648.0f;
- int i;
+ float f = 2147483648.0f;
+ int i;
- i = (int)f;
+ i = (int)f;
- done:
- exit(0);
+done:
+ exit(0);
}
#endif
@@ -17,19 +17,19 @@ int main(void)
int main(void)
{
- float f = 111.60f;
- double d = 222.55L;
- unsigned long long l1 = (unsigned long long)f;
- unsigned long long l2 = (unsigned long long)d;
- int ret = 0;
-
- if(l1 == 112)
- ret = 1;
- if(l2 == 223)
- ret = 1;
-
- done:
- exit(ret);
+ float f = 111.60f;
+ double d = 222.55L;
+ unsigned long long l1 = (unsigned long long)f;
+ unsigned long long l2 = (unsigned long long)d;
+ int ret = 0;
+
+ if(l1 == 112)
+ ret = 1;
+ if(l2 == 223)
+ ret = 1;
+
+done:
+ exit(ret);
}
#endif
@@ -37,50 +37,55 @@ int main(void)
#ifdef H5_FP_TO_ULLONG_RIGHT_MAXIMUM_TEST
int main(void)
{
- float f = 9701917572145405952.00f;
- double d1 = 9701917572145405952.00L;
- long double d2 = 9701917572145405952.00L;
- double d3 = 2e40L;
- unsigned long long l1 = (unsigned long long)f;
- unsigned long long l2 = (unsigned long long)d1;
- unsigned long long l3 = (unsigned long long)d2;
- unsigned long long l4;
- unsigned long long l5 = 0x7fffffffffffffffULL;
- int ret = 0;
-
- if(l1 <= l5 || l2 <= l5 || l3 <= l5)
- ret = 1;
-
- l4 = (unsigned long long)d3;
- if(l4 <= l5)
- ret = 1;
-
- done:
- exit(ret);
+ float f = 9701917572145405952.00f;
+ double d1 = 9701917572145405952.00L;
+ long double d2 = 9701917572145405952.00L;
+ double d3 = 2e40L;
+ unsigned long long l1 = (unsigned long long)f;
+ unsigned long long l2 = (unsigned long long)d1;
+ unsigned long long l3 = (unsigned long long)d2;
+ unsigned long long l4;
+ unsigned long long l5 = 0x7fffffffffffffffULL;
+ int ret = 0;
+
+ if(l1 <= l5 || l2 <= l5 || l3 <= l5)
+ ret = 1;
+
+ l4 = (unsigned long long)d3;
+ if(l4 <= l5)
+ ret = 1;
+
+done:
+ exit(ret);
}
#endif
#ifdef H5_LDOUBLE_TO_INTEGER_WORKS_TEST
+
+#include <stdlib.h>
+#include <string.h>
+
int main(void)
{
- void *align;
- long double ld = 9701917572145405952.00L;
- unsigned char v1;
- short v2;
- unsigned int v3;
- int ret = 0;
-
- align = (void*) malloc(sizeof(long double));
- memcpy(align, &ld, sizeof(long double));
-
- /*For HU-UX11.00, there's floating exception(core dump) when doing some of casting
- *from 'long double' to integers*/
- v1 = (unsigned char) (*((long double*) align));
- v2 = (short) (*((long double*) align));
- v3 = (unsigned int) (*((long double*) align));
-
- done: exit(ret);
+ void *align;
+ long double ld= 9701917572145405952.00L;
+ unsigned char v1;
+ short v2;
+ unsigned int v3;
+ int ret = 0;
+
+ align = (void*)malloc(sizeof(long double));
+ memcpy(align, &ld, sizeof(long double));
+
+ /*For HU-UX11.00, there's floating exception(core dump) when doing some of casting
+ *from 'long double' to integers*/
+ v1=(unsigned char)(*((long double*)align));
+ v2=(short)(*((long double*)align));
+ v3=(unsigned int)(*((long double*)align));
+
+done:
+ exit(ret);
}
#endif
@@ -88,103 +93,98 @@ int main(void)
#ifdef H5_LDOUBLE_TO_LLONG_ACCURATE_TEST
int main(void)
{
- long double ld = 20041683600089727.779961L;
- long long ll;
- unsigned long long ull;
- unsigned char s[16];
- int ret = 0;
-
- if(sizeof(long double) == 16)
- {
- /*make sure the long double type is the same as the failing type
- *which has 16 bytes in size and 11 bits of exponent. If it is,
- *the bit sequence should be like below. It's not
- *a decent way to check but this info isn't available. */
- memcpy(s, &ld, 16);
- if(s[0]==0x43 && s[1]==0x51 && s[2]==0xcc && s[3]==0xf3 &&
- s[4]==0x85 && s[5]==0xeb && s[6]==0xc8 && s[7]==0xa0 &&
- s[8]==0xbf && s[9]==0xcc && s[10]==0x2a && s[11]==0x3c)
- {
-
- /*slightly adjust the bit sequence (s[8]=0xdf). The converted
- *values will go wild on Mac OS 10.4 and IRIX64 6.5.*/
- s[0]=0x43; s[1]=0x51; s[2]=0xcc; s[3]=0xf3;
- s[4]=0x85; s[5]=0xeb; s[6]=0xc8; s[7]=0xa0;
- s[8]=0xdf; s[9]=0xcc; s[10]=0x2a; s[11]=0x3c;
- s[12]=0x3d; s[13]=0x85; s[14]=0x56; s[15]=0x20;
-
- memcpy(&ld, s, 16);
- ll = (long long)ld;
- ull = (unsigned long long)ld;
-
- if(ll != 20041683600089728 || ull != 20041683600089728)
- ret = 1;
+ long double ld = 20041683600089727.779961L;
+ long long ll;
+ unsigned long long ull;
+ unsigned char s[16];
+ int ret = 0;
+
+ if(sizeof(long double) == 16) {
+ /*make sure the long double type is the same as the failing type
+ *which has 16 bytes in size and 11 bits of exponent. If it is,
+ *the bit sequence should be like below. It's not
+ *a decent way to check but this info isn't available. */
+ memcpy(s, &ld, 16);
+ if(s[0]==0x43 && s[1]==0x51 && s[2]==0xcc && s[3]==0xf3 &&
+ s[4]==0x85 && s[5]==0xeb && s[6]==0xc8 && s[7]==0xa0 &&
+ s[8]==0xbf && s[9]==0xcc && s[10]==0x2a && s[11]==0x3c) {
+
+ /*slightly adjust the bit sequence (s[8]=0xdf). The converted
+ *values will go wild on Mac OS 10.4 and IRIX64 6.5.*/
+ s[0]=0x43; s[1]=0x51; s[2]=0xcc; s[3]=0xf3;
+ s[4]=0x85; s[5]=0xeb; s[6]=0xc8; s[7]=0xa0;
+ s[8]=0xdf; s[9]=0xcc; s[10]=0x2a; s[11]=0x3c;
+ s[12]=0x3d; s[13]=0x85; s[14]=0x56; s[15]=0x20;
+
+ memcpy(&ld, s, 16);
+ ll = (long long)ld;
+ ull = (unsigned long long)ld;
+
+ if(ll != 20041683600089728 || ull != 20041683600089728)
+ ret = 1;
+ }
}
- }
- done:
- exit(ret);
+done:
+ exit(ret);
}
#endif
#ifdef H5_LDOUBLE_TO_UINT_ACCURATE_TEST
int main(void)
{
- long double ld = 2733248032.9183987530L;
- unsigned int i;
- int ret = 0;
+ long double ld = 2733248032.9183987530L;
+ unsigned int i;
+ int ret = 0;
- i = (unsigned int)ld;
- if(i!=2733248032 && i!=2733248031 && i!=2733248033)
- ret = 1;
+ i = (unsigned int)ld;
+ if(i!=2733248032 && i!=2733248031 && i!=2733248033)
+ ret = 1;
- done:
- exit(ret);
+done:
+ exit(ret);
}
#endif
#ifdef H5_LLONG_TO_LDOUBLE_CORRECT_TEST
int main(void)
{
- long double ld;
- long long ll;
- unsigned long long ull;
- unsigned char s[16];
- int flag=0, ret=0;
-
- /*Determine if long double has 16 byte in size, 11 bit exponent, and
- *the bias is 0x3ff */
- if(sizeof(long double) == 16)
- {
- ld = 1.0L;
- memcpy(s, &ld, 16);
- if(s[0]==0x3f && s[1]==0xf0 && s[2]==0x00 && s[3]==0x00 &&
- s[4]==0x00 && s[5]==0x00 && s[6]==0x00 && s[7]==0x00)
- flag = 1;
- }
-
- if(flag==1 && sizeof(long long)==8)
- {
- ll = 0x01ffffffffffffffLL;
- ld = (long double)ll;
- memcpy(s, &ld, 16);
- /*Check if the bit sequence is as supposed to be*/
- if(s[0]!=0x43 || s[1]!=0x7f || s[2]!=0xff || s[3]!=0xff ||
- s[4]!=0xff || s[5]!=0xff || s[6]!=0xff || s[7]!=0xff ||
- s[8]!=0xf0 || s[9]!=0x00 || s[10]!=0x00 || s[11]!=0x00)
- ret = 1;
- }
- if(flag==1 && sizeof(unsigned long long)==8)
- {
- ull = 0x01ffffffffffffffULL;
- ld = (long double)ull;
- memcpy(s, &ld, 16);
- if(s[0]!=0x43 || s[1]!=0x7f || s[2]!=0xff || s[3]!=0xff ||
- s[4]!=0xff || s[5]!=0xff || s[6]!=0xff || s[7]!=0xff ||
- s[8]!=0xf0 || s[9]!=0x00 || s[10]!=0x00 || s[11]!=0x00)
- ret = 1;
- }
- done:
- exit(ret);
+ long double ld;
+ long long ll;
+ unsigned long long ull;
+ unsigned char s[16];
+ int flag=0, ret=0;
+
+ /*Determine if long double has 16 byte in size, 11 bit exponent, and
+ *the bias is 0x3ff */
+ if(sizeof(long double) == 16) {
+ ld = 1.0L;
+ memcpy(s, &ld, 16);
+ if(s[0]==0x3f && s[1]==0xf0 && s[2]==0x00 && s[3]==0x00 &&
+ s[4]==0x00 && s[5]==0x00 && s[6]==0x00 && s[7]==0x00)
+ flag = 1;
+ }
+
+ if(flag==1 && sizeof(long long)==8) {
+ ll = 0x01ffffffffffffffLL;
+ ld = (long double)ll;
+ memcpy(s, &ld, 16);
+ /*Check if the bit sequence is as supposed to be*/
+ if(s[0]!=0x43 || s[1]!=0x7f || s[2]!=0xff || s[3]!=0xff ||
+ s[4]!=0xff || s[5]!=0xff || s[6]!=0xff || s[7]!=0xff ||
+ s[8]!=0xf0 || s[9]!=0x00 || s[10]!=0x00 || s[11]!=0x00)
+ ret = 1;
+ }
+ if(flag==1 && sizeof(unsigned long long)==8) {
+ ull = 0x01ffffffffffffffULL;
+ ld = (long double)ull;
+ memcpy(s, &ld, 16);
+ if(s[0]!=0x43 || s[1]!=0x7f || s[2]!=0xff || s[3]!=0xff ||
+ s[4]!=0xff || s[5]!=0xff || s[6]!=0xff || s[7]!=0xff ||
+ s[8]!=0xf0 || s[9]!=0x00 || s[10]!=0x00 || s[11]!=0x00)
+ ret = 1;
+ }
+done:
+ exit(ret);
}
#endif
@@ -193,11 +193,10 @@ int main(void)
#include <stdlib.h>
#include <string.h>
-typedef struct
-{
- size_t len;
- void *p;
-}hvl_t;
+typedef struct {
+ size_t len;
+ void *p;
+} hvl_t;
#ifdef FC_DUMMY_MAIN
#ifndef FC_DUMMY_MAIN_EQ_F77
@@ -212,32 +211,29 @@ int
main ()
{
- char *chp = "beefs";
- char **chpp = malloc (2 * sizeof (char *));
- char **chpp2;
- hvl_t vl =
- { 12345, (void *) chp};
- hvl_t *vlp;
- hvl_t *vlp2;
-
- memcpy ((void *) ((char *) chpp + 1), &chp, sizeof (char *));
- chpp2 = (char **) ((char *) chpp + 1);
- if (strcmp (*chpp2, chp))
- {
+ char *chp = "beefs";
+ char **chpp = malloc (2 * sizeof (char *));
+ char **chpp2;
+ hvl_t vl = { 12345, (void *) chp };
+ hvl_t *vlp;
+ hvl_t *vlp2;
+
+ memcpy ((void *) ((char *) chpp + 1), &chp, sizeof (char *));
+ chpp2 = (char **) ((char *) chpp + 1);
+ if (strcmp (*chpp2, chp)) {
+ free (chpp);
+ return 1;
+ }
free (chpp);
- return 1;
- }
- free (chpp);
-
- vlp = malloc (2 * sizeof (hvl_t));
- memcpy ((void *) ((char *) vlp + 1), &vl, sizeof (hvl_t));
- vlp2 = (hvl_t *) ((char *) vlp + 1);
- if (vlp2->len != vl.len || vlp2->p != vl.p)
- {
+
+ vlp = malloc (2 * sizeof (hvl_t));
+ memcpy ((void *) ((char *) vlp + 1), &vl, sizeof (hvl_t));
+ vlp2 = (hvl_t *) ((char *) vlp + 1);
+ if (vlp2->len != vl.len || vlp2->p != vl.p) {
+ free (vlp);
+ return 1;
+ }
free (vlp);
- return 1;
- }
- free (vlp);
;
return 0;
@@ -248,77 +244,78 @@ main ()
#ifdef H5_ULLONG_TO_LDOUBLE_PRECISION_TEST
#include <stddef.h>
-
+#include <stdlib.h>
+#include <string.h>
int main(void)
{
- /* General variables */
- int endian;
- int tst_value = 1;
- int ret = 0;
-
- /* For FreeBSD */
- unsigned long long l = 0xa601e80bda85fcefULL;
- long double ld;
- unsigned char *c1, *c2;
- size_t size;
-
- /* For Cygwin */
- unsigned long long l_cyg = 0xfffffffffffffff0ULL;
- long double ld_cyg;
- unsigned char *c2_cyg;
- size_t size_cyg;
-
- /* Determine this system's endianess */
- c1 = (unsigned char*)calloc(1, sizeof(int));
- memcpy((void*)c1, &tst_value, sizeof(int));
- if(c1[0]==1)
- endian = 0; /* little endian */
- else
- endian = 1; /* big endian */
-
- /* For FreeBSD */
- size = sizeof(long double);
- memset(&ld, 0, size);
- ld = (long double)l;
-
- c2 = (unsigned char*)calloc(1, size);
- memcpy((void*)c2, &ld, size);
-
- /* Test if the last 2 bytes of mantissa are lost. Mainly for FreeBSD on Intel
- * architecture(sleipnir) where it happens. */
- /*if(endian==0 && c2[0]==0 && c2[1]==0)*//*little endian*/
- if(endian==0 && c2[0]==0)
- { /*little endian*/
- ret = 1;
- goto done;
- }
-
- /* For Cygwin */
- size_cyg = sizeof(long double);
- memset(&ld_cyg, 0, size);
- ld_cyg = (long double)l_cyg;
-
- c2_cyg = (unsigned char*)calloc(1, size_cyg);
- memcpy((void*)c2_cyg, &ld_cyg, size_cyg);
-
- /* Test if the last 4 bytes(roughly) of mantissa are rounded up. Mainly for Cygwin
- * where the values like 0xffffffffffffffff, 0xfffffffffffffffe, ...,
- * 0xfffffffffffff000 ... are rounded up as 0x0000403f8000000000000000
- * instead of 0x0000403effffffffffffffff, 0x0000403efffffffffffffffe, ...,
- * 0x0000403efffffffffffff000 ...
- */
- if(endian==0 && c2_cyg[0]==0 && c2_cyg[1]==0 && c2_cyg[2]==0 && c2_cyg[3]==0)
- ret = 1;
-
- done:
- if(c1)
- free(c1);
- if(c2)
- free(c2);
- if(c2_cyg)
- free(c2_cyg);
- exit(ret);
+ /* General variables */
+ int endian;
+ int tst_value = 1;
+ int ret = 0;
+
+ /* For FreeBSD */
+ unsigned long long l = 0xa601e80bda85fcefULL;
+ long double ld;
+ unsigned char *c1, *c2;
+ size_t size;
+
+ /* For Cygwin */
+ unsigned long long l_cyg = 0xfffffffffffffff0ULL;
+ long double ld_cyg;
+ unsigned char *c2_cyg;
+ size_t size_cyg;
+
+
+ /* Determine this system's endianess */
+ c1 = (unsigned char*)calloc(1, sizeof(int));
+ memcpy((void*)c1, &tst_value, sizeof(int));
+ if(c1[0]==1)
+ endian = 0; /* little endian */
+ else
+ endian = 1; /* big endian */
+
+ /* For FreeBSD */
+ size = sizeof(long double);
+ memset(&ld, 0, size);
+ ld = (long double)l;
+
+ c2 = (unsigned char*)calloc(1, size);
+ memcpy((void*)c2, &ld, size);
+
+ /* Test if the last 2 bytes of mantissa are lost. Mainly for FreeBSD on Intel
+ * architecture(sleipnir) where it happens. */
+ /*if(endian==0 && c2[0]==0 && c2[1]==0)*/ /*little endian*/
+ if(endian==0 && c2[0]==0) { /*little endian*/
+ ret = 1;
+ goto done;
+ }
+
+ /* For Cygwin */
+ size_cyg = sizeof(long double);
+ memset(&ld_cyg, 0, size);
+ ld_cyg = (long double)l_cyg;
+
+ c2_cyg = (unsigned char*)calloc(1, size_cyg);
+ memcpy((void*)c2_cyg, &ld_cyg, size_cyg);
+
+ /* Test if the last 4 bytes(roughly) of mantissa are rounded up. Mainly for Cygwin
+ * where the values like 0xffffffffffffffff, 0xfffffffffffffffe, ...,
+ * 0xfffffffffffff000 ... are rounded up as 0x0000403f8000000000000000
+ * instead of 0x0000403effffffffffffffff, 0x0000403efffffffffffffffe, ...,
+ * 0x0000403efffffffffffff000 ...
+ */
+ if(endian==0 && c2_cyg[0]==0 && c2_cyg[1]==0 && c2_cyg[2]==0 && c2_cyg[3]==0)
+ ret = 1;
+
+done:
+ if(c1)
+ free(c1);
+ if(c2)
+ free(c2);
+ if(c2_cyg)
+ free(c2_cyg);
+ exit(ret);
}
#endif
@@ -419,4 +416,5 @@ int main(void)
done:
exit(ret);
}
+}
#endif
diff --git a/config/cmake/FindHDF5.cmake.in b/config/cmake/FindHDF5.cmake.in
index 0ac8bc9..fbc49f1 100644
--- a/config/cmake/FindHDF5.cmake.in
+++ b/config/cmake/FindHDF5.cmake.in
@@ -1,86 +1,86 @@
-#
-# To be used by projects that make use of Cmakeified hdf5- at HDF5_PACKAGE_VERSION@
-#
-
-#
-# Find the HDF5 includes and get all installed hdf5 library settings from
-# HDF5-config.cmake file : Requires a CMake compatible hdf5-1.8.5 or later
-# for this feature to work. The following vars are set if hdf5 is found.
-#
-# HDF5_FOUND - True if found, otherwise all other vars are undefined
-# HDF5_INCLUDE_DIR - The include dir for main *.h files
-# HDF5_FORTRAN_INCLUDE_DIR - The include dir for fortran modules and headers
-# HDF5_VERSION_STRING - full version (e.g. @HDF5_PACKAGE_VERSION@)
-# HDF5_VERSION_MAJOR - major part of version (e.g. @HDF5_PACKAGE_VERSION_MAJOR@)
-# HDF5_VERSION_MINOR - minor part (e.g. @HDF5_PACKAGE_VERSION_MINOR@)
-#
-# The following boolean vars will be defined
-# HDF5_ENABLE_PARALLEL - 1 if HDF5 parallel supported
-# HDF5_BUILD_FORTRAN - 1 if HDF5 was compiled with fortran on
-# HDF5_BUILD_CPP_LIB - 1 if HDF5 was compiled with cpp on
-# HDF5_BUILD_TOOLS - 1 if HDF5 was compiled with tools on
-# HDF5_BUILD_HL_LIB - 1 if HDF5 was compiled with high level on
-# HDF5_BUILD_HL_CPP_LIB - 1 if HDF5 was compiled with high level and cpp on
-#
-# Target names that are valid (depending on enabled options)
-# will be the following
-#
-# hdf5 : HDF5 C library
-# hdf5_tools : the tools library
-# hdf5_f90cstub : used by Fortran to C interface
-# hdf5_fortran : Fortran HDF5 library
-# hdf5_cpp : HDF5 cpp interface library
-# hdf5_hl : High Level library
-# hdf5_hl_f90cstub : used by Fortran to C interface to High Level library
-# hdf5_hl_fortran : Fortran High Level library
-# hdf5_hl_cpp : High Level cpp interface library
-#
-# To aid in finding HDF5 as part of a subproject set
-# HDF5_ROOT_DIR_HINT to the location where @HDF5_PACKAGE@@HDF_PACKAGE_EXT at -config.cmake lies
-
-include (SelectLibraryConfigurations)
-include (FindPackageHandleStandardArgs)
-
-# The HINTS option should only be used for values computed from the system.
-set (_HDF5_HINTS
- $ENV{HOME}/.local
- $ENV{HDF5_ROOT}
- $ENV{HDF5_ROOT_DIR_HINT}
-)
-# Hard-coded guesses should still go in PATHS. This ensures that the user
-# environment can always override hard guesses.
-set (_HDF5_PATHS
- $ENV{HOME}/.local
- $ENV{HDF5_ROOT}
- $ENV{HDF5_ROOT_DIR_HINT}
- /usr/lib/@HDF5_PACKAGE@
- /usr/share/@HDF5_PACKAGE@
- /usr/local/@HDF5_PACKAGE@
- /usr/local/@HDF5_PACKAGE@/share
-)
-
-FIND_PATH (HDF5_ROOT_DIR "@HDF5_PACKAGE@@HDF_PACKAGE_EXT at -config.cmake"
- HINTS ${_HDF5_HINTS}
- PATHS ${_HDF5_PATHS}
- PATH_SUFFIXES
- cmake/@HDF5_PACKAGE@
- lib/cmake/@HDF5_PACKAGE@
- share/cmake/@HDF5_PACKAGE@
-)
-
-FIND_PATH (HDF5_INCLUDE_DIRS "H5public.h"
- HINTS ${_HDF5_HINTS}
- PATHS ${_HDF5_PATHS}
- PATH_SUFFIXES
- include
- Include
-)
-
-# For backwards compatibility we set HDF5_INCLUDE_DIR to the value of
-# HDF5_INCLUDE_DIRS
-set ( HDF5_INCLUDE_DIR "${HDF5_INCLUDE_DIRS}" )
-
-if (HDF5_INCLUDE_DIR)
- set (HDF5_FOUND "YES")
- include (${HDF5_ROOT_DIR}/@HDF5_PACKAGE@@HDF_PACKAGE_EXT at -config.cmake)
-endif (HDF5_INCLUDE_DIR)
+#
+# To be used by projects that make use of Cmakeified hdf5- at HDF5_PACKAGE_VERSION@
+#
+
+#
+# Find the HDF5 includes and get all installed hdf5 library settings from
+# HDF5-config.cmake file : Requires a CMake compatible hdf5-1.8.5 or later
+# for this feature to work. The following vars are set if hdf5 is found.
+#
+# HDF5_FOUND - True if found, otherwise all other vars are undefined
+# HDF5_INCLUDE_DIR - The include dir for main *.h files
+# HDF5_FORTRAN_INCLUDE_DIR - The include dir for fortran modules and headers
+# HDF5_VERSION_STRING - full version (e.g. @HDF5_PACKAGE_VERSION@)
+# HDF5_VERSION_MAJOR - major part of version (e.g. @HDF5_PACKAGE_VERSION_MAJOR@)
+# HDF5_VERSION_MINOR - minor part (e.g. @HDF5_PACKAGE_VERSION_MINOR@)
+#
+# The following boolean vars will be defined
+# HDF5_ENABLE_PARALLEL - 1 if HDF5 parallel supported
+# HDF5_BUILD_FORTRAN - 1 if HDF5 was compiled with fortran on
+# HDF5_BUILD_CPP_LIB - 1 if HDF5 was compiled with cpp on
+# HDF5_BUILD_TOOLS - 1 if HDF5 was compiled with tools on
+# HDF5_BUILD_HL_LIB - 1 if HDF5 was compiled with high level on
+# HDF5_BUILD_HL_CPP_LIB - 1 if HDF5 was compiled with high level and cpp on
+#
+# Target names that are valid (depending on enabled options)
+# will be the following
+#
+# hdf5 : HDF5 C library
+# hdf5_tools : the tools library
+# hdf5_f90cstub : used by Fortran to C interface
+# hdf5_fortran : Fortran HDF5 library
+# hdf5_cpp : HDF5 cpp interface library
+# hdf5_hl : High Level library
+# hdf5_hl_f90cstub : used by Fortran to C interface to High Level library
+# hdf5_hl_fortran : Fortran High Level library
+# hdf5_hl_cpp : High Level cpp interface library
+#
+# To aid in finding HDF5 as part of a subproject set
+# HDF5_ROOT_DIR_HINT to the location where @HDF5_PACKAGE@@HDF_PACKAGE_EXT at -config.cmake lies
+
+include (SelectLibraryConfigurations)
+include (FindPackageHandleStandardArgs)
+
+# The HINTS option should only be used for values computed from the system.
+set (_HDF5_HINTS
+ $ENV{HOME}/.local
+ $ENV{HDF5_ROOT}
+ $ENV{HDF5_ROOT_DIR_HINT}
+)
+# Hard-coded guesses should still go in PATHS. This ensures that the user
+# environment can always override hard guesses.
+set (_HDF5_PATHS
+ $ENV{HOME}/.local
+ $ENV{HDF5_ROOT}
+ $ENV{HDF5_ROOT_DIR_HINT}
+ /usr/lib/@HDF5_PACKAGE@
+ /usr/share/@HDF5_PACKAGE@
+ /usr/local/@HDF5_PACKAGE@
+ /usr/local/@HDF5_PACKAGE@/share
+)
+
+FIND_PATH (HDF5_ROOT_DIR "@HDF5_PACKAGE@@HDF_PACKAGE_EXT at -config.cmake"
+ HINTS ${_HDF5_HINTS}
+ PATHS ${_HDF5_PATHS}
+ PATH_SUFFIXES
+ cmake/@HDF5_PACKAGE@
+ lib/cmake/@HDF5_PACKAGE@
+ share/cmake/@HDF5_PACKAGE@
+)
+
+FIND_PATH (HDF5_INCLUDE_DIRS "H5public.h"
+ HINTS ${_HDF5_HINTS}
+ PATHS ${_HDF5_PATHS}
+ PATH_SUFFIXES
+ include
+ Include
+)
+
+# For backwards compatibility we set HDF5_INCLUDE_DIR to the value of
+# HDF5_INCLUDE_DIRS
+set ( HDF5_INCLUDE_DIR "${HDF5_INCLUDE_DIRS}" )
+
+if (HDF5_INCLUDE_DIR)
+ set (HDF5_FOUND "YES")
+ include (${HDF5_ROOT_DIR}/@HDF5_PACKAGE@@HDF_PACKAGE_EXT at -config.cmake)
+endif (HDF5_INCLUDE_DIR)
diff --git a/config/cmake/H5pubconf.h.in b/config/cmake/H5pubconf.h.in
index 9f5206d..79c6c1a 100644
--- a/config/cmake/H5pubconf.h.in
+++ b/config/cmake/H5pubconf.h.in
@@ -91,6 +91,9 @@
/* Define to 1 if you have the `alarm' function. */
#cmakedefine H5_HAVE_ALARM @H5_HAVE_ALARM@
+/* Define to 1 if you have the `asprintf' function. */
+#cmakedefine H5_HAVE_ASPRINTF @H5_HAVE_ASPRINTF@
+
/* Define if the __attribute__(()) extension is present */
#cmakedefine H5_HAVE_ATTRIBUTE @H5_HAVE_ATTRIBUTE@
@@ -289,9 +292,6 @@
/* Define to 1 if you have the <mpe.h> header file. */
#cmakedefine H5_HAVE_MPE_H @H5_HAVE_MPE_H@
-/* Define if MPI_File_get_size works correctly */
-#cmakedefine H5_HAVE_MPI_GET_SIZE @H5_HAVE_MPI_GET_SIZE@
-
/* Define if `MPI_Comm_c2f' and `MPI_Comm_f2c' exists */
#cmakedefine H5_HAVE_MPI_MULTI_LANG_Comm @H5_HAVE_MPI_MULTI_LANG_Comm@
@@ -313,7 +313,7 @@
/* Define to 1 if you have the `rand_r' function. */
#cmakedefine H5_HAVE_RAND_R @H5_HAVE_RAND_R@
-/* Define to 1 if you have the `sigsetjmp' function. */
+/* Define to 1 if you have the `setjmp' function. */
#cmakedefine H5_HAVE_SETJMP @H5_HAVE_SETJMP@
/* Define to 1 if you have the <setjmp.h> header file. */
@@ -453,6 +453,9 @@
/* Define to 1 if you have the <unistd.h> header file. */
#cmakedefine H5_HAVE_UNISTD_H @H5_HAVE_UNISTD_H@
+/* Define to 1 if you have the `asprintf' function. */
+#cmakedefine H5_HAVE_ASPRINTF @H5_HAVE_ASPRINTF@
+
/* Define to 1 if you have the `vasprintf' function. */
#cmakedefine H5_HAVE_VASPRINTF @H5_HAVE_VASPRINTF@
@@ -527,10 +530,6 @@
/* Define if the metadata trace file code is to be compiled in */
#cmakedefine H5_METADATA_TRACE_FILE @H5_METADATA_TRACE_FILE@
-/* Define if your system's `MPI_File_set_size' function works for files over
- 2GB. */
-#cmakedefine H5_MPI_FILE_SET_SIZE_BIG @H5_MPI_FILE_SET_SIZE_BIG@
-
/* Define if we can violate pointer alignment restrictions */
#cmakedefine H5_NO_ALIGNMENT_RESTRICTIONS @H5_NO_ALIGNMENT_RESTRICTIONS@
diff --git a/config/cmake/HDF518_Examples.cmake.in b/config/cmake/HDF518_Examples.cmake.in
index 075920e..48c2b56 100644
--- a/config/cmake/HDF518_Examples.cmake.in
+++ b/config/cmake/HDF518_Examples.cmake.in
@@ -1,119 +1,116 @@
-cmake_minimum_required(VERSION 2.8.10 FATAL_ERROR)
-###############################################################################################################
-# This script will build and run the examples from a compressed file
-# Execute from a command line:
-# ctest -S HDF518_Examples.cmake,HDF5Examples-0.1.1-Source -C Release -O test.log
-###############################################################################################################
-
-set(INSTALLDIR "@CMAKE_INSTALL_PREFIX@")
-set(CTEST_CMAKE_GENERATOR "@CMAKE_GENERATOR@")
-set(STATICLIBRARIES "@H5_ENABLE_STATIC_LIB@")
-set(CTEST_SOURCE_NAME ${CTEST_SCRIPT_ARG})
-set(CTEST_DASHBOARD_ROOT ${CTEST_SCRIPT_DIRECTORY})
-set(CTEST_BUILD_CONFIGURATION "Release")
-#set(NO_MAC_FORTRAN "true")
-#set(BUILD_OPTIONS ""${BUILD_OPTIONS} -DHDF_BUILD_FORTRAN:BOOL=OFF")
-#set(BUILD_OPTIONS "${BUILD_OPTIONS} -DHDF_ENABLE_F2003:BOOL=ON)
-
-###############################################################################################################
-# Adjust the following SET Commands as needed
-###############################################################################################################
-if(WIN32)
- if(STATICLIBRARIES)
- set(BUILD_OPTIONS "${BUILD_OPTIONS} -DUSE_SHARED_LIBS:BOOL=OFF")
- endif(STATICLIBRARIES)
- set(ENV{HDF5_DIR} "${INSTALLDIR}/cmake/hdf5")
- set(CTEST_BINARY_NAME ${CTEST_SOURCE_NAME}\\build)
- set(CTEST_SOURCE_DIRECTORY "${CTEST_DASHBOARD_ROOT}\\${CTEST_SOURCE_NAME}")
- set(CTEST_BINARY_DIRECTORY "${CTEST_DASHBOARD_ROOT}\\${CTEST_BINARY_NAME}")
-else(WIN32)
- if(STATICLIBRARIES)
- set(BUILD_OPTIONS "${BUILD_OPTIONS} -DUSE_SHARED_LIBS:BOOL=OFF -DCMAKE_ANSI_CFLAGS:STRING=-fPIC")
- endif(STATICLIBRARIES)
- set(ENV{HDF5_DIR} "${INSTALLDIR}/share/cmake/hdf5")
- set(ENV{LD_LIBRARY_PATH} "${INSTALLDIR}/lib")
- set(CTEST_BINARY_NAME ${CTEST_SOURCE_NAME}/build)
- set(CTEST_SOURCE_DIRECTORY "${CTEST_DASHBOARD_ROOT}/${CTEST_SOURCE_NAME}")
- set(CTEST_BINARY_DIRECTORY "${CTEST_DASHBOARD_ROOT}/${CTEST_BINARY_NAME}")
-endif(WIN32)
-
-###############################################################################################################
-# For any comments please contact cdashhelp at hdfgroup.org
-#
-###############################################################################################################
-
-#-----------------------------------------------------------------------------
-# MAC machines need special option
-#-----------------------------------------------------------------------------
-if(APPLE)
- # Compiler choice
- execute_process(COMMAND xcrun --find cc OUTPUT_VARIABLE XCODE_CC OUTPUT_STRIP_TRAILING_WHITESPACE)
- execute_process(COMMAND xcrun --find c++ OUTPUT_VARIABLE XCODE_CXX OUTPUT_STRIP_TRAILING_WHITESPACE)
- set(ENV{CC} "${XCODE_CC}")
- set(ENV{CXX} "${XCODE_CXX}")
- if(NOT NO_MAC_FORTRAN)
- # Shared fortran is not supported, build static
- set(BUILD_OPTIONS "${BUILD_OPTIONS} -DBUILD_SHARED_LIBS:BOOL=OFF -DCMAKE_ANSI_CFLAGS:STRING=-fPIC")
- else(NOT NO_MAC_FORTRAN)
- set(BUILD_OPTIONS "${BUILD_OPTIONS} -DHDF5_BUILD_FORTRAN:BOOL=OFF")
- endif(NOT NO_MAC_FORTRAN)
- set(BUILD_OPTIONS "${BUILD_OPTIONS} -DCTEST_USE_LAUNCHERS:BOOL=ON -DCMAKE_BUILD_WITH_INSTALL_RPATH:BOOL=OFF")
-endif(APPLE)
-
-#-----------------------------------------------------------------------------
-set(CTEST_CMAKE_COMMAND "\"${CMAKE_COMMAND}\"")
-## Uncompress source in tar file provided
-## --------------------------
-if(WIN32)
- set(CTEST_7Z_COMMAND "C:/Program Files/7-Zip/7z.exe")
- message("extracting... [${CTEST_7Z_COMMAND} x ${CTEST_SOURCE_NAME}.zip]")
- execute_process(COMMAND ${CTEST_7Z_COMMAND} x ${CTEST_SOURCE_NAME}.zip RESULT_VARIABLE rv)
-else(WIN32)
- message("extracting... [${CTEST_CMAKE_COMMAND} -E tar -xvf ${CTEST_SOURCE_NAME}.tar.gz]")
- execute_process(COMMAND tar -xvf ${CTEST_SOURCE_NAME}.tar.gz RESULT_VARIABLE rv)
-endif(WIN32)
-
-if(NOT rv EQUAL 0)
- message("extracting... [error-(${rv}) clean up]")
- file(REMOVE_RECURSE "${CTEST_SOURCE_DIRECTORY}")
- message(FATAL_ERROR "error: extract of ${CTEST_SOURCE_NAME} failed")
-endif(NOT rv EQUAL 0)
-
-#-----------------------------------------------------------------------------
-## Clear the build directory
-## --------------------------
-set(CTEST_START_WITH_EMPTY_BINARY_DIRECTORY TRUE)
-file(MAKE_DIRECTORY "${CTEST_BINARY_DIRECTORY}")
-ctest_empty_binary_directory(${CTEST_BINARY_DIRECTORY})
-
-# Use multiple CPU cores to build
-include(ProcessorCount)
-ProcessorCount(N)
-if(NOT N EQUAL 0)
- if(NOT WIN32)
- set(CTEST_BUILD_FLAGS -j${N})
- endif(NOT WIN32)
- set(ctest_test_args ${ctest_test_args} PARALLEL_LEVEL ${N})
-endif()
-set (CTEST_CONFIGURE_COMMAND
- "${CTEST_CMAKE_COMMAND} -C \"${CTEST_SOURCE_DIRECTORY}/config/cmake/cacheinit.cmake\" -DCMAKE_BUILD_TYPE:STRING=${CTEST_BUILD_CONFIGURATION} ${BUILD_OPTIONS} \"-G${CTEST_CMAKE_GENERATOR}\" \"${CTEST_SOURCE_DIRECTORY}\""
-)
-
-#-----------------------------------------------------------------------------
-## -- set output to english
-set($ENV{LC_MESSAGES} "en_EN")
-
-#-----------------------------------------------------------------------------
- ## NORMAL process
- ## --------------------------
- CTEST_START (Experimental)
- CTEST_CONFIGURE (BUILD "${CTEST_BINARY_DIRECTORY}")
- CTEST_READ_CUSTOM_FILES ("${CTEST_BINARY_DIRECTORY}")
- CTEST_BUILD (BUILD "${CTEST_BINARY_DIRECTORY}" APPEND)
- CTEST_TEST (BUILD "${CTEST_BINARY_DIRECTORY}" APPEND ${ctest_test_args} RETURN_VALUE res)
- if(res GREATER 0)
- message (FATAL_ERROR "tests FAILED")
- endif(res GREATER 0)
-#-----------------------------------------------------------------------------
-##############################################################################################################
+cmake_minimum_required(VERSION 2.8.10 FATAL_ERROR)
+###############################################################################################################
+# This script will build and run the examples from a compressed file
+# Execute from a command line:
+# ctest -S HDF518_Examples.cmake,HDF5Examples-0.1.1-Source -C Release -VV -O test.log
+###############################################################################################################
+
+set(INSTALLDIR "@CMAKE_INSTALL_PREFIX@")
+set(CTEST_CMAKE_GENERATOR "@CMAKE_GENERATOR@")
+set(STATICLIBRARIES "@H5_ENABLE_STATIC_LIB@")
+set(CTEST_SOURCE_NAME ${CTEST_SCRIPT_ARG})
+set(CTEST_DASHBOARD_ROOT ${CTEST_SCRIPT_DIRECTORY})
+set(CTEST_BUILD_CONFIGURATION "Release")
+#set(BUILD_OPTIONS ""${BUILD_OPTIONS} -DHDF_BUILD_FORTRAN:BOOL=ON")
+#set(BUILD_OPTIONS "${BUILD_OPTIONS} -DHDF_ENABLE_F2003:BOOL=ON)
+
+###############################################################################################################
+# Adjust the following SET Commands as needed
+###############################################################################################################
+if(WIN32)
+ if(STATICLIBRARIES)
+ set(BUILD_OPTIONS "${BUILD_OPTIONS} -DUSE_SHARED_LIBS:BOOL=OFF")
+ endif(STATICLIBRARIES)
+ set(ENV{HDF5_DIR} "${INSTALLDIR}/cmake/hdf5")
+ set(CTEST_BINARY_NAME ${CTEST_SOURCE_NAME}\\build)
+ set(CTEST_SOURCE_DIRECTORY "${CTEST_DASHBOARD_ROOT}\\${CTEST_SOURCE_NAME}")
+ set(CTEST_BINARY_DIRECTORY "${CTEST_DASHBOARD_ROOT}\\${CTEST_BINARY_NAME}")
+else(WIN32)
+ if(STATICLIBRARIES)
+ set(BUILD_OPTIONS "${BUILD_OPTIONS} -DUSE_SHARED_LIBS:BOOL=OFF -DCMAKE_ANSI_CFLAGS:STRING=-fPIC")
+ endif(STATICLIBRARIES)
+ set(ENV{HDF5_DIR} "${INSTALLDIR}/share/cmake/hdf5")
+ set(ENV{LD_LIBRARY_PATH} "${INSTALLDIR}/lib")
+ set(CTEST_BINARY_NAME ${CTEST_SOURCE_NAME}/build)
+ set(CTEST_SOURCE_DIRECTORY "${CTEST_DASHBOARD_ROOT}/${CTEST_SOURCE_NAME}")
+ set(CTEST_BINARY_DIRECTORY "${CTEST_DASHBOARD_ROOT}/${CTEST_BINARY_NAME}")
+endif(WIN32)
+
+###############################################################################################################
+# For any comments please contact cdashhelp at hdfgroup.org
+#
+###############################################################################################################
+
+#-----------------------------------------------------------------------------
+# MAC machines need special option
+#-----------------------------------------------------------------------------
+if(APPLE)
+ # Compiler choice
+ execute_process(COMMAND xcrun --find cc OUTPUT_VARIABLE XCODE_CC OUTPUT_STRIP_TRAILING_WHITESPACE)
+ execute_process(COMMAND xcrun --find c++ OUTPUT_VARIABLE XCODE_CXX OUTPUT_STRIP_TRAILING_WHITESPACE)
+ set(ENV{CC} "${XCODE_CC}")
+ set(ENV{CXX} "${XCODE_CXX}")
+ if(HDF_BUILD_FORTRAN AND BUILD_SHARED_LIBS)
+ message(FATAL_ERROR "error: Shared fortran is not supported, build static")
+ #set(BUILD_OPTIONS "${BUILD_OPTIONS} -DBUILD_SHARED_LIBS:BOOL=OFF -DCMAKE_ANSI_CFLAGS:STRING=-fPIC")
+ endif(HDF_BUILD_FORTRAN AND BUILD_SHARED_LIBS)
+ set(BUILD_OPTIONS "${BUILD_OPTIONS} -DCTEST_USE_LAUNCHERS:BOOL=ON -DCMAKE_BUILD_WITH_INSTALL_RPATH:BOOL=OFF")
+endif(APPLE)
+
+#-----------------------------------------------------------------------------
+set(CTEST_CMAKE_COMMAND "\"${CMAKE_COMMAND}\"")
+## Uncompress source in tar file provided
+## --------------------------
+if(WIN32)
+ set(CTEST_7Z_COMMAND "C:/Program Files/7-Zip/7z.exe")
+ message("extracting... [${CTEST_7Z_COMMAND} x ${CTEST_SOURCE_NAME}.zip]")
+ execute_process(COMMAND ${CTEST_7Z_COMMAND} x ${CTEST_SOURCE_NAME}.zip RESULT_VARIABLE rv)
+else(WIN32)
+ message("extracting... [${CTEST_CMAKE_COMMAND} -E tar -xvf ${CTEST_SOURCE_NAME}.tar.gz]")
+ execute_process(COMMAND tar -xvf ${CTEST_SOURCE_NAME}.tar.gz RESULT_VARIABLE rv)
+endif(WIN32)
+
+if(NOT rv EQUAL 0)
+ message("extracting... [error-(${rv}) clean up]")
+ file(REMOVE_RECURSE "${CTEST_SOURCE_DIRECTORY}")
+ message(FATAL_ERROR "error: extract of ${CTEST_SOURCE_NAME} failed")
+endif(NOT rv EQUAL 0)
+
+#-----------------------------------------------------------------------------
+## Clear the build directory
+## --------------------------
+set(CTEST_START_WITH_EMPTY_BINARY_DIRECTORY TRUE)
+file(MAKE_DIRECTORY "${CTEST_BINARY_DIRECTORY}")
+ctest_empty_binary_directory(${CTEST_BINARY_DIRECTORY})
+
+# Use multiple CPU cores to build
+include(ProcessorCount)
+ProcessorCount(N)
+if(NOT N EQUAL 0)
+ if(NOT WIN32)
+ set(CTEST_BUILD_FLAGS -j${N})
+ endif(NOT WIN32)
+ set(ctest_test_args ${ctest_test_args} PARALLEL_LEVEL ${N})
+endif()
+set (CTEST_CONFIGURE_COMMAND
+ "${CTEST_CMAKE_COMMAND} -C \"${CTEST_SOURCE_DIRECTORY}/config/cmake/cacheinit.cmake\" -DCMAKE_BUILD_TYPE:STRING=${CTEST_BUILD_CONFIGURATION} ${BUILD_OPTIONS} \"-G${CTEST_CMAKE_GENERATOR}\" \"${CTEST_SOURCE_DIRECTORY}\""
+)
+
+#-----------------------------------------------------------------------------
+## -- set output to english
+set($ENV{LC_MESSAGES} "en_EN")
+
+#-----------------------------------------------------------------------------
+ ## NORMAL process
+ ## --------------------------
+ CTEST_START (Experimental)
+ CTEST_CONFIGURE (BUILD "${CTEST_BINARY_DIRECTORY}")
+ CTEST_READ_CUSTOM_FILES ("${CTEST_BINARY_DIRECTORY}")
+ CTEST_BUILD (BUILD "${CTEST_BINARY_DIRECTORY}" APPEND)
+ CTEST_TEST (BUILD "${CTEST_BINARY_DIRECTORY}" APPEND ${ctest_test_args} RETURN_VALUE res)
+ if(res GREATER 0)
+ message (FATAL_ERROR "tests FAILED")
+ endif(res GREATER 0)
+#-----------------------------------------------------------------------------
+##############################################################################################################
message("DONE")
\ No newline at end of file
diff --git a/config/cmake/HDF5Macros.cmake b/config/cmake/HDF5Macros.cmake
index d0379db..baa18c0 100644
--- a/config/cmake/HDF5Macros.cmake
+++ b/config/cmake/HDF5Macros.cmake
@@ -20,7 +20,7 @@ MACRO (H5_SET_LIB_OPTIONS libtarget libname libtype)
if (APPLE)
option (HDF5_BUILD_WITH_INSTALL_NAME "Build with library install_name set to the installation path" OFF)
if (HDF5_BUILD_WITH_INSTALL_NAME)
- SET_TARGET_PROPERTIES(${libtarget} PROPERTIES
+ set_target_properties (${libtarget} PROPERTIES
LINK_FLAGS "-current_version ${HDF5_PACKAGE_VERSION} -compatibility_version ${HDF5_PACKAGE_VERSION}"
INSTALL_NAME_DIR "${CMAKE_INSTALL_PREFIX}/lib"
BUILD_WITH_INSTALL_RPATH ${HDF5_BUILD_WITH_INSTALL_NAME}
diff --git a/config/cmake/README.txt.cmake.in b/config/cmake/README.txt.cmake.in
index 4d3ab3d..04a166c 100644
--- a/config/cmake/README.txt.cmake.in
+++ b/config/cmake/README.txt.cmake.in
@@ -1,53 +1,54 @@
- at HDF5_PACKAGE_NAME@ version @HDF5_PACKAGE_VERSION_STRING@
-------------------------------------------------------------------------------
-
-This directory contains the binary (release) distribution of
- at HDF5_PACKAGE_NAME@ @HDF5_PACKAGE_VERSION_MAJOR@ that was compiled on;
- @BINARY_PLATFORM at .
-
-It was built with the following options:
- -- @LIB_TYPE@ C/C++/Fortran libraries
- -- SZIP (encoder enabled) and ZLIB
- -- @LIB_TYPE@ HDF5 tools
-
-The contents of this directory are:
-
- COPYING - Copyright notice
- README.txt - This file
- @HDF5_PACKAGE_NAME at -@HDF5_PACKAGE_VERSION at -@BINARY_SYSTEM_NAME at .@BINARY_INSTALL_ENDING@ - HDF5 Install Package
-
-Installation
-===========================================================================
-1. Execute @HDF5_PACKAGE_NAME at -@HDF5_PACKAGE_VERSION at -@BINARY_SYSTEM_NAME at .@BINARY_INSTALL_ENDING@
-2. Follow prompts
-===========================================================================
-
-After Installation
-===========================================================================
-The compressed examples file HDF5Examples-0.1.1-Source. at BINARY_EXAMPLE_ENDING@, located in the
-HDF5 install folder, can be built and tested with CMake and the supplied
-HDF518_Examples.cmake file. The HDF518_Examples.cmake expects HDF5 to have
-been installed in the default location with above compilers.
-
-To test the installation with the examples;
- Create a directory to run the examples.
- Copy HDF5Examples-0.1.1-Source. at BINARY_EXAMPLE_ENDING@ to this directory, do NOT unzip.
- Copy HDF518_Examples.cmake to this directory.
- Edit HDF518_Examples.cmake line 8 to set INSTALLDIR to where HDF5 is installed.
- Execute from this directory:
- ctest -S HDF518_Examples.cmake,HDF5Examples-0.1.1-Source -C Release -O test.log
-
-When executed, the ctest script will save the results to the log file, test.log, as
-indicated by the ctest command. If you wish the to see more build and test information,
-add "-VV" to the ctest command.
-
-For more information see USING_CMake_Examples.txt in the install folder.
-===========================================================================
-
-Documentation for this release can be found at the following URL:
- http://www.hdfgroup.org/HDF5/doc/.
-
-See the HDF5 home page for further details:
- http://hdfgroup.org/HDF5/
-
-Bugs should be reported to help at hdfgroup.org.
+ at HDF5_PACKAGE_NAME@ version @HDF5_PACKAGE_VERSION_STRING@
+------------------------------------------------------------------------------
+
+This directory contains the binary (release) distribution of
+ at HDF5_PACKAGE_NAME@ @HDF5_PACKAGE_VERSION_MAJOR@ that was compiled on;
+ @BINARY_PLATFORM at .
+
+It was built with the following options:
+ -- @LIB_TYPE@ C/C++/Fortran libraries
+ -- SZIP (encoder enabled) and ZLIB
+ -- @LIB_TYPE@ HDF5 tools
+
+The contents of this directory are:
+
+ COPYING - Copyright notice
+ README.txt - This file
+ @HDF5_PACKAGE_NAME at -@HDF5_PACKAGE_VERSION at -@BINARY_SYSTEM_NAME at .@BINARY_INSTALL_ENDING@ - HDF5 Install Package
+
+Installation
+===========================================================================
+1. Execute @HDF5_PACKAGE_NAME at -@HDF5_PACKAGE_VERSION at -@BINARY_SYSTEM_NAME at .@BINARY_INSTALL_ENDING@
+2. Follow prompts
+===========================================================================
+
+After Installation
+===========================================================================
+The compressed examples file HDF5Examples-0.1.1-Source. at BINARY_EXAMPLE_ENDING@, located in the
+HDF5 install folder, can be built and tested with CMake and the supplied
+HDF518_Examples.cmake file. The HDF518_Examples.cmake expects HDF5 to have
+been installed in the default location with above compilers.
+
+To test the installation with the examples;
+ Create a directory to run the examples.
+ Copy HDF5Examples-0.1.1-Source. at BINARY_EXAMPLE_ENDING@ to this directory, do NOT unzip.
+ Copy HDF518_Examples.cmake to this directory.
+ Edit HDF518_Examples.cmake line 8 to set INSTALLDIR to where HDF5 is installed.
+ (The default should be correct unless you installed into a different folder.)
+ Execute from this directory:
+ ctest -S HDF518_Examples.cmake,HDF5Examples-0.1.1-Source -C Release -V -O test.log
+
+When executed, the ctest script will save the results to the log file, test.log, as
+indicated by the ctest command. If you wish the to see more build and test information,
+add "-VV" to the ctest command.
+
+For more information see USING_CMake_Examples.txt in the install folder.
+===========================================================================
+
+Documentation for this release can be found at the following URL:
+ http://www.hdfgroup.org/HDF5/doc/.
+
+See the HDF5 home page for further details:
+ http://hdfgroup.org/HDF5/
+
+Bugs should be reported to help at hdfgroup.org.
diff --git a/config/cmake/cacheinit.cmake b/config/cmake/cacheinit.cmake
index eb99f5d..5ec5568 100644
--- a/config/cmake/cacheinit.cmake
+++ b/config/cmake/cacheinit.cmake
@@ -1,76 +1,72 @@
-# This is the CMakeCache file.
-
-########################
-# EXTERNAL cache entries
-########################
-
-set (BUILD_SHARED_LIBS ON CACHE BOOL "Build Shared Libraries" FORCE)
-
-set (BUILD_TESTING ON CACHE BOOL "Build HDF5 Unit Testing" FORCE)
-
-set (HDF_PACKAGE_EXT "" CACHE STRING "Name of HDF package extension" FORCE)
-
-set (HDF5_BUILD_CPP_LIB ON CACHE BOOL "Build HDF5 C++ Library" FORCE)
-
-set (HDF5_BUILD_EXAMPLES ON CACHE BOOL "Build HDF5 Library Examples" FORCE)
-
-set (HDF5_BUILD_FORTRAN ON CACHE BOOL "Build FORTRAN support" FORCE)
-
-set (HDF5_ENABLE_F2003 OFF CACHE BOOL "Enable FORTRAN 2003 Standard" FORCE)
-
-set (HDF5_BUILD_HL_LIB ON CACHE BOOL "Build HIGH Level HDF5 Library" FORCE)
-
-set (HDF5_BUILD_TOOLS ON CACHE BOOL "Build HDF5 Tools" FORCE)
-
-set (HDF5_BUILD_GENERATORS OFF CACHE BOOL "Build Test Generators" FORCE)
-
-set (HDF5_ENABLE_Z_LIB_SUPPORT ON CACHE BOOL "Enable Zlib Filters" FORCE)
-
-set (HDF5_ENABLE_SZIP_SUPPORT ON CACHE BOOL "Use SZip Filter" FORCE)
-
-set (HDF5_ENABLE_SZIP_ENCODING ON CACHE BOOL "Use SZip Encoding" FORCE)
-
-set (HDF5_ENABLE_HSIZET ON CACHE BOOL "Enable datasets larger than memory" FORCE)
-
-set (HDF5_ENABLE_UNSUPPORTED OFF CACHE BOOL "Enable unsupported combinations of configuration options" FORCE)
-
-set (HDF5_ENABLE_DEPRECATED_SYMBOLS ON CACHE BOOL "Enable deprecated public API symbols" FORCE)
-
-set (HDF5_ENABLE_DIRECT_VFD OFF CACHE BOOL "Build the Direct I/O Virtual File Driver" FORCE)
-
-set (HDF5_ENABLE_PARALLEL OFF CACHE BOOL "Enable parallel build (requires MPI)" FORCE)
-
-set (MPIEXEC_MAX_NUMPROCS "3" CACHE STRING "Minimum number of processes for HDF parallel tests" FORCE)
-
-set (HDF5_BUILD_PARALLEL_ALL OFF CACHE BOOL "Build Parallel Programs" FORCE)
-
-set (HDF5_ENABLE_COVERAGE OFF CACHE BOOL "Enable code coverage for Libraries and Programs" FORCE)
-
-set (HDF5_ENABLE_USING_MEMCHECKER OFF CACHE BOOL "Indicate that a memory checker is used" FORCE)
-
-set (HDF5_DISABLE_COMPILER_WARNINGS OFF CACHE BOOL "Disable compiler warnings" FORCE)
-
-set (HDF5_USE_FOLDERS ON CACHE BOOL "Enable folder grouping of projects in IDEs." FORCE)
-
-set (HDF5_USE_16_API_DEFAULT OFF CACHE BOOL "Use the HDF5 1.6.x API by default" FORCE)
-
-set (HDF5_ENABLE_THREADSAFE OFF CACHE BOOL "(WINDOWS)Enable Threadsafety" FORCE)
-
-set (HDF5_PACKAGE_EXTLIBS OFF CACHE BOOL "(WINDOWS)CPACK - include external libraries" FORCE)
-
-set (HDF5_NO_PACKAGES OFF CACHE BOOL "CPACK - Disable packaging" FORCE)
-
-set (HDF5_ALLOW_EXTERNAL_SUPPORT "NO" CACHE STRING "Allow External Library Building (NO SVN TGZ)" FORCE)
-SET_PROPERTY(CACHE HDF5_ALLOW_EXTERNAL_SUPPORT PROPERTY STRINGS NO SVN TGZ)
-
-set (ZLIB_SVN_URL "http://svn.hdfgroup.uiuc.edu/zlib/trunk" CACHE STRING "Use ZLib from HDF repository" FORCE)
-
-set (SZIP_SVN_URL "http://svn.hdfgroup.uiuc.edu/szip/trunk" CACHE STRING "Use SZip from HDF repository" FORCE)
-
-set (ZLIB_TGZ_NAME "ZLib.tar.gz" CACHE STRING "Use ZLib from compressed file" FORCE)
-
-set (SZIP_TGZ_NAME "SZip.tar.gz" CACHE STRING "Use SZip from compressed file" FORCE)
-
-set (ZLIB_PACKAGE_NAME "zlib" CACHE STRING "Name of ZLIB package" FORCE)
-
-set (SZIP_PACKAGE_NAME "szip" CACHE STRING "Name of SZIP package" FORCE)
+# This is the CMakeCache file.
+
+########################
+# EXTERNAL cache entries
+########################
+
+set (BUILD_SHARED_LIBS ON CACHE BOOL "Build Shared Libraries" FORCE)
+
+set (BUILD_TESTING ON CACHE BOOL "Build HDF5 Unit Testing" FORCE)
+
+set (HDF_PACKAGE_EXT "" CACHE STRING "Name of HDF package extension" FORCE)
+
+set (HDF5_BUILD_CPP_LIB ON CACHE BOOL "Build HDF5 C++ Library" FORCE)
+
+set (HDF5_BUILD_EXAMPLES ON CACHE BOOL "Build HDF5 Library Examples" FORCE)
+
+set (HDF5_BUILD_FORTRAN ON CACHE BOOL "Build FORTRAN support" FORCE)
+
+set (HDF5_ENABLE_F2003 OFF CACHE BOOL "Enable FORTRAN 2003 Standard" FORCE)
+
+set (HDF5_BUILD_HL_LIB ON CACHE BOOL "Build HIGH Level HDF5 Library" FORCE)
+
+set (HDF5_BUILD_TOOLS ON CACHE BOOL "Build HDF5 Tools" FORCE)
+
+set (HDF5_BUILD_GENERATORS OFF CACHE BOOL "Build Test Generators" FORCE)
+
+set (HDF5_ENABLE_Z_LIB_SUPPORT ON CACHE BOOL "Enable Zlib Filters" FORCE)
+
+set (HDF5_ENABLE_SZIP_SUPPORT ON CACHE BOOL "Use SZip Filter" FORCE)
+
+set (HDF5_ENABLE_SZIP_ENCODING ON CACHE BOOL "Use SZip Encoding" FORCE)
+
+set (HDF5_ENABLE_HSIZET ON CACHE BOOL "Enable datasets larger than memory" FORCE)
+
+set (HDF5_ENABLE_UNSUPPORTED OFF CACHE BOOL "Enable unsupported combinations of configuration options" FORCE)
+
+set (HDF5_ENABLE_DEPRECATED_SYMBOLS ON CACHE BOOL "Enable deprecated public API symbols" FORCE)
+
+set (HDF5_ENABLE_DIRECT_VFD OFF CACHE BOOL "Build the Direct I/O Virtual File Driver" FORCE)
+
+set (HDF5_ENABLE_PARALLEL OFF CACHE BOOL "Enable parallel build (requires MPI)" FORCE)
+
+set (MPIEXEC_MAX_NUMPROCS "3" CACHE STRING "Minimum number of processes for HDF parallel tests" FORCE)
+
+set (HDF5_BUILD_PARALLEL_ALL OFF CACHE BOOL "Build Parallel Programs" FORCE)
+
+set (HDF5_ENABLE_COVERAGE OFF CACHE BOOL "Enable code coverage for Libraries and Programs" FORCE)
+
+set (HDF5_ENABLE_USING_MEMCHECKER OFF CACHE BOOL "Indicate that a memory checker is used" FORCE)
+
+set (HDF5_DISABLE_COMPILER_WARNINGS OFF CACHE BOOL "Disable compiler warnings" FORCE)
+
+set (HDF5_USE_FOLDERS ON CACHE BOOL "Enable folder grouping of projects in IDEs." FORCE)
+
+set (HDF5_USE_16_API_DEFAULT OFF CACHE BOOL "Use the HDF5 1.6.x API by default" FORCE)
+
+set (HDF5_ENABLE_THREADSAFE OFF CACHE BOOL "(WINDOWS)Enable Threadsafety" FORCE)
+
+set (HDF5_PACKAGE_EXTLIBS OFF CACHE BOOL "(WINDOWS)CPACK - include external libraries" FORCE)
+
+set (HDF5_NO_PACKAGES OFF CACHE BOOL "CPACK - Disable packaging" FORCE)
+
+set (HDF5_ALLOW_EXTERNAL_SUPPORT "NO" CACHE STRING "Allow External Library Building (NO SVN TGZ)" FORCE)
+set_property (CACHE HDF5_ALLOW_EXTERNAL_SUPPORT PROPERTY STRINGS NO SVN TGZ)
+
+set (ZLIB_TGZ_NAME "ZLib.tar.gz" CACHE STRING "Use ZLib from compressed file" FORCE)
+
+set (SZIP_TGZ_NAME "SZip.tar.gz" CACHE STRING "Use SZip from compressed file" FORCE)
+
+set (ZLIB_PACKAGE_NAME "zlib" CACHE STRING "Name of ZLIB package" FORCE)
+
+set (SZIP_PACKAGE_NAME "szip" CACHE STRING "Name of SZIP package" FORCE)
diff --git a/config/cmake/hdf5-config-version.cmake.in b/config/cmake/hdf5-config-version.cmake.in
index c3d0811..148a659 100644
--- a/config/cmake/hdf5-config-version.cmake.in
+++ b/config/cmake/hdf5-config-version.cmake.in
@@ -1,27 +1,27 @@
-#-----------------------------------------------------------------------------
-# HDF5 Version file for install directory
-#-----------------------------------------------------------------------------
-
-set (PACKAGE_VERSION @HDF5_VERSION_STRING@)
-
-if ("${PACKAGE_FIND_VERSION_MAJOR}" EQUAL @H5_VERS_MAJOR@)
-
- # exact match for version @H5_VERS_MAJOR at .@H5_VERS_MINOR@
- if ("${PACKAGE_FIND_VERSION_MINOR}" EQUAL @H5_VERS_MINOR@)
-
- # compatible with any version @H5_VERS_MAJOR at .@H5_VERS_MINOR at .x
- set (PACKAGE_VERSION_COMPATIBLE 1)
-
- if ("${PACKAGE_FIND_VERSION_PATCH}" EQUAL @H5_VERS_RELEASE@)
- set (PACKAGE_VERSION_EXACT 1)
-
- if ("${PACKAGE_FIND_VERSION_TWEAK}" EQUAL @H5_VERS_SUBRELEASE@)
- # not using this yet
- endif ("${PACKAGE_FIND_VERSION_TWEAK}" EQUAL @H5_VERS_SUBRELEASE@)
-
- endif ("${PACKAGE_FIND_VERSION_PATCH}" EQUAL @H5_VERS_RELEASE@)
-
- endif ("${PACKAGE_FIND_VERSION_MINOR}" EQUAL @H5_VERS_MINOR@)
-endif ("${PACKAGE_FIND_VERSION_MAJOR}" EQUAL @H5_VERS_MAJOR@)
-
-
+#-----------------------------------------------------------------------------
+# HDF5 Version file for install directory
+#-----------------------------------------------------------------------------
+
+set (PACKAGE_VERSION @HDF5_VERSION_STRING@)
+
+if ("${PACKAGE_FIND_VERSION_MAJOR}" EQUAL @H5_VERS_MAJOR@)
+
+ # exact match for version @H5_VERS_MAJOR at .@H5_VERS_MINOR@
+ if ("${PACKAGE_FIND_VERSION_MINOR}" EQUAL @H5_VERS_MINOR@)
+
+ # compatible with any version @H5_VERS_MAJOR at .@H5_VERS_MINOR at .x
+ set (PACKAGE_VERSION_COMPATIBLE 1)
+
+ if ("${PACKAGE_FIND_VERSION_PATCH}" EQUAL @H5_VERS_RELEASE@)
+ set (PACKAGE_VERSION_EXACT 1)
+
+ if ("${PACKAGE_FIND_VERSION_TWEAK}" EQUAL @H5_VERS_SUBRELEASE@)
+ # not using this yet
+ endif ("${PACKAGE_FIND_VERSION_TWEAK}" EQUAL @H5_VERS_SUBRELEASE@)
+
+ endif ("${PACKAGE_FIND_VERSION_PATCH}" EQUAL @H5_VERS_RELEASE@)
+
+ endif ("${PACKAGE_FIND_VERSION_MINOR}" EQUAL @H5_VERS_MINOR@)
+endif ("${PACKAGE_FIND_VERSION_MAJOR}" EQUAL @H5_VERS_MAJOR@)
+
+
diff --git a/config/cmake/hdf5-config.cmake.build.in b/config/cmake/hdf5-config.cmake.build.in
index 60888c8..0276ea7 100644
--- a/config/cmake/hdf5-config.cmake.build.in
+++ b/config/cmake/hdf5-config.cmake.build.in
@@ -1,73 +1,73 @@
-#-----------------------------------------------------------------------------
-# HDF5 Config file for compiling against hdf5 build directory
-#-----------------------------------------------------------------------------
-GET_FILENAME_COMPONENT (SELF_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH)
-
-#-----------------------------------------------------------------------------
-# User Options
-#-----------------------------------------------------------------------------
-set (HDF5_ENABLE_PARALLEL @HDF5_ENABLE_PARALLEL@)
-set (HDF5_BUILD_FORTRAN @HDF5_BUILD_FORTRAN@)
-set (HDF5_ENABLE_F2003 @HDF5_ENABLE_F2003@)
-set (HDF5_BUILD_CPP_LIB @HDF5_BUILD_CPP_LIB@)
-set (HDF5_BUILD_TOOLS @HDF5_BUILD_TOOLS@)
-set (HDF5_BUILD_HL_LIB @HDF5_BUILD_HL_LIB@)
-set (HDF5_ENABLE_Z_LIB_SUPPORT @HDF5_ENABLE_Z_LIB_SUPPORT@)
-set (HDF5_ENABLE_SZIP_SUPPORT @HDF5_ENABLE_SZIP_SUPPORT@)
-set (HDF5_ENABLE_SZIP_ENCODING @HDF5_ENABLE_SZIP_ENCODING@)
-set (HDF5_BUILD_SHARED_LIBS @BUILD_SHARED_LIBS@)
-
-#-----------------------------------------------------------------------------
-# Dependencies
-#-----------------------------------------------------------------------------
-IF(HDF5_ENABLE_PARALLEL)
- SET(HDF5_MPI_C_INCLUDE_PATH "@MPI_C_INCLUDE_PATH@")
- SET(HDF5_MPI_C_LIBRARIES "@MPI_C_LIBRARIES@")
-ENDIF(HDF5_ENABLE_PARALLEL)
-
-#-----------------------------------------------------------------------------
-# Directories
-#-----------------------------------------------------------------------------
-set (HDF5_INCLUDE_DIR "@HDF5_INCLUDES_BUILD_TIME@" "${HDF5_MPI_C_INCLUDE_PATH}" )
-
-if (HDF5_BUILD_FORTRAN)
- set (HDF5_INCLUDE_DIR_FORTRAN "@CMAKE_Fortran_MODULE_DIRECTORY@" )
-endif (HDF5_BUILD_FORTRAN)
-
-if (HDF5_BUILD_CPP_LIB)
- set (HDF5_INCLUDE_DIR_CPP ${HDF5_INCLUDE_DIR} )
-endif (HDF5_BUILD_CPP_LIB)
-
-if (HDF5_BUILD_HL_LIB)
- set (HDF5_INCLUDE_DIR_HL ${HDF5_INCLUDE_DIR} )
-endif (HDF5_BUILD_HL_LIB)
-
-if (HDF5_BUILD_HL_LIB AND HDF5_BUILD_CPP_LIB)
- set (HDF5_INCLUDE_DIR_HL_CPP ${HDF5_INCLUDE_DIR} )
-endif (HDF5_BUILD_HL_LIB AND HDF5_BUILD_CPP_LIB)
-
-if (HDF5_BUILD_TOOLS)
- set (HDF5_INCLUDE_DIR_TOOLS ${HDF5_INCLUDE_DIR} )
-endif (HDF5_BUILD_TOOLS)
-
-if (HDF5_BUILD_SHARED_LIBS)
- set (H5_BUILT_AS_DYNAMIC_LIB 1 )
-else (HDF5_BUILD_SHARED_LIBS)
- set (H5_BUILT_AS_STATIC_LIB 1 )
-endif (HDF5_BUILD_SHARED_LIBS)
-
-#-----------------------------------------------------------------------------
-# Version Strings
-#-----------------------------------------------------------------------------
-set (HDF5_VERSION_STRING @HDF5_VERSION_STRING@)
-set (HDF5_VERSION_MAJOR @HDF5_VERSION_MAJOR@)
-set (HDF5_VERSION_MINOR @HDF5_VERSION_MINOR@)
-
-#-----------------------------------------------------------------------------
-# Don't include targets if this file is being picked up by another
-# project which has already build hdf5 as a subproject
-#-----------------------------------------------------------------------------
-if (NOT TARGET "@HDF5_PACKAGE@")
- include (${SELF_DIR}/@HDF5_PACKAGE@@HDF_PACKAGE_EXT at -targets.cmake)
- set (HDF5_LIBRARIES "@HDF5_LIBRARIES_TO_EXPORT@")
-endif (NOT TARGET "@HDF5_PACKAGE@")
+#-----------------------------------------------------------------------------
+# HDF5 Config file for compiling against hdf5 build directory
+#-----------------------------------------------------------------------------
+GET_FILENAME_COMPONENT (SELF_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH)
+
+#-----------------------------------------------------------------------------
+# User Options
+#-----------------------------------------------------------------------------
+set (HDF5_ENABLE_PARALLEL @HDF5_ENABLE_PARALLEL@)
+set (HDF5_BUILD_FORTRAN @HDF5_BUILD_FORTRAN@)
+set (HDF5_ENABLE_F2003 @HDF5_ENABLE_F2003@)
+set (HDF5_BUILD_CPP_LIB @HDF5_BUILD_CPP_LIB@)
+set (HDF5_BUILD_TOOLS @HDF5_BUILD_TOOLS@)
+set (HDF5_BUILD_HL_LIB @HDF5_BUILD_HL_LIB@)
+set (HDF5_ENABLE_Z_LIB_SUPPORT @HDF5_ENABLE_Z_LIB_SUPPORT@)
+set (HDF5_ENABLE_SZIP_SUPPORT @HDF5_ENABLE_SZIP_SUPPORT@)
+set (HDF5_ENABLE_SZIP_ENCODING @HDF5_ENABLE_SZIP_ENCODING@)
+set (HDF5_BUILD_SHARED_LIBS @BUILD_SHARED_LIBS@)
+
+#-----------------------------------------------------------------------------
+# Dependencies
+#-----------------------------------------------------------------------------
+IF(HDF5_ENABLE_PARALLEL)
+ SET(HDF5_MPI_C_INCLUDE_PATH "@MPI_C_INCLUDE_PATH@")
+ SET(HDF5_MPI_C_LIBRARIES "@MPI_C_LIBRARIES@")
+ENDIF(HDF5_ENABLE_PARALLEL)
+
+#-----------------------------------------------------------------------------
+# Directories
+#-----------------------------------------------------------------------------
+set (HDF5_INCLUDE_DIR "@HDF5_INCLUDES_BUILD_TIME@" "${HDF5_MPI_C_INCLUDE_PATH}" )
+
+if (HDF5_BUILD_FORTRAN)
+ set (HDF5_INCLUDE_DIR_FORTRAN "@CMAKE_Fortran_MODULE_DIRECTORY@" )
+endif (HDF5_BUILD_FORTRAN)
+
+if (HDF5_BUILD_CPP_LIB)
+ set (HDF5_INCLUDE_DIR_CPP ${HDF5_INCLUDE_DIR} )
+endif (HDF5_BUILD_CPP_LIB)
+
+if (HDF5_BUILD_HL_LIB)
+ set (HDF5_INCLUDE_DIR_HL ${HDF5_INCLUDE_DIR} )
+endif (HDF5_BUILD_HL_LIB)
+
+if (HDF5_BUILD_HL_LIB AND HDF5_BUILD_CPP_LIB)
+ set (HDF5_INCLUDE_DIR_HL_CPP ${HDF5_INCLUDE_DIR} )
+endif (HDF5_BUILD_HL_LIB AND HDF5_BUILD_CPP_LIB)
+
+if (HDF5_BUILD_TOOLS)
+ set (HDF5_INCLUDE_DIR_TOOLS ${HDF5_INCLUDE_DIR} )
+endif (HDF5_BUILD_TOOLS)
+
+if (HDF5_BUILD_SHARED_LIBS)
+ set (H5_BUILT_AS_DYNAMIC_LIB 1 )
+else (HDF5_BUILD_SHARED_LIBS)
+ set (H5_BUILT_AS_STATIC_LIB 1 )
+endif (HDF5_BUILD_SHARED_LIBS)
+
+#-----------------------------------------------------------------------------
+# Version Strings
+#-----------------------------------------------------------------------------
+set (HDF5_VERSION_STRING @HDF5_VERSION_STRING@)
+set (HDF5_VERSION_MAJOR @HDF5_VERSION_MAJOR@)
+set (HDF5_VERSION_MINOR @HDF5_VERSION_MINOR@)
+
+#-----------------------------------------------------------------------------
+# Don't include targets if this file is being picked up by another
+# project which has already build hdf5 as a subproject
+#-----------------------------------------------------------------------------
+if (NOT TARGET "@HDF5_PACKAGE@")
+ include (${SELF_DIR}/@HDF5_PACKAGE@@HDF_PACKAGE_EXT at -targets.cmake)
+ set (HDF5_LIBRARIES "@HDF5_LIBRARIES_TO_EXPORT@")
+endif (NOT TARGET "@HDF5_PACKAGE@")
diff --git a/config/cmake/hdf5-config.cmake.install.in b/config/cmake/hdf5-config.cmake.install.in
index 799ff9d..c1c4498 100644
--- a/config/cmake/hdf5-config.cmake.install.in
+++ b/config/cmake/hdf5-config.cmake.install.in
@@ -1,81 +1,81 @@
-#-----------------------------------------------------------------------------
-# HDF5 Config file for compiling against hdf5 install directory
-#-----------------------------------------------------------------------------
-GET_FILENAME_COMPONENT (SELF_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH)
-GET_FILENAME_COMPONENT(_IMPORT_PREFIX "${SELF_DIR}" PATH)
-GET_FILENAME_COMPONENT(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
-if (NOT WIN32)
- GET_FILENAME_COMPONENT(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
-endif (NOT WIN32)
-
-#-----------------------------------------------------------------------------
-# User Options
-#-----------------------------------------------------------------------------
-set (HDF5_ENABLE_PARALLEL @HDF5_ENABLE_PARALLEL@)
-set (HDF5_BUILD_FORTRAN @HDF5_BUILD_FORTRAN@)
-set (HDF5_ENABLE_F2003 @HDF5_ENABLE_F2003@)
-set (HDF5_BUILD_CPP_LIB @HDF5_BUILD_CPP_LIB@)
-set (HDF5_BUILD_TOOLS @HDF5_BUILD_TOOLS@)
-set (HDF5_BUILD_HL_LIB @HDF5_BUILD_HL_LIB@)
-set (HDF5_ENABLE_Z_LIB_SUPPORT @HDF5_ENABLE_Z_LIB_SUPPORT@)
-set (HDF5_ENABLE_SZIP_SUPPORT @HDF5_ENABLE_SZIP_SUPPORT@)
-set (HDF5_ENABLE_SZIP_ENCODING @HDF5_ENABLE_SZIP_ENCODING@)
-set (HDF5_BUILD_SHARED_LIBS @BUILD_SHARED_LIBS@)
-set (HDF5_PACKAGE_EXTLIBS @HDF5_PACKAGE_EXTLIBS@)
-
-#-----------------------------------------------------------------------------
-# Dependencies
-#-----------------------------------------------------------------------------
-IF(HDF5_ENABLE_PARALLEL)
- SET(HDF5_MPI_C_INCLUDE_PATH "@MPI_C_INCLUDE_PATH@")
- SET(HDF5_MPI_C_LIBRARIES "@MPI_C_LIBRARIES@")
-ENDIF(HDF5_ENABLE_PARALLEL)
-
-#-----------------------------------------------------------------------------
-# Directories
-#-----------------------------------------------------------------------------
-set (HDF5_INCLUDE_DIR "${_IMPORT_PREFIX}/include" "${HDF5_MPI_C_INCLUDE_PATH}" )
-
-if (HDF5_BUILD_FORTRAN)
- set (HDF5_INCLUDE_DIR_FORTRAN "${_IMPORT_PREFIX}/include/fortran" )
-endif (HDF5_BUILD_FORTRAN)
-
-if (HDF5_BUILD_CPP_LIB)
- set (HDF5_INCLUDE_DIR_CPP "${_IMPORT_PREFIX}/include/cpp" )
-endif (HDF5_BUILD_CPP_LIB)
-
-if (HDF5_BUILD_HL_LIB)
- set (HDF5_INCLUDE_DIR_HL "${_IMPORT_PREFIX}/include/hl" )
-endif (HDF5_BUILD_HL_LIB)
-
-if (HDF5_BUILD_HL_LIB AND HDF5_BUILD_CPP_LIB)
- set (HDF5_INCLUDE_DIR_HL_CPP "${_IMPORT_PREFIX}/include/hl/cpp" )
-endif (HDF5_BUILD_HL_LIB AND HDF5_BUILD_CPP_LIB)
-
-if (HDF5_BUILD_TOOLS)
- set (HDF5_INCLUDE_DIR_TOOLS "${_IMPORT_PREFIX}/include" )
- set (HDF5_TOOLS_DIR "${_IMPORT_PREFIX}/bin" )
-endif (HDF5_BUILD_TOOLS)
-
-#-----------------------------------------------------------------------------
-# Version Strings
-#-----------------------------------------------------------------------------
-set (HDF5_VERSION_STRING @HDF5_VERSION_STRING@)
-set (HDF5_VERSION_MAJOR @HDF5_VERSION_MAJOR@)
-set (HDF5_VERSION_MINOR @HDF5_VERSION_MINOR@)
-
-#-----------------------------------------------------------------------------
-# Don't include targets if this file is being picked up by another
-# project which has already built hdf5 as a subproject
-#-----------------------------------------------------------------------------
-if (NOT TARGET "@HDF5_PACKAGE@")
- if (HDF5_ENABLE_Z_LIB_SUPPORT AND HDF5_PACKAGE_EXTLIBS AND NOT TARGET "zlib")
- include (${SELF_DIR}/../ZLIB/@ZLIB_PACKAGE_NAME@@HDF_PACKAGE_EXT at -targets.cmake)
- endif (HDF5_ENABLE_Z_LIB_SUPPORT AND HDF5_PACKAGE_EXTLIBS AND NOT TARGET "zlib")
- if (HDF5_ENABLE_SZIP_SUPPORT AND HDF5_PACKAGE_EXTLIBS AND NOT TARGET "szip")
- include (${SELF_DIR}/../SZIP/@SZIP_PACKAGE_NAME@@HDF_PACKAGE_EXT at -targets.cmake)
- endif (HDF5_ENABLE_SZIP_SUPPORT AND HDF5_PACKAGE_EXTLIBS AND NOT TARGET "szip")
- include (${SELF_DIR}/@HDF5_PACKAGE@@HDF_PACKAGE_EXT at -targets.cmake)
- set (HDF5_LIBRARIES "@HDF5_LIBRARIES_TO_EXPORT@")
-endif (NOT TARGET "@HDF5_PACKAGE@")
-
+#-----------------------------------------------------------------------------
+# HDF5 Config file for compiling against hdf5 install directory
+#-----------------------------------------------------------------------------
+GET_FILENAME_COMPONENT (SELF_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH)
+GET_FILENAME_COMPONENT(_IMPORT_PREFIX "${SELF_DIR}" PATH)
+GET_FILENAME_COMPONENT(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
+if (NOT WIN32)
+ GET_FILENAME_COMPONENT(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
+endif (NOT WIN32)
+
+#-----------------------------------------------------------------------------
+# User Options
+#-----------------------------------------------------------------------------
+set (HDF5_ENABLE_PARALLEL @HDF5_ENABLE_PARALLEL@)
+set (HDF5_BUILD_FORTRAN @HDF5_BUILD_FORTRAN@)
+set (HDF5_ENABLE_F2003 @HDF5_ENABLE_F2003@)
+set (HDF5_BUILD_CPP_LIB @HDF5_BUILD_CPP_LIB@)
+set (HDF5_BUILD_TOOLS @HDF5_BUILD_TOOLS@)
+set (HDF5_BUILD_HL_LIB @HDF5_BUILD_HL_LIB@)
+set (HDF5_ENABLE_Z_LIB_SUPPORT @HDF5_ENABLE_Z_LIB_SUPPORT@)
+set (HDF5_ENABLE_SZIP_SUPPORT @HDF5_ENABLE_SZIP_SUPPORT@)
+set (HDF5_ENABLE_SZIP_ENCODING @HDF5_ENABLE_SZIP_ENCODING@)
+set (HDF5_BUILD_SHARED_LIBS @BUILD_SHARED_LIBS@)
+set (HDF5_PACKAGE_EXTLIBS @HDF5_PACKAGE_EXTLIBS@)
+
+#-----------------------------------------------------------------------------
+# Dependencies
+#-----------------------------------------------------------------------------
+IF(HDF5_ENABLE_PARALLEL)
+ SET(HDF5_MPI_C_INCLUDE_PATH "@MPI_C_INCLUDE_PATH@")
+ SET(HDF5_MPI_C_LIBRARIES "@MPI_C_LIBRARIES@")
+ENDIF(HDF5_ENABLE_PARALLEL)
+
+#-----------------------------------------------------------------------------
+# Directories
+#-----------------------------------------------------------------------------
+set (HDF5_INCLUDE_DIR "${_IMPORT_PREFIX}/include" "${HDF5_MPI_C_INCLUDE_PATH}" )
+
+if (HDF5_BUILD_FORTRAN)
+ set (HDF5_INCLUDE_DIR_FORTRAN "${_IMPORT_PREFIX}/include" )
+endif (HDF5_BUILD_FORTRAN)
+
+if (HDF5_BUILD_CPP_LIB)
+ set (HDF5_INCLUDE_DIR_CPP "${_IMPORT_PREFIX}/include" )
+endif (HDF5_BUILD_CPP_LIB)
+
+if (HDF5_BUILD_HL_LIB)
+ set (HDF5_INCLUDE_DIR_HL "${_IMPORT_PREFIX}/include" )
+endif (HDF5_BUILD_HL_LIB)
+
+if (HDF5_BUILD_HL_LIB AND HDF5_BUILD_CPP_LIB)
+ set (HDF5_INCLUDE_DIR_HL_CPP "${_IMPORT_PREFIX}/include" )
+endif (HDF5_BUILD_HL_LIB AND HDF5_BUILD_CPP_LIB)
+
+if (HDF5_BUILD_TOOLS)
+ set (HDF5_INCLUDE_DIR_TOOLS "${_IMPORT_PREFIX}/include" )
+ set (HDF5_TOOLS_DIR "${_IMPORT_PREFIX}/bin" )
+endif (HDF5_BUILD_TOOLS)
+
+#-----------------------------------------------------------------------------
+# Version Strings
+#-----------------------------------------------------------------------------
+set (HDF5_VERSION_STRING @HDF5_VERSION_STRING@)
+set (HDF5_VERSION_MAJOR @HDF5_VERSION_MAJOR@)
+set (HDF5_VERSION_MINOR @HDF5_VERSION_MINOR@)
+
+#-----------------------------------------------------------------------------
+# Don't include targets if this file is being picked up by another
+# project which has already built hdf5 as a subproject
+#-----------------------------------------------------------------------------
+if (NOT TARGET "@HDF5_PACKAGE@")
+ if (HDF5_ENABLE_Z_LIB_SUPPORT AND HDF5_PACKAGE_EXTLIBS AND NOT TARGET "zlib")
+ include (${SELF_DIR}/../ZLIB/@ZLIB_PACKAGE_NAME@@HDF_PACKAGE_EXT at -targets.cmake)
+ endif (HDF5_ENABLE_Z_LIB_SUPPORT AND HDF5_PACKAGE_EXTLIBS AND NOT TARGET "zlib")
+ if (HDF5_ENABLE_SZIP_SUPPORT AND HDF5_PACKAGE_EXTLIBS AND NOT TARGET "szip")
+ include (${SELF_DIR}/../SZIP/@SZIP_PACKAGE_NAME@@HDF_PACKAGE_EXT at -targets.cmake)
+ endif (HDF5_ENABLE_SZIP_SUPPORT AND HDF5_PACKAGE_EXTLIBS AND NOT TARGET "szip")
+ include (${SELF_DIR}/@HDF5_PACKAGE@@HDF_PACKAGE_EXT at -targets.cmake)
+ set (HDF5_LIBRARIES "@HDF5_LIBRARIES_TO_EXPORT@")
+endif (NOT TARGET "@HDF5_PACKAGE@")
+
diff --git a/config/cmake/libhdf5.settings.cmake.in b/config/cmake/libhdf5.settings.cmake.in
index 418a6cf..0c0befa 100644
--- a/config/cmake/libhdf5.settings.cmake.in
+++ b/config/cmake/libhdf5.settings.cmake.in
@@ -20,7 +20,7 @@ Compiling Options:
CFLAGS: @CMAKE_C_FLAGS@
H5_CFLAGS: @H5_CFLAGS@
AM_CFLAGS: @AM_CFLAGS@
- CPPFLAGS: @CMAKE_CXX_FLAGS@
+ CPPFLAGS: @CPPFLAGS@
H5_CPPFLAGS: @H5_CPPFLAGS@
AM_CPPFLAGS: @AM_CPPFLAGS@
Shared Libraries: @H5_ENABLE_SHARED_LIB@
diff --git a/config/cmake/mccacheinit.cmake b/config/cmake/mccacheinit.cmake
index c30d70d..0aba85a 100644
--- a/config/cmake/mccacheinit.cmake
+++ b/config/cmake/mccacheinit.cmake
@@ -1,79 +1,76 @@
-# This is the CMakeCache file.
-
-########################
-# EXTERNAL cache entries
-########################
-
-set (BUILD_SHARED_LIBS OFF CACHE BOOL "Build Shared Libraries" FORCE)
-
-set (BUILD_TESTING ON CACHE BOOL "Build HDF5 Unit Testing" FORCE)
-
-set (HDF_PACKAGE_EXT "" CACHE STRING "Name of HDF package extension" FORCE)
-
-set (HDF5_BUILD_CPP_LIB ON CACHE BOOL "Build HDF5 C++ Library" FORCE)
-
-set (HDF5_BUILD_EXAMPLES ON CACHE BOOL "Build HDF5 Library Examples" FORCE)
-
-set (HDF5_BUILD_FORTRAN ON CACHE BOOL "Build FORTRAN support" FORCE)
-
-set (HDF5_ENABLE_F2003 OFF CACHE BOOL "Enable FORTRAN 2003 Standard" FORCE)
-
-set (HDF5_BUILD_HL_LIB ON CACHE BOOL "Build HIGH Level HDF5 Library" FORCE)
-
-set (HDF5_BUILD_TOOLS ON CACHE BOOL "Build HDF5 Tools" FORCE)
-
-set (HDF5_BUILD_GENERATORS OFF CACHE BOOL "Build Test Generators" FORCE)
-
-set (HDF5_ENABLE_Z_LIB_SUPPORT ON CACHE BOOL "Enable Zlib Filters" FORCE)
-
-set (HDF5_ENABLE_SZIP_SUPPORT ON CACHE BOOL "Use SZip Filter" FORCE)
-
-set (HDF5_ENABLE_SZIP_ENCODING ON CACHE BOOL "Use SZip Encoding" FORCE)
-
-set (HDF5_ENABLE_HSIZET ON CACHE BOOL "Enable datasets larger than memory" FORCE)
-
-set (HDF5_ENABLE_UNSUPPORTED OFF CACHE BOOL "Enable unsupported combinations of configuration options" FORCE)
-
-set (HDF5_ENABLE_DEPRECATED_SYMBOLS ON CACHE BOOL "Enable deprecated public API symbols" FORCE)
-
-set (HDF5_ENABLE_DIRECT_VFD OFF CACHE BOOL "Build the Direct I/O Virtual File Driver" FORCE)
-
-set (HDF5_ENABLE_PARALLEL OFF CACHE BOOL "Enable parallel build (requires MPI)" FORCE)
-
-set (MPIEXEC_MAX_NUMPROCS "3" CACHE STRING "Minimum number of processes for HDF parallel tests" FORCE)
-
-set (HDF5_BUILD_PARALLEL_ALL OFF CACHE BOOL "Build Parallel Programs" FORCE)
-
-set (HDF5_ENABLE_COVERAGE OFF CACHE BOOL "Enable code coverage for Libraries and Programs" FORCE)
-
-set (HDF5_ENABLE_USING_MEMCHECKER ON CACHE BOOL "Indicate that a memory checker is used" FORCE)
-
-set (HDF5_DISABLE_COMPILER_WARNINGS OFF CACHE BOOL "Disable compiler warnings" FORCE)
-
-set (HDF5_USE_FOLDERS ON CACHE BOOL "Enable folder grouping of projects in IDEs." FORCE)
-
-set (HDF5_USE_16_API_DEFAULT OFF CACHE BOOL "Use the HDF5 1.6.x API by default" FORCE)
-
-set (HDF5_ENABLE_THREADSAFE OFF CACHE BOOL "(WINDOWS)Enable Threadsafety" FORCE)
-
-set (HDF5_PACKAGE_EXTLIBS OFF CACHE BOOL "(WINDOWS)CPACK - include external libraries" FORCE)
-
-set (HDF5_NO_PACKAGES ON CACHE BOOL "CPACK - Disable packaging" FORCE)
-
-set (HDF5_ALLOW_EXTERNAL_SUPPORT "NO" CACHE STRING "Allow External Library Building" FORCE)
-
-set (ZLIB_SVN_URL "http://svn.hdfgroup.uiuc.edu/zlib/trunk" CACHE STRING "Use ZLib from HDF repository" FORCE)
-
-set (SZIP_SVN_URL "http://svn.hdfgroup.uiuc.edu/szip/trunk" CACHE STRING "Use SZip from HDF repository" FORCE)
-
-set (ZLIB_TGZ_NAME "ZLib.tar.gz" CACHE STRING "Use ZLib from compressed file" FORCE)
-
-set (SZIP_TGZ_NAME "SZip.tar.gz" CACHE STRING "Use SZip from compressed file" FORCE)
-
-set (CMAKE_BUILD_TYPE "Debug" CACHE STRING "Build Debug" FORCE)
-
-set (CTEST_BUILD_CONFIGURATION "Debug" CACHE STRING "Build Debug" FORCE)
-
-set (ZLIB_PACKAGE_NAME "zlib" CACHE STRING "Name of ZLIB package" FORCE)
-
-set (SZIP_PACKAGE_NAME "szip" CACHE STRING "Name of SZIP package" FORCE)
+# This is the CMakeCache file.
+
+########################
+# EXTERNAL cache entries
+########################
+
+set (BUILD_SHARED_LIBS OFF CACHE BOOL "Build Shared Libraries" FORCE)
+
+set (BUILD_TESTING ON CACHE BOOL "Build HDF5 Unit Testing" FORCE)
+
+set (HDF_PACKAGE_EXT "" CACHE STRING "Name of HDF package extension" FORCE)
+
+set (HDF5_BUILD_CPP_LIB ON CACHE BOOL "Build HDF5 C++ Library" FORCE)
+
+set (HDF5_BUILD_EXAMPLES ON CACHE BOOL "Build HDF5 Library Examples" FORCE)
+
+set (HDF5_BUILD_FORTRAN ON CACHE BOOL "Build FORTRAN support" FORCE)
+
+set (HDF5_ENABLE_F2003 OFF CACHE BOOL "Enable FORTRAN 2003 Standard" FORCE)
+
+set (HDF5_BUILD_HL_LIB ON CACHE BOOL "Build HIGH Level HDF5 Library" FORCE)
+
+set (HDF5_BUILD_TOOLS ON CACHE BOOL "Build HDF5 Tools" FORCE)
+
+set (HDF5_BUILD_GENERATORS OFF CACHE BOOL "Build Test Generators" FORCE)
+
+set (HDF5_ENABLE_Z_LIB_SUPPORT ON CACHE BOOL "Enable Zlib Filters" FORCE)
+
+set (HDF5_ENABLE_SZIP_SUPPORT ON CACHE BOOL "Use SZip Filter" FORCE)
+
+set (HDF5_ENABLE_SZIP_ENCODING ON CACHE BOOL "Use SZip Encoding" FORCE)
+
+set (HDF5_ENABLE_HSIZET ON CACHE BOOL "Enable datasets larger than memory" FORCE)
+
+set (HDF5_ENABLE_UNSUPPORTED OFF CACHE BOOL "Enable unsupported combinations of configuration options" FORCE)
+
+set (HDF5_ENABLE_DEPRECATED_SYMBOLS ON CACHE BOOL "Enable deprecated public API symbols" FORCE)
+
+set (HDF5_ENABLE_DIRECT_VFD OFF CACHE BOOL "Build the Direct I/O Virtual File Driver" FORCE)
+
+set (HDF5_ENABLE_PARALLEL OFF CACHE BOOL "Enable parallel build (requires MPI)" FORCE)
+
+set (MPIEXEC_MAX_NUMPROCS "3" CACHE STRING "Minimum number of processes for HDF parallel tests" FORCE)
+
+set (HDF5_BUILD_PARALLEL_ALL OFF CACHE BOOL "Build Parallel Programs" FORCE)
+
+set (HDF5_ENABLE_COVERAGE OFF CACHE BOOL "Enable code coverage for Libraries and Programs" FORCE)
+
+set (HDF5_ENABLE_USING_MEMCHECKER ON CACHE BOOL "Indicate that a memory checker is used" FORCE)
+
+set (HDF5_DISABLE_COMPILER_WARNINGS OFF CACHE BOOL "Disable compiler warnings" FORCE)
+
+set (HDF5_USE_FOLDERS ON CACHE BOOL "Enable folder grouping of projects in IDEs." FORCE)
+
+set (HDF5_USE_16_API_DEFAULT OFF CACHE BOOL "Use the HDF5 1.6.x API by default" FORCE)
+
+set (HDF5_ENABLE_THREADSAFE OFF CACHE BOOL "(WINDOWS)Enable Threadsafety" FORCE)
+
+set (HDF5_PACKAGE_EXTLIBS OFF CACHE BOOL "(WINDOWS)CPACK - include external libraries" FORCE)
+
+set (HDF5_NO_PACKAGES ON CACHE BOOL "CPACK - Disable packaging" FORCE)
+
+set (HDF5_ALLOW_EXTERNAL_SUPPORT "NO" CACHE STRING "Allow External Library Building (NO SVN TGZ)" FORCE)
+set_property (CACHE HDF5_ALLOW_EXTERNAL_SUPPORT PROPERTY STRINGS NO SVN TGZ)
+
+set (ZLIB_TGZ_NAME "ZLib.tar.gz" CACHE STRING "Use ZLib from compressed file" FORCE)
+
+set (SZIP_TGZ_NAME "SZip.tar.gz" CACHE STRING "Use SZip from compressed file" FORCE)
+
+set (CMAKE_BUILD_TYPE "Debug" CACHE STRING "Build Debug" FORCE)
+
+set (CTEST_BUILD_CONFIGURATION "Debug" CACHE STRING "Build Debug" FORCE)
+
+set (ZLIB_PACKAGE_NAME "zlib" CACHE STRING "Name of ZLIB package" FORCE)
+
+set (SZIP_PACKAGE_NAME "szip" CACHE STRING "Name of SZIP package" FORCE)
diff --git a/config/cmake/CPack.Info.plist.in b/config/cmake_ext_mod/CPack.Info.plist.in
similarity index 100%
rename from config/cmake/CPack.Info.plist.in
rename to config/cmake_ext_mod/CPack.Info.plist.in
diff --git a/config/cmake_ext_mod/CTestCustom.cmake b/config/cmake_ext_mod/CTestCustom.cmake
new file mode 100644
index 0000000..025bce4
--- /dev/null
+++ b/config/cmake_ext_mod/CTestCustom.cmake
@@ -0,0 +1,16 @@
+set (CTEST_CUSTOM_MAXIMUM_NUMBER_OF_WARNINGS 3000)
+
+set (CTEST_CUSTOM_WARNING_EXCEPTION
+ ${CTEST_CUSTOM_WARNING_EXCEPTION}
+ "note.*expected.*void.*but argument is of type.*volatile"
+ "SZIP.src.*:[ \t]*warning"
+ "jpeg.src.*:[ \t]*warning"
+ "POSIX name for this item is deprecated"
+ "disabling jobserver mode"
+ "warning.*implicit declaration of function"
+ "note: expanded from macro"
+)
+
+set (CTEST_CUSTOM_MEMCHECK_IGNORE
+ ${CTEST_CUSTOM_MEMCHECK_IGNORE}
+)
diff --git a/config/cmake/CheckTypeSize.cmake b/config/cmake_ext_mod/CheckTypeSize.cmake
similarity index 86%
rename from config/cmake/CheckTypeSize.cmake
rename to config/cmake_ext_mod/CheckTypeSize.cmake
index 4af5741..5095a27 100644
--- a/config/cmake/CheckTypeSize.cmake
+++ b/config/cmake_ext_mod/CheckTypeSize.cmake
@@ -16,7 +16,7 @@ MACRO (HDF_CHECK_TYPE_SIZE TYPE VARIABLE)
foreach (def HAVE_SYS_TYPES_H HAVE_STDINT_H HAVE_STDDEF_H HAVE_INTTYPES_H)
if ("${def}")
set (MACRO_CHECK_TYPE_SIZE_FLAGS "${MACRO_CHECK_TYPE_SIZE_FLAGS} -D${def}")
- ENDIF("${def}")
+ endif ("${def}")
endforeach (def)
message (STATUS "Check size of ${TYPE}")
@@ -25,21 +25,23 @@ MACRO (HDF_CHECK_TYPE_SIZE TYPE VARIABLE)
"-DLINK_LIBRARIES:STRING=${CMAKE_REQUIRED_LIBRARIES}"
)
endif (CMAKE_REQUIRED_LIBRARIES)
- TRY_RUN (${VARIABLE} HAVE_${VARIABLE}
+ try_run (${VARIABLE} HAVE_${VARIABLE}
${CMAKE_BINARY_DIR}
- ${HDF5_RESOURCES_DIR}/CheckTypeSize.c
+ ${HDF_RESOURCES_EXT_DIR}/CheckTypeSize.c
CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_TYPE_SIZE_FLAGS}
"${CHECK_TYPE_SIZE_ADD_LIBRARIES}"
OUTPUT_VARIABLE OUTPUT
)
if (HAVE_${VARIABLE})
message (STATUS "Check size of ${TYPE} - done")
- file (APPEND ${CMAKE_BINARY_DIR}/CMakeFiles/CMakeOutput.log
+ file (APPEND
+ ${CMAKE_BINARY_DIR}/CMakeFiles/CMakeOutput.log
"Determining size of ${TYPE} passed with the following output:\n${OUTPUT}\n\n"
)
else (HAVE_${VARIABLE})
message (STATUS "Check size of ${TYPE} - failed")
- file (APPEND ${CMAKE_BINARY_DIR}/CMakeFiles/CMakeError.log
+ file (APPEND
+ ${CMAKE_BINARY_DIR}/CMakeFiles/CMakeError.log
"Determining size of ${TYPE} failed with the following output:\n${OUTPUT}\n\n"
)
endif (HAVE_${VARIABLE})
diff --git a/config/cmake_ext_mod/ConfigureChecks.cmake b/config/cmake_ext_mod/ConfigureChecks.cmake
new file mode 100644
index 0000000..a402736
--- /dev/null
+++ b/config/cmake_ext_mod/ConfigureChecks.cmake
@@ -0,0 +1,751 @@
+#-----------------------------------------------------------------------------
+# Include all the necessary files for macros
+#-----------------------------------------------------------------------------
+include (${CMAKE_ROOT}/Modules/CheckFunctionExists.cmake)
+include (${CMAKE_ROOT}/Modules/CheckIncludeFile.cmake)
+include (${CMAKE_ROOT}/Modules/CheckIncludeFileCXX.cmake)
+include (${CMAKE_ROOT}/Modules/CheckIncludeFiles.cmake)
+include (${CMAKE_ROOT}/Modules/CheckLibraryExists.cmake)
+include (${CMAKE_ROOT}/Modules/CheckSymbolExists.cmake)
+include (${CMAKE_ROOT}/Modules/CheckTypeSize.cmake)
+include (${CMAKE_ROOT}/Modules/CheckVariableExists.cmake)
+include (${CMAKE_ROOT}/Modules/CheckFortranFunctionExists.cmake)
+include (${CMAKE_ROOT}/Modules/TestBigEndian.cmake)
+include (${CMAKE_ROOT}/Modules/TestForSTDNamespace.cmake)
+
+#-----------------------------------------------------------------------------
+# APPLE/Darwin setup
+#-----------------------------------------------------------------------------
+if (APPLE)
+ list (LENGTH CMAKE_OSX_ARCHITECTURES ARCH_LENGTH)
+ if (ARCH_LENGTH GREATER 1)
+ set (CMAKE_OSX_ARCHITECTURES "" CACHE STRING "" FORCE)
+ message(FATAL_ERROR "Building Universal Binaries on OS X is NOT supported by the HDF5 project. This is"
+ "due to technical reasons. The best approach would be build each architecture in separate directories"
+ "and use the 'lipo' tool to combine them into a single executable or library. The 'CMAKE_OSX_ARCHITECTURES'"
+ "variable has been set to a blank value which will build the default architecture for this system.")
+ endif ()
+ set (${HDF_PREFIX}_AC_APPLE_UNIVERSAL_BUILD 0)
+endif (APPLE)
+
+# Check for Darwin (not just Apple - we also want to catch OpenDarwin)
+if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
+ set (${HDF_PREFIX}_HAVE_DARWIN 1)
+endif (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
+
+# Check for Solaris
+if (${CMAKE_SYSTEM_NAME} MATCHES "SunOS")
+ set (${HDF_PREFIX}_HAVE_SOLARIS 1)
+endif (${CMAKE_SYSTEM_NAME} MATCHES "SunOS")
+
+#-----------------------------------------------------------------------------
+# This MACRO checks IF the symbol exists in the library and IF it
+# does, it appends library to the list.
+#-----------------------------------------------------------------------------
+set (LINK_LIBS "")
+MACRO (CHECK_LIBRARY_EXISTS_CONCAT LIBRARY SYMBOL VARIABLE)
+ CHECK_LIBRARY_EXISTS ("${LIBRARY};${LINK_LIBS}" ${SYMBOL} "" ${VARIABLE})
+ if (${VARIABLE})
+ set (LINK_LIBS ${LINK_LIBS} ${LIBRARY})
+ endif (${VARIABLE})
+ENDMACRO (CHECK_LIBRARY_EXISTS_CONCAT)
+
+# ----------------------------------------------------------------------
+# WINDOWS Hard code Values
+# ----------------------------------------------------------------------
+
+set (WINDOWS)
+if (WIN32)
+ if (MINGW)
+ set (${HDF_PREFIX}_HAVE_MINGW 1)
+ set (WINDOWS 1) # MinGW tries to imitate Windows
+ set (CMAKE_REQUIRED_FLAGS "-DWIN32_LEAN_AND_MEAN=1 -DNOGDI=1")
+ endif (MINGW)
+ set (${HDF_PREFIX}_HAVE_WIN32_API 1)
+ set (CMAKE_REQUIRED_LIBRARIES "ws2_32.lib;wsock32.lib")
+ if (NOT UNIX AND NOT MINGW)
+ set (WINDOWS 1)
+ set (CMAKE_REQUIRED_FLAGS "/DWIN32_LEAN_AND_MEAN=1 /DNOGDI=1")
+ if (MSVC)
+ set (${HDF_PREFIX}_HAVE_VISUAL_STUDIO 1)
+ endif (MSVC)
+ endif (NOT UNIX AND NOT MINGW)
+endif (WIN32)
+
+if (WINDOWS)
+ set (${HDF_PREFIX}_HAVE_STDDEF_H 1)
+ set (${HDF_PREFIX}_HAVE_SYS_STAT_H 1)
+ set (${HDF_PREFIX}_HAVE_SYS_TYPES_H 1)
+ set (${HDF_PREFIX}_HAVE_LIBM 1)
+ set (${HDF_PREFIX}_HAVE_STRDUP 1)
+ set (${HDF_PREFIX}_HAVE_SYSTEM 1)
+ set (${HDF_PREFIX}_HAVE_LONGJMP 1)
+ if (NOT MINGW)
+ set (${HDF_PREFIX}_HAVE_GETHOSTNAME 1)
+ endif (NOT MINGW)
+ if (NOT UNIX AND NOT CYGWIN AND NOT MINGW)
+ set (${HDF_PREFIX}_HAVE_GETCONSOLESCREENBUFFERINFO 1)
+ endif (NOT UNIX AND NOT CYGWIN AND NOT MINGW)
+ set (${HDF_PREFIX}_HAVE_FUNCTION 1)
+ set (${HDF_PREFIX}_GETTIMEOFDAY_GIVES_TZ 1)
+ set (${HDF_PREFIX}_HAVE_TIMEZONE 1)
+ set (${HDF_PREFIX}_HAVE_GETTIMEOFDAY 1)
+ set (${HDF_PREFIX}_LONE_COLON 0)
+ if (MINGW)
+ set (${HDF_PREFIX}_HAVE_WINSOCK2_H 1)
+ endif (MINGW)
+ set (${HDF_PREFIX}_HAVE_LIBWS2_32 1)
+ set (${HDF_PREFIX}_HAVE_LIBWSOCK32 1)
+endif (WINDOWS)
+
+# ----------------------------------------------------------------------
+# END of WINDOWS Hard code Values
+# ----------------------------------------------------------------------
+
+if (CYGWIN)
+ set (${HDF_PREFIX}_HAVE_LSEEK64 0)
+endif (CYGWIN)
+
+#-----------------------------------------------------------------------------
+# Check for the math library "m"
+#-----------------------------------------------------------------------------
+if (NOT WINDOWS)
+ CHECK_LIBRARY_EXISTS_CONCAT ("m" ceil ${HDF_PREFIX}_HAVE_LIBM)
+ CHECK_LIBRARY_EXISTS_CONCAT ("dl" dlopen ${HDF_PREFIX}_HAVE_LIBDL)
+ CHECK_LIBRARY_EXISTS_CONCAT ("ws2_32" WSAStartup ${HDF_PREFIX}_HAVE_LIBWS2_32)
+ CHECK_LIBRARY_EXISTS_CONCAT ("wsock32" gethostbyname ${HDF_PREFIX}_HAVE_LIBWSOCK32)
+endif (NOT WINDOWS)
+
+CHECK_LIBRARY_EXISTS_CONCAT ("ucb" gethostname ${HDF_PREFIX}_HAVE_LIBUCB)
+CHECK_LIBRARY_EXISTS_CONCAT ("socket" connect ${HDF_PREFIX}_HAVE_LIBSOCKET)
+CHECK_LIBRARY_EXISTS ("c" gethostbyname "" NOT_NEED_LIBNSL)
+
+if (NOT NOT_NEED_LIBNSL)
+ CHECK_LIBRARY_EXISTS_CONCAT ("nsl" gethostbyname ${HDF_PREFIX}_HAVE_LIBNSL)
+endif (NOT NOT_NEED_LIBNSL)
+
+# For other tests to use the same libraries
+set (CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} ${LINK_LIBS})
+
+set (USE_INCLUDES "")
+if (WINDOWS)
+ set (USE_INCLUDES ${USE_INCLUDES} "windows.h")
+endif (WINDOWS)
+
+if (NOT WINDOWS)
+ TEST_BIG_ENDIAN (${HDF_PREFIX}_WORDS_BIGENDIAN)
+endif (NOT WINDOWS)
+
+# For other specific tests, use this MACRO.
+MACRO (HDF_FUNCTION_TEST OTHER_TEST)
+ if ("${HDF_PREFIX}_${OTHER_TEST}" MATCHES "^${HDF_PREFIX}_${OTHER_TEST}$")
+ set (MACRO_CHECK_FUNCTION_DEFINITIONS "-D${OTHER_TEST} ${CMAKE_REQUIRED_FLAGS}")
+ set (OTHER_TEST_ADD_LIBRARIES)
+ if (CMAKE_REQUIRED_LIBRARIES)
+ set (OTHER_TEST_ADD_LIBRARIES "-DLINK_LIBRARIES:STRING=${CMAKE_REQUIRED_LIBRARIES}")
+ endif (CMAKE_REQUIRED_LIBRARIES)
+
+ foreach (def ${HDF_EXTRA_TEST_DEFINITIONS})
+ set (MACRO_CHECK_FUNCTION_DEFINITIONS "${MACRO_CHECK_FUNCTION_DEFINITIONS} -D${def}=${${def}}")
+ endforeach (def)
+
+ foreach (def
+ HAVE_SYS_TIME_H
+ HAVE_UNISTD_H
+ HAVE_SYS_TYPES_H
+ HAVE_SYS_SOCKET_H
+ )
+ if ("${${HDF_PREFIX}_${def}}")
+ set (MACRO_CHECK_FUNCTION_DEFINITIONS "${MACRO_CHECK_FUNCTION_DEFINITIONS} -D${def}")
+ endif ("${${HDF_PREFIX}_${def}}")
+ endforeach (def)
+
+ if (LARGEFILE)
+ set (MACRO_CHECK_FUNCTION_DEFINITIONS
+ "${MACRO_CHECK_FUNCTION_DEFINITIONS} -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE"
+ )
+ endif (LARGEFILE)
+
+ #message (STATUS "Performing ${OTHER_TEST}")
+ TRY_COMPILE (${OTHER_TEST}
+ ${CMAKE_BINARY_DIR}
+ ${HDF_RESOURCES_EXT_DIR}/HDFTests.c
+ CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_FUNCTION_DEFINITIONS}
+ "${OTHER_TEST_ADD_LIBRARIES}"
+ OUTPUT_VARIABLE OUTPUT
+ )
+ if (${OTHER_TEST})
+ set (${HDF_PREFIX}_${OTHER_TEST} 1 CACHE INTERNAL "Other test ${FUNCTION}")
+ message (STATUS "Performing Other Test ${OTHER_TEST} - Success")
+ else (${OTHER_TEST})
+ message (STATUS "Performing Other Test ${OTHER_TEST} - Failed")
+ set (${HDF_PREFIX}_${OTHER_TEST} "" CACHE INTERNAL "Other test ${FUNCTION}")
+ file (APPEND ${CMAKE_BINARY_DIR}/CMakeFiles/CMakeError.log
+ "Performing Other Test ${OTHER_TEST} failed with the following output:\n"
+ "${OUTPUT}\n"
+ )
+ endif (${OTHER_TEST})
+ endif ("${HDF_PREFIX}_${OTHER_TEST}" MATCHES "^${HDF_PREFIX}_${OTHER_TEST}$")
+ENDMACRO (HDF_FUNCTION_TEST)
+
+#-----------------------------------------------------------------------------
+# Check for these functions before the time headers are checked
+#-----------------------------------------------------------------------------
+HDF_FUNCTION_TEST (STDC_HEADERS)
+
+#-----------------------------------------------------------------------------
+# Check IF header file exists and add it to the list.
+#-----------------------------------------------------------------------------
+MACRO (CHECK_INCLUDE_FILE_CONCAT FILE VARIABLE)
+ CHECK_INCLUDE_FILES ("${USE_INCLUDES};${FILE}" ${VARIABLE})
+ if (${VARIABLE})
+ set (USE_INCLUDES ${USE_INCLUDES} ${FILE})
+ endif (${VARIABLE})
+ENDMACRO (CHECK_INCLUDE_FILE_CONCAT)
+
+#-----------------------------------------------------------------------------
+# Check for the existence of certain header files
+#-----------------------------------------------------------------------------
+CHECK_INCLUDE_FILE_CONCAT ("sys/resource.h" ${HDF_PREFIX}_HAVE_SYS_RESOURCE_H)
+CHECK_INCLUDE_FILE_CONCAT ("sys/time.h" ${HDF_PREFIX}_HAVE_SYS_TIME_H)
+CHECK_INCLUDE_FILE_CONCAT ("unistd.h" ${HDF_PREFIX}_HAVE_UNISTD_H)
+CHECK_INCLUDE_FILE_CONCAT ("sys/ioctl.h" ${HDF_PREFIX}_HAVE_SYS_IOCTL_H)
+CHECK_INCLUDE_FILE_CONCAT ("sys/stat.h" ${HDF_PREFIX}_HAVE_SYS_STAT_H)
+CHECK_INCLUDE_FILE_CONCAT ("sys/socket.h" ${HDF_PREFIX}_HAVE_SYS_SOCKET_H)
+CHECK_INCLUDE_FILE_CONCAT ("sys/types.h" ${HDF_PREFIX}_HAVE_SYS_TYPES_H)
+CHECK_INCLUDE_FILE_CONCAT ("stddef.h" ${HDF_PREFIX}_HAVE_STDDEF_H)
+CHECK_INCLUDE_FILE_CONCAT ("setjmp.h" ${HDF_PREFIX}_HAVE_SETJMP_H)
+CHECK_INCLUDE_FILE_CONCAT ("features.h" ${HDF_PREFIX}_HAVE_FEATURES_H)
+CHECK_INCLUDE_FILE_CONCAT ("dirent.h" ${HDF_PREFIX}_HAVE_DIRENT_H)
+CHECK_INCLUDE_FILE_CONCAT ("stdint.h" ${HDF_PREFIX}_HAVE_STDINT_H)
+
+# IF the c compiler found stdint, check the C++ as well. On some systems this
+# file will be found by C but not C++, only do this test IF the C++ compiler
+# has been initialized (e.g. the project also includes some c++)
+if (${HDF_PREFIX}_HAVE_STDINT_H AND CMAKE_CXX_COMPILER_LOADED)
+ CHECK_INCLUDE_FILE_CXX ("stdint.h" ${HDF_PREFIX}_HAVE_STDINT_H_CXX)
+ if (NOT ${HDF_PREFIX}_HAVE_STDINT_H_CXX)
+ set (${HDF_PREFIX}_HAVE_STDINT_H "" CACHE INTERNAL "Have includes HAVE_STDINT_H")
+ set (USE_INCLUDES ${USE_INCLUDES} "stdint.h")
+ endif (NOT ${HDF_PREFIX}_HAVE_STDINT_H_CXX)
+endif (${HDF_PREFIX}_HAVE_STDINT_H AND CMAKE_CXX_COMPILER_LOADED)
+
+# Darwin
+CHECK_INCLUDE_FILE_CONCAT ("mach/mach_time.h" ${HDF_PREFIX}_HAVE_MACH_MACH_TIME_H)
+
+# Windows
+CHECK_INCLUDE_FILE_CONCAT ("io.h" ${HDF_PREFIX}_HAVE_IO_H)
+if (NOT CYGWIN)
+ CHECK_INCLUDE_FILE_CONCAT ("winsock2.h" ${HDF_PREFIX}_HAVE_WINSOCK2_H)
+endif (NOT CYGWIN)
+CHECK_INCLUDE_FILE_CONCAT ("sys/timeb.h" ${HDF_PREFIX}_HAVE_SYS_TIMEB_H)
+
+if (CMAKE_SYSTEM_NAME MATCHES "OSF")
+ CHECK_INCLUDE_FILE_CONCAT ("sys/sysinfo.h" ${HDF_PREFIX}_HAVE_SYS_SYSINFO_H)
+ CHECK_INCLUDE_FILE_CONCAT ("sys/proc.h" ${HDF_PREFIX}_HAVE_SYS_PROC_H)
+else (CMAKE_SYSTEM_NAME MATCHES "OSF")
+ set (${HDF_PREFIX}_HAVE_SYS_SYSINFO_H "" CACHE INTERNAL "" FORCE)
+ set (${HDF_PREFIX}_HAVE_SYS_PROC_H "" CACHE INTERNAL "" FORCE)
+endif (CMAKE_SYSTEM_NAME MATCHES "OSF")
+
+CHECK_INCLUDE_FILE_CONCAT ("globus/common.h" ${HDF_PREFIX}_HAVE_GLOBUS_COMMON_H)
+CHECK_INCLUDE_FILE_CONCAT ("pdb.h" ${HDF_PREFIX}_HAVE_PDB_H)
+CHECK_INCLUDE_FILE_CONCAT ("pthread.h" ${HDF_PREFIX}_HAVE_PTHREAD_H)
+CHECK_INCLUDE_FILE_CONCAT ("srbclient.h" ${HDF_PREFIX}_HAVE_SRBCLIENT_H)
+CHECK_INCLUDE_FILE_CONCAT ("string.h" ${HDF_PREFIX}_HAVE_STRING_H)
+CHECK_INCLUDE_FILE_CONCAT ("strings.h" ${HDF_PREFIX}_HAVE_STRINGS_H)
+CHECK_INCLUDE_FILE_CONCAT ("time.h" ${HDF_PREFIX}_HAVE_TIME_H)
+CHECK_INCLUDE_FILE_CONCAT ("stdlib.h" ${HDF_PREFIX}_HAVE_STDLIB_H)
+CHECK_INCLUDE_FILE_CONCAT ("memory.h" ${HDF_PREFIX}_HAVE_MEMORY_H)
+CHECK_INCLUDE_FILE_CONCAT ("dlfcn.h" ${HDF_PREFIX}_HAVE_DLFCN_H)
+CHECK_INCLUDE_FILE_CONCAT ("inttypes.h" ${HDF_PREFIX}_HAVE_INTTYPES_H)
+CHECK_INCLUDE_FILE_CONCAT ("netinet/in.h" ${HDF_PREFIX}_HAVE_NETINET_IN_H)
+
+#-----------------------------------------------------------------------------
+# Check for large file support
+#-----------------------------------------------------------------------------
+
+# The linux-lfs option is deprecated.
+set (LINUX_LFS 0)
+
+set (HDF_EXTRA_C_FLAGS)
+set (HDF_EXTRA_FLAGS)
+if (NOT WINDOWS)
+ if (NOT ${HDF_PREFIX}_HAVE_SOLARIS)
+ # Linux Specific flags
+ # This was originally defined as _POSIX_SOURCE which was updated to
+ # _POSIX_C_SOURCE=199506L to expose a greater amount of POSIX
+ # functionality so clock_gettime and CLOCK_MONOTONIC are defined
+ # correctly.
+ # POSIX feature information can be found in the gcc manual at:
+ # http://www.gnu.org/s/libc/manual/html_node/Feature-Test-Macros.html
+ set (HDF_EXTRA_C_FLAGS -D_POSIX_C_SOURCE=199506L)
+ set (HDF_EXTRA_FLAGS -D_BSD_SOURCE)
+
+ option (HDF_ENABLE_LARGE_FILE "Enable support for large (64-bit) files on Linux." ON)
+ if (HDF_ENABLE_LARGE_FILE)
+ set (msg "Performing TEST_LFS_WORKS")
+ TRY_RUN (TEST_LFS_WORKS_RUN TEST_LFS_WORKS_COMPILE
+ ${CMAKE_BINARY_DIR}
+ ${HDF_RESOURCES_EXT_DIR}/HDFTests.c
+ CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=-DTEST_LFS_WORKS
+ OUTPUT_VARIABLE OUTPUT
+ )
+ if (TEST_LFS_WORKS_COMPILE)
+ if (TEST_LFS_WORKS_RUN MATCHES 0)
+ set (TEST_LFS_WORKS 1 CACHE INTERNAL ${msg})
+ set (LARGEFILE 1)
+ set (HDF_EXTRA_FLAGS ${HDF_EXTRA_FLAGS} -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE)
+ message (STATUS "${msg}... yes")
+ else (TEST_LFS_WORKS_RUN MATCHES 0)
+ set (TEST_LFS_WORKS "" CACHE INTERNAL ${msg})
+ message (STATUS "${msg}... no")
+ file (APPEND ${CMAKE_BINARY_DIR}/CMakeFiles/CMakeError.log
+ "Test TEST_LFS_WORKS Run failed with the following output and exit code:\n ${OUTPUT}\n"
+ )
+ endif (TEST_LFS_WORKS_RUN MATCHES 0)
+ else (TEST_LFS_WORKS_COMPILE )
+ set (TEST_LFS_WORKS "" CACHE INTERNAL ${msg})
+ message (STATUS "${msg}... no")
+ file (APPEND ${CMAKE_BINARY_DIR}/CMakeFiles/CMakeError.log
+ "Test TEST_LFS_WORKS Compile failed with the following output:\n ${OUTPUT}\n"
+ )
+ endif (TEST_LFS_WORKS_COMPILE)
+ endif (HDF_ENABLE_LARGE_FILE)
+ set (CMAKE_REQUIRED_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS} ${HDF_EXTRA_FLAGS})
+ endif (NOT ${HDF_PREFIX}_HAVE_SOLARIS)
+endif (NOT WINDOWS)
+
+add_definitions (${HDF_EXTRA_FLAGS})
+
+#-----------------------------------------------------------------------------
+# Check for HAVE_OFF64_T functionality
+#-----------------------------------------------------------------------------
+if (NOT WINDOWS OR MINGW)
+ HDF_FUNCTION_TEST (HAVE_OFF64_T)
+ if (${HDF_PREFIX}_HAVE_OFF64_T)
+ CHECK_FUNCTION_EXISTS (lseek64 ${HDF_PREFIX}_HAVE_LSEEK64)
+ CHECK_FUNCTION_EXISTS (fseeko64 ${HDF_PREFIX}_HAVE_FSEEKO64)
+ CHECK_FUNCTION_EXISTS (ftello64 ${HDF_PREFIX}_HAVE_FTELLO64)
+ CHECK_FUNCTION_EXISTS (ftruncate64 ${HDF_PREFIX}_HAVE_FTRUNCATE64)
+ endif (${HDF_PREFIX}_HAVE_OFF64_T)
+
+ CHECK_FUNCTION_EXISTS (fseeko ${HDF_PREFIX}_HAVE_FSEEKO)
+ CHECK_FUNCTION_EXISTS (ftello ${HDF_PREFIX}_HAVE_FTELLO)
+
+ HDF_FUNCTION_TEST (HAVE_STAT64_STRUCT)
+ if (HAVE_STAT64_STRUCT)
+ CHECK_FUNCTION_EXISTS (fstat64 ${HDF_PREFIX}_HAVE_FSTAT64)
+ CHECK_FUNCTION_EXISTS (stat64 ${HDF_PREFIX}_HAVE_STAT64)
+ endif (HAVE_STAT64_STRUCT)
+endif (NOT WINDOWS OR MINGW)
+
+#-----------------------------------------------------------------------------
+# Check the size in bytes of all the int and float types
+#-----------------------------------------------------------------------------
+MACRO (HDF_CHECK_TYPE_SIZE type var)
+ set (aType ${type})
+ set (aVar ${var})
+# message (STATUS "Checking size of ${aType} and storing into ${aVar}")
+ CHECK_TYPE_SIZE (${aType} ${aVar})
+ if (NOT ${aVar})
+ set (${aVar} 0 CACHE INTERNAL "SizeOf for ${aType}")
+# message (STATUS "Size of ${aType} was NOT Found")
+ endif (NOT ${aVar})
+ENDMACRO (HDF_CHECK_TYPE_SIZE)
+
+HDF_CHECK_TYPE_SIZE (char ${HDF_PREFIX}_SIZEOF_CHAR)
+HDF_CHECK_TYPE_SIZE (short ${HDF_PREFIX}_SIZEOF_SHORT)
+HDF_CHECK_TYPE_SIZE (int ${HDF_PREFIX}_SIZEOF_INT)
+HDF_CHECK_TYPE_SIZE (unsigned ${HDF_PREFIX}_SIZEOF_UNSIGNED)
+if (NOT APPLE)
+ HDF_CHECK_TYPE_SIZE (long ${HDF_PREFIX}_SIZEOF_LONG)
+endif (NOT APPLE)
+HDF_CHECK_TYPE_SIZE ("long long" ${HDF_PREFIX}_SIZEOF_LONG_LONG)
+HDF_CHECK_TYPE_SIZE (__int64 ${HDF_PREFIX}_SIZEOF___INT64)
+if (NOT ${HDF_PREFIX}_SIZEOF___INT64)
+ set (${HDF_PREFIX}_SIZEOF___INT64 0)
+endif (NOT ${HDF_PREFIX}_SIZEOF___INT64)
+
+HDF_CHECK_TYPE_SIZE (float ${HDF_PREFIX}_SIZEOF_FLOAT)
+HDF_CHECK_TYPE_SIZE (double ${HDF_PREFIX}_SIZEOF_DOUBLE)
+HDF_CHECK_TYPE_SIZE ("long double" ${HDF_PREFIX}_SIZEOF_LONG_DOUBLE)
+
+HDF_CHECK_TYPE_SIZE (int8_t ${HDF_PREFIX}_SIZEOF_INT8_T)
+HDF_CHECK_TYPE_SIZE (uint8_t ${HDF_PREFIX}_SIZEOF_UINT8_T)
+HDF_CHECK_TYPE_SIZE (int_least8_t ${HDF_PREFIX}_SIZEOF_INT_LEAST8_T)
+HDF_CHECK_TYPE_SIZE (uint_least8_t ${HDF_PREFIX}_SIZEOF_UINT_LEAST8_T)
+HDF_CHECK_TYPE_SIZE (int_fast8_t ${HDF_PREFIX}_SIZEOF_INT_FAST8_T)
+HDF_CHECK_TYPE_SIZE (uint_fast8_t ${HDF_PREFIX}_SIZEOF_UINT_FAST8_T)
+
+HDF_CHECK_TYPE_SIZE (int16_t ${HDF_PREFIX}_SIZEOF_INT16_T)
+HDF_CHECK_TYPE_SIZE (uint16_t ${HDF_PREFIX}_SIZEOF_UINT16_T)
+HDF_CHECK_TYPE_SIZE (int_least16_t ${HDF_PREFIX}_SIZEOF_INT_LEAST16_T)
+HDF_CHECK_TYPE_SIZE (uint_least16_t ${HDF_PREFIX}_SIZEOF_UINT_LEAST16_T)
+HDF_CHECK_TYPE_SIZE (int_fast16_t ${HDF_PREFIX}_SIZEOF_INT_FAST16_T)
+HDF_CHECK_TYPE_SIZE (uint_fast16_t ${HDF_PREFIX}_SIZEOF_UINT_FAST16_T)
+
+HDF_CHECK_TYPE_SIZE (int32_t ${HDF_PREFIX}_SIZEOF_INT32_T)
+HDF_CHECK_TYPE_SIZE (uint32_t ${HDF_PREFIX}_SIZEOF_UINT32_T)
+HDF_CHECK_TYPE_SIZE (int_least32_t ${HDF_PREFIX}_SIZEOF_INT_LEAST32_T)
+HDF_CHECK_TYPE_SIZE (uint_least32_t ${HDF_PREFIX}_SIZEOF_UINT_LEAST32_T)
+HDF_CHECK_TYPE_SIZE (int_fast32_t ${HDF_PREFIX}_SIZEOF_INT_FAST32_T)
+HDF_CHECK_TYPE_SIZE (uint_fast32_t ${HDF_PREFIX}_SIZEOF_UINT_FAST32_T)
+
+HDF_CHECK_TYPE_SIZE (int64_t ${HDF_PREFIX}_SIZEOF_INT64_T)
+HDF_CHECK_TYPE_SIZE (uint64_t ${HDF_PREFIX}_SIZEOF_UINT64_T)
+HDF_CHECK_TYPE_SIZE (int_least64_t ${HDF_PREFIX}_SIZEOF_INT_LEAST64_T)
+HDF_CHECK_TYPE_SIZE (uint_least64_t ${HDF_PREFIX}_SIZEOF_UINT_LEAST64_T)
+HDF_CHECK_TYPE_SIZE (int_fast64_t ${HDF_PREFIX}_SIZEOF_INT_FAST64_T)
+HDF_CHECK_TYPE_SIZE (uint_fast64_t ${HDF_PREFIX}_SIZEOF_UINT_FAST64_T)
+
+if (NOT APPLE)
+ HDF_CHECK_TYPE_SIZE (size_t ${HDF_PREFIX}_SIZEOF_SIZE_T)
+ HDF_CHECK_TYPE_SIZE (ssize_t ${HDF_PREFIX}_SIZEOF_SSIZE_T)
+ if (NOT ${HDF_PREFIX}_SIZEOF_SSIZE_T)
+ set (${HDF_PREFIX}_SIZEOF_SSIZE_T 0)
+ endif (NOT ${HDF_PREFIX}_SIZEOF_SSIZE_T)
+ if (NOT WINDOWS)
+ HDF_CHECK_TYPE_SIZE (ptrdiff_t ${HDF_PREFIX}_SIZEOF_PTRDIFF_T)
+ endif (NOT WINDOWS)
+endif (NOT APPLE)
+
+HDF_CHECK_TYPE_SIZE (off_t ${HDF_PREFIX}_SIZEOF_OFF_T)
+HDF_CHECK_TYPE_SIZE (off64_t ${HDF_PREFIX}_SIZEOF_OFF64_T)
+if (NOT ${HDF_PREFIX}_SIZEOF_OFF64_T)
+ set (${HDF_PREFIX}_SIZEOF_OFF64_T 0)
+endif (NOT ${HDF_PREFIX}_SIZEOF_OFF64_T)
+
+if (NOT WINDOWS)
+ #-----------------------------------------------------------------------------
+ # Check if the dev_t type is a scalar type
+ #-----------------------------------------------------------------------------
+ HDF_FUNCTION_TEST (DEV_T_IS_SCALAR)
+
+ # ----------------------------------------------------------------------
+ # Check for MONOTONIC_TIMER support (used in clock_gettime). This has
+ # to be done after any POSIX/BSD defines to ensure that the test gets
+ # the correct POSIX level on linux.
+ CHECK_VARIABLE_EXISTS (CLOCK_MONOTONIC HAVE_CLOCK_MONOTONIC)
+
+ #-----------------------------------------------------------------------------
+ # Check a bunch of time functions
+ #-----------------------------------------------------------------------------
+ foreach (test
+ HAVE_TM_GMTOFF
+ HAVE___TM_GMTOFF
+# HAVE_TIMEZONE
+ HAVE_STRUCT_TIMEZONE
+ GETTIMEOFDAY_GIVES_TZ
+ TIME_WITH_SYS_TIME
+ HAVE_TM_ZONE
+ HAVE_STRUCT_TM_TM_ZONE
+ )
+ HDF_FUNCTION_TEST (${test})
+ endforeach (test)
+ if (NOT CYGWIN AND NOT MINGW)
+ HDF_FUNCTION_TEST (HAVE_TIMEZONE)
+# HDF_FUNCTION_TEST (HAVE_STAT_ST_BLOCKS)
+ endif (NOT CYGWIN AND NOT MINGW)
+
+ # ----------------------------------------------------------------------
+ # Does the struct stat have the st_blocks field? This field is not Posix.
+ #
+ HDF_FUNCTION_TEST (HAVE_STAT_ST_BLOCKS)
+
+ # ----------------------------------------------------------------------
+ # How do we figure out the width of a tty in characters?
+ #
+ CHECK_FUNCTION_EXISTS (ioctl ${HDF_PREFIX}_HAVE_IOCTL)
+ HDF_FUNCTION_TEST (HAVE_STRUCT_VIDEOCONFIG)
+ HDF_FUNCTION_TEST (HAVE_STRUCT_TEXT_INFO)
+ CHECK_FUNCTION_EXISTS (_getvideoconfig ${HDF_PREFIX}_HAVE__GETVIDEOCONFIG)
+ CHECK_FUNCTION_EXISTS (gettextinfo ${HDF_PREFIX}_HAVE_GETTEXTINFO)
+ CHECK_FUNCTION_EXISTS (_scrsize ${HDF_PREFIX}_HAVE__SCRSIZE)
+ if (NOT CYGWIN AND NOT MINGW)
+ CHECK_FUNCTION_EXISTS (GetConsoleScreenBufferInfo ${HDF_PREFIX}_HAVE_GETCONSOLESCREENBUFFERINFO)
+ endif (NOT CYGWIN AND NOT MINGW)
+ CHECK_SYMBOL_EXISTS (TIOCGWINSZ "sys/ioctl.h" ${HDF_PREFIX}_HAVE_TIOCGWINSZ)
+ CHECK_SYMBOL_EXISTS (TIOCGETD "sys/ioctl.h" ${HDF_PREFIX}_HAVE_TIOCGETD)
+endif (NOT WINDOWS)
+
+#-----------------------------------------------------------------------------
+# Check for some functions that are used
+#
+CHECK_FUNCTION_EXISTS (alarm ${HDF_PREFIX}_HAVE_ALARM)
+CHECK_FUNCTION_EXISTS (fork ${HDF_PREFIX}_HAVE_FORK)
+CHECK_FUNCTION_EXISTS (frexpf ${HDF_PREFIX}_HAVE_FREXPF)
+CHECK_FUNCTION_EXISTS (frexpl ${HDF_PREFIX}_HAVE_FREXPL)
+
+CHECK_FUNCTION_EXISTS (gethostname ${HDF_PREFIX}_HAVE_GETHOSTNAME)
+CHECK_FUNCTION_EXISTS (getpwuid ${HDF_PREFIX}_HAVE_GETPWUID)
+CHECK_FUNCTION_EXISTS (getrusage ${HDF_PREFIX}_HAVE_GETRUSAGE)
+CHECK_FUNCTION_EXISTS (lstat ${HDF_PREFIX}_HAVE_LSTAT)
+
+CHECK_FUNCTION_EXISTS (rand_r ${HDF_PREFIX}_HAVE_RAND_R)
+CHECK_FUNCTION_EXISTS (random ${HDF_PREFIX}_HAVE_RANDOM)
+CHECK_FUNCTION_EXISTS (setsysinfo ${HDF_PREFIX}_HAVE_SETSYSINFO)
+
+CHECK_FUNCTION_EXISTS (signal ${HDF_PREFIX}_HAVE_SIGNAL)
+CHECK_FUNCTION_EXISTS (longjmp ${HDF_PREFIX}_HAVE_LONGJMP)
+CHECK_FUNCTION_EXISTS (setjmp ${HDF_PREFIX}_HAVE_SETJMP)
+CHECK_FUNCTION_EXISTS (siglongjmp ${HDF_PREFIX}_HAVE_SIGLONGJMP)
+CHECK_FUNCTION_EXISTS (sigsetjmp ${HDF_PREFIX}_HAVE_SIGSETJMP)
+CHECK_FUNCTION_EXISTS (sigaction ${HDF_PREFIX}_HAVE_SIGACTION)
+CHECK_FUNCTION_EXISTS (sigprocmask ${HDF_PREFIX}_HAVE_SIGPROCMASK)
+
+CHECK_FUNCTION_EXISTS (snprintf ${HDF_PREFIX}_HAVE_SNPRINTF)
+CHECK_FUNCTION_EXISTS (srandom ${HDF_PREFIX}_HAVE_SRANDOM)
+CHECK_FUNCTION_EXISTS (strdup ${HDF_PREFIX}_HAVE_STRDUP)
+CHECK_FUNCTION_EXISTS (symlink ${HDF_PREFIX}_HAVE_SYMLINK)
+CHECK_FUNCTION_EXISTS (system ${HDF_PREFIX}_HAVE_SYSTEM)
+
+CHECK_FUNCTION_EXISTS (tmpfile ${HDF_PREFIX}_HAVE_TMPFILE)
+CHECK_FUNCTION_EXISTS (asprintf ${HDF_PREFIX}_HAVE_ASPRINTF)
+CHECK_FUNCTION_EXISTS (vasprintf ${HDF_PREFIX}_HAVE_VASPRINTF)
+CHECK_FUNCTION_EXISTS (waitpid ${HDF_PREFIX}_HAVE_WAITPID)
+
+CHECK_FUNCTION_EXISTS (vsnprintf ${HDF_PREFIX}_HAVE_VSNPRINTF)
+if (NOT WINDOWS)
+ if (${HDF_PREFIX}_HAVE_VSNPRINTF)
+ HDF_FUNCTION_TEST (VSNPRINTF_WORKS)
+ endif (${HDF_PREFIX}_HAVE_VSNPRINTF)
+endif (NOT WINDOWS)
+
+#-----------------------------------------------------------------------------
+# sigsetjmp is special; may actually be a macro
+#-----------------------------------------------------------------------------
+if (NOT ${HDF_PREFIX}_HAVE_SIGSETJMP)
+ if (${HDF_PREFIX}_HAVE_SETJMP_H)
+ CHECK_SYMBOL_EXISTS (sigsetjmp "setjmp.h" ${HDF_PREFIX}_HAVE_MACRO_SIGSETJMP)
+ if (${HDF_PREFIX}_HAVE_MACRO_SIGSETJMP)
+ set (${HDF_PREFIX}_HAVE_SIGSETJMP 1)
+ endif (${HDF_PREFIX}_HAVE_MACRO_SIGSETJMP)
+ endif (${HDF_PREFIX}_HAVE_SETJMP_H)
+endif (NOT ${HDF_PREFIX}_HAVE_SIGSETJMP)
+
+#-----------------------------------------------------------------------------
+# Check for Symbols
+CHECK_SYMBOL_EXISTS (tzname "time.h" ${HDF_PREFIX}_HAVE_DECL_TZNAME)
+
+#-----------------------------------------------------------------------------
+# Check a bunch of other functions
+#-----------------------------------------------------------------------------
+if (NOT WINDOWS)
+ foreach (test
+ LONE_COLON
+ HAVE_ATTRIBUTE
+ HAVE_C99_FUNC
+# STDC_HEADERS
+ HAVE_FUNCTION
+ HAVE_C99_DESIGNATED_INITIALIZER
+ SYSTEM_SCOPE_THREADS
+ HAVE_SOCKLEN_T
+ CXX_HAVE_OFFSETOF
+ )
+ HDF_FUNCTION_TEST (${test})
+ endforeach (test)
+endif (NOT WINDOWS)
+
+# For other CXX specific tests, use this MACRO.
+MACRO (HDF_CXX_FUNCTION_TEST OTHER_TEST)
+ if ("${OTHER_TEST}" MATCHES "^${OTHER_TEST}$")
+ set (MACRO_CHECK_FUNCTION_DEFINITIONS "-D${OTHER_TEST} ${CMAKE_REQUIRED_FLAGS}")
+ set (OTHER_TEST_ADD_LIBRARIES)
+ if (CMAKE_REQUIRED_LIBRARIES)
+ set (OTHER_TEST_ADD_LIBRARIES "-DLINK_LIBRARIES:STRING=${CMAKE_REQUIRED_LIBRARIES}")
+ endif (CMAKE_REQUIRED_LIBRARIES)
+
+ foreach (def ${HDF_EXTRA_TEST_DEFINITIONS})
+ set (MACRO_CHECK_FUNCTION_DEFINITIONS "${MACRO_CHECK_FUNCTION_DEFINITIONS} -D${def}=${${def}}")
+ endforeach (def)
+
+ foreach (def
+ HAVE_SYS_TIME_H
+ HAVE_UNISTD_H
+ HAVE_SYS_TYPES_H
+ HAVE_SYS_SOCKET_H
+ )
+ if ("${${HDF_PREFIX}_${def}}")
+ set (MACRO_CHECK_FUNCTION_DEFINITIONS "${MACRO_CHECK_FUNCTION_DEFINITIONS} -D${def}")
+ endif ("${${HDF_PREFIX}_${def}}")
+ endforeach (def)
+
+ if (LARGEFILE)
+ set (MACRO_CHECK_FUNCTION_DEFINITIONS
+ "${MACRO_CHECK_FUNCTION_DEFINITIONS} -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE"
+ )
+ endif (LARGEFILE)
+
+ #message (STATUS "Performing ${OTHER_TEST}")
+ TRY_COMPILE (${OTHER_TEST}
+ ${CMAKE_BINARY_DIR}
+ ${HDF_RESOURCES_EXT_DIR}/HDFCXXTests.cpp
+ CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_FUNCTION_DEFINITIONS}
+ "${OTHER_TEST_ADD_LIBRARIES}"
+ OUTPUT_VARIABLE OUTPUT
+ )
+ if ("${OTHER_TEST}" EQUAL 0)
+ set (${OTHER_TEST} 1 CACHE INTERNAL "CXX test ${FUNCTION}")
+ message (STATUS "Performing CXX Test ${OTHER_TEST} - Success")
+ else ("${OTHER_TEST}" EQUAL 0)
+ message (STATUS "Performing CXX Test ${OTHER_TEST} - Failed")
+ set (${OTHER_TEST} "" CACHE INTERNAL "CXX test ${FUNCTION}")
+ file (APPEND ${CMAKE_BINARY_DIR}/CMakeFiles/CMakeError.log
+ "Performing CXX Test ${OTHER_TEST} failed with the following output:\n"
+ "${OUTPUT}\n"
+ )
+ endif ("${OTHER_TEST}" EQUAL 0)
+ endif ("${OTHER_TEST}" MATCHES "^${OTHER_TEST}$")
+ENDMACRO (HDF_CXX_FUNCTION_TEST)
+
+#-----------------------------------------------------------------------------
+# Check a bunch of cxx functions
+#-----------------------------------------------------------------------------
+if (CMAKE_CXX_COMPILER_LOADED)
+ foreach (test
+ OLD_HEADER_FILENAME
+ ${HDF_PREFIX}_NO_NAMESPACE
+ ${HDF_PREFIX}_NO_STD
+ BOOL_NOTDEFINED
+ NO_STATIC_CAST
+ )
+ HDF_CXX_FUNCTION_TEST (${test})
+ endforeach (test)
+endif (CMAKE_CXX_COMPILER_LOADED)
+
+#-----------------------------------------------------------------------------
+# Check if InitOnceExecuteOnce is available
+#-----------------------------------------------------------------------------
+if (WINDOWS)
+ if (NOT HDF_NO_IOEO_TEST)
+ message (STATUS "Checking for InitOnceExecuteOnce:")
+ if ("${${HDF_PREFIX}_HAVE_IOEO}" MATCHES "^${${HDF_PREFIX}_HAVE_IOEO}$")
+ if (LARGEFILE)
+ set (CMAKE_REQUIRED_DEFINITIONS
+ "${CURRENT_TEST_DEFINITIONS} -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE"
+ )
+ endif (LARGEFILE)
+ set (MACRO_CHECK_FUNCTION_DEFINITIONS
+ "-DHAVE_IOEO ${CMAKE_REQUIRED_FLAGS}")
+ if (CMAKE_REQUIRED_LIBRARIES)
+ set (CHECK_C_SOURCE_COMPILES_ADD_LIBRARIES
+ "-DLINK_LIBRARIES:STRING=${CMAKE_REQUIRED_LIBRARIES}")
+ else (CMAKE_REQUIRED_LIBRARIES)
+ set (CHECK_C_SOURCE_COMPILES_ADD_LIBRARIES)
+ endif (CMAKE_REQUIRED_LIBRARIES)
+ if (CMAKE_REQUIRED_INCLUDES)
+ set (CHECK_C_SOURCE_COMPILES_ADD_INCLUDES
+ "-DINCLUDE_DIRECTORIES:STRING=${CMAKE_REQUIRED_INCLUDES}")
+ else (CMAKE_REQUIRED_INCLUDES)
+ set (CHECK_C_SOURCE_COMPILES_ADD_INCLUDES)
+ endif (CMAKE_REQUIRED_INCLUDES)
+
+ TRY_RUN(HAVE_IOEO_EXITCODE HAVE_IOEO_COMPILED
+ ${CMAKE_BINARY_DIR}
+ ${HDF_RESOURCES_EXT_DIR}/HDFTests.c
+ COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS}
+ CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_FUNCTION_DEFINITIONS}
+ -DCMAKE_SKIP_RPATH:BOOL=${CMAKE_SKIP_RPATH}
+ "${CHECK_C_SOURCE_COMPILES_ADD_LIBRARIES}"
+ "${CHECK_C_SOURCE_COMPILES_ADD_INCLUDES}"
+ COMPILE_OUTPUT_VARIABLE OUTPUT)
+ # if it did not compile make the return value fail code of 1
+ if (NOT HAVE_IOEO_COMPILED)
+ set (HAVE_IOEO_EXITCODE 1)
+ endif (NOT HAVE_IOEO_COMPILED)
+ # if the return value was 0 then it worked
+ if ("${HAVE_IOEO_EXITCODE}" EQUAL 0)
+ set (${HDF_PREFIX}_HAVE_IOEO 1 CACHE INTERNAL "Test InitOnceExecuteOnce")
+ message (STATUS "Performing Test InitOnceExecuteOnce - Success")
+ file (APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
+ "Performing C SOURCE FILE Test InitOnceExecuteOnce succeded with the following output:\n"
+ "${OUTPUT}\n"
+ "Return value: ${HAVE_IOEO}\n")
+ else ("${HAVE_IOEO_EXITCODE}" EQUAL 0)
+ if (CMAKE_CROSSCOMPILING AND "${HAVE_IOEO_EXITCODE}" MATCHES "FAILED_TO_RUN")
+ set (${HDF_PREFIX}_HAVE_IOEO "${HAVE_IOEO_EXITCODE}")
+ else (CMAKE_CROSSCOMPILING AND "${HAVE_IOEO_EXITCODE}" MATCHES "FAILED_TO_RUN")
+ set (${HDF_PREFIX}_HAVE_IOEO "" CACHE INTERNAL "Test InitOnceExecuteOnce")
+ endif (CMAKE_CROSSCOMPILING AND "${HAVE_IOEO_EXITCODE}" MATCHES "FAILED_TO_RUN")
+
+ message (STATUS "Performing Test InitOnceExecuteOnce - Failed")
+ file (APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
+ "Performing InitOnceExecuteOnce Test failed with the following output:\n"
+ "${OUTPUT}\n"
+ "Return value: ${HAVE_IOEO_EXITCODE}\n")
+ endif ("${HAVE_IOEO_EXITCODE}" EQUAL 0)
+ endif ("${${HDF_PREFIX}_HAVE_IOEO}" MATCHES "^${${HDF_PREFIX}_HAVE_IOEO}$")
+ endif (NOT HDF_NO_IOEO_TEST)
+endif (WINDOWS)
+
+#-----------------------------------------------------------------------------
+# Determine how 'inline' is used
+#-----------------------------------------------------------------------------
+set (HDF_EXTRA_TEST_DEFINITIONS INLINE_TEST_INLINE)
+foreach (inline_test inline __inline__ __inline)
+ set (INLINE_TEST_INLINE ${inline_test})
+ HDF_FUNCTION_TEST (INLINE_TEST_${inline_test})
+endforeach (inline_test)
+
+set (HDF_EXTRA_TEST_DEFINITIONS)
+if (INLINE_TEST___inline__)
+ set (${HDF_PREFIX}_inline __inline__)
+else (INLINE_TEST___inline__)
+ if (INLINE_TEST___inline)
+ set (${HDF_PREFIX}_inline __inline)
+ else (INLINE_TEST___inline)
+ if (INLINE_TEST_inline)
+ set (${HDF_PREFIX}_inline inline)
+ endif (INLINE_TEST_inline)
+ endif (INLINE_TEST___inline)
+endif (INLINE_TEST___inline__)
+
+#-----------------------------------------------------------------------------
+# Check how to print a Long Long integer
+#-----------------------------------------------------------------------------
+if (NOT ${HDF_PREFIX}_PRINTF_LL_WIDTH OR ${HDF_PREFIX}_PRINTF_LL_WIDTH MATCHES "unknown")
+ set (PRINT_LL_FOUND 0)
+ message (STATUS "Checking for appropriate format for 64 bit long:")
+ foreach (HDF5_PRINTF_LL l64 l L q I64 ll)
+ set (CURRENT_TEST_DEFINITIONS "-DPRINTF_LL_WIDTH=${HDF5_PRINTF_LL}")
+ if (${HDF_PREFIX}_SIZEOF_LONG_LONG)
+ set (CURRENT_TEST_DEFINITIONS "${CURRENT_TEST_DEFINITIONS} -DHAVE_LONG_LONG")
+ endif (${HDF_PREFIX}_SIZEOF_LONG_LONG)
+ TRY_RUN (HDF5_PRINTF_LL_TEST_RUN HDF5_PRINTF_LL_TEST_COMPILE
+ ${CMAKE_BINARY_DIR}
+ ${HDF_RESOURCES_EXT_DIR}/HDFTests.c
+ CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${CURRENT_TEST_DEFINITIONS}
+ OUTPUT_VARIABLE OUTPUT
+ )
+ if (HDF5_PRINTF_LL_TEST_COMPILE)
+ if (HDF5_PRINTF_LL_TEST_RUN MATCHES 0)
+ set (${HDF_PREFIX}_PRINTF_LL_WIDTH "\"${HDF5_PRINTF_LL}\"" CACHE INTERNAL "Width for printf for type `long long' or `__int64', us. `ll")
+ set (PRINT_LL_FOUND 1)
+ else (HDF5_PRINTF_LL_TEST_RUN MATCHES 0)
+ message ("Width with ${HDF5_PRINTF_LL} failed with result: ${HDF5_PRINTF_LL_TEST_RUN}")
+ endif (HDF5_PRINTF_LL_TEST_RUN MATCHES 0)
+ else (HDF5_PRINTF_LL_TEST_COMPILE)
+ file (APPEND ${CMAKE_BINARY_DIR}/CMakeFiles/CMakeError.log
+ "Test ${HDF_PREFIX}_PRINTF_LL_WIDTH for ${HDF5_PRINTF_LL} failed with the following output:\n ${OUTPUT}\n"
+ )
+ endif (HDF5_PRINTF_LL_TEST_COMPILE)
+ endforeach (HDF5_PRINTF_LL)
+
+ if (PRINT_LL_FOUND)
+ message (STATUS "Checking for apropriate format for 64 bit long: found ${${HDF_PREFIX}_PRINTF_LL_WIDTH}")
+ else (PRINT_LL_FOUND)
+ message (STATUS "Checking for apropriate format for 64 bit long: not found")
+ set (${HDF_PREFIX}_PRINTF_LL_WIDTH "\"unknown\"" CACHE INTERNAL
+ "Width for printf for type `long long' or `__int64', us. `ll"
+ )
+ endif (PRINT_LL_FOUND)
+endif (NOT ${HDF_PREFIX}_PRINTF_LL_WIDTH OR ${HDF_PREFIX}_PRINTF_LL_WIDTH MATCHES "unknown")
+
+# ----------------------------------------------------------------------
+# Set the flag to indicate that the machine can handle converting
+# denormalized floating-point values.
+# (This flag should be set for all machines, except for the Crays, where
+# the cache value is set in it's config file)
+#
+set (${HDF_PREFIX}_CONVERT_DENORMAL_FLOAT 1)
diff --git a/config/cmake/FindMPI.cmake b/config/cmake_ext_mod/FindMPI.cmake
similarity index 100%
rename from config/cmake/FindMPI.cmake
rename to config/cmake_ext_mod/FindMPI.cmake
diff --git a/config/cmake/FindSZIP.cmake b/config/cmake_ext_mod/FindSZIP.cmake
similarity index 97%
rename from config/cmake/FindSZIP.cmake
rename to config/cmake_ext_mod/FindSZIP.cmake
index f657cfa..e8e7f9f 100644
--- a/config/cmake/FindSZIP.cmake
+++ b/config/cmake_ext_mod/FindSZIP.cmake
@@ -45,7 +45,7 @@ MACRO (SZIP_ADJUST_LIB_VARS basename)
# optimized and debug libraries, or if the CMAKE_BUILD_TYPE has a value
if (CMAKE_CONFIGURATION_TYPES OR CMAKE_BUILD_TYPE)
set (${basename}_LIBRARY optimized ${${basename}_LIBRARY_RELEASE} debug ${${basename}_LIBRARY_DEBUG})
- ELSE(CMAKE_CONFIGURATION_TYPES OR CMAKE_BUILD_TYPE)
+ else (CMAKE_CONFIGURATION_TYPES OR CMAKE_BUILD_TYPE)
# if there are no configuration types and CMAKE_BUILD_TYPE has no value
# then just use the release libraries
set (${basename}_LIBRARY ${${basename}_LIBRARY_RELEASE} )
@@ -118,10 +118,10 @@ if (SZIP_INCLUDE_DIR AND SZIP_LIBRARY)
set (SZIP_LIBRARIES ${SZIP_LIBRARY})
set (SZIP_INCLUDE_DIRS ${SZIP_INCLUDE_DIR})
if (SZIP_LIBRARY_DEBUG)
- GET_FILENAME_COMPONENT (SZIP_LIBRARY_PATH ${SZIP_LIBRARY_DEBUG} PATH)
+ get_filename_component (SZIP_LIBRARY_PATH ${SZIP_LIBRARY_DEBUG} PATH)
set (SZIP_LIB_DIR ${SZIP_LIBRARY_PATH})
elseif (SZIP_LIBRARY_RELEASE)
- GET_FILENAME_COMPONENT (SZIP_LIBRARY_PATH ${SZIP_LIBRARY_RELEASE} PATH)
+ get_filename_component (SZIP_LIBRARY_PATH ${SZIP_LIBRARY_RELEASE} PATH)
set (SZIP_LIB_DIR ${SZIP_LIBRARY_PATH})
endif (SZIP_LIBRARY_DEBUG)
diff --git a/config/cmake/GetTimeOfDayTest.cpp b/config/cmake_ext_mod/GetTimeOfDayTest.cpp
similarity index 100%
rename from config/cmake/GetTimeOfDayTest.cpp
rename to config/cmake_ext_mod/GetTimeOfDayTest.cpp
diff --git a/config/cmake/HDF5CXXTests.cpp b/config/cmake_ext_mod/HDFCXXTests.cpp
similarity index 86%
rename from config/cmake/HDF5CXXTests.cpp
rename to config/cmake_ext_mod/HDFCXXTests.cpp
index 7003cc8..6b47421 100644
--- a/config/cmake/HDF5CXXTests.cpp
+++ b/config/cmake_ext_mod/HDFCXXTests.cpp
@@ -8,21 +8,21 @@ int main(void) { return 0; }
#endif
-#ifdef H5_NO_NAMESPACE
+#ifdef HDF_NO_NAMESPACE
-namespace H5 {
+namespace HDF {
int fnord;
}
int main(void) {
- using namespace H5;
+ using namespace HDF;
fnord = 37;
return 0;
}
#endif
-#ifdef H5_NO_STD
+#ifdef HDF_NO_STD
#include <string>
diff --git a/config/cmake/HDFLibMacros.cmake b/config/cmake_ext_mod/HDFLibMacros.cmake
similarity index 50%
rename from config/cmake/HDFLibMacros.cmake
rename to config/cmake_ext_mod/HDFLibMacros.cmake
index 505a9d5..f499b00 100644
--- a/config/cmake/HDFLibMacros.cmake
+++ b/config/cmake_ext_mod/HDFLibMacros.cmake
@@ -19,6 +19,21 @@ MACRO (EXTERNAL_JPEG_LIBRARY compress_type libtype jpeg_pic)
-DCMAKE_ARCHIVE_OUTPUT_DIRECTORY:PATH=${CMAKE_ARCHIVE_OUTPUT_DIRECTORY}
-DCMAKE_ANSI_CFLAGS:STRING=${jpeg_pic}
)
+ elseif (${compress_type} MATCHES "GIT")
+ EXTERNALPROJECT_ADD (JPEG
+ GIT_REPOSITORY ${JPEG_URL}
+ INSTALL_COMMAND ""
+ CMAKE_ARGS
+ -DBUILD_SHARED_LIBS:BOOL=${BUILD_SHARED_LIBS}
+ -DHDF_PACKAGE_EXT:STRING=${HDF_PACKAGE_EXT}
+ -DJPEG_EXTERNALLY_CONFIGURED:BOOL=OFF
+ -DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE}
+ -DCMAKE_INSTALL_PREFIX:PATH=${CMAKE_INSTALL_PREFIX}
+ -DCMAKE_RUNTIME_OUTPUT_DIRECTORY:PATH=${CMAKE_RUNTIME_OUTPUT_DIRECTORY}
+ -DCMAKE_LIBRARY_OUTPUT_DIRECTORY:PATH=${CMAKE_LIBRARY_OUTPUT_DIRECTORY}
+ -DCMAKE_ARCHIVE_OUTPUT_DIRECTORY:PATH=${CMAKE_ARCHIVE_OUTPUT_DIRECTORY}
+ -DCMAKE_ANSI_CFLAGS:STRING=${jpeg_pic}
+ )
elseif (${compress_type} MATCHES "TGZ")
EXTERNALPROJECT_ADD (JPEG
URL ${JPEG_URL}
@@ -36,62 +51,12 @@ MACRO (EXTERNAL_JPEG_LIBRARY compress_type libtype jpeg_pic)
-DCMAKE_ANSI_CFLAGS:STRING=${jpeg_pic}
)
endif (${compress_type} MATCHES "SVN")
- EXTERNALPROJECT_GET_PROPERTY (JPEG BINARY_DIR SOURCE_DIR)
-
- if (${CMAKE_BUILD_TYPE} MATCHES "Debug")
- if (WIN32)
- set (JPEG_LIB_NAME "jpeg_D")
- else (WIN32)
- set (JPEG_LIB_NAME "jpeg_debug")
- endif (WIN32)
- else (${CMAKE_BUILD_TYPE} MATCHES "Debug")
- set (JPEG_LIB_NAME "jpeg")
- endif (${CMAKE_BUILD_TYPE} MATCHES "Debug")
+ externalproject_get_property (JPEG BINARY_DIR SOURCE_DIR)
# Create imported target szip
- ADD_LIBRARY(jpeg ${libtype} IMPORTED)
- ADD_DEPENDENCIES (jpeg JPEG)
-
- if (${libtype} MATCHES "SHARED")
- if (WIN32)
- if (MINGW)
- SET_TARGET_PROPERTIES(jpeg PROPERTIES
- IMPORTED_IMPLIB "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${JPEG_LIB_NAME}.lib"
- IMPORTED_LOCATION "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${JPEG_LIB_NAME}${CMAKE_SHARED_LIBRARY_SUFFIX}"
- )
- else (MINGW)
- SET_TARGET_PROPERTIES(jpeg PROPERTIES
- IMPORTED_IMPLIB "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_BUILD_TYPE}/${CMAKE_IMPORT_LIBRARY_PREFIX}${JPEG_LIB_NAME}${CMAKE_IMPORT_LIBRARY_SUFFIX}"
- IMPORTED_LOCATION "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_BUILD_TYPE}/${CMAKE_IMPORT_LIBRARY_PREFIX}${JPEG_LIB_NAME}${CMAKE_SHARED_LIBRARY_SUFFIX}"
- )
- endif (MINGW)
- else (WIN32)
- if (CYGWIN)
- SET_TARGET_PROPERTIES(jpeg PROPERTIES
- IMPORTED_IMPLIB "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_IMPORT_LIBRARY_PREFIX}${JPEG_LIB_NAME}${CMAKE_IMPORT_LIBRARY_SUFFIX}"
- IMPORTED_LOCATION "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_IMPORT_LIBRARY_PREFIX}${JPEG_LIB_NAME}${CMAKE_SHARED_LIBRARY_SUFFIX}"
- )
- else (CYGWIN)
- SET_TARGET_PROPERTIES(jpeg PROPERTIES
- IMPORTED_LOCATION "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_SHARED_LIBRARY_PREFIX}${JPEG_LIB_NAME}${CMAKE_SHARED_LIBRARY_SUFFIX}"
- IMPORTED_SONAME "${CMAKE_SHARED_LIBRARY_PREFIX}${JPEG_LIB_NAME}${CMAKE_SHARED_LIBRARY_SUFFIX}.${JPEG_VERSION_STRING}"
- SOVERSION "${JPEG_VERSION_STRING}"
- )
- endif (CYGWIN)
- endif (WIN32)
- else (${libtype} MATCHES "SHARED")
- if (WIN32 AND NOT MINGW)
- SET_TARGET_PROPERTIES(jpeg PROPERTIES
- IMPORTED_LOCATION "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_BUILD_TYPE}/lib${JPEG_LIB_NAME}${CMAKE_STATIC_LIBRARY_SUFFIX}"
- IMPORTED_LINK_INTERFACE_LANGUAGES "C"
- )
- else (WIN32 AND NOT MINGW)
- SET_TARGET_PROPERTIES(jpeg PROPERTIES
- IMPORTED_LOCATION "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/lib${JPEG_LIB_NAME}${CMAKE_STATIC_LIBRARY_SUFFIX}"
- IMPORTED_LINK_INTERFACE_LANGUAGES "C"
- )
- endif (WIN32 AND NOT MINGW)
- endif (${libtype} MATCHES "SHARED")
+ add_library (jpeg ${libtype} IMPORTED)
+ HDF_IMPORT_SET_LIB_OPTIONS (jpeg "jpeg" ${libtype} "")
+ add_dependencies (JPEG jpeg)
# include (${BINARY_DIR}/JPEG-targets.cmake)
set (JPEG_LIBRARY "jpeg")
@@ -105,13 +70,13 @@ ENDMACRO (EXTERNAL_JPEG_LIBRARY)
#-------------------------------------------------------------------------------
MACRO (PACKAGE_JPEG_LIBRARY compress_type)
- ADD_CUSTOM_TARGET (JPEG-GenHeader-Copy ALL
+ add_custom_target (JPEG-GenHeader-Copy ALL
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${JPEG_INCLUDE_DIR_GEN}/jconfig.h ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/
COMMENT "Copying ${JPEG_INCLUDE_DIR_GEN}/jconfig.h to ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/"
)
set (EXTERNAL_HEADER_LIST ${EXTERNAL_HEADER_LIST} ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/jconfig.h)
if (${compress_type} MATCHES "SVN" OR ${compress_type} MATCHES "TGZ")
- ADD_DEPENDENCIES (JPEG-GenHeader-Copy JPEG)
+ add_dependencies (JPEG-GenHeader-Copy JPEG)
endif (${compress_type} MATCHES "SVN" OR ${compress_type} MATCHES "TGZ")
ENDMACRO (PACKAGE_JPEG_LIBRARY)
@@ -134,6 +99,23 @@ MACRO (EXTERNAL_SZIP_LIBRARY compress_type libtype encoding)
-DCMAKE_ANSI_CFLAGS:STRING=${CMAKE_ANSI_CFLAGS}
-DSZIP_ENABLE_ENCODING:BOOL=${encoding}
)
+ elseif (${compress_type} MATCHES "GIT")
+ EXTERNALPROJECT_ADD (SZIP
+ GIT_REPOSITORY ${SZIP_URL}
+ # [SVN_REVISION rev]
+ INSTALL_COMMAND ""
+ CMAKE_ARGS
+ -DBUILD_SHARED_LIBS:BOOL=${BUILD_SHARED_LIBS}
+ -DHDF_PACKAGE_EXT:STRING=${HDF_PACKAGE_EXT}
+ -DSZIP_EXTERNALLY_CONFIGURED:BOOL=OFF
+ -DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE}
+ -DCMAKE_INSTALL_PREFIX:PATH=${CMAKE_INSTALL_PREFIX}
+ -DCMAKE_RUNTIME_OUTPUT_DIRECTORY:PATH=${CMAKE_RUNTIME_OUTPUT_DIRECTORY}
+ -DCMAKE_LIBRARY_OUTPUT_DIRECTORY:PATH=${CMAKE_LIBRARY_OUTPUT_DIRECTORY}
+ -DCMAKE_ARCHIVE_OUTPUT_DIRECTORY:PATH=${CMAKE_ARCHIVE_OUTPUT_DIRECTORY}
+ -DCMAKE_ANSI_CFLAGS:STRING=${CMAKE_ANSI_CFLAGS}
+ -DSZIP_ENABLE_ENCODING:BOOL=${encoding}
+ )
elseif (${compress_type} MATCHES "TGZ")
EXTERNALPROJECT_ADD (SZIP
URL ${SZIP_URL}
@@ -152,62 +134,12 @@ MACRO (EXTERNAL_SZIP_LIBRARY compress_type libtype encoding)
-DSZIP_ENABLE_ENCODING:BOOL=${encoding}
)
endif (${compress_type} MATCHES "SVN")
- EXTERNALPROJECT_GET_PROPERTY (SZIP BINARY_DIR SOURCE_DIR)
-
- if (${CMAKE_BUILD_TYPE} MATCHES "Debug")
- if (WIN32)
- set (SZIP_LIB_NAME "szip_D")
- else (WIN32)
- set (SZIP_LIB_NAME "szip_debug")
- endif (WIN32)
- else (${CMAKE_BUILD_TYPE} MATCHES "Debug")
- set (SZIP_LIB_NAME "szip")
- endif (${CMAKE_BUILD_TYPE} MATCHES "Debug")
+ externalproject_get_property (SZIP BINARY_DIR SOURCE_DIR)
# Create imported target szip
- ADD_LIBRARY(szip ${libtype} IMPORTED)
- ADD_DEPENDENCIES (szip SZIP)
-
- if (${libtype} MATCHES "SHARED")
- if (WIN32)
- if (MINGW)
- SET_TARGET_PROPERTIES(szip PROPERTIES
- IMPORTED_IMPLIB "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${SZIP_LIB_NAME}.lib"
- IMPORTED_LOCATION "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${SZIP_LIB_NAME}${CMAKE_SHARED_LIBRARY_SUFFIX}"
- )
- else (MINGW)
- SET_TARGET_PROPERTIES(szip PROPERTIES
- IMPORTED_IMPLIB "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_BUILD_TYPE}/${CMAKE_IMPORT_LIBRARY_PREFIX}${SZIP_LIB_NAME}${CMAKE_IMPORT_LIBRARY_SUFFIX}"
- IMPORTED_LOCATION "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_BUILD_TYPE}/${CMAKE_IMPORT_LIBRARY_PREFIX}${SZIP_LIB_NAME}${CMAKE_SHARED_LIBRARY_SUFFIX}"
- )
- endif (MINGW)
- else (WIN32)
- if (CYGWIN)
- SET_TARGET_PROPERTIES(szip PROPERTIES
- IMPORTED_IMPLIB "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_IMPORT_LIBRARY_PREFIX}${SZIP_LIB_NAME}${CMAKE_IMPORT_LIBRARY_SUFFIX}"
- IMPORTED_LOCATION "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_IMPORT_LIBRARY_PREFIX}${SZIP_LIB_NAME}${CMAKE_SHARED_LIBRARY_SUFFIX}"
- )
- else (CYGWIN)
- SET_TARGET_PROPERTIES(szip PROPERTIES
- IMPORTED_LOCATION "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_SHARED_LIBRARY_PREFIX}${SZIP_LIB_NAME}${CMAKE_SHARED_LIBRARY_SUFFIX}"
- IMPORTED_SONAME "${CMAKE_SHARED_LIBRARY_PREFIX}${SZIP_LIB_NAME}${CMAKE_SHARED_LIBRARY_SUFFIX}.${SZIP_VERSION_STRING}"
- SOVERSION "${SZIP_VERSION_STRING}"
- )
- endif (CYGWIN)
- endif (WIN32)
- else (${libtype} MATCHES "SHARED")
- if (WIN32 AND NOT MINGW)
- SET_TARGET_PROPERTIES(szip PROPERTIES
- IMPORTED_LOCATION "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_BUILD_TYPE}/lib${SZIP_LIB_NAME}${CMAKE_STATIC_LIBRARY_SUFFIX}"
- IMPORTED_LINK_INTERFACE_LANGUAGES "C"
- )
- else (WIN32 AND NOT MINGW)
- SET_TARGET_PROPERTIES(szip PROPERTIES
- IMPORTED_LOCATION "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/lib${SZIP_LIB_NAME}${CMAKE_STATIC_LIBRARY_SUFFIX}"
- IMPORTED_LINK_INTERFACE_LANGUAGES "C"
- )
- endif (WIN32 AND NOT MINGW)
- endif (${libtype} MATCHES "SHARED")
+ add_library (szip ${libtype} IMPORTED)
+ HDF_IMPORT_SET_LIB_OPTIONS (szip "szip" ${libtype} "")
+ add_dependencies (SZIP szip)
# include (${BINARY_DIR}/SZIP-targets.cmake)
set (SZIP_LIBRARY "szip")
@@ -221,13 +153,13 @@ ENDMACRO (EXTERNAL_SZIP_LIBRARY)
#-------------------------------------------------------------------------------
MACRO (PACKAGE_SZIP_LIBRARY compress_type)
- ADD_CUSTOM_TARGET (SZIP-GenHeader-Copy ALL
+ add_custom_target (SZIP-GenHeader-Copy ALL
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${SZIP_INCLUDE_DIR_GEN}/SZconfig.h ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/
COMMENT "Copying ${SZIP_INCLUDE_DIR_GEN}/SZconfig.h to ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/"
)
set (EXTERNAL_HEADER_LIST ${EXTERNAL_HEADER_LIST} ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/SZconfig.h)
if (${compress_type} MATCHES "SVN" OR ${compress_type} MATCHES "TGZ")
- ADD_DEPENDENCIES (SZIP-GenHeader-Copy SZIP)
+ add_dependencies (SZIP-GenHeader-Copy SZIP)
endif (${compress_type} MATCHES "SVN" OR ${compress_type} MATCHES "TGZ")
ENDMACRO (PACKAGE_SZIP_LIBRARY)
@@ -249,6 +181,22 @@ MACRO (EXTERNAL_ZLIB_LIBRARY compress_type libtype)
-DCMAKE_ARCHIVE_OUTPUT_DIRECTORY:PATH=${CMAKE_ARCHIVE_OUTPUT_DIRECTORY}
-DCMAKE_ANSI_CFLAGS:STRING=${CMAKE_ANSI_CFLAGS}
)
+ elseif (${compress_type} MATCHES "GIT")
+ EXTERNALPROJECT_ADD (ZLIB
+ GIT_REPOSITORY ${ZLIB_URL}
+ # [SVN_REVISION rev]
+ INSTALL_COMMAND ""
+ CMAKE_ARGS
+ -DBUILD_SHARED_LIBS:BOOL=${BUILD_SHARED_LIBS}
+ -DHDF_PACKAGE_EXT:STRING=${HDF_PACKAGE_EXT}
+ -DZLIB_EXTERNALLY_CONFIGURED:BOOL=OFF
+ -DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE}
+ -DCMAKE_INSTALL_PREFIX:PATH=${CMAKE_INSTALL_PREFIX}
+ -DCMAKE_RUNTIME_OUTPUT_DIRECTORY:PATH=${CMAKE_RUNTIME_OUTPUT_DIRECTORY}
+ -DCMAKE_LIBRARY_OUTPUT_DIRECTORY:PATH=${CMAKE_LIBRARY_OUTPUT_DIRECTORY}
+ -DCMAKE_ARCHIVE_OUTPUT_DIRECTORY:PATH=${CMAKE_ARCHIVE_OUTPUT_DIRECTORY}
+ -DCMAKE_ANSI_CFLAGS:STRING=${CMAKE_ANSI_CFLAGS}
+ )
elseif (${compress_type} MATCHES "TGZ")
EXTERNALPROJECT_ADD (ZLIB
URL ${ZLIB_URL}
@@ -266,66 +214,17 @@ MACRO (EXTERNAL_ZLIB_LIBRARY compress_type libtype)
-DCMAKE_ANSI_CFLAGS:STRING=${CMAKE_ANSI_CFLAGS}
)
endif (${compress_type} MATCHES "SVN")
- EXTERNALPROJECT_GET_PROPERTY (ZLIB BINARY_DIR SOURCE_DIR)
-
- if (${CMAKE_BUILD_TYPE} MATCHES "Debug")
- if (WIN32)
- set (ZLIB_LIB_NAME "zlib_D")
- else (WIN32)
- set (ZLIB_LIB_NAME "z_debug")
- endif (WIN32)
- else (${CMAKE_BUILD_TYPE} MATCHES "Debug")
- if (WIN32)
- set (ZLIB_LIB_NAME "zlib")
- else (WIN32)
- set (ZLIB_LIB_NAME "z")
- endif (WIN32)
- endif (${CMAKE_BUILD_TYPE} MATCHES "Debug")
-
- # Create imported target szip
- ADD_LIBRARY(zlib ${libtype} IMPORTED)
- ADD_DEPENDENCIES (zlib ZLIB)
-
- if (${libtype} MATCHES "SHARED")
- if (WIN32)
- if (MINGW)
- SET_TARGET_PROPERTIES(zlib PROPERTIES
- IMPORTED_IMPLIB "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${ZLIB_LIB_NAME}.lib"
- IMPORTED_LOCATION "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${ZLIB_LIB_NAME}${CMAKE_SHARED_LIBRARY_SUFFIX}"
- )
- else (MINGW)
- SET_TARGET_PROPERTIES(zlib PROPERTIES
- IMPORTED_IMPLIB "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_BUILD_TYPE}/${CMAKE_IMPORT_LIBRARY_PREFIX}${ZLIB_LIB_NAME}${CMAKE_IMPORT_LIBRARY_SUFFIX}"
- IMPORTED_LOCATION "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_BUILD_TYPE}/${CMAKE_IMPORT_LIBRARY_PREFIX}${ZLIB_LIB_NAME}${CMAKE_SHARED_LIBRARY_SUFFIX}"
- )
- endif (MINGW)
- else (WIN32)
- if (CYGWIN)
- SET_TARGET_PROPERTIES(zlib PROPERTIES
- IMPORTED_IMPLIB "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_IMPORT_LIBRARY_PREFIX}${ZLIB_LIB_NAME}${CMAKE_IMPORT_LIBRARY_SUFFIX}"
- IMPORTED_LOCATION "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_IMPORT_LIBRARY_PREFIX}${ZLIB_LIB_NAME}${CMAKE_SHARED_LIBRARY_SUFFIX}"
- )
- else (CYGWIN)
- SET_TARGET_PROPERTIES(zlib PROPERTIES
- IMPORTED_LOCATION "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_SHARED_LIBRARY_PREFIX}${ZLIB_LIB_NAME}${CMAKE_SHARED_LIBRARY_SUFFIX}"
- IMPORTED_SONAME "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_SHARED_LIBRARY_PREFIX}${ZLIB_LIB_NAME}${CMAKE_SHARED_LIBRARY_SUFFIX}.${ZLIB_VERSION_STRING}"
- SOVERSION "${ZLIB_VERSION_STRING}"
- )
- endif (CYGWIN)
- endif (WIN32)
- else (${libtype} MATCHES "SHARED")
- if (WIN32 AND NOT MINGW)
- SET_TARGET_PROPERTIES(zlib PROPERTIES
- IMPORTED_LOCATION "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_BUILD_TYPE}/lib${ZLIB_LIB_NAME}${CMAKE_STATIC_LIBRARY_SUFFIX}"
- IMPORTED_LINK_INTERFACE_LANGUAGES "C"
- )
- else (WIN32 AND NOT MINGW)
- SET_TARGET_PROPERTIES(zlib PROPERTIES
- IMPORTED_LOCATION "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/lib${ZLIB_LIB_NAME}${CMAKE_STATIC_LIBRARY_SUFFIX}"
- IMPORTED_LINK_INTERFACE_LANGUAGES "C"
- )
- endif (WIN32 AND NOT MINGW)
- endif (${libtype} MATCHES "SHARED")
+ externalproject_get_property (ZLIB BINARY_DIR SOURCE_DIR)
+
+ # Create imported target zlib
+ add_library (zlib ${libtype} IMPORTED)
+ if (WIN32)
+ set (ZLIB_LIB_NAME "zlib")
+ else (WIN32)
+ set (ZLIB_LIB_NAME "z")
+ endif (WIN32)
+ HDF_IMPORT_SET_LIB_OPTIONS (zlib ${ZLIB_LIB_NAME} ${libtype} "")
+ add_dependencies (ZLIB zlib)
# include (${BINARY_DIR}/ZLIB-targets.cmake)
set (ZLIB_LIBRARY "zlib")
@@ -339,12 +238,12 @@ ENDMACRO (EXTERNAL_ZLIB_LIBRARY)
#-------------------------------------------------------------------------------
MACRO (PACKAGE_ZLIB_LIBRARY compress_type)
- ADD_CUSTOM_TARGET (ZLIB-GenHeader-Copy ALL
+ add_custom_target (ZLIB-GenHeader-Copy ALL
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${ZLIB_INCLUDE_DIR_GEN}/zconf.h ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/
COMMENT "Copying ${ZLIB_INCLUDE_DIR_GEN}/zconf.h to ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/"
)
set (EXTERNAL_HEADER_LIST ${EXTERNAL_HEADER_LIST} ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/zconf.h)
if (${compress_type} MATCHES "SVN" OR ${compress_type} MATCHES "TGZ")
- ADD_DEPENDENCIES (ZLIB-GenHeader-Copy ZLIB)
+ add_dependencies (ZLIB-GenHeader-Copy ZLIB)
endif (${compress_type} MATCHES "SVN" OR ${compress_type} MATCHES "TGZ")
ENDMACRO (PACKAGE_ZLIB_LIBRARY)
diff --git a/config/cmake/HDFMacros.cmake b/config/cmake_ext_mod/HDFMacros.cmake
similarity index 51%
rename from config/cmake/HDFMacros.cmake
rename to config/cmake_ext_mod/HDFMacros.cmake
index 56fdf83..a18eea4 100644
--- a/config/cmake/HDFMacros.cmake
+++ b/config/cmake_ext_mod/HDFMacros.cmake
@@ -45,7 +45,7 @@ ENDMACRO (TARGET_NAMING)
#-------------------------------------------------------------------------------
MACRO (INSTALL_TARGET_PDB libtarget targetdestination targetcomponent)
if (WIN32 AND MSVC)
- get_target_property (target_name ${libtarget} RELWITHDEBINFO_OUTPUT_NAME)
+ get_target_property (target_name ${libtarget} OUTPUT_NAME_RELWITHDEBINFO)
install (
FILES
${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_BUILD_TYPE}/${CMAKE_IMPORT_LIBRARY_PREFIX}${target_name}.pdb
@@ -60,7 +60,7 @@ ENDMACRO (INSTALL_TARGET_PDB)
#-------------------------------------------------------------------------------
MACRO (INSTALL_PROGRAM_PDB progtarget targetdestination targetcomponent)
if (WIN32 AND MSVC)
- get_target_property (target_name ${progtarget} RELWITHDEBINFO_OUTPUT_NAME)
+ get_target_property (target_name ${progtarget} OUTPUT_NAME_RELWITHDEBINFO)
get_target_property (target_prefix ${progtarget} PREFIX)
install (
FILES
@@ -75,7 +75,6 @@ ENDMACRO (INSTALL_PROGRAM_PDB)
#-------------------------------------------------------------------------------
MACRO (HDF_SET_LIB_OPTIONS libtarget libname libtype)
- # message (STATUS "${libname} libtype: ${libtype}")
if (${libtype} MATCHES "SHARED")
if (WIN32)
set (LIB_RELEASE_NAME "${libname}")
@@ -89,23 +88,17 @@ MACRO (HDF_SET_LIB_OPTIONS libtarget libname libtype)
set (LIB_RELEASE_NAME "lib${libname}")
set (LIB_DEBUG_NAME "lib${libname}_D")
else (WIN32)
- # if the generator supports configuration types or if the CMAKE_BUILD_TYPE has a value
- if (CMAKE_CONFIGURATION_TYPES OR CMAKE_BUILD_TYPE)
- set (LIB_RELEASE_NAME "${libname}")
- set (LIB_DEBUG_NAME "${libname}_debug")
- else (CMAKE_CONFIGURATION_TYPES OR CMAKE_BUILD_TYPE)
- set (LIB_RELEASE_NAME "lib${libname}")
- set (LIB_DEBUG_NAME "lib${libname}_debug")
- endif (CMAKE_CONFIGURATION_TYPES OR CMAKE_BUILD_TYPE)
+ set (LIB_RELEASE_NAME "${libname}")
+ set (LIB_DEBUG_NAME "${libname}_debug")
endif (WIN32)
endif (${libtype} MATCHES "SHARED")
set_target_properties (${libtarget}
PROPERTIES
- DEBUG_OUTPUT_NAME ${LIB_DEBUG_NAME}
- RELEASE_OUTPUT_NAME ${LIB_RELEASE_NAME}
- MINSIZEREL_OUTPUT_NAME ${LIB_RELEASE_NAME}
- RELWITHDEBINFO_OUTPUT_NAME ${LIB_RELEASE_NAME}
+ OUTPUT_NAME_DEBUG ${LIB_DEBUG_NAME}
+ OUTPUT_NAME_RELEASE ${LIB_RELEASE_NAME}
+ OUTPUT_NAME_MINSIZEREL ${LIB_RELEASE_NAME}
+ OUTPUT_NAME_RELWITHDEBINFO ${LIB_RELEASE_NAME}
)
#----- Use MSVC Naming conventions for Shared Libraries
@@ -121,6 +114,62 @@ MACRO (HDF_SET_LIB_OPTIONS libtarget libname libtype)
ENDMACRO (HDF_SET_LIB_OPTIONS)
#-------------------------------------------------------------------------------
+MACRO (HDF_IMPORT_SET_LIB_OPTIONS libtarget libname libtype libversion)
+ HDF_SET_LIB_OPTIONS (${libtarget} ${libname} ${libtype})
+
+ if (${importtype} MATCHES "IMPORT")
+ set (importprefix "${CMAKE_STATIC_LIBRARY_PREFIX}")
+ endif (${importtype} MATCHES "IMPORT")
+ if (${CMAKE_BUILD_TYPE} MATCHES "Debug")
+ set (IMPORT_LIB_NAME ${LIB_DEBUG_NAME})
+ else (${CMAKE_BUILD_TYPE} MATCHES "Debug")
+ set (IMPORT_LIB_NAME ${LIB_RELEASE_NAME})
+ endif (${CMAKE_BUILD_TYPE} MATCHES "Debug")
+
+ if (${libtype} MATCHES "SHARED")
+ if (WIN32)
+ if (MINGW)
+ set_target_properties (${libtarget} PROPERTIES
+ IMPORTED_IMPLIB "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${IMPORT_LIB_NAME}.lib"
+ IMPORTED_LOCATION "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${IMPORT_LIB_NAME}${CMAKE_SHARED_LIBRARY_SUFFIX}"
+ )
+ else (MINGW)
+ set_target_properties (${libtarget} PROPERTIES
+ IMPORTED_IMPLIB "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_BUILD_TYPE}/${CMAKE_IMPORT_LIBRARY_PREFIX}${IMPORT_LIB_NAME}${CMAKE_IMPORT_LIBRARY_SUFFIX}"
+ IMPORTED_LOCATION "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_BUILD_TYPE}/${CMAKE_IMPORT_LIBRARY_PREFIX}${IMPORT_LIB_NAME}${CMAKE_SHARED_LIBRARY_SUFFIX}"
+ )
+ endif (MINGW)
+ else (WIN32)
+ if (CYGWIN)
+ set_target_properties (${libtarget} PROPERTIES
+ IMPORTED_IMPLIB "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_IMPORT_LIBRARY_PREFIX}${IMPORT_LIB_NAME}${CMAKE_IMPORT_LIBRARY_SUFFIX}"
+ IMPORTED_LOCATION "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_IMPORT_LIBRARY_PREFIX}${IMPORT_LIB_NAME}${CMAKE_SHARED_LIBRARY_SUFFIX}"
+ )
+ else (CYGWIN)
+ set_target_properties (${libtarget} PROPERTIES
+ IMPORTED_LOCATION "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_SHARED_LIBRARY_PREFIX}${IMPORT_LIB_NAME}${CMAKE_SHARED_LIBRARY_SUFFIX}"
+ IMPORTED_SONAME "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_SHARED_LIBRARY_PREFIX}${IMPORT_LIB_NAME}${CMAKE_SHARED_LIBRARY_SUFFIX}.${libversion}"
+ SOVERSION "${libversion}"
+ )
+ endif (CYGWIN)
+ endif (WIN32)
+ else (${libtype} MATCHES "SHARED")
+ if (WIN32 AND NOT MINGW)
+ set_target_properties (${libtarget} PROPERTIES
+ IMPORTED_LOCATION "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_BUILD_TYPE}/${IMPORT_LIB_NAME}${CMAKE_STATIC_LIBRARY_SUFFIX}"
+ IMPORTED_LINK_INTERFACE_LANGUAGES "C"
+ )
+ else (WIN32 AND NOT MINGW)
+ set_target_properties (${libtarget} PROPERTIES
+ IMPORTED_LOCATION "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_STATIC_LIBRARY_PREFIX}${IMPORT_LIB_NAME}${CMAKE_STATIC_LIBRARY_SUFFIX}"
+ IMPORTED_LINK_INTERFACE_LANGUAGES "C"
+ )
+ endif (WIN32 AND NOT MINGW)
+ endif (${libtype} MATCHES "SHARED")
+
+ENDMACRO (HDF_IMPORT_SET_LIB_OPTIONS)
+
+#-------------------------------------------------------------------------------
MACRO (TARGET_C_PROPERTIES wintarget addcompileflags addlinkflags)
if (MSVC)
TARGET_MSVC_PROPERTIES (${wintarget} "${addcompileflags} ${WIN_COMPILE_FLAGS}" "${addlinkflags} ${WIN_LINK_FLAGS}")
@@ -185,3 +234,55 @@ MACRO (TARGET_FORTRAN_WIN_PROPERTIES forttarget addcompileflags addlinkflags)
endif (BUILD_SHARED_LIBS)
endif (MSVC)
ENDMACRO (TARGET_FORTRAN_WIN_PROPERTIES)
+
+#-----------------------------------------------------------------------------
+# Configure the README.txt file for the binary package
+#-----------------------------------------------------------------------------
+MACRO (HDF_README_PROPERTIES target_fortran)
+ set (BINARY_SYSTEM_NAME ${CMAKE_SYSTEM_NAME})
+ set (BINARY_PLATFORM "${CMAKE_SYSTEM_NAME}")
+ if (WIN32)
+ set (BINARY_EXAMPLE_ENDING "zip")
+ set (BINARY_INSTALL_ENDING "exe")
+ if (CMAKE_CL_64)
+ set (BINARY_SYSTEM_NAME "win64")
+ else (CMAKE_CL_64)
+ set (BINARY_SYSTEM_NAME "win32")
+ endif (CMAKE_CL_64)
+ if (${CMAKE_SYSTEM_VERSION} MATCHES "6.1")
+ set (BINARY_PLATFORM "${BINARY_PLATFORM} 7")
+ elseif (${CMAKE_SYSTEM_VERSION} MATCHES "6.2")
+ set (BINARY_PLATFORM "${BINARY_PLATFORM} 8")
+ endif (${CMAKE_SYSTEM_VERSION} MATCHES "6.1")
+ set (BINARY_PLATFORM "${BINARY_PLATFORM} ${MSVC_C_ARCHITECTURE_ID}")
+ if (${CMAKE_C_COMPILER_VERSION} MATCHES "16.*")
+ set (BINARY_PLATFORM "${BINARY_PLATFORM}, using VISUAL STUDIO 2010")
+ elseif (${CMAKE_C_COMPILER_VERSION} MATCHES "15.*")
+ set (BINARY_PLATFORM "${BINARY_PLATFORM}, using VISUAL STUDIO 2008")
+ elseif (${CMAKE_C_COMPILER_VERSION} MATCHES "17.*")
+ set (BINARY_PLATFORM "${BINARY_PLATFORM}, using VISUAL STUDIO 2012")
+ elseif (${CMAKE_C_COMPILER_VERSION} MATCHES "18.*")
+ set (BINARY_PLATFORM "${BINARY_PLATFORM}, using VISUAL STUDIO 2013")
+ else (${CMAKE_C_COMPILER_VERSION} MATCHES "16.*")
+ set (BINARY_PLATFORM "${BINARY_PLATFORM}, using VISUAL STUDIO ${CMAKE_C_COMPILER_VERSION}")
+ endif (${CMAKE_C_COMPILER_VERSION} MATCHES "16.*")
+ elseif (APPLE)
+ set (BINARY_EXAMPLE_ENDING "tar.gz")
+ set (BINARY_INSTALL_ENDING "dmg")
+ set (BINARY_PLATFORM "${BINARY_PLATFORM} ${CMAKE_SYSTEM_VERSION} ${CMAKE_SYSTEM_PROCESSOR}")
+ set (BINARY_PLATFORM "${BINARY_PLATFORM}, using ${CMAKE_C_COMPILER_ID} C ${CMAKE_C_COMPILER_VERSION}")
+ else (WIN32)
+ set (BINARY_EXAMPLE_ENDING "tar.gz")
+ set (BINARY_INSTALL_ENDING "sh")
+ set (BINARY_PLATFORM "${BINARY_PLATFORM} ${CMAKE_SYSTEM_VERSION} ${CMAKE_SYSTEM_PROCESSOR}")
+ set (BINARY_PLATFORM "${BINARY_PLATFORM}, using ${CMAKE_C_COMPILER_ID} C ${CMAKE_C_COMPILER_VERSION}")
+ endif (WIN32)
+ if (target_fortran)
+ set (BINARY_PLATFORM "${BINARY_PLATFORM} / ${CMAKE_Fortran_COMPILER_ID} Fortran")
+ endif (target_fortran)
+
+ configure_file (
+ ${HDF_RESOURCES_DIR}/README.txt.cmake.in
+ ${CMAKE_BINARY_DIR}/README.txt @ONLY
+ )
+ENDMACRO (HDF_README_PROPERTIES)
diff --git a/config/cmake/HDF5Tests.c b/config/cmake_ext_mod/HDFTests.c
similarity index 100%
rename from config/cmake/HDF5Tests.c
rename to config/cmake_ext_mod/HDFTests.c
diff --git a/config/cmake/HDF5UseFortran.cmake b/config/cmake_ext_mod/HDFUseFortran.cmake
similarity index 89%
rename from config/cmake/HDF5UseFortran.cmake
rename to config/cmake_ext_mod/HDFUseFortran.cmake
index e65ea21..4955d20 100644
--- a/config/cmake/HDF5UseFortran.cmake
+++ b/config/cmake_ext_mod/HDFUseFortran.cmake
@@ -75,6 +75,8 @@ ENDMACRO (CHECK_FORTRAN_FEATURE)
#
# Be careful with leading spaces here, do not remove them.
#-----------------------------------------------------------------------------
+
+# Check for Non-standard extension intrinsic function SIZEOF
CHECK_FORTRAN_FEATURE(sizeof
"
PROGRAM main
@@ -84,6 +86,32 @@ CHECK_FORTRAN_FEATURE(sizeof
FORTRAN_HAVE_SIZEOF
)
+# Check for F2008 standard intrinsic function C_SIZEOF
+CHECK_FORTRAN_FEATURE(c_sizeof
+ "
+ PROGRAM main
+ USE ISO_C_BINDING
+ INTEGER(C_INT) :: a
+ INTEGER(C_SIZE_T) :: result
+ result = c_sizeof(a)
+ END PROGRAM
+ "
+ FORTRAN_HAVE_C_SIZEOF
+)
+
+# Check for F2008 standard intrinsic function STORAGE_SIZE
+CHECK_FORTRAN_FEATURE(storage_size
+ "
+ PROGRAM main
+ INTEGER :: a
+ INTEGER :: result
+ result = storage_size(a)
+ END PROGRAM
+ "
+ FORTRAN_HAVE_STORAGE_SIZE
+)
+
+
CHECK_FORTRAN_FEATURE(RealIsNotDouble
"
MODULE type_mod
diff --git a/config/cmake/NSIS.InstallOptions.ini.in b/config/cmake_ext_mod/NSIS.InstallOptions.ini.in
similarity index 82%
rename from config/cmake/NSIS.InstallOptions.ini.in
rename to config/cmake_ext_mod/NSIS.InstallOptions.ini.in
index 83ca053..35c1033 100644
--- a/config/cmake/NSIS.InstallOptions.ini.in
+++ b/config/cmake_ext_mod/NSIS.InstallOptions.ini.in
@@ -3,7 +3,7 @@ NumFields=5
[Field 1]
Type=label
-Text=By default @CPACK_PACKAGE_INSTALL_DIRECTORY@ does add its directory to the system PATH.
+Text=By default the @CPACK_PACKAGE_INSTALL_DIRECTORY@/bin directory is added to the system PATH.
Left=0
Right=-1
Top=0
diff --git a/config/cmake/NSIS.template.in b/config/cmake_ext_mod/NSIS.template.in
similarity index 100%
rename from config/cmake/NSIS.template.in
rename to config/cmake_ext_mod/NSIS.template.in
diff --git a/config/cmake/grepTest.cmake b/config/cmake_ext_mod/grepTest.cmake
similarity index 100%
rename from config/cmake/grepTest.cmake
rename to config/cmake_ext_mod/grepTest.cmake
diff --git a/config/cmake/hdf.bmp b/config/cmake_ext_mod/hdf.bmp
similarity index 100%
rename from config/cmake/hdf.bmp
rename to config/cmake_ext_mod/hdf.bmp
diff --git a/config/cmake/hdf.icns b/config/cmake_ext_mod/hdf.icns
old mode 100755
new mode 100644
similarity index 100%
rename from config/cmake/hdf.icns
rename to config/cmake_ext_mod/hdf.icns
diff --git a/config/cmake/hdf.ico b/config/cmake_ext_mod/hdf.ico
similarity index 100%
rename from config/cmake/hdf.ico
rename to config/cmake_ext_mod/hdf.ico
diff --git a/config/cmake/prunTest.cmake b/config/cmake_ext_mod/prunTest.cmake
similarity index 100%
rename from config/cmake/prunTest.cmake
rename to config/cmake_ext_mod/prunTest.cmake
diff --git a/config/cmake/runTest.cmake b/config/cmake_ext_mod/runTest.cmake
similarity index 90%
rename from config/cmake/runTest.cmake
rename to config/cmake_ext_mod/runTest.cmake
index 879426c..bfaae2b 100644
--- a/config/cmake/runTest.cmake
+++ b/config/cmake_ext_mod/runTest.cmake
@@ -35,16 +35,30 @@ if (TEST_ENV_VAR)
set (ENV{${TEST_ENV_VAR}} "${TEST_ENV_VALUE}")
endif (TEST_ENV_VAR)
-# run the test program, capture the stdout/stderr and the result var
-EXECUTE_PROCESS (
- COMMAND ${TEST_PROGRAM} ${TEST_ARGS}
- WORKING_DIRECTORY ${TEST_FOLDER}
- RESULT_VARIABLE TEST_RESULT
- OUTPUT_FILE ${TEST_OUTPUT}
- ERROR_FILE ${TEST_OUTPUT}.err
- OUTPUT_VARIABLE TEST_ERROR
- ERROR_VARIABLE TEST_ERROR
-)
+if (NOT TEST_INPUT)
+ # run the test program, capture the stdout/stderr and the result var
+ EXECUTE_PROCESS (
+ COMMAND ${TEST_PROGRAM} ${TEST_ARGS}
+ WORKING_DIRECTORY ${TEST_FOLDER}
+ RESULT_VARIABLE TEST_RESULT
+ OUTPUT_FILE ${TEST_OUTPUT}
+ ERROR_FILE ${TEST_OUTPUT}.err
+ OUTPUT_VARIABLE TEST_ERROR
+ ERROR_VARIABLE TEST_ERROR
+ )
+else (NOT TEST_INPUT)
+ # run the test program with stdin, capture the stdout/stderr and the result var
+ EXECUTE_PROCESS (
+ COMMAND ${TEST_PROGRAM} ${TEST_ARGS}
+ WORKING_DIRECTORY ${TEST_FOLDER}
+ RESULT_VARIABLE TEST_RESULT
+ INPUT_FILE ${TEST_INPUT}
+ OUTPUT_FILE ${TEST_OUTPUT}
+ ERROR_FILE ${TEST_OUTPUT}.err
+ OUTPUT_VARIABLE TEST_ERROR
+ ERROR_VARIABLE TEST_ERROR
+ )
+endif (NOT TEST_INPUT)
message (STATUS "COMMAND Result: ${TEST_RESULT}")
diff --git a/config/cmake/version.plist.in b/config/cmake_ext_mod/version.plist.in
similarity index 100%
rename from config/cmake/version.plist.in
rename to config/cmake_ext_mod/version.plist.in
diff --git a/config/gnu-flags b/config/gnu-flags
index b965bf0..5f36eaa 100644
--- a/config/gnu-flags
+++ b/config/gnu-flags
@@ -186,10 +186,86 @@ esac
# the information from the previous version and adding modifications to that.
case "$cc_vendor-$cc_version" in
-# Closer to the gcc 4.9 release, we should check for additional flags to
+# Closer to the gcc 4.10 release, we should check for additional flags to
# include and break it out into it's own section, like the other versions
# below. -QAK
- gcc-4.[89]*)
+ gcc-4.9*)
+ # Replace -ansi flag with -std=c99 flag
+ H5_CFLAGS="`echo $H5_CFLAGS | sed -e 's/-ansi/-std=c99/g'`"
+
+ # Append warning flags
+ # Don't use the '-Wtraditional' flag, we're way past having K&R C code
+ # H5_CFLAGS="$H5_CFLAGS -Wtraditional"
+ # Don't use the '-Wtraditional-conversion' flag, there's too many warnings
+ # from GCC's assert macro
+ # H5_CFLAGS="$H5_CFLAGS -Wtraditional-conversion"
+
+ # Append warning flags from gcc-3* case
+ # (don't use -Wpadded flag for normal builds, many of the warnings its
+ # issuing can't be fixed and they are making it hard to detect other,
+ # more important warnings)
+ #H5_CFLAGS="$H5_CFLAGS -Wfloat-equal -Wmissing-format-attribute -Wpadded"
+ H5_CFLAGS="$H5_CFLAGS -Wfloat-equal -Wmissing-format-attribute"
+
+ # Append warning flags from gcc-3.2* case
+ H5_CFLAGS="$H5_CFLAGS -Wmissing-noreturn -Wpacked -Wdisabled-optimization"
+
+ # Enable more format checking flags, beyond the basic -Wformat included
+ # in -Wall
+ H5_CFLAGS="$H5_CFLAGS -Wformat=2"
+
+ # The "unreachable code" warning appears to be reliable now...
+ H5_CFLAGS="$H5_CFLAGS -Wunreachable-code"
+
+ # Append warning flags from gcc-3.3* case
+ H5_CFLAGS="$H5_CFLAGS -Wendif-labels"
+
+ # Append warning flags from gcc-3.4* case
+ H5_CFLAGS="$H5_CFLAGS -Wdeclaration-after-statement -Wold-style-definition -Winvalid-pch"
+
+ # Replace old -W flag with new -Wextra flag
+ H5_CFLAGS="`echo $H5_CFLAGS | sed -e 's/-W\ /-Wextra\ /g'`"
+
+ # Append more extra warning flags that only gcc4.0+ know about
+ H5_CFLAGS="$H5_CFLAGS -Wvariadic-macros -Winit-self -Wmissing-include-dirs -Wswitch-default -Wswitch-enum -Wunused-macros"
+
+ # Append more extra warning flags that only gcc 4.1+ know about
+ H5_CFLAGS="$H5_CFLAGS -Wunsafe-loop-optimizations -Wc++-compat"
+
+ # Append more extra warning flags that only gcc 4.2+ know about
+ H5_CFLAGS="$H5_CFLAGS -Wstrict-overflow"
+
+ # Append more extra warning flags that only gcc 4.3+ know about
+ #
+ # Technically, variable-length arrays are part of the C99 standard, but
+ # we should approach them a bit cautiously... -QAK
+ H5_CFLAGS="$H5_CFLAGS -Wlogical-op -Wlarger-than=2048 -Wvla"
+
+ # Append more extra warning flags that only gcc 4.4+ know about
+ H5_CFLAGS="$H5_CFLAGS -Wsync-nand -Wframe-larger-than=16384 -Wpacked-bitfield-compat"
+
+ # Append more extra warning flags that only gcc 4.5+ know about
+ H5_CFLAGS="$H5_CFLAGS -Wstrict-overflow=5 -Wjump-misses-init -Wunsuffixed-float-constants"
+
+ # Append more extra warning flags that only gcc 4.6+ know about
+ H5_CFLAGS="$H5_CFLAGS -Wdouble-promotion -Wsuggest-attribute=const -Wtrampolines"
+
+ # Append more extra warning flags that only gcc 4.7+ know about
+ H5_CFLAGS="$H5_CFLAGS -Wstack-usage=8192 -Wvector-operation-performance -Wsuggest-attribute=pure -Wsuggest-attribute=noreturn"
+
+ # Append more extra warning flags that only gcc 4.8+ know about
+ H5_CFLAGS="$H5_CFLAGS -Wsuggest-attribute=format"
+
+ # Append more extra warning flags that only gcc 4.9+ know about
+ H5_CFLAGS="$H5_CFLAGS -Wdate-time -Wopenmp-simd"
+
+ # Try out the new "stack protector" feature in gcc 4.1
+ # (Strictly speaking this isn't really a "warning" flag, so it's added to
+ # the debugging flags)
+ #DEBUG_CFLAGS="$DEBUG_CFLAGS -Wstack-protector -fstack-protector-all"
+ ;;
+
+ gcc-4.8*)
# Replace -ansi flag with -std=c99 flag
H5_CFLAGS="`echo $H5_CFLAGS | sed -e 's/-ansi/-std=c99/g'`"
@@ -617,7 +693,7 @@ case "$cc_vendor-$cc_version" in
#DEBUG_CFLAGS="$DEBUG_CFLAGS -Wstack-protector -fstack-protector-all"
;;
- gcc-4.1*)
+ gcc-4.1.*)
# Replace -ansi flag with -std=c99 flag
H5_CFLAGS="`echo $H5_CFLAGS | sed -e 's/-ansi/-std=c99/g'`"
diff --git a/config/lt_vers.am b/config/lt_vers.am
index d7d5848..6bba170 100644
--- a/config/lt_vers.am
+++ b/config/lt_vers.am
@@ -16,8 +16,10 @@
##
# Add libtool shared library version numbers to the HDF5 library
# See libtool versioning documentation online.
-LT_VERS_INTERFACE = 8
-LT_VERS_REVISION = 2
+# After making changes, run bin/reconfigure to update other configure related
+# files like Makefile.in.
+LT_VERS_INTERFACE = 9
+LT_VERS_REVISION = 0
LT_VERS_AGE = 0
## If the API changes *at all*, increment LT_VERS_INTERFACE and
diff --git a/configure b/configure
index f1b9ed1..cedf33d 100755
--- a/configure
+++ b/configure
@@ -1,7 +1,7 @@
#! /bin/sh
-# From configure.ac Id: configure.ac 25134 2014-04-29 01:57:33Z epourmal .
+# From configure.ac Id: configure.ac 25753 2014-10-29 23:01:13Z acheng .
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for HDF5 1.8.13.
+# Generated by GNU Autoconf 2.69 for HDF5 1.8.14.
#
# Report bugs to <help at hdfgroup.org>.
#
@@ -591,8 +591,8 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='HDF5'
PACKAGE_TARNAME='hdf5'
-PACKAGE_VERSION='1.8.13'
-PACKAGE_STRING='HDF5 1.8.13'
+PACKAGE_VERSION='1.8.14'
+PACKAGE_STRING='HDF5 1.8.14'
PACKAGE_BUGREPORT='help at hdfgroup.org'
PACKAGE_URL=''
@@ -675,7 +675,6 @@ USE_FILTER_NBIT
USE_FILTER_FLETCHER32
USE_FILTER_SHUFFLE
FILTERS
-MPI_GET_SIZE
ADD_PARALLEL_FILES
USINGMEMCHECKER
CLEARFILEBUF
@@ -739,6 +738,10 @@ FORTRAN_DEFAULT_REALisDBLE_F_FALSE
FORTRAN_DEFAULT_REALisDBLE_F_TRUE
FORTRAN_2003_CONDITIONAL_F_FALSE
FORTRAN_2003_CONDITIONAL_F_TRUE
+FORTRAN_HAVE_STORAGE_SIZE_FALSE
+FORTRAN_HAVE_STORAGE_SIZE_TRUE
+FORTRAN_HAVE_C_SIZEOF_FALSE
+FORTRAN_HAVE_C_SIZEOF_TRUE
FORTRAN_HAVE_SIZEOF_FALSE
FORTRAN_HAVE_SIZEOF_TRUE
FCLIBS
@@ -919,7 +922,6 @@ enable_clear_file_buffers
enable_using_memchecker
enable_parallel
with_mpe
-enable_mpi_size
enable_filters
with_default_vfd
enable_direct_vfd
@@ -1488,7 +1490,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures HDF5 1.8.13 to adapt to many kinds of systems.
+\`configure' configures HDF5 1.8.14 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1558,7 +1560,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of HDF5 1.8.13:";;
+ short | recursive ) echo "Configuration of HDF5 1.8.14:";;
esac
cat <<\_ACEOF
@@ -1618,11 +1620,6 @@ Optional Features:
picky about it's memory operations and also disables
the library's free space manager code. Default=no.
--enable-parallel Search for MPI-IO and MPI support files
- --enable-mpi-size Some systems (only SGI Altix Propack 4 so far)
- return wrong value from MPI_File_get_size. By
- disabling this function, the library will replace it
- with stat to get the correct file size.
- [default=yes]
--enable-filters=all Turn on all internal I/O filters. One may also
specify a comma-separated list of filters or the
word no. The default is all internal I/O filters.
@@ -1759,7 +1756,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-HDF5 configure 1.8.13
+HDF5 configure 1.8.14
generated by GNU Autoconf 2.69
Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2853,7 +2850,7 @@ cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by HDF5 $as_me 1.8.13, which was
+It was created by HDF5 $as_me 1.8.14, which was
generated by GNU Autoconf 2.69. Invocation command line was
$ $0 $@
@@ -3724,7 +3721,7 @@ fi
# Define the identity of the package.
PACKAGE='hdf5'
- VERSION='1.8.13'
+ VERSION='1.8.14'
cat >>confdefs.h <<_ACEOF
@@ -4010,7 +4007,12 @@ AM_CFLAGS="${AM_CFLAGS}"
AM_CXXFLAGS="${AM_CXXFLAGS}"
AM_FCFLAGS="${AM_FCFLAGS}"
AM_CPPFLAGS="${AM_CPPFLAGS}"
-AM_LDFLAGS="${AM_LDFLAGS}"
+# Added to address HDFFV-8944
+if test "x$prefix" = xNONE; then
+ AM_LDFLAGS="$AM_LDFLAGS -L$ac_default_prefix/lib"
+else
+ AM_LDFLAGS="$AM_LDFLAGS -L$prefix/lib"
+fi
CFLAGS="${CFLAGS}"
CXXFLAGS="${CXXFLAGS}"
FCFLAGS="${FCFLAGS}"
@@ -5364,6 +5366,8 @@ else
fi
HAVE_SIZEOF="no"
+HAVE_C_SIZEOF="no"
+HAVE_STORAGE_SIZE="no"
FORTRAN_DEFAULT_REALisDBLE="no"
if test "X$HDF_FORTRAN" = "Xyes"; then
@@ -6703,6 +6707,71 @@ rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
fi
+ ## See if the fortran compiler supports the intrinsic function "C_SIZEOF"
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if Fortran compiler supports intrinsic C_SIZEOF" >&5
+$as_echo_n "checking if Fortran compiler supports intrinsic C_SIZEOF... " >&6; }
+ if test "$cross_compiling" = yes; then :
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot run test program while cross compiling
+See \`config.log' for more details" "$LINENO" 5; }
+else
+ cat > conftest.$ac_ext <<_ACEOF
+
+ PROGRAM main
+ USE ISO_C_BINDING
+ INTEGER(C_INT) :: a
+ INTEGER(C_SIZE_T) :: result
+ result = C_SIZEOF(a)
+ END PROGRAM
+
+_ACEOF
+if ac_fn_fc_try_run "$LINENO"; then :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ HAVE_C_SIZEOF="yes"
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+ ## See if the fortran compiler supports the intrinsic function "STORAGE_SIZE"
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if Fortran compiler supports intrinsic STORAGE_SIZE" >&5
+$as_echo_n "checking if Fortran compiler supports intrinsic STORAGE_SIZE... " >&6; }
+ if test "$cross_compiling" = yes; then :
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot run test program while cross compiling
+See \`config.log' for more details" "$LINENO" 5; }
+else
+ cat > conftest.$ac_ext <<_ACEOF
+
+ PROGRAM main
+ INTEGER :: a
+ INTEGER :: result
+ result = STORAGE_SIZE(a)
+ END PROGRAM
+
+_ACEOF
+if ac_fn_fc_try_run "$LINENO"; then :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ HAVE_STORAGE_SIZE="yes"
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
## Check to see if -r8 was specified to determine if we need to
## compile the DOUBLE PRECISION interfaces.
@@ -6813,6 +6882,22 @@ else
FORTRAN_HAVE_SIZEOF_FALSE=
fi
+ if test "X$HAVE_C_SIZEOF" = "Xyes"; then
+ FORTRAN_HAVE_C_SIZEOF_TRUE=
+ FORTRAN_HAVE_C_SIZEOF_FALSE='#'
+else
+ FORTRAN_HAVE_C_SIZEOF_TRUE='#'
+ FORTRAN_HAVE_C_SIZEOF_FALSE=
+fi
+
+ if test "X$HAVE_STORAGE_SIZE" = "Xyes"; then
+ FORTRAN_HAVE_STORAGE_SIZE_TRUE=
+ FORTRAN_HAVE_STORAGE_SIZE_FALSE='#'
+else
+ FORTRAN_HAVE_STORAGE_SIZE_TRUE='#'
+ FORTRAN_HAVE_STORAGE_SIZE_FALSE=
+fi
+
if test "X$HAVE_FORTRAN_2003" = "Xyes"; then
FORTRAN_2003_CONDITIONAL_F_TRUE=
FORTRAN_2003_CONDITIONAL_F_FALSE='#'
@@ -6830,6 +6915,8 @@ else
fi
+
+
## ----------------------------------------------------------------------
## Check if they would like the C++ interface compiled
##
@@ -27307,7 +27394,7 @@ _ACEOF
fi
done
-for ac_func in tmpfile vasprintf waitpid
+for ac_func in tmpfile asprintf vasprintf waitpid
do :
as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
@@ -29169,65 +29256,6 @@ fi
$as_echo "#define HAVE_MPE 1" >>confdefs.h
fi
-
- ## ----------------------------------------------------------------------
- ## Set the flag to indicate that the MPI_File_set_size() function
- ## works with files over 2GB, unless it's already set in the cache.
- ## (This flag should be set for all machines, except for ASCI Red, where
- ## the cache value is set in it's config file)
- ##
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking if MPI_File_set_size works for files over 2GB" >&5
-$as_echo_n "checking if MPI_File_set_size works for files over 2GB... " >&6; }
- if ${hdf5_cv_mpi_file_set_size_big+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- hdf5_cv_mpi_file_set_size_big=yes
-fi
-
-
- if test ${hdf5_cv_mpi_file_set_size_big} = "yes"; then
-
-$as_echo "#define MPI_FILE_SET_SIZE_BIG 1" >>confdefs.h
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- fi
-
- ## ----------------------------------------------------------------------
- ## Set the flag to indicate that the MPI_File_get_size() function
- ## works. The default is enabled unless the user knows the function
- ## doesn't work on the system and disables it. (This flag should be set
- ## for all machines except for SGI Altix Propack 4 where the function
- ## doesn't return correct file size.)
- ##
- # Check whether --enable-mpi-size was given.
-if test "${enable_mpi_size+set}" = set; then :
- enableval=$enable_mpi_size; MPI_GET_SIZE=$enableval
-fi
-
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking if MPI_File_get_size is enabled" >&5
-$as_echo_n "checking if MPI_File_get_size is enabled... " >&6; }
-
-
- case "X-$MPI_GET_SIZE" in
- X-no)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- MPI_GET_SIZE=no
- ;;
- X-yes|*)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
- MPI_GET_SIZE=yes
-
-$as_echo "#define HAVE_MPI_GET_SIZE 1" >>confdefs.h
-
- ;;
- esac
fi
## ----------------------------------------------------------------------
@@ -30973,10 +31001,17 @@ if test "X$HDF5_HL" = "Xyes"; then
$as_echo "#define INCLUDE_HL 1" >>confdefs.h
+
+## Check if Fortran's default real is double precision. If it is and HL is being built then configure
+## should fail due to bug HDFFV-889.
+ if test "X$FORTRAN_DEFAULT_REALisDBLE" = "Xyes"; then
+ as_fn_error $? "Fortran high-level routines are not supported when the default REAL is DOUBLE PRECISION, use configure option --disable-hl." "$LINENO" 5
+ fi
else
echo "no"
fi
+
## ----------------------------------------------------------------------
## Some programs shouldn't be built by default (e.g., programs to generate
## data files used by tests, some optional tests).
@@ -31721,7 +31756,7 @@ Usage: $0 [OPTIONS]
Report bugs to <bug-libtool at gnu.org>."
lt_cl_version="\
-HDF5 config.lt 1.8.13
+HDF5 config.lt 1.8.14
configured by $0, generated by GNU Autoconf 2.69.
Copyright (C) 2011 Free Software Foundation, Inc.
@@ -33401,6 +33436,14 @@ if test -z "${FORTRAN_HAVE_SIZEOF_TRUE}" && test -z "${FORTRAN_HAVE_SIZEOF_FALSE
as_fn_error $? "conditional \"FORTRAN_HAVE_SIZEOF\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
+if test -z "${FORTRAN_HAVE_C_SIZEOF_TRUE}" && test -z "${FORTRAN_HAVE_C_SIZEOF_FALSE}"; then
+ as_fn_error $? "conditional \"FORTRAN_HAVE_C_SIZEOF\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${FORTRAN_HAVE_STORAGE_SIZE_TRUE}" && test -z "${FORTRAN_HAVE_STORAGE_SIZE_FALSE}"; then
+ as_fn_error $? "conditional \"FORTRAN_HAVE_STORAGE_SIZE\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
if test -z "${FORTRAN_2003_CONDITIONAL_F_TRUE}" && test -z "${FORTRAN_2003_CONDITIONAL_F_FALSE}"; then
as_fn_error $? "conditional \"FORTRAN_2003_CONDITIONAL_F\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
@@ -33855,7 +33898,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
-This file was extended by HDF5 $as_me 1.8.13, which was
+This file was extended by HDF5 $as_me 1.8.14, which was
generated by GNU Autoconf 2.69. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -33921,7 +33964,7 @@ _ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\
-HDF5 config.status 1.8.13
+HDF5 config.status 1.8.14
configured by $0, generated by GNU Autoconf 2.69,
with options \\"\$ac_cs_config\\"
diff --git a/configure.ac b/configure.ac
index d8a67b7..71070ba 100644
--- a/configure.ac
+++ b/configure.ac
@@ -16,7 +16,7 @@
## ----------------------------------------------------------------------
## Initialize configure.
##
-AC_REVISION($Id: configure.ac 25134 2014-04-29 01:57:33Z epourmal $)
+AC_REVISION($Id: configure.ac 25805 2014-11-07 13:00:29Z epourmal $)
AC_PREREQ([2.69])
## AC_INIT takes the name of the package, the version number, and an
@@ -26,7 +26,7 @@ AC_PREREQ([2.69])
## NOTE: Do not forget to change the version number here when we do a
## release!!!
##
-AC_INIT([HDF5], [1.8.13], [help at hdfgroup.org])
+AC_INIT([HDF5], [1.8.14], [help at hdfgroup.org])
AC_CONFIG_SRCDIR([src/H5.c])
AC_CONFIG_HEADER([src/H5config.h])
@@ -115,7 +115,12 @@ AM_CFLAGS="${AM_CFLAGS}"
AM_CXXFLAGS="${AM_CXXFLAGS}"
AM_FCFLAGS="${AM_FCFLAGS}"
AM_CPPFLAGS="${AM_CPPFLAGS}"
-AM_LDFLAGS="${AM_LDFLAGS}"
+# Added to address HDFFV-8944
+if test "x$prefix" = xNONE; then
+ AM_LDFLAGS="$AM_LDFLAGS -L$ac_default_prefix/lib"
+else
+ AM_LDFLAGS="$AM_LDFLAGS -L$prefix/lib"
+fi
CFLAGS="${CFLAGS}"
CXXFLAGS="${CXXFLAGS}"
FCFLAGS="${FCFLAGS}"
@@ -403,6 +408,8 @@ else
fi
HAVE_SIZEOF="no"
+HAVE_C_SIZEOF="no"
+HAVE_STORAGE_SIZE="no"
FORTRAN_DEFAULT_REALisDBLE="no"
if test "X$HDF_FORTRAN" = "Xyes"; then
@@ -483,6 +490,33 @@ if test "X$HDF_FORTRAN" = "Xyes"; then
HAVE_SIZEOF="yes"],
[AC_MSG_RESULT([no])])
+ ## See if the fortran compiler supports the intrinsic function "C_SIZEOF"
+
+ AC_MSG_CHECKING([if Fortran compiler supports intrinsic C_SIZEOF])
+ AC_TRY_RUN([
+ PROGRAM main
+ USE ISO_C_BINDING
+ INTEGER(C_INT) :: a
+ INTEGER(C_SIZE_T) :: result
+ result = C_SIZEOF(a)
+ END PROGRAM
+ ], [AC_MSG_RESULT([yes])
+ HAVE_C_SIZEOF="yes"],
+ [AC_MSG_RESULT([no])])
+
+ ## See if the fortran compiler supports the intrinsic function "STORAGE_SIZE"
+
+ AC_MSG_CHECKING([if Fortran compiler supports intrinsic STORAGE_SIZE])
+ AC_TRY_RUN([
+ PROGRAM main
+ INTEGER :: a
+ INTEGER :: result
+ result = STORAGE_SIZE(a)
+ END PROGRAM
+ ], [AC_MSG_RESULT([yes])
+ HAVE_STORAGE_SIZE="yes"],
+ [AC_MSG_RESULT([no])])
+
## Check to see if -r8 was specified to determine if we need to
## compile the DOUBLE PRECISION interfaces.
@@ -552,9 +586,13 @@ fi
AC_LANG_POP(Fortran)
AM_CONDITIONAL([FORTRAN_HAVE_SIZEOF], [test "X$HAVE_SIZEOF" = "Xyes"])
+AM_CONDITIONAL([FORTRAN_HAVE_C_SIZEOF], [test "X$HAVE_C_SIZEOF" = "Xyes"])
+AM_CONDITIONAL([FORTRAN_HAVE_STORAGE_SIZE], [test "X$HAVE_STORAGE_SIZE" = "Xyes"])
AM_CONDITIONAL([FORTRAN_2003_CONDITIONAL_F], [test "X$HAVE_FORTRAN_2003" = "Xyes"])
AM_CONDITIONAL([FORTRAN_DEFAULT_REALisDBLE_F], [test "X$FORTRAN_DEFAULT_REALisDBLE" = "Xyes"])
+
+
## ----------------------------------------------------------------------
## Check if they would like the C++ interface compiled
##
@@ -2217,7 +2255,7 @@ AC_CHECK_FUNCS([gethostname getpwuid getrusage lstat])
AC_CHECK_FUNCS([rand_r random setsysinfo])
AC_CHECK_FUNCS([signal longjmp setjmp siglongjmp sigsetjmp sigprocmask])
AC_CHECK_FUNCS([snprintf srandom strdup symlink system])
-AC_CHECK_FUNCS([tmpfile vasprintf waitpid])
+AC_CHECK_FUNCS([tmpfile asprintf vasprintf waitpid])
## Check for vsnprintf() separately, so we can detect situations where it
## doesn't return the correct size for formatted strings that are too large
@@ -2884,54 +2922,6 @@ if test -n "$PARALLEL"; then
if test "X-$MPE" = "X-yes"; then
AC_DEFINE([HAVE_MPE], [1], [Define if we have MPE support])
fi
-
- ## ----------------------------------------------------------------------
- ## Set the flag to indicate that the MPI_File_set_size() function
- ## works with files over 2GB, unless it's already set in the cache.
- ## (This flag should be set for all machines, except for ASCI Red, where
- ## the cache value is set in it's config file)
- ##
- AC_MSG_CHECKING([if MPI_File_set_size works for files over 2GB])
- AC_CACHE_VAL([hdf5_cv_mpi_file_set_size_big], [hdf5_cv_mpi_file_set_size_big=yes])
-
- if test ${hdf5_cv_mpi_file_set_size_big} = "yes"; then
- AC_DEFINE([MPI_FILE_SET_SIZE_BIG], [1],
- [Define if your system's `MPI_File_set_size' function works for files over 2GB.])
- AC_MSG_RESULT([yes])
- else
- AC_MSG_RESULT([no])
- fi
-
- ## ----------------------------------------------------------------------
- ## Set the flag to indicate that the MPI_File_get_size() function
- ## works. The default is enabled unless the user knows the function
- ## doesn't work on the system and disables it. (This flag should be set
- ## for all machines except for SGI Altix Propack 4 where the function
- ## doesn't return correct file size.)
- ##
- AC_ARG_ENABLE([mpi-size],
- [AS_HELP_STRING([--enable-mpi-size],
- [Some systems (only SGI Altix Propack 4 so far) return wrong value
- from MPI_File_get_size. By disabling this function, the library
- will replace it with stat to get the correct file size.
- [default=yes]])],
- [MPI_GET_SIZE=$enableval])
-
- AC_MSG_CHECKING([if MPI_File_get_size is enabled])
-
- AC_SUBST(MPI_GET_SIZE)
- case "X-$MPI_GET_SIZE" in
- X-no)
- AC_MSG_RESULT([no])
- MPI_GET_SIZE=no
- ;;
- X-yes|*)
- AC_MSG_RESULT([yes])
- MPI_GET_SIZE=yes
- AC_DEFINE([HAVE_MPI_GET_SIZE], [1],
- [Define if MPI_File_get_size works correctly])
- ;;
- esac
fi
## ----------------------------------------------------------------------
@@ -4190,10 +4180,17 @@ if test "X$HDF5_HL" = "Xyes"; then
HL="hl"
AC_DEFINE([INCLUDE_HL], [1],
[Define if HDF5's high-level library headers should be included in hdf5.h])
+
+## Check if Fortran's default real is double precision. If it is and HL is being built then configure
+## should fail due to bug HDFFV-889.
+ if test "X$FORTRAN_DEFAULT_REALisDBLE" = "Xyes"; then
+ AC_MSG_ERROR([Fortran high-level routines are not supported when the default REAL is DOUBLE PRECISION, use configure option --disable-hl.])
+ fi
else
echo "no"
fi
+
## ----------------------------------------------------------------------
## Some programs shouldn't be built by default (e.g., programs to generate
## data files used by tests, some optional tests).
diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt
index fe8216d..4cd72a0 100644
--- a/examples/CMakeLists.txt
+++ b/examples/CMakeLists.txt
@@ -4,7 +4,7 @@ PROJECT (HDF5_EXAMPLES)
#-----------------------------------------------------------------------------
# Apply Definitions to compiler in this directory and below
#-----------------------------------------------------------------------------
-add_definitions (${HDF5_EXTRA_C_FLAGS})
+add_definitions (${HDF_EXTRA_C_FLAGS})
#-----------------------------------------------------------------------------
# Define Sources
diff --git a/examples/Makefile.in b/examples/Makefile.in
index 02db80c..71a9b4c 100644
--- a/examples/Makefile.in
+++ b/examples/Makefile.in
@@ -452,7 +452,6 @@ MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MPE = @MPE@
-MPI_GET_SIZE = @MPI_GET_SIZE@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
diff --git a/examples/h5_cmprss.c b/examples/h5_cmprss.c
index 4a2f982..8d365a3 100644
--- a/examples/h5_cmprss.c
+++ b/examples/h5_cmprss.c
@@ -1,125 +1,125 @@
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * Copyright by The HDF Group. *
- * Copyright by the Board of Trustees of the University of Illinois. *
- * All rights reserved. *
- * *
- * This file is part of HDF5. The full HDF5 copyright notice, including *
- * terms governing use, modification, and redistribution, is contained in *
- * the files COPYING and Copyright.html. COPYING can be found at the root *
- * of the source code distribution tree; Copyright.html can be found at the *
- * root level of an installed copy of the electronic HDF5 document set and *
- * is linked from the top-level documents page. It can also be found at *
- * http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have *
- * access to either file, you may request a copy from help at hdfgroup.org. *
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-
-/*
- * This example illustrates how to create a compressed dataset.
- * It is used in the HDF5 Tutorial.
- */
-
-#include "hdf5.h"
-
-#define FILE "cmprss.h5"
-#define RANK 2
-#define DIM0 100
-#define DIM1 20
-
-int main () {
-
- hid_t file_id, dataset_id, dataspace_id; /* identifiers */
- hid_t plist_id;
-
- size_t nelmts;
- unsigned flags, filter_info;
- H5Z_filter_t filter_type;
-
- herr_t status;
- hsize_t dims[2];
- hsize_t cdims[2];
-
- int idx;
- int i,j, numfilt;
- int buf[DIM0][DIM1];
- int rbuf [DIM0][DIM1];
-
- /* Uncomment these variables to use SZIP compression
- unsigned szip_options_mask;
- unsigned szip_pixels_per_block;
- */
-
- /* Create a file. */
- file_id = H5Fcreate (FILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
-
-
- /* Create dataset "Compressed Data" in the group using absolute name. */
- dims[0] = DIM0;
- dims[1] = DIM1;
- dataspace_id = H5Screate_simple (RANK, dims, NULL);
-
- plist_id = H5Pcreate (H5P_DATASET_CREATE);
-
- /* Dataset must be chunked for compression */
- cdims[0] = 20;
- cdims[1] = 20;
- status = H5Pset_chunk (plist_id, 2, cdims);
-
- /* Set ZLIB / DEFLATE Compression using compression level 6.
- * To use SZIP Compression comment out these lines.
- */
- status = H5Pset_deflate (plist_id, 6);
-
- /* Uncomment these lines to set SZIP Compression
- szip_options_mask = H5_SZIP_NN_OPTION_MASK;
- szip_pixels_per_block = 16;
- status = H5Pset_szip (plist_id, szip_options_mask, szip_pixels_per_block);
- */
-
- dataset_id = H5Dcreate2 (file_id, "Compressed_Data", H5T_STD_I32BE,
- dataspace_id, H5P_DEFAULT, plist_id, H5P_DEFAULT);
-
- for (i = 0; i< DIM0; i++)
- for (j=0; j<DIM1; j++)
- buf[i][j] = i+j;
-
- status = H5Dwrite (dataset_id, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf);
-
- status = H5Sclose (dataspace_id);
- status = H5Dclose (dataset_id);
- status = H5Pclose (plist_id);
- status = H5Fclose (file_id);
-
- /* Now reopen the file and dataset in the file. */
- file_id = H5Fopen (FILE, H5F_ACC_RDWR, H5P_DEFAULT);
- dataset_id = H5Dopen2 (file_id, "Compressed_Data", H5P_DEFAULT);
-
- /* Retrieve filter information. */
- plist_id = H5Dget_create_plist (dataset_id);
-
- numfilt = H5Pget_nfilters (plist_id);
- printf ("Number of filters associated with dataset: %i\n", numfilt);
-
- for (i=0; i<numfilt; i++) {
- nelmts = 0;
- filter_type = H5Pget_filter2 (plist_id, 0, &flags, &nelmts, NULL, 0, NULL,
- &filter_info);
- printf ("Filter Type: ");
- switch (filter_type) {
- case H5Z_FILTER_DEFLATE:
- printf ("H5Z_FILTER_DEFLATE\n");
- break;
- case H5Z_FILTER_SZIP:
- printf ("H5Z_FILTER_SZIP\n");
- break;
- default:
- printf ("Other filter type included.\n");
- }
- }
-
- status = H5Dread (dataset_id, H5T_NATIVE_INT, H5S_ALL, H5S_ALL,
- H5P_DEFAULT, rbuf);
-
- status = H5Dclose (dataset_id);
- status = H5Pclose (plist_id);
- status = H5Fclose (file_id);
-}
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group. *
+ * Copyright by the Board of Trustees of the University of Illinois. *
+ * All rights reserved. *
+ * *
+ * This file is part of HDF5. The full HDF5 copyright notice, including *
+ * terms governing use, modification, and redistribution, is contained in *
+ * the files COPYING and Copyright.html. COPYING can be found at the root *
+ * of the source code distribution tree; Copyright.html can be found at the *
+ * root level of an installed copy of the electronic HDF5 document set and *
+ * is linked from the top-level documents page. It can also be found at *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have *
+ * access to either file, you may request a copy from help at hdfgroup.org. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * This example illustrates how to create a compressed dataset.
+ * It is used in the HDF5 Tutorial.
+ */
+
+#include "hdf5.h"
+
+#define FILE "cmprss.h5"
+#define RANK 2
+#define DIM0 100
+#define DIM1 20
+
+int main () {
+
+ hid_t file_id, dataset_id, dataspace_id; /* identifiers */
+ hid_t plist_id;
+
+ size_t nelmts;
+ unsigned flags, filter_info;
+ H5Z_filter_t filter_type;
+
+ herr_t status;
+ hsize_t dims[2];
+ hsize_t cdims[2];
+
+ int idx;
+ int i,j, numfilt;
+ int buf[DIM0][DIM1];
+ int rbuf [DIM0][DIM1];
+
+ /* Uncomment these variables to use SZIP compression
+ unsigned szip_options_mask;
+ unsigned szip_pixels_per_block;
+ */
+
+ /* Create a file. */
+ file_id = H5Fcreate (FILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+
+
+ /* Create dataset "Compressed Data" in the group using absolute name. */
+ dims[0] = DIM0;
+ dims[1] = DIM1;
+ dataspace_id = H5Screate_simple (RANK, dims, NULL);
+
+ plist_id = H5Pcreate (H5P_DATASET_CREATE);
+
+ /* Dataset must be chunked for compression */
+ cdims[0] = 20;
+ cdims[1] = 20;
+ status = H5Pset_chunk (plist_id, 2, cdims);
+
+ /* Set ZLIB / DEFLATE Compression using compression level 6.
+ * To use SZIP Compression comment out these lines.
+ */
+ status = H5Pset_deflate (plist_id, 6);
+
+ /* Uncomment these lines to set SZIP Compression
+ szip_options_mask = H5_SZIP_NN_OPTION_MASK;
+ szip_pixels_per_block = 16;
+ status = H5Pset_szip (plist_id, szip_options_mask, szip_pixels_per_block);
+ */
+
+ dataset_id = H5Dcreate2 (file_id, "Compressed_Data", H5T_STD_I32BE,
+ dataspace_id, H5P_DEFAULT, plist_id, H5P_DEFAULT);
+
+ for (i = 0; i< DIM0; i++)
+ for (j=0; j<DIM1; j++)
+ buf[i][j] = i+j;
+
+ status = H5Dwrite (dataset_id, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf);
+
+ status = H5Sclose (dataspace_id);
+ status = H5Dclose (dataset_id);
+ status = H5Pclose (plist_id);
+ status = H5Fclose (file_id);
+
+ /* Now reopen the file and dataset in the file. */
+ file_id = H5Fopen (FILE, H5F_ACC_RDWR, H5P_DEFAULT);
+ dataset_id = H5Dopen2 (file_id, "Compressed_Data", H5P_DEFAULT);
+
+ /* Retrieve filter information. */
+ plist_id = H5Dget_create_plist (dataset_id);
+
+ numfilt = H5Pget_nfilters (plist_id);
+ printf ("Number of filters associated with dataset: %i\n", numfilt);
+
+ for (i=0; i<numfilt; i++) {
+ nelmts = 0;
+ filter_type = H5Pget_filter2 (plist_id, 0, &flags, &nelmts, NULL, 0, NULL,
+ &filter_info);
+ printf ("Filter Type: ");
+ switch (filter_type) {
+ case H5Z_FILTER_DEFLATE:
+ printf ("H5Z_FILTER_DEFLATE\n");
+ break;
+ case H5Z_FILTER_SZIP:
+ printf ("H5Z_FILTER_SZIP\n");
+ break;
+ default:
+ printf ("Other filter type included.\n");
+ }
+ }
+
+ status = H5Dread (dataset_id, H5T_NATIVE_INT, H5S_ALL, H5S_ALL,
+ H5P_DEFAULT, rbuf);
+
+ status = H5Dclose (dataset_id);
+ status = H5Pclose (plist_id);
+ status = H5Fclose (file_id);
+}
diff --git a/examples/h5_crtatt.c b/examples/h5_crtatt.c
index 416839f..5e1378c 100644
--- a/examples/h5_crtatt.c
+++ b/examples/h5_crtatt.c
@@ -1,63 +1,63 @@
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * Copyright by The HDF Group. *
- * Copyright by the Board of Trustees of the University of Illinois. *
- * All rights reserved. *
- * *
- * This file is part of HDF5. The full HDF5 copyright notice, including *
- * terms governing use, modification, and redistribution, is contained in *
- * the files COPYING and Copyright.html. COPYING can be found at the root *
- * of the source code distribution tree; Copyright.html can be found at the *
- * root level of an installed copy of the electronic HDF5 document set and *
- * is linked from the top-level documents page. It can also be found at *
- * http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have *
- * access to either file, you may request a copy from help at hdfgroup.org. *
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-
-/*
- * This example illustrates how to create an attribute attached to a
- * dataset. It is used in the HDF5 Tutorial.
- */
-
-#include "hdf5.h"
-#define FILE "dset.h5"
-
-int main() {
-
- hid_t file_id, dataset_id, attribute_id, dataspace_id; /* identifiers */
- hsize_t dims;
- int attr_data[2];
- herr_t status;
-
- /* Initialize the attribute data. */
- attr_data[0] = 100;
- attr_data[1] = 200;
-
- /* Open an existing file. */
- file_id = H5Fopen(FILE, H5F_ACC_RDWR, H5P_DEFAULT);
-
- /* Open an existing dataset. */
- dataset_id = H5Dopen2(file_id, "/dset", H5P_DEFAULT);
-
- /* Create the data space for the attribute. */
- dims = 2;
- dataspace_id = H5Screate_simple(1, &dims, NULL);
-
- /* Create a dataset attribute. */
- attribute_id = H5Acreate2 (dataset_id, "Units", H5T_STD_I32BE, dataspace_id,
- H5P_DEFAULT, H5P_DEFAULT);
-
- /* Write the attribute data. */
- status = H5Awrite(attribute_id, H5T_NATIVE_INT, attr_data);
-
- /* Close the attribute. */
- status = H5Aclose(attribute_id);
-
- /* Close the dataspace. */
- status = H5Sclose(dataspace_id);
-
- /* Close to the dataset. */
- status = H5Dclose(dataset_id);
-
- /* Close the file. */
- status = H5Fclose(file_id);
-}
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group. *
+ * Copyright by the Board of Trustees of the University of Illinois. *
+ * All rights reserved. *
+ * *
+ * This file is part of HDF5. The full HDF5 copyright notice, including *
+ * terms governing use, modification, and redistribution, is contained in *
+ * the files COPYING and Copyright.html. COPYING can be found at the root *
+ * of the source code distribution tree; Copyright.html can be found at the *
+ * root level of an installed copy of the electronic HDF5 document set and *
+ * is linked from the top-level documents page. It can also be found at *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have *
+ * access to either file, you may request a copy from help at hdfgroup.org. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * This example illustrates how to create an attribute attached to a
+ * dataset. It is used in the HDF5 Tutorial.
+ */
+
+#include "hdf5.h"
+#define FILE "dset.h5"
+
+int main() {
+
+ hid_t file_id, dataset_id, attribute_id, dataspace_id; /* identifiers */
+ hsize_t dims;
+ int attr_data[2];
+ herr_t status;
+
+ /* Initialize the attribute data. */
+ attr_data[0] = 100;
+ attr_data[1] = 200;
+
+ /* Open an existing file. */
+ file_id = H5Fopen(FILE, H5F_ACC_RDWR, H5P_DEFAULT);
+
+ /* Open an existing dataset. */
+ dataset_id = H5Dopen2(file_id, "/dset", H5P_DEFAULT);
+
+ /* Create the data space for the attribute. */
+ dims = 2;
+ dataspace_id = H5Screate_simple(1, &dims, NULL);
+
+ /* Create a dataset attribute. */
+ attribute_id = H5Acreate2 (dataset_id, "Units", H5T_STD_I32BE, dataspace_id,
+ H5P_DEFAULT, H5P_DEFAULT);
+
+ /* Write the attribute data. */
+ status = H5Awrite(attribute_id, H5T_NATIVE_INT, attr_data);
+
+ /* Close the attribute. */
+ status = H5Aclose(attribute_id);
+
+ /* Close the dataspace. */
+ status = H5Sclose(dataspace_id);
+
+ /* Close to the dataset. */
+ status = H5Dclose(dataset_id);
+
+ /* Close the file. */
+ status = H5Fclose(file_id);
+}
diff --git a/examples/h5_crtdat.c b/examples/h5_crtdat.c
index bbb29b2..f9327e7 100644
--- a/examples/h5_crtdat.c
+++ b/examples/h5_crtdat.c
@@ -1,51 +1,51 @@
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * Copyright by The HDF Group. *
- * Copyright by the Board of Trustees of the University of Illinois. *
- * All rights reserved. *
- * *
- * This file is part of HDF5. The full HDF5 copyright notice, including *
- * terms governing use, modification, and redistribution, is contained in *
- * the files COPYING and Copyright.html. COPYING can be found at the root *
- * of the source code distribution tree; Copyright.html can be found at the *
- * root level of an installed copy of the electronic HDF5 document set and *
- * is linked from the top-level documents page. It can also be found at *
- * http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have *
- * access to either file, you may request a copy from help at hdfgroup.org. *
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-
-/*
- * This example illustrates how to create a dataset that is a 4 x 6
- * array. It is used in the HDF5 Tutorial.
- */
-
-#include "hdf5.h"
-#define FILE "dset.h5"
-
-int main() {
-
- hid_t file_id, dataset_id, dataspace_id; /* identifiers */
- hsize_t dims[2];
- herr_t status;
-
- /* Create a new file using default properties. */
- file_id = H5Fcreate(FILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
-
- /* Create the data space for the dataset. */
- dims[0] = 4;
- dims[1] = 6;
- dataspace_id = H5Screate_simple(2, dims, NULL);
-
- /* Create the dataset. */
- dataset_id = H5Dcreate2(file_id, "/dset", H5T_STD_I32BE, dataspace_id,
- H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
-
- /* End access to the dataset and release resources used by it. */
- status = H5Dclose(dataset_id);
-
- /* Terminate access to the data space. */
- status = H5Sclose(dataspace_id);
-
- /* Close the file. */
- status = H5Fclose(file_id);
-}
-
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group. *
+ * Copyright by the Board of Trustees of the University of Illinois. *
+ * All rights reserved. *
+ * *
+ * This file is part of HDF5. The full HDF5 copyright notice, including *
+ * terms governing use, modification, and redistribution, is contained in *
+ * the files COPYING and Copyright.html. COPYING can be found at the root *
+ * of the source code distribution tree; Copyright.html can be found at the *
+ * root level of an installed copy of the electronic HDF5 document set and *
+ * is linked from the top-level documents page. It can also be found at *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have *
+ * access to either file, you may request a copy from help at hdfgroup.org. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * This example illustrates how to create a dataset that is a 4 x 6
+ * array. It is used in the HDF5 Tutorial.
+ */
+
+#include "hdf5.h"
+#define FILE "dset.h5"
+
+int main() {
+
+ hid_t file_id, dataset_id, dataspace_id; /* identifiers */
+ hsize_t dims[2];
+ herr_t status;
+
+ /* Create a new file using default properties. */
+ file_id = H5Fcreate(FILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+
+ /* Create the data space for the dataset. */
+ dims[0] = 4;
+ dims[1] = 6;
+ dataspace_id = H5Screate_simple(2, dims, NULL);
+
+ /* Create the dataset. */
+ dataset_id = H5Dcreate2(file_id, "/dset", H5T_STD_I32BE, dataspace_id,
+ H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+
+ /* End access to the dataset and release resources used by it. */
+ status = H5Dclose(dataset_id);
+
+ /* Terminate access to the data space. */
+ status = H5Sclose(dataspace_id);
+
+ /* Close the file. */
+ status = H5Fclose(file_id);
+}
+
diff --git a/examples/h5_crtgrp.c b/examples/h5_crtgrp.c
index 3a94a8f..a626ed8 100644
--- a/examples/h5_crtgrp.c
+++ b/examples/h5_crtgrp.c
@@ -1,40 +1,40 @@
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * Copyright by The HDF Group. *
- * Copyright by the Board of Trustees of the University of Illinois. *
- * All rights reserved. *
- * *
- * This file is part of HDF5. The full HDF5 copyright notice, including *
- * terms governing use, modification, and redistribution, is contained in *
- * the files COPYING and Copyright.html. COPYING can be found at the root *
- * of the source code distribution tree; Copyright.html can be found at the *
- * root level of an installed copy of the electronic HDF5 document set and *
- * is linked from the top-level documents page. It can also be found at *
- * http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have *
- * access to either file, you may request a copy from help at hdfgroup.org. *
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-
-/*
- * This example illustrates how to create and close a group.
- * It is used in the HDF5 Tutorial.
- */
-
-#include "hdf5.h"
-#define FILE "group.h5"
-
-int main() {
-
- hid_t file_id, group_id; /* identifiers */
- herr_t status;
-
- /* Create a new file using default properties. */
- file_id = H5Fcreate(FILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
-
- /* Create a group named "/MyGroup" in the file. */
- group_id = H5Gcreate2(file_id, "/MyGroup", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
-
- /* Close the group. */
- status = H5Gclose(group_id);
-
- /* Terminate access to the file. */
- status = H5Fclose(file_id);
-}
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group. *
+ * Copyright by the Board of Trustees of the University of Illinois. *
+ * All rights reserved. *
+ * *
+ * This file is part of HDF5. The full HDF5 copyright notice, including *
+ * terms governing use, modification, and redistribution, is contained in *
+ * the files COPYING and Copyright.html. COPYING can be found at the root *
+ * of the source code distribution tree; Copyright.html can be found at the *
+ * root level of an installed copy of the electronic HDF5 document set and *
+ * is linked from the top-level documents page. It can also be found at *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have *
+ * access to either file, you may request a copy from help at hdfgroup.org. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * This example illustrates how to create and close a group.
+ * It is used in the HDF5 Tutorial.
+ */
+
+#include "hdf5.h"
+#define FILE "group.h5"
+
+int main() {
+
+ hid_t file_id, group_id; /* identifiers */
+ herr_t status;
+
+ /* Create a new file using default properties. */
+ file_id = H5Fcreate(FILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+
+ /* Create a group named "/MyGroup" in the file. */
+ group_id = H5Gcreate2(file_id, "/MyGroup", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+
+ /* Close the group. */
+ status = H5Gclose(group_id);
+
+ /* Terminate access to the file. */
+ status = H5Fclose(file_id);
+}
diff --git a/examples/h5_crtgrpar.c b/examples/h5_crtgrpar.c
index 9e6fc40..e8cf7c3 100644
--- a/examples/h5_crtgrpar.c
+++ b/examples/h5_crtgrpar.c
@@ -1,48 +1,48 @@
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * Copyright by The HDF Group. *
- * Copyright by the Board of Trustees of the University of Illinois. *
- * All rights reserved. *
- * *
- * This file is part of HDF5. The full HDF5 copyright notice, including *
- * terms governing use, modification, and redistribution, is contained in *
- * the files COPYING and Copyright.html. COPYING can be found at the root *
- * of the source code distribution tree; Copyright.html can be found at the *
- * root level of an installed copy of the electronic HDF5 document set and *
- * is linked from the top-level documents page. It can also be found at *
- * http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have *
- * access to either file, you may request a copy from help at hdfgroup.org. *
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-
-/*
- * This example illustrates the creation of groups using absolute and
- * relative names. It is used in the HDF5 Tutorial.
- */
-
-#include "hdf5.h"
-#define FILE "groups.h5"
-
-int main() {
-
- hid_t file_id, group1_id, group2_id, group3_id; /* identifiers */
- herr_t status;
-
- /* Create a new file using default properties. */
- file_id = H5Fcreate(FILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
-
- /* Create group "MyGroup" in the root group using absolute name. */
- group1_id = H5Gcreate2(file_id, "/MyGroup", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
-
- /* Create group "Group_A" in group "MyGroup" using absolute name. */
- group2_id = H5Gcreate2(file_id, "/MyGroup/Group_A", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
-
- /* Create group "Group_B" in group "MyGroup" using relative name. */
- group3_id = H5Gcreate2(group1_id, "Group_B", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
-
- /* Close groups. */
- status = H5Gclose(group1_id);
- status = H5Gclose(group2_id);
- status = H5Gclose(group3_id);
-
- /* Close the file. */
- status = H5Fclose(file_id);
-}
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group. *
+ * Copyright by the Board of Trustees of the University of Illinois. *
+ * All rights reserved. *
+ * *
+ * This file is part of HDF5. The full HDF5 copyright notice, including *
+ * terms governing use, modification, and redistribution, is contained in *
+ * the files COPYING and Copyright.html. COPYING can be found at the root *
+ * of the source code distribution tree; Copyright.html can be found at the *
+ * root level of an installed copy of the electronic HDF5 document set and *
+ * is linked from the top-level documents page. It can also be found at *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have *
+ * access to either file, you may request a copy from help at hdfgroup.org. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * This example illustrates the creation of groups using absolute and
+ * relative names. It is used in the HDF5 Tutorial.
+ */
+
+#include "hdf5.h"
+#define FILE "groups.h5"
+
+int main() {
+
+ hid_t file_id, group1_id, group2_id, group3_id; /* identifiers */
+ herr_t status;
+
+ /* Create a new file using default properties. */
+ file_id = H5Fcreate(FILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+
+ /* Create group "MyGroup" in the root group using absolute name. */
+ group1_id = H5Gcreate2(file_id, "/MyGroup", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+
+ /* Create group "Group_A" in group "MyGroup" using absolute name. */
+ group2_id = H5Gcreate2(file_id, "/MyGroup/Group_A", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+
+ /* Create group "Group_B" in group "MyGroup" using relative name. */
+ group3_id = H5Gcreate2(group1_id, "Group_B", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+
+ /* Close groups. */
+ status = H5Gclose(group1_id);
+ status = H5Gclose(group2_id);
+ status = H5Gclose(group3_id);
+
+ /* Close the file. */
+ status = H5Fclose(file_id);
+}
diff --git a/examples/h5_crtgrpd.c b/examples/h5_crtgrpd.c
index 9c45928..d6a320b 100644
--- a/examples/h5_crtgrpd.c
+++ b/examples/h5_crtgrpd.c
@@ -1,91 +1,91 @@
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * Copyright by The HDF Group. *
- * Copyright by the Board of Trustees of the University of Illinois. *
- * All rights reserved. *
- * *
- * This file is part of HDF5. The full HDF5 copyright notice, including *
- * terms governing use, modification, and redistribution, is contained in *
- * the files COPYING and Copyright.html. COPYING can be found at the root *
- * of the source code distribution tree; Copyright.html can be found at the *
- * root level of an installed copy of the electronic HDF5 document set and *
- * is linked from the top-level documents page. It can also be found at *
- * http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have *
- * access to either file, you may request a copy from help at hdfgroup.org. *
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-
-/*
- * This example illustrates how to create a dataset in a group.
- * It is used in the HDF5 Tutorial.
- */
-
-#include "hdf5.h"
-#define FILE "groups.h5"
-
-int main() {
-
- hid_t file_id, group_id, dataset_id, dataspace_id; /* identifiers */
- hsize_t dims[2];
- herr_t status;
- int i, j, dset1_data[3][3], dset2_data[2][10];
-
- /* Initialize the first dataset. */
- for (i = 0; i < 3; i++)
- for (j = 0; j < 3; j++)
- dset1_data[i][j] = j + 1;
-
- /* Initialize the second dataset. */
- for (i = 0; i < 2; i++)
- for (j = 0; j < 10; j++)
- dset2_data[i][j] = j + 1;
-
- /* Open an existing file. */
- file_id = H5Fopen(FILE, H5F_ACC_RDWR, H5P_DEFAULT);
-
- /* Create the data space for the first dataset. */
- dims[0] = 3;
- dims[1] = 3;
- dataspace_id = H5Screate_simple(2, dims, NULL);
-
- /* Create a dataset in group "MyGroup". */
- dataset_id = H5Dcreate2(file_id, "/MyGroup/dset1", H5T_STD_I32BE, dataspace_id,
- H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
-
- /* Write the first dataset. */
- status = H5Dwrite(dataset_id, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT,
- dset1_data);
-
- /* Close the data space for the first dataset. */
- status = H5Sclose(dataspace_id);
-
- /* Close the first dataset. */
- status = H5Dclose(dataset_id);
-
- /* Open an existing group of the specified file. */
- group_id = H5Gopen2(file_id, "/MyGroup/Group_A", H5P_DEFAULT);
-
- /* Create the data space for the second dataset. */
- dims[0] = 2;
- dims[1] = 10;
- dataspace_id = H5Screate_simple(2, dims, NULL);
-
- /* Create the second dataset in group "Group_A". */
- dataset_id = H5Dcreate2(group_id, "dset2", H5T_STD_I32BE, dataspace_id,
- H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
-
- /* Write the second dataset. */
- status = H5Dwrite(dataset_id, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT,
- dset2_data);
-
- /* Close the data space for the second dataset. */
- status = H5Sclose(dataspace_id);
-
- /* Close the second dataset */
- status = H5Dclose(dataset_id);
-
- /* Close the group. */
- status = H5Gclose(group_id);
-
- /* Close the file. */
- status = H5Fclose(file_id);
-}
-
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group. *
+ * Copyright by the Board of Trustees of the University of Illinois. *
+ * All rights reserved. *
+ * *
+ * This file is part of HDF5. The full HDF5 copyright notice, including *
+ * terms governing use, modification, and redistribution, is contained in *
+ * the files COPYING and Copyright.html. COPYING can be found at the root *
+ * of the source code distribution tree; Copyright.html can be found at the *
+ * root level of an installed copy of the electronic HDF5 document set and *
+ * is linked from the top-level documents page. It can also be found at *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have *
+ * access to either file, you may request a copy from help at hdfgroup.org. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * This example illustrates how to create a dataset in a group.
+ * It is used in the HDF5 Tutorial.
+ */
+
+#include "hdf5.h"
+#define FILE "groups.h5"
+
+int main() {
+
+ hid_t file_id, group_id, dataset_id, dataspace_id; /* identifiers */
+ hsize_t dims[2];
+ herr_t status;
+ int i, j, dset1_data[3][3], dset2_data[2][10];
+
+ /* Initialize the first dataset. */
+ for (i = 0; i < 3; i++)
+ for (j = 0; j < 3; j++)
+ dset1_data[i][j] = j + 1;
+
+ /* Initialize the second dataset. */
+ for (i = 0; i < 2; i++)
+ for (j = 0; j < 10; j++)
+ dset2_data[i][j] = j + 1;
+
+ /* Open an existing file. */
+ file_id = H5Fopen(FILE, H5F_ACC_RDWR, H5P_DEFAULT);
+
+ /* Create the data space for the first dataset. */
+ dims[0] = 3;
+ dims[1] = 3;
+ dataspace_id = H5Screate_simple(2, dims, NULL);
+
+ /* Create a dataset in group "MyGroup". */
+ dataset_id = H5Dcreate2(file_id, "/MyGroup/dset1", H5T_STD_I32BE, dataspace_id,
+ H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+
+ /* Write the first dataset. */
+ status = H5Dwrite(dataset_id, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT,
+ dset1_data);
+
+ /* Close the data space for the first dataset. */
+ status = H5Sclose(dataspace_id);
+
+ /* Close the first dataset. */
+ status = H5Dclose(dataset_id);
+
+ /* Open an existing group of the specified file. */
+ group_id = H5Gopen2(file_id, "/MyGroup/Group_A", H5P_DEFAULT);
+
+ /* Create the data space for the second dataset. */
+ dims[0] = 2;
+ dims[1] = 10;
+ dataspace_id = H5Screate_simple(2, dims, NULL);
+
+ /* Create the second dataset in group "Group_A". */
+ dataset_id = H5Dcreate2(group_id, "dset2", H5T_STD_I32BE, dataspace_id,
+ H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+
+ /* Write the second dataset. */
+ status = H5Dwrite(dataset_id, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT,
+ dset2_data);
+
+ /* Close the data space for the second dataset. */
+ status = H5Sclose(dataspace_id);
+
+ /* Close the second dataset */
+ status = H5Dclose(dataset_id);
+
+ /* Close the group. */
+ status = H5Gclose(group_id);
+
+ /* Close the file. */
+ status = H5Fclose(file_id);
+}
+
diff --git a/examples/h5_rdwt.c b/examples/h5_rdwt.c
index d5444e0..0e290ca 100644
--- a/examples/h5_rdwt.c
+++ b/examples/h5_rdwt.c
@@ -1,53 +1,53 @@
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * Copyright by The HDF Group. *
- * Copyright by the Board of Trustees of the University of Illinois. *
- * All rights reserved. *
- * *
- * This file is part of HDF5. The full HDF5 copyright notice, including *
- * terms governing use, modification, and redistribution, is contained in *
- * the files COPYING and Copyright.html. COPYING can be found at the root *
- * of the source code distribution tree; Copyright.html can be found at the *
- * root level of an installed copy of the electronic HDF5 document set and *
- * is linked from the top-level documents page. It can also be found at *
- * http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have *
- * access to either file, you may request a copy from help at hdfgroup.org. *
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-
-/*
- * This example illustrates how to write and read data in an existing
- * dataset. It is used in the HDF5 Tutorial.
- */
-
-#include "hdf5.h"
-#define FILE "dset.h5"
-
-int main() {
-
- hid_t file_id, dataset_id; /* identifiers */
- herr_t status;
- int i, j, dset_data[4][6];
-
- /* Initialize the dataset. */
- for (i = 0; i < 4; i++)
- for (j = 0; j < 6; j++)
- dset_data[i][j] = i * 6 + j + 1;
-
- /* Open an existing file. */
- file_id = H5Fopen(FILE, H5F_ACC_RDWR, H5P_DEFAULT);
-
- /* Open an existing dataset. */
- dataset_id = H5Dopen2(file_id, "/dset", H5P_DEFAULT);
-
- /* Write the dataset. */
- status = H5Dwrite(dataset_id, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT,
- dset_data);
-
- status = H5Dread(dataset_id, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT,
- dset_data);
-
- /* Close the dataset. */
- status = H5Dclose(dataset_id);
-
- /* Close the file. */
- status = H5Fclose(file_id);
-}
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group. *
+ * Copyright by the Board of Trustees of the University of Illinois. *
+ * All rights reserved. *
+ * *
+ * This file is part of HDF5. The full HDF5 copyright notice, including *
+ * terms governing use, modification, and redistribution, is contained in *
+ * the files COPYING and Copyright.html. COPYING can be found at the root *
+ * of the source code distribution tree; Copyright.html can be found at the *
+ * root level of an installed copy of the electronic HDF5 document set and *
+ * is linked from the top-level documents page. It can also be found at *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have *
+ * access to either file, you may request a copy from help at hdfgroup.org. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * This example illustrates how to write and read data in an existing
+ * dataset. It is used in the HDF5 Tutorial.
+ */
+
+#include "hdf5.h"
+#define FILE "dset.h5"
+
+int main() {
+
+ hid_t file_id, dataset_id; /* identifiers */
+ herr_t status;
+ int i, j, dset_data[4][6];
+
+ /* Initialize the dataset. */
+ for (i = 0; i < 4; i++)
+ for (j = 0; j < 6; j++)
+ dset_data[i][j] = i * 6 + j + 1;
+
+ /* Open an existing file. */
+ file_id = H5Fopen(FILE, H5F_ACC_RDWR, H5P_DEFAULT);
+
+ /* Open an existing dataset. */
+ dataset_id = H5Dopen2(file_id, "/dset", H5P_DEFAULT);
+
+ /* Write the dataset. */
+ status = H5Dwrite(dataset_id, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT,
+ dset_data);
+
+ status = H5Dread(dataset_id, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT,
+ dset_data);
+
+ /* Close the dataset. */
+ status = H5Dclose(dataset_id);
+
+ /* Close the file. */
+ status = H5Fclose(file_id);
+}
diff --git a/examples/h5_reference.c b/examples/h5_reference.c
index 31aa2cf..afd550c 100644
--- a/examples/h5_reference.c
+++ b/examples/h5_reference.c
@@ -81,8 +81,8 @@ main(void) {
* Create references to the group "A" and dataset "B"
* and store them in the wbuf.
*/
- H5Rcreate(&wbuf[0], fid, "A", H5R_OBJECT, -1);
- H5Rcreate(&wbuf[1], fid, "B", H5R_OBJECT, -1);
+ H5Rcreate(&wbuf[0], fid, "A", H5R_OBJECT, (hid_t)-1);
+ H5Rcreate(&wbuf[1], fid, "B", H5R_OBJECT, (hid_t)-1);
/*
* Write dataset R using default transfer properties.
diff --git a/fortran/Makefile.in b/fortran/Makefile.in
index b1c7f6a..4d8abdc 100644
--- a/fortran/Makefile.in
+++ b/fortran/Makefile.in
@@ -508,7 +508,6 @@ MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MPE = @MPE@
-MPI_GET_SIZE = @MPI_GET_SIZE@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
diff --git a/fortran/examples/Makefile.in b/fortran/examples/Makefile.in
index 890d52a..b9b5efb 100644
--- a/fortran/examples/Makefile.in
+++ b/fortran/examples/Makefile.in
@@ -460,7 +460,6 @@ MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MPE = @MPE@
-MPI_GET_SIZE = @MPI_GET_SIZE@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
diff --git a/fortran/examples/h5_cmprss.f90 b/fortran/examples/h5_cmprss.f90
index 847a922..9ab28f7 100644
--- a/fortran/examples/h5_cmprss.f90
+++ b/fortran/examples/h5_cmprss.f90
@@ -1,131 +1,131 @@
-! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-! Copyright by The HDF Group. *
-! Copyright by the Board of Trustees of the University of Illinois. *
-! All rights reserved. *
-! *
-! This file is part of HDF5. The full HDF5 copyright notice, including *
-! terms governing use, modification, and redistribution, is contained in *
-! the files COPYING and Copyright.html. COPYING can be found at the root *
-! of the source code distribution tree; Copyright.html can be found at the *
-! root level of an installed copy of the electronic HDF5 document set and *
-! is linked from the top-level documents page. It can also be found at *
-! http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have *
-! access to either file, you may request a copy from help at hdfgroup.org. *
-! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-!
-! This example illustrates how to create a compressed dataset.
-! It is used in the HDF5 Tutorial.
-!
-PROGRAM h5_cmprss
-
- USE HDF5 ! This module contains all necessary modules
-
- IMPLICIT NONE
- !
- ! The dataset is stored in file "h5_cmprss.h5"
- !
- CHARACTER(LEN=12), PARAMETER :: filename = "h5_cmprss.h5"
- INTEGER, PARAMETER :: rank = 2 ! Rank of the data set
- INTEGER, PARAMETER :: dim0 = 100 ! Data set sizes
- INTEGER, PARAMETER :: dim1 = 20
-
- INTEGER(hid_t) :: file_id, dataset_id, dataspace_id ! Identifiers
- INTEGER(hid_t) :: plist_id ! Property list identifier
-
- INTEGER :: error
- INTEGER(hsize_t), DIMENSION(1:rank) :: dims ! dimensions of data
- INTEGER(hsize_t), DIMENSION(1:rank) :: cdims ! sizes of chunked data
-
- INTEGER :: i,j, numfilt
- INTEGER, DIMENSION(1:dim0,1:dim1) :: buf ! write buffer
- INTEGER, DIMENSION(1:dim0,1:dim1) :: rbuf ! read buffer
- INTEGER(HSIZE_T), DIMENSION(1:rank) :: data_dims ! dimensions of data buffers
-
- INTEGER, DIMENSION(1:1) :: cd_values ! Auxiliary data for the filter
- INTEGER(size_t) :: nelmts ! Number of elements in cd_values
- INTEGER :: flags ! Bit vector specifying certain general properties of the filter
- INTEGER(SIZE_T) :: namelen = 180 ! Anticipated number of characters in name
- CHARACTER(LEN=180) :: name ! Name of the filter
- INTEGER :: filter_id ! Filter identification number
-
- ! Uncomment these variables to use SZIP compression
- !INTEGER :: szip_options_mask
- !INTEGER :: szip_pixels_per_block
-
- !
- !Initialize FORTRAN predifined datatypes
- !
- CALL h5open_f(error)
- !
- ! Create a file
- CALL h5fcreate_f(filename, H5F_ACC_TRUNC_F, file_id, error)
- !
- ! Create dataset "Compressed Data" in the group using absolute name.
- dims(1:2) = (/dim0, dim1/)
- CALL h5screate_simple_f(rank, dims, dataspace_id, error)
- CALL h5pcreate_f(H5P_DATASET_CREATE_F, plist_id, error)
- !
- ! Dataset must be chunked for compression
- cdims(1:2) = 20
- CALL h5pset_chunk_f(plist_id, 2, cdims, error)
-
- ! Set ZLIB / DEFLATE Compression using compression level 6.
- ! To use SZIP Compression comment out these lines.
- CALL h5pset_deflate_f(plist_id, 6, error)
-
- ! Uncomment these lines to set SZIP Compression
- !szip_options_mask = H5_SZIP_NN_OM_F
- !szip_pixels_per_block = 16
- !CALL H5Pset_szip_f(plist_id, szip_options_mask, szip_pixels_per_block, error)
-
- ! Create data set
- CALL h5dcreate_f(file_id, "Compressed_Data", H5T_NATIVE_INTEGER, dataspace_id, &
- dataset_id, error, dcpl_id=plist_id)
-
- DO j = 1, dim1
- DO i = 1, dim0
- buf(i,j) = i+j
- ENDDO
- ENDDO
-
- data_dims(1:2) = (/dim0,dim1/)
- CALL h5dwrite_f(dataset_id, H5T_NATIVE_INTEGER, buf, data_dims, error)
-
- ! Close resources
- CALL h5sclose_f(dataspace_id, error)
- CALL h5pclose_f(plist_id, error)
- CALL h5dclose_f(dataset_id, error)
- CALL h5fclose_f(file_id, error)
-
- ! Now reopen the file and dataset in the file.
- CALL h5fopen_f(filename, H5F_ACC_RDONLY_F, file_id, error)
- CALL h5dopen_f(file_id, "Compressed_Data", dataset_id, error)
-
- ! Retrieve filter information.
- CALL h5dget_create_plist_f(dataset_id, plist_id, error)
-
- CALL h5pget_nfilters_f(plist_id, numfilt, error)
- WRITE(*,'(A, I0)') "Number of filters associated with dataset: ", numfilt
-
- DO i = 1, numfilt
- nelmts = 1
- CALL h5pget_filter_f(plist_id, 0, flags, nelmts, cd_values, &
- namelen, name, filter_id, error)
-
- WRITE(*,'(30X,A)', ADVANCE='NO')"Filter Type: "
- IF(filter_id.EQ.H5Z_FILTER_DEFLATE_F)THEN
- WRITE(*,'(A)') "H5Z_FILTER_DEFLATE"
- ELSEIF (filter_id.EQ.H5Z_FILTER_SZIP_F)THEN
- WRITE(*,'(A)') "H5Z_FILTER_SZIP"
- ELSE
- WRITE(*,'(A)') "Other filter type included"
- ENDIF
- ENDDO
- data_dims(1:2) = (/dim0,dim1/)
- CALL h5dread_f(dataset_id, H5T_NATIVE_INTEGER, rbuf, data_dims, error)
-
- CALL h5dclose_f(dataset_id, error)
- CALL h5pclose_f(plist_id, error)
- CALL h5fclose_f(file_id, error)
-
-END PROGRAM h5_cmprss
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+! Copyright by The HDF Group. *
+! Copyright by the Board of Trustees of the University of Illinois. *
+! All rights reserved. *
+! *
+! This file is part of HDF5. The full HDF5 copyright notice, including *
+! terms governing use, modification, and redistribution, is contained in *
+! the files COPYING and Copyright.html. COPYING can be found at the root *
+! of the source code distribution tree; Copyright.html can be found at the *
+! root level of an installed copy of the electronic HDF5 document set and *
+! is linked from the top-level documents page. It can also be found at *
+! http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have *
+! access to either file, you may request a copy from help at hdfgroup.org. *
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+!
+! This example illustrates how to create a compressed dataset.
+! It is used in the HDF5 Tutorial.
+!
+PROGRAM h5_cmprss
+
+ USE HDF5 ! This module contains all necessary modules
+
+ IMPLICIT NONE
+ !
+ ! The dataset is stored in file "h5_cmprss.h5"
+ !
+ CHARACTER(LEN=12), PARAMETER :: filename = "h5_cmprss.h5"
+ INTEGER, PARAMETER :: rank = 2 ! Rank of the data set
+ INTEGER, PARAMETER :: dim0 = 100 ! Data set sizes
+ INTEGER, PARAMETER :: dim1 = 20
+
+ INTEGER(hid_t) :: file_id, dataset_id, dataspace_id ! Identifiers
+ INTEGER(hid_t) :: plist_id ! Property list identifier
+
+ INTEGER :: error
+ INTEGER(hsize_t), DIMENSION(1:rank) :: dims ! dimensions of data
+ INTEGER(hsize_t), DIMENSION(1:rank) :: cdims ! sizes of chunked data
+
+ INTEGER :: i,j, numfilt
+ INTEGER, DIMENSION(1:dim0,1:dim1) :: buf ! write buffer
+ INTEGER, DIMENSION(1:dim0,1:dim1) :: rbuf ! read buffer
+ INTEGER(HSIZE_T), DIMENSION(1:rank) :: data_dims ! dimensions of data buffers
+
+ INTEGER, DIMENSION(1:1) :: cd_values ! Auxiliary data for the filter
+ INTEGER(size_t) :: nelmts ! Number of elements in cd_values
+ INTEGER :: flags ! Bit vector specifying certain general properties of the filter
+ INTEGER(SIZE_T) :: namelen = 180 ! Anticipated number of characters in name
+ CHARACTER(LEN=180) :: name ! Name of the filter
+ INTEGER :: filter_id ! Filter identification number
+
+ ! Uncomment these variables to use SZIP compression
+ !INTEGER :: szip_options_mask
+ !INTEGER :: szip_pixels_per_block
+
+ !
+ !Initialize FORTRAN predifined datatypes
+ !
+ CALL h5open_f(error)
+ !
+ ! Create a file
+ CALL h5fcreate_f(filename, H5F_ACC_TRUNC_F, file_id, error)
+ !
+ ! Create dataset "Compressed Data" in the group using absolute name.
+ dims(1:2) = (/dim0, dim1/)
+ CALL h5screate_simple_f(rank, dims, dataspace_id, error)
+ CALL h5pcreate_f(H5P_DATASET_CREATE_F, plist_id, error)
+ !
+ ! Dataset must be chunked for compression
+ cdims(1:2) = 20
+ CALL h5pset_chunk_f(plist_id, 2, cdims, error)
+
+ ! Set ZLIB / DEFLATE Compression using compression level 6.
+ ! To use SZIP Compression comment out these lines.
+ CALL h5pset_deflate_f(plist_id, 6, error)
+
+ ! Uncomment these lines to set SZIP Compression
+ !szip_options_mask = H5_SZIP_NN_OM_F
+ !szip_pixels_per_block = 16
+ !CALL H5Pset_szip_f(plist_id, szip_options_mask, szip_pixels_per_block, error)
+
+ ! Create data set
+ CALL h5dcreate_f(file_id, "Compressed_Data", H5T_NATIVE_INTEGER, dataspace_id, &
+ dataset_id, error, dcpl_id=plist_id)
+
+ DO j = 1, dim1
+ DO i = 1, dim0
+ buf(i,j) = i+j
+ ENDDO
+ ENDDO
+
+ data_dims(1:2) = (/dim0,dim1/)
+ CALL h5dwrite_f(dataset_id, H5T_NATIVE_INTEGER, buf, data_dims, error)
+
+ ! Close resources
+ CALL h5sclose_f(dataspace_id, error)
+ CALL h5pclose_f(plist_id, error)
+ CALL h5dclose_f(dataset_id, error)
+ CALL h5fclose_f(file_id, error)
+
+ ! Now reopen the file and dataset in the file.
+ CALL h5fopen_f(filename, H5F_ACC_RDONLY_F, file_id, error)
+ CALL h5dopen_f(file_id, "Compressed_Data", dataset_id, error)
+
+ ! Retrieve filter information.
+ CALL h5dget_create_plist_f(dataset_id, plist_id, error)
+
+ CALL h5pget_nfilters_f(plist_id, numfilt, error)
+ WRITE(*,'(A, I0)') "Number of filters associated with dataset: ", numfilt
+
+ DO i = 1, numfilt
+ nelmts = 1
+ CALL h5pget_filter_f(plist_id, 0, flags, nelmts, cd_values, &
+ namelen, name, filter_id, error)
+
+ WRITE(*,'(30X,A)', ADVANCE='NO')"Filter Type: "
+ IF(filter_id.EQ.H5Z_FILTER_DEFLATE_F)THEN
+ WRITE(*,'(A)') "H5Z_FILTER_DEFLATE"
+ ELSEIF (filter_id.EQ.H5Z_FILTER_SZIP_F)THEN
+ WRITE(*,'(A)') "H5Z_FILTER_SZIP"
+ ELSE
+ WRITE(*,'(A)') "Other filter type included"
+ ENDIF
+ ENDDO
+ data_dims(1:2) = (/dim0,dim1/)
+ CALL h5dread_f(dataset_id, H5T_NATIVE_INTEGER, rbuf, data_dims, error)
+
+ CALL h5dclose_f(dataset_id, error)
+ CALL h5pclose_f(plist_id, error)
+ CALL h5fclose_f(file_id, error)
+
+END PROGRAM h5_cmprss
diff --git a/fortran/src/CMakeLists.txt b/fortran/src/CMakeLists.txt
index 723e930..c91d9e8 100644
--- a/fortran/src/CMakeLists.txt
+++ b/fortran/src/CMakeLists.txt
@@ -19,19 +19,27 @@ endif (WIN32)
#-----------------------------------------------------------------------------
# Setup the Fortran auto-detection utilities
-# H5test_kind(_SIZEOF).f90 used to generate H5fortran_detect.f90
+# H5test_kind(_SIZEOF,_STORAGE_SIZE).f90 used to generate H5fortran_detect.f90
# H5fortran_detect.f90 used to generate H5fort_type_defines.h
# H5fort_type_defines.h used to generate H5f90i_gen.h + H5fortran_types.f90
#-----------------------------------------------------------------------------
-if (FORTRAN_HAVE_SIZEOF)
+if (FORTRAN_HAVE_STORAGE_SIZE)
add_executable (H5test_FortranHavekind
- ${HDF5_F90_SRC_SOURCE_DIR}/H5test_kind_SIZEOF.f90
+ ${HDF5_F90_SRC_SOURCE_DIR}/H5test_kind_STORAGE_SIZE.f90
)
-else (FORTRAN_HAVE_SIZEOF)
- add_executable (H5test_FortranHavekind
- ${HDF5_F90_SRC_SOURCE_DIR}/H5test_kind.f90
- )
-endif (FORTRAN_HAVE_SIZEOF)
+ set (H5_TEST_KIND_NAME "h5test_kind_storage_size_mod")
+else (FORTRAN_HAVE_STORAGE_SIZE)
+ if (FORTRAN_HAVE_SIZEOF)
+ add_executable (H5test_FortranHavekind
+ ${HDF5_F90_SRC_SOURCE_DIR}/H5test_kind_SIZEOF.f90
+ )
+ set (H5_TEST_KIND_NAME "h5test_kind_sizeof_mod")
+ else (FORTRAN_HAVE_SIZEOF)
+ add_executable (H5test_FortranHavekind
+ ${HDF5_F90_SRC_SOURCE_DIR}/H5test_kind.f90
+ )
+ endif (FORTRAN_HAVE_SIZEOF)
+endif (FORTRAN_HAVE_STORAGE_SIZE)
if (WIN32 AND MSVC)
if (BUILD_SHARED_LIBS)
set_target_properties (H5test_FortranHavekind
@@ -147,10 +155,10 @@ set_target_properties (${HDF5_F90_C_LIB_TARGET} PROPERTIES
# Fortran 2003 standard
#-----------------------------------------------------------------------------
if (HDF5_ENABLE_F2003)
- # default real is 4 bytes, so include double signatures
+ # F2003 features are enabled
set (F_STATUS "_F03")
else (HDF5_ENABLE_F2003)
- # default real is 8 bytes, so exclude double signatures
+ # F2003 features are not enabled
set (F_STATUS "_F90")
endif (HDF5_ENABLE_F2003)
@@ -270,7 +278,6 @@ if (WIN32)
install (
FILES
${CMAKE_Fortran_MODULE_DIRECTORY}/\${BUILD_TYPE}/h5fortran_types.mod
- ${CMAKE_Fortran_MODULE_DIRECTORY}/\${BUILD_TYPE}/h5test_kind_sizeof_mod.mod
${CMAKE_Fortran_MODULE_DIRECTORY}/\${BUILD_TYPE}/hdf5.mod
${CMAKE_Fortran_MODULE_DIRECTORY}/\${BUILD_TYPE}/h5global.mod
${CMAKE_Fortran_MODULE_DIRECTORY}/\${BUILD_TYPE}/h5a.mod
@@ -303,6 +310,16 @@ if (WIN32)
COMPONENT
fortheaders
)
+ if (H5_TEST_KIND_NAME)
+ install (
+ FILES
+ ${CMAKE_Fortran_MODULE_DIRECTORY}/\${BUILD_TYPE}/${H5_TEST_KIND_NAME}.mod
+ DESTINATION
+ ${HDF5_INSTALL_INCLUDE_DIR}
+ COMPONENT
+ fortheaders
+ )
+ endif (H5_TEST_KIND_NAME)
else (WIN32)
install (
FILES
@@ -340,6 +357,16 @@ else (WIN32)
COMPONENT
fortheaders
)
+ if (H5_TEST_KIND_NAME)
+ install (
+ FILES
+ ${CMAKE_Fortran_MODULE_DIRECTORY}/${H5_TEST_KIND_NAME}.mod
+ DESTINATION
+ ${HDF5_INSTALL_INCLUDE_DIR}
+ COMPONENT
+ fortheaders
+ )
+ endif (H5_TEST_KIND_NAME)
endif (WIN32)
#-----------------------------------------------------------------------------
diff --git a/fortran/src/H5Pf.c b/fortran/src/H5Pf.c
index 98e5ff6..b66709a 100644
--- a/fortran/src/H5Pf.c
+++ b/fortran/src/H5Pf.c
@@ -418,18 +418,18 @@ nh5pset_fill_valuec_c (hid_t_f *prp_id, hid_t_f *type_id, _fcd fillvalue)
/****if* H5Pf/h5pset_fill_value_c
* NAME
- * h5pset_fill_value_c
+ * h5pset_fill_value_c
* PURPOSE
- * Call H5Pset_fill_value to set a fillvalue for a dataset
+ * Call H5Pset_fill_value to set a fillvalue for a dataset
* INPUTS
- * prp_id - property list identifier
- * type_id - datatype identifier (fill value is of type type_id)
- * fillvalue - fillvalue
+ * prp_id - property list identifier
+ * type_id - datatype identifier (fill value is of type type_id)
+ * fillvalue - fillvalue
* RETURNS
- * 0 on success, -1 on failure
+ * 0 on success, -1 on failure
* AUTHOR
* Elena Pourmal
- * Saturday, August 14, 1999
+ * Saturday, August 14, 1999
* SOURCE
*/
int_f
@@ -445,7 +445,7 @@ nh5pset_fill_value_c (hid_t_f *prp_id, hid_t_f *type_id, void *fillvalue)
* Call H5Pset_fill_value function.
*/
c_prp_id = (hid_t)*prp_id;
- c_type_id = (int)*type_id;
+ c_type_id = (hid_t)*type_id;
ret = H5Pset_fill_value(c_prp_id, c_type_id, fillvalue);
if (ret < 0) return ret_value;
@@ -483,19 +483,21 @@ nh5pset_fill_value_double_c (hid_t_f *prp_id, hid_t_f *type_id, void *fillvalue)
/****if* H5Pf/h5pget_fill_valuec_c
* NAME
- * h5pget_fill_valuec_c
+ * h5pget_fill_valuec_c
* PURPOSE
- * Call h5pget_fill_value_c to a character fill value
+ * Call h5pget_fill_value_c to a character fill value
* INPUTS
- * prp_id - property list identifier
- * type_id - datatype identifier (fill value is of type type_id)
- * fillvalue - character value
+ * prp_id - property list identifier
+ * type_id - datatype identifier (fill value is of type type_id)
+ * fillvalue - character value
* RETURNS
- * 0 on success, -1 on failure
- * Saturday, August 14, 1999
+ * 0 on success, -1 on failure
* AUTHOR
* Elena Pourmal
+ * Saturday, August 14, 1999
* HISTORY
+ * Fixed wrong call to C wrapper, was nh5pset_fill_value_c, changed
+ * to nh5pget_fill_value_c. MSB - 7/21/2014
*
* SOURCE
*/
@@ -506,27 +508,27 @@ nh5pget_fill_valuec_c (hid_t_f *prp_id, hid_t_f *type_id, _fcd fillvalue)
int ret_value = -1;
/*
- * Call h5pget_fill_value_c function.
+ * Call h5pget_fill_value_c function.
*/
- ret_value = nh5pset_fill_value_c(prp_id, type_id, _fcdtocp(fillvalue));
+ ret_value = nh5pget_fill_value_c(prp_id, type_id, _fcdtocp(fillvalue));
return ret_value;
}
/****if* H5Pf/h5pget_fill_value_c
* NAME
- * h5pget_fill_value_c
+ * h5pget_fill_value_c
* PURPOSE
- * Call H5Pget_fill_value to set a fillvalue for a dataset
+ * Call H5Pget_fill_value to set a fillvalue for a dataset
* INPUTS
- * prp_id - property list identifier
- * type_id - datatype identifier (fill value is of type type_id)
- * fillvalue - fillvalue
+ * prp_id - property list identifier
+ * type_id - datatype identifier (fill value is of type type_id)
+ * fillvalue - fillvalue
* RETURNS
- * 0 on success, -1 on failure
+ * 0 on success, -1 on failure
* AUTHOR
* Elena Pourmal
- * Saturday, August 14, 1999
+ * Saturday, August 14, 1999
* SOURCE
*/
int_f
@@ -542,7 +544,7 @@ nh5pget_fill_value_c (hid_t_f *prp_id, hid_t_f *type_id, void *fillvalue)
* Call H5Pget_fill_value function.
*/
c_prp_id = (hid_t)*prp_id;
- c_type_id = (int)*type_id;
+ c_type_id = (hid_t)*type_id;
ret = H5Pget_fill_value(c_prp_id, c_type_id, fillvalue);
if (ret < 0) return ret_value;
@@ -556,7 +558,7 @@ nh5pget_fill_value_integer_c (hid_t_f *prp_id, hid_t_f *type_id, void *fillvalue
/*
* Call h5pget_fill_value_c function.
*/
- return nh5pset_fill_value_c(prp_id, type_id, fillvalue);
+ return nh5pget_fill_value_c(prp_id, type_id, fillvalue);
}
int_f
@@ -565,7 +567,7 @@ nh5pget_fill_value_real_c (hid_t_f *prp_id, hid_t_f *type_id, void *fillvalue)
/*
* Call h5pget_fill_value_c function.
*/
- return nh5pset_fill_value_c(prp_id, type_id, fillvalue);
+ return nh5pget_fill_value_c(prp_id, type_id, fillvalue);
}
int_f
@@ -574,7 +576,7 @@ nh5pget_fill_value_double_c (hid_t_f *prp_id, hid_t_f *type_id, void *fillvalue)
/*
* Call h5pget_fill_value_c function.
*/
- return nh5pset_fill_value_c(prp_id, type_id, fillvalue);
+ return nh5pget_fill_value_c(prp_id, type_id, fillvalue);
}
/****if* H5Pf/h5pget_version_c
diff --git a/fortran/src/H5Rf.c b/fortran/src/H5Rf.c
index 77aab08..67d10e3 100644
--- a/fortran/src/H5Rf.c
+++ b/fortran/src/H5Rf.c
@@ -59,7 +59,7 @@ nh5rcreate_object_c(haddr_t_f *ref, hid_t_f *loc_id, _fcd name, int_f *namelen)
/*
* Call H5Rcreate function.
*/
- if(H5Rcreate(&ref_c, *loc_id, c_name, H5R_OBJECT, -1) < 0)
+ if(H5Rcreate(&ref_c, *loc_id, c_name, H5R_OBJECT, (hid_t)-1) < 0)
HGOTO_DONE(FAIL)
/* Copy the reference created */
diff --git a/fortran/src/H5Tf.c b/fortran/src/H5Tf.c
index df581ee..32cdb72 100644
--- a/fortran/src/H5Tf.c
+++ b/fortran/src/H5Tf.c
@@ -225,31 +225,32 @@ nh5tequal_c ( hid_t_f *type1_id , hid_t_f *type2_id, int_f *c_flag)
return ret_value;
}
-
/****if* H5Tf/h5tget_class_c
* NAME
- * h5tget_class_c
+ * h5tget_class_c
* PURPOSE
- * Call H5Tget_class to determine the datatype class
+ * Call H5Tget_class to determine the datatype class
* INPUTS
- * type_id - identifier of the dataspace
+ * type_id - identifier of the dataspace
* OUTPUTS
- * classtype - class type; possible values are:
- * H5T_NO_CLASS_F (-1)
- * H5T_INTEGER_F (0)
- * H5T_FLOAT_F (1)
- * H5T_TIME_F (2)
- * H5T_STRING_F (3)
- * H5T_BITFIELD_F (4)
- * H5T_OPAQUE_F (5)
- * H5T_COMPOUNDF (6)
- * H5T_REFERENCE_F (7)
- * H5T_ENUMF (8)
+ * classtype - class type; possible values are:
+ * H5T_NO_CLASS_F (-1)
+ * H5T_INTEGER_F (0)
+ * H5T_FLOAT_F (1)
+ * H5T_TIME_F (2)
+ * H5T_STRING_F (3)
+ * H5T_BITFIELD_F (4)
+ * H5T_OPAQUE_F (5)
+ * H5T_COMPOUNDF (6)
+ * H5T_REFERENCE_F (7)
+ * H5T_ENUM_F (8)
+ * H5T_VLEN_F (9)
+ * H5T_ARRAY_F (10)
* RETURNS
- * 0 on success, -1 on failure
+ * 0 on success, -1 on failure
* AUTHOR
* Elena Pourmal
- * Saturday, August 14, 1999
+ * Saturday, August 14, 1999
* HISTORY
*
* SOURCE
diff --git a/fortran/src/H5Tff.f90 b/fortran/src/H5Tff.f90
index 89bd972..0e1dbb0 100644
--- a/fortran/src/H5Tff.f90
+++ b/fortran/src/H5Tff.f90
@@ -335,20 +335,22 @@ CONTAINS
! Returns the datatype class identifier.
!
! INPUTS
-! type_id - datatype identifier
+! type_id - Datatype identifier
! OUTPUTS
-! class - class, possible values are:
-! H5T_NO_CLASS_F (-1)
-! H5T_INTEGER_F (0)
-! H5T_FLOAT_F (1)
-! H5T_TIME_F (2)
-! H5T_STRING_F (3)
-! H5T_BITFIELD_F (4)
-! H5T_OPAQUE_F (5)
-! H5T_COMPOUND_F (6)
-! H5T_REFERENCE_F (7)
-! H5T_ENUM_F (8)
-! hdferr - Returns 0 if successful and -1 if fails
+! class - Class, possible values are:
+! H5T_NO_CLASS_F (-1)
+! H5T_INTEGER_F (0)
+! H5T_FLOAT_F (1)
+! H5T_TIME_F (2)
+! H5T_STRING_F (3)
+! H5T_BITFIELD_F (4)
+! H5T_OPAQUE_F (5)
+! H5T_COMPOUND_F (6)
+! H5T_REFERENCE_F (7)
+! H5T_ENUM_F (8)
+! H5T_VLEN_F (9)
+! H5T_ARRAY_F (10)
+! hdferr - Returns 0 if successful and -1 if fails
!
! AUTHOR
! Elena Pourmal
@@ -361,35 +363,24 @@ CONTAINS
!
! SOURCE
SUBROUTINE h5tget_class_f(type_id, class, hdferr)
- IMPLICIT NONE
- INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier
- INTEGER, INTENT(OUT) :: class
- ! Datatype class, possible values are:
- ! H5T_NO_CLASS_F (-1)
- ! H5T_INTEGER_F (0)
- ! H5T_FLOAT_F (1)
- ! H5T_TIME_F (2)
- ! H5T_STRING_F (3)
- ! H5T_BITFIELD_F (4)
- ! H5T_OPAQUE_F (5)
- ! H5T_COMPOUND_F (6)
- ! H5T_REFERENCE_F (7)
- ! H5T_ENUM_F (8)
- INTEGER, INTENT(OUT) :: hdferr ! Error code
+ IMPLICIT NONE
+ INTEGER(HID_T), INTENT(IN) :: type_id
+ INTEGER, INTENT(OUT) :: class
+ INTEGER, INTENT(OUT) :: hdferr
!*****
- INTERFACE
- INTEGER FUNCTION h5tget_class_c(type_id, class)
- USE H5GLOBAL
- !DEC$IF DEFINED(HDF5F90_WINDOWS)
- !DEC$ATTRIBUTES C,reference,decorate,alias:'H5TGET_CLASS_C'::h5tget_class_c
- !DEC$ENDIF
- INTEGER(HID_T), INTENT(IN) :: type_id
- INTEGER, INTENT(OUT) :: class
- END FUNCTION h5tget_class_c
- END INTERFACE
+ INTERFACE
+ INTEGER FUNCTION h5tget_class_c(type_id, class)
+ USE H5GLOBAL
+ !DEC$IF DEFINED(HDF5F90_WINDOWS)
+ !DEC$ATTRIBUTES C,reference,decorate,alias:'H5TGET_CLASS_C'::h5tget_class_c
+ !DEC$ENDIF
+ INTEGER(HID_T), INTENT(IN) :: type_id
+ INTEGER, INTENT(OUT) :: class
+ END FUNCTION h5tget_class_c
+ END INTERFACE
- hdferr = h5tget_class_c(type_id, class)
- END SUBROUTINE h5tget_class_f
+ hdferr = h5tget_class_c(type_id, class)
+ END SUBROUTINE h5tget_class_f
!
!****s* H5T/h5tget_size_f
!
diff --git a/fortran/src/H5_f.c b/fortran/src/H5_f.c
index dcfcfc4..05e525d 100644
--- a/fortran/src/H5_f.c
+++ b/fortran/src/H5_f.c
@@ -460,13 +460,13 @@ nh5init_flags_c( int_f *h5d_flags, size_t_f *h5d_size_flags,
/*
* H5FD flags of type hid_t
*/
- h5fd_hid_flags[0] = (int_f)H5FD_CORE;
- h5fd_hid_flags[1] = (int_f)H5FD_FAMILY;
- h5fd_hid_flags[2] = (int_f)H5FD_LOG;
- h5fd_hid_flags[3] = (int_f)H5FD_MPIO;
- h5fd_hid_flags[4] = (int_f)H5FD_MULTI;
- h5fd_hid_flags[5] = (int_f)H5FD_SEC2;
- h5fd_hid_flags[6] = (int_f)H5FD_STDIO;
+ h5fd_hid_flags[0] = (hid_t_f)H5FD_CORE;
+ h5fd_hid_flags[1] = (hid_t_f)H5FD_FAMILY;
+ h5fd_hid_flags[2] = (hid_t_f)H5FD_LOG;
+ h5fd_hid_flags[3] = (hid_t_f)H5FD_MPIO;
+ h5fd_hid_flags[4] = (hid_t_f)H5FD_MULTI;
+ h5fd_hid_flags[5] = (hid_t_f)H5FD_SEC2;
+ h5fd_hid_flags[6] = (hid_t_f)H5FD_STDIO;
/*
* H5G flags
diff --git a/fortran/src/H5test_kind.f90 b/fortran/src/H5test_kind.f90
index 3182853..1a1a0ec 100644
--- a/fortran/src/H5test_kind.f90
+++ b/fortran/src/H5test_kind.f90
@@ -23,18 +23,18 @@
!
! COPYRIGHT
! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-! Copyright by The HDF Group. *
-! Copyright by the Board of Trustees of the University of Illinois. *
-! All rights reserved. *
-! *
-! This file is part of HDF5. The full HDF5 copyright notice, including *
-! terms governing use, modification, and redistribution, is contained in *
-! the files COPYING and Copyright.html. COPYING can be found at the root *
-! of the source code distribution tree; Copyright.html can be found at the *
-! root level of an installed copy of the electronic HDF5 document set and *
-! is linked from the top-level documents page. It can also be found at *
-! http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have *
-! access to either file, you may request a copy from help at hdfgroup.org. *
+! Copyright by The HDF Group. *
+! Copyright by the Board of Trustees of the University of Illinois. *
+! All rights reserved. *
+! *
+! This file is part of HDF5. The full HDF5 copyright notice, including *
+! terms governing use, modification, and redistribution, is contained in *
+! the files COPYING and Copyright.html. COPYING can be found at the root *
+! of the source code distribution tree; Copyright.html can be found at the *
+! root level of an installed copy of the electronic HDF5 document set and *
+! is linked from the top-level documents page. It can also be found at *
+! http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have *
+! access to either file, you may request a copy from help at hdfgroup.org. *
! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
!
! AUTHOR
diff --git a/fortran/src/H5test_kind_SIZEOF.f90 b/fortran/src/H5test_kind_SIZEOF.f90
index 7a58b0e..468086a 100644
--- a/fortran/src/H5test_kind_SIZEOF.f90
+++ b/fortran/src/H5test_kind_SIZEOF.f90
@@ -24,18 +24,18 @@
!
! COPYRIGHT
! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-! Copyright by The HDF Group. *
-! Copyright by the Board of Trustees of the University of Illinois. *
-! All rights reserved. *
-! *
-! This file is part of HDF5. The full HDF5 copyright notice, including *
-! terms governing use, modification, and redistribution, is contained in *
-! the files COPYING and Copyright.html. COPYING can be found at the root *
-! of the source code distribution tree; Copyright.html can be found at the *
-! root level of an installed copy of the electronic HDF5 document set and *
-! is linked from the top-level documents page. It can also be found at *
-! http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have *
-! access to either file, you may request a copy from help at hdfgroup.org. *
+! Copyright by The HDF Group. *
+! Copyright by the Board of Trustees of the University of Illinois. *
+! All rights reserved. *
+! *
+! This file is part of HDF5. The full HDF5 copyright notice, including *
+! terms governing use, modification, and redistribution, is contained in *
+! the files COPYING and Copyright.html. COPYING can be found at the root *
+! of the source code distribution tree; Copyright.html can be found at the *
+! root level of an installed copy of the electronic HDF5 document set and *
+! is linked from the top-level documents page. It can also be found at *
+! http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have *
+! access to either file, you may request a copy from help at hdfgroup.org. *
! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
!
! AUTHOR
diff --git a/fortran/src/H5test_kind_SIZEOF.f90 b/fortran/src/H5test_kind_STORAGE_SIZE.f90
similarity index 80%
copy from fortran/src/H5test_kind_SIZEOF.f90
copy to fortran/src/H5test_kind_STORAGE_SIZE.f90
index 7a58b0e..89c904c 100644
--- a/fortran/src/H5test_kind_SIZEOF.f90
+++ b/fortran/src/H5test_kind_STORAGE_SIZE.f90
@@ -1,10 +1,10 @@
-!****p* Program/H5test_kind_SIZEOF
+!****p* Program/H5test_kind_STORAGE_SIZE
!
! NAME
! Executable: H5test_kind
!
! FILE
-! fortran/src/H5test_kind_SIZEOF.f90
+! fortran/src/H5test_kind_STORAGE_SIZE.f90
!
! PURPOSE
! This stand alone program is used at build time to generate the program
@@ -13,29 +13,31 @@
! depending on which of the KIND values are found.
!
! NOTES
-! This program is used in place of H5test_kind.f90 when the Fortran intrinsic
-! function SIZEOF is available. It generates code that makes use of SIZEOF in
-! H5fortran_detect.f90 which is a portable solution but is not standard
-! compliant. The program H5test_kind_C_SIZEOF uses F2008 standard intrinsic
-! function instead, which is the preferred method.
+! This program is used in place of H5test_kind.f90 or H5test_kind_SIZEOF.f90 when
+! the Fortran 2008 intrinsic function STORAGE_SIZE is available. It generates code
+! that makes use of STORAGE_SIZE in H5fortran_detect.f90, which will be standard
+! compliant. This program is the preferred method.
!
-! The availability of SIZEOF is checked at configure time and the TRUE/FALSE
-! condition is set in the configure variable "FORTRAN_HAVE_SIZEOF".
+! The availability of STORAGE_SIZE is checked at configure time and the TRUE/FALSE
+! condition is set in the configure variable "FORTRAN_HAVE_STORAGE_SIZE".
+!
+! The use of C_SIZOF(X) is not used since the argument X must be an interoperable
+! data entity.
!
! COPYRIGHT
! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-! Copyright by The HDF Group. *
-! Copyright by the Board of Trustees of the University of Illinois. *
-! All rights reserved. *
-! *
-! This file is part of HDF5. The full HDF5 copyright notice, including *
-! terms governing use, modification, and redistribution, is contained in *
-! the files COPYING and Copyright.html. COPYING can be found at the root *
-! of the source code distribution tree; Copyright.html can be found at the *
-! root level of an installed copy of the electronic HDF5 document set and *
-! is linked from the top-level documents page. It can also be found at *
-! http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have *
-! access to either file, you may request a copy from help at hdfgroup.org. *
+! Copyright by The HDF Group. *
+! Copyright by the Board of Trustees of the University of Illinois. *
+! All rights reserved. *
+! *
+! This file is part of HDF5. The full HDF5 copyright notice, including *
+! terms governing use, modification, and redistribution, is contained in *
+! the files COPYING and Copyright.html. COPYING can be found at the root *
+! of the source code distribution tree; Copyright.html can be found at the *
+! root level of an installed copy of the electronic HDF5 document set and *
+! is linked from the top-level documents page. It can also be found at *
+! http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have *
+! access to either file, you may request a copy from help at hdfgroup.org. *
! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
!
! AUTHOR
@@ -90,10 +92,10 @@ WRITE(*,'(40(A,/))') &
'! PURPOSE',&
'! This stand alone program is used at build time to generate the header file',&
'! H5fort_type_defines.h. The source code itself was automatically generated by',&
-'! the program H5test_kind_SIZEOF.f90',&
+'! the program H5test_kind_STORAGE_SIZE.f90',&
'!',&
'! NOTES',&
-'! This source code makes use of the Fortran intrinsic function SIZEOF because',&
+'! This source code makes use of the Fortran intrinsic function STORAGE_SIZE because',&
'! the availability of the intrinsic function was determined to be available at',&
'! configure time',&
'!',&
@@ -114,7 +116,7 @@ WRITE(*,'(40(A,/))') &
'! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *',&
'!',&
'! AUTHOR',&
-'! H5test_kind_SIZEOF.f90',&
+'! H5test_kind_C_SIZEOF.f90',&
'!',&
'!*****'
@@ -122,7 +124,7 @@ WRITE(*,'(40(A,/))') &
!
! (a) Generate the module
- WRITE(*,*) "MODULE H5test_kind_SIZEOF_mod"
+ WRITE(*,*) "MODULE H5test_kind_STORAGE_SIZE_mod"
WRITE(*,*) "USE ISO_C_BINDING"
WRITE(*,*) "IMPLICIT NONE"
WRITE(*,*) "CONTAINS"
@@ -133,7 +135,7 @@ WRITE(*,'(40(A,/))') &
WRITE(*,*)" INTEGER :: a"
WRITE(*,*)" INTEGER(C_SIZE_T) :: a_size"
WRITE(*,*)" CHARACTER(LEN=2) :: ichr2, jchr2"
- WRITE(*,*)" a_size = SIZEOF(a)"
+ WRITE(*,*)" a_size = STORAGE_SIZE(a, c_size_t)/STORAGE_SIZE(c_char_'a',c_size_t)"
WRITE(*,*)" WRITE(ichr2,'(I2)') a_size"
WRITE(*,'(A,I0)')" WRITE(jchr2,'(I2)') ",ji
WRITE(*,'(A)')' WRITE(*,*) "#define H5_FORTRAN_HAS_NATIVE_"'// &
@@ -147,7 +149,7 @@ WRITE(*,'(40(A,/))') &
WRITE(*,*)" REAL :: a"
WRITE(*,*)" INTEGER(C_SIZE_T) :: a_size"
WRITE(*,*)" CHARACTER(LEN=2) :: ichr2, jchr2"
- WRITE(*,*)" a_size = SIZEOF(a)"
+ WRITE(*,*)" a_size = STORAGE_SIZE(a, c_size_t)/STORAGE_SIZE(c_char_'a',c_size_t)"
WRITE(*,*)" WRITE(ichr2,'(I2)') a_size"
WRITE(*,'(A,I0)')" WRITE(jchr2,'(I2)') ",j
WRITE(*,'(A)')' WRITE(*,*) "#define H5_FORTRAN_HAS_REAL_NATIVE_"'// &
@@ -161,7 +163,7 @@ WRITE(*,'(40(A,/))') &
WRITE(*,*)" DOUBLE PRECISION :: a"
WRITE(*,*)" INTEGER(C_SIZE_T) :: a_size"
WRITE(*,*)" CHARACTER(LEN=2) :: ichr2, jchr2"
- WRITE(*,*)" a_size = SIZEOF(a)"
+ WRITE(*,*)" a_size = STORAGE_SIZE(a, c_size_t)/STORAGE_SIZE(c_char_'a',c_size_t)"
WRITE(*,*)" WRITE(ichr2,'(I2)') a_size"
WRITE(*,'(A,I0)')" WRITE(jchr2,'(I2)') ",j
WRITE(*,'(A)')' WRITE(*,*) "#define H5_FORTRAN_HAS_DOUBLE_NATIVE_"'// &
@@ -175,7 +177,7 @@ WRITE(*,'(40(A,/))') &
WRITE(*,'(A,I0,A)')" INTEGER(KIND=",j,") :: a"
WRITE(*,*)" INTEGER(C_SIZE_T) :: a_size"
WRITE(*,*)" CHARACTER(LEN=2) :: ichr2, jchr2"
- WRITE(*,*)" a_size = SIZEOF(a)"
+ WRITE(*,*)" a_size = STORAGE_SIZE(a, c_size_t)/STORAGE_SIZE(c_char_'a',c_size_t)"
WRITE(*,*)" WRITE(ichr2,'(I2)') a_size"
WRITE(*,'(A,I0)')" WRITE(jchr2,'(I2)') ",j
WRITE(*,'(A)')' WRITE(*,*) "#define H5_FORTRAN_HAS_INTEGER_"'// &
@@ -190,7 +192,7 @@ WRITE(*,'(40(A,/))') &
WRITE(*,'(A,I0,A)')" REAL(KIND= ",j,") :: a"
WRITE(*,*)" INTEGER(C_SIZE_T) :: a_size"
WRITE(*,*)" CHARACTER(LEN=2) :: ichr2, jchr2"
- WRITE(*,*)" a_size = SIZEOF(a)"
+ WRITE(*,*)" a_size = STORAGE_SIZE(a, c_size_t)/STORAGE_SIZE(c_char_'a',c_size_t)"
WRITE(*,*)" WRITE(ichr2,'(I2)') a_size"
WRITE(*,'(A,I0)')" WRITE(jchr2,'(I2)') ", j
WRITE(*,'(A)')' WRITE(*,*) "#define H5_FORTRAN_HAS_REAL_"'// &
@@ -198,13 +200,13 @@ WRITE(*,'(40(A,/))') &
WRITE(*,*)" RETURN"
WRITE(*,*)"END SUBROUTINE"
ENDDO
- WRITE(*,*) "END MODULE H5test_kind_SIZEOF_mod"
+ WRITE(*,*) "END MODULE H5test_kind_STORAGE_SIZE_mod"
WRITE(*,*) ""
! (b) generate the main program
- WRITE(*,*) "PROGRAM H5test_kind_SIZEOF"
- WRITE(*,*) "USE H5test_kind_SIZEOF_mod"
+ WRITE(*,*) "PROGRAM H5test_kind_STORAGE_SIZE"
+ WRITE(*,*) "USE H5test_kind_STORAGE_SIZE_mod"
WRITE(*,*) "WRITE(*,*) "" /*generating header file*/ """
ji = 0
WRITE(*, "("" CALL i"", i2.2,""()"")") ji
@@ -220,7 +222,7 @@ WRITE(*,'(40(A,/))') &
j = rkind_numbers(i)
WRITE(*, "("" CALL r"", i2.2,""()"")") j
ENDDO
- WRITE(*,*) "END PROGRAM H5test_kind_SIZEOF"
+ WRITE(*,*) "END PROGRAM H5test_kind_STORAGE_SIZE"
END PROGRAM test_kind
diff --git a/fortran/src/Makefile.am b/fortran/src/Makefile.am
index 4c7c1d9..a4b3843 100644
--- a/fortran/src/Makefile.am
+++ b/fortran/src/Makefile.am
@@ -79,7 +79,7 @@ libhdf5_fortran_la_SOURCES=H5f90global.f90 \
H5Aff$(F_STATUS).f90 H5Dff$(F_STATUS).f90 H5Eff$(F_STATUS).f90 H5Fff$(F_STATUS).f90 H5Lff$(F_STATUS).f90 \
H5Off$(F_STATUS).f90 H5Pff$(F_STATUS).f90 H5Rff$(F_STATUS).f90 H5Tff$(F_STATUS).f90 $(PARALLEL_COND_SRC)
-# HDF5 Fortran library depends on HDF5 Library.
+# HDF5 Fortran library depends on HDF5 Library.
libhdf5_fortran_la_LIBADD=$(LIBHDF5)
# h5fc is generated during configure.
@@ -176,11 +176,15 @@ H5fortran_detect.f90: H5test_kind$(EXEEXT)
# H5test_kind.f90 is included in the distribution, and Automake knows
# how to compile a fortran program given its sources.
+if FORTRAN_HAVE_STORAGE_SIZE
+ H5test_kind_SOURCES = H5test_kind_STORAGE_SIZE.f90
+else
if FORTRAN_HAVE_SIZEOF
H5test_kind_SOURCES = H5test_kind_SIZEOF.f90
else
H5test_kind_SOURCES = H5test_kind.f90
endif
+endif
# Mark this directory as part of the Fortran API
FORTRAN_API=yes
diff --git a/fortran/src/Makefile.in b/fortran/src/Makefile.in
index c34bb1c..0b55961 100644
--- a/fortran/src/Makefile.in
+++ b/fortran/src/Makefile.in
@@ -189,11 +189,11 @@ H5fortran_detect_LDADD = $(LDADD)
H5match_types_SOURCES = H5match_types.c
H5match_types_OBJECTS = H5match_types.$(OBJEXT)
H5match_types_LDADD = $(LDADD)
-am__H5test_kind_SOURCES_DIST = H5test_kind.f90 H5test_kind_SIZEOF.f90
- at FORTRAN_HAVE_SIZEOF_FALSE@am_H5test_kind_OBJECTS = \
- at FORTRAN_HAVE_SIZEOF_FALSE@ H5test_kind.$(OBJEXT)
- at FORTRAN_HAVE_SIZEOF_TRUE@am_H5test_kind_OBJECTS = \
- at FORTRAN_HAVE_SIZEOF_TRUE@ H5test_kind_SIZEOF.$(OBJEXT)
+am__H5test_kind_SOURCES_DIST = H5test_kind.f90 H5test_kind_SIZEOF.f90 \
+ H5test_kind_STORAGE_SIZE.f90
+ at FORTRAN_HAVE_SIZEOF_FALSE@@FORTRAN_HAVE_STORAGE_SIZE_FALSE at am_H5test_kind_OBJECTS = H5test_kind.$(OBJEXT)
+ at FORTRAN_HAVE_SIZEOF_TRUE@@FORTRAN_HAVE_STORAGE_SIZE_FALSE at am_H5test_kind_OBJECTS = H5test_kind_SIZEOF.$(OBJEXT)
+ at FORTRAN_HAVE_STORAGE_SIZE_TRUE@am_H5test_kind_OBJECTS = H5test_kind_STORAGE_SIZE.$(OBJEXT)
H5test_kind_OBJECTS = $(am_H5test_kind_OBJECTS)
H5test_kind_LDADD = $(LDADD)
AM_V_P = $(am__v_P_ at AM_V@)
@@ -569,7 +569,6 @@ MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MPE = @MPE@
-MPI_GET_SIZE = @MPI_GET_SIZE@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
@@ -732,8 +731,10 @@ CHECK_CLEANFILES = *.chkexe *.chklog *.clog
# Add libtool shared library version numbers to the HDF5 library
# See libtool versioning documentation online.
-LT_VERS_INTERFACE = 8
-LT_VERS_REVISION = 2
+# After making changes, run bin/reconfigure to update other configure related
+# files like Makefile.in.
+LT_VERS_INTERFACE = 9
+LT_VERS_REVISION = 0
LT_VERS_AGE = 0
AM_FCLIBS = $(LIBHDF5)
@@ -772,7 +773,7 @@ libhdf5_fortran_la_SOURCES = H5f90global.f90 \
H5Off$(F_STATUS).f90 H5Pff$(F_STATUS).f90 H5Rff$(F_STATUS).f90 H5Tff$(F_STATUS).f90 $(PARALLEL_COND_SRC)
-# HDF5 Fortran library depends on HDF5 Library.
+# HDF5 Fortran library depends on HDF5 Library.
libhdf5_fortran_la_LIBADD = $(LIBHDF5)
# h5fc is generated during configure.
@@ -799,11 +800,12 @@ BUILT_SOURCES = H5f90i_gen.h
# Automake knows how to build fortran programs if we tell it the source
# files.
H5fortran_detect_SOURCES = H5fortran_detect.f90
- at FORTRAN_HAVE_SIZEOF_FALSE@H5test_kind_SOURCES = H5test_kind.f90
+ at FORTRAN_HAVE_SIZEOF_FALSE@@FORTRAN_HAVE_STORAGE_SIZE_FALSE at H5test_kind_SOURCES = H5test_kind.f90
+ at FORTRAN_HAVE_SIZEOF_TRUE@@FORTRAN_HAVE_STORAGE_SIZE_FALSE at H5test_kind_SOURCES = H5test_kind_SIZEOF.f90
# H5test_kind.f90 is included in the distribution, and Automake knows
# how to compile a fortran program given its sources.
- at FORTRAN_HAVE_SIZEOF_TRUE@H5test_kind_SOURCES = H5test_kind_SIZEOF.f90
+ at FORTRAN_HAVE_STORAGE_SIZE_TRUE@H5test_kind_SOURCES = H5test_kind_STORAGE_SIZE.f90
# Mark this directory as part of the Fortran API
FORTRAN_API = yes
diff --git a/fortran/src/hdf5_fortrandll.def.in b/fortran/src/hdf5_fortrandll.def.in
index 41e93e4..c9c5e76 100644
--- a/fortran/src/hdf5_fortrandll.def.in
+++ b/fortran/src/hdf5_fortrandll.def.in
@@ -1,572 +1,572 @@
-EXPORTS
-; H5LIB
-H5LIB_mp_H5OPEN_F
-H5LIB_mp_H5CLOSE_F
-H5LIB_mp_H5GET_LIBVERSION_F
-H5LIB_mp_H5CHECK_VERSION_F
-H5LIB_mp_H5GARBAGE_COLLECT_F
-H5LIB_mp_H5DONT_ATEXIT_F
-H5LIB_mp_H5KIND_TO_TYPE
- at H5_NOF03EXP@H5LIB_PROVISIONAL_mp_H5OFFSETOF
-; H5_DBLE_INTERFACE
-H5_DBLE_INTERFACE_mp_H5AREAD_DOUBLE_SCALAR
-H5_DBLE_INTERFACE_mp_H5AREAD_DOUBLE_1
-H5_DBLE_INTERFACE_mp_H5AREAD_DOUBLE_2
-H5_DBLE_INTERFACE_mp_H5AREAD_DOUBLE_3
-H5_DBLE_INTERFACE_mp_H5AREAD_DOUBLE_4
-H5_DBLE_INTERFACE_mp_H5AREAD_DOUBLE_5
-H5_DBLE_INTERFACE_mp_H5AREAD_DOUBLE_6
-H5_DBLE_INTERFACE_mp_H5AREAD_DOUBLE_7
-H5_DBLE_INTERFACE_mp_H5AWRITE_DOUBLE_SCALAR
-H5_DBLE_INTERFACE_mp_H5AWRITE_DOUBLE_1
-H5_DBLE_INTERFACE_mp_H5AWRITE_DOUBLE_2
-H5_DBLE_INTERFACE_mp_H5AWRITE_DOUBLE_3
-H5_DBLE_INTERFACE_mp_H5AWRITE_DOUBLE_4
-H5_DBLE_INTERFACE_mp_H5AWRITE_DOUBLE_5
-H5_DBLE_INTERFACE_mp_H5AWRITE_DOUBLE_6
-H5_DBLE_INTERFACE_mp_H5AWRITE_DOUBLE_7
-H5_DBLE_INTERFACE_mp_H5DFILL_DOUBLE
-H5_DBLE_INTERFACE_mp_H5DREAD_DOUBLE_SCALAR
-H5_DBLE_INTERFACE_mp_H5DREAD_DOUBLE_1
-H5_DBLE_INTERFACE_mp_H5DREAD_DOUBLE_2
-H5_DBLE_INTERFACE_mp_H5DREAD_DOUBLE_3
-H5_DBLE_INTERFACE_mp_H5DREAD_DOUBLE_4
-H5_DBLE_INTERFACE_mp_H5DREAD_DOUBLE_5
-H5_DBLE_INTERFACE_mp_H5DREAD_DOUBLE_6
-H5_DBLE_INTERFACE_mp_H5DREAD_DOUBLE_7
-H5_DBLE_INTERFACE_mp_H5DWRITE_DOUBLE_SCALAR
-H5_DBLE_INTERFACE_mp_H5DWRITE_DOUBLE_1
-H5_DBLE_INTERFACE_mp_H5DWRITE_DOUBLE_2
-H5_DBLE_INTERFACE_mp_H5DWRITE_DOUBLE_3
-H5_DBLE_INTERFACE_mp_H5DWRITE_DOUBLE_4
-H5_DBLE_INTERFACE_mp_H5DWRITE_DOUBLE_5
-H5_DBLE_INTERFACE_mp_H5DWRITE_DOUBLE_6
-H5_DBLE_INTERFACE_mp_H5DWRITE_DOUBLE_7
-H5_DBLE_INTERFACE_mp_H5PGET_DOUBLE
-H5_DBLE_INTERFACE_mp_H5PSET_DOUBLE
-H5_DBLE_INTERFACE_mp_H5PSET_FILL_VALUE_DOUBLE
-H5_DBLE_INTERFACE_mp_H5PGET_FILL_VALUE_DOUBLE
-H5_DBLE_INTERFACE_mp_H5PINSERT_DOUBLE
-H5_DBLE_INTERFACE_mp_H5PREGISTER_DOUBLE
-; H5A
-H5A_mp_H5ACREATE_F
-H5A_mp_H5AOPEN_NAME_F
-H5A_mp_H5AOPEN_IDX_F
-H5A_PROVISIONAL_mp_H5AWRITE_INTEGER_SCALAR
-H5A_PROVISIONAL_mp_H5AWRITE_INTEGER_1
-H5A_PROVISIONAL_mp_H5AWRITE_INTEGER_2
-H5A_PROVISIONAL_mp_H5AWRITE_INTEGER_3
-H5A_PROVISIONAL_mp_H5AWRITE_INTEGER_4
-H5A_PROVISIONAL_mp_H5AWRITE_INTEGER_5
-H5A_PROVISIONAL_mp_H5AWRITE_INTEGER_6
-H5A_PROVISIONAL_mp_H5AWRITE_INTEGER_7
-H5A_PROVISIONAL_mp_H5AWRITE_REAL_SCALAR
-H5A_PROVISIONAL_mp_H5AWRITE_REAL_1
-H5A_PROVISIONAL_mp_H5AWRITE_REAL_2
-H5A_PROVISIONAL_mp_H5AWRITE_REAL_3
-H5A_PROVISIONAL_mp_H5AWRITE_REAL_4
-H5A_PROVISIONAL_mp_H5AWRITE_REAL_5
-H5A_PROVISIONAL_mp_H5AWRITE_REAL_6
-H5A_PROVISIONAL_mp_H5AWRITE_REAL_7
-H5A_PROVISIONAL_mp_H5AWRITE_CHAR_SCALAR
-H5A_PROVISIONAL_mp_H5AWRITE_CHAR_1
-H5A_PROVISIONAL_mp_H5AWRITE_CHAR_2
-H5A_PROVISIONAL_mp_H5AWRITE_CHAR_3
-H5A_PROVISIONAL_mp_H5AWRITE_CHAR_4
-H5A_PROVISIONAL_mp_H5AWRITE_CHAR_5
-H5A_PROVISIONAL_mp_H5AWRITE_CHAR_6
-H5A_PROVISIONAL_mp_H5AWRITE_CHAR_7
-H5A_PROVISIONAL_mp_H5AREAD_INTEGER_SCALAR
-H5A_PROVISIONAL_mp_H5AREAD_INTEGER_1
-H5A_PROVISIONAL_mp_H5AREAD_INTEGER_2
-H5A_PROVISIONAL_mp_H5AREAD_INTEGER_3
-H5A_PROVISIONAL_mp_H5AREAD_INTEGER_4
-H5A_PROVISIONAL_mp_H5AREAD_INTEGER_5
-H5A_PROVISIONAL_mp_H5AREAD_INTEGER_6
-H5A_PROVISIONAL_mp_H5AREAD_INTEGER_7
-H5A_PROVISIONAL_mp_H5AREAD_REAL_SCALAR
-H5A_PROVISIONAL_mp_H5AREAD_REAL_1
-H5A_PROVISIONAL_mp_H5AREAD_REAL_2
-H5A_PROVISIONAL_mp_H5AREAD_REAL_3
-H5A_PROVISIONAL_mp_H5AREAD_REAL_4
-H5A_PROVISIONAL_mp_H5AREAD_REAL_5
-H5A_PROVISIONAL_mp_H5AREAD_REAL_6
-H5A_PROVISIONAL_mp_H5AREAD_REAL_7
-H5A_PROVISIONAL_mp_H5AREAD_CHAR_SCALAR
-H5A_PROVISIONAL_mp_H5AREAD_CHAR_1
-H5A_PROVISIONAL_mp_H5AREAD_CHAR_2
-H5A_PROVISIONAL_mp_H5AREAD_CHAR_3
-H5A_PROVISIONAL_mp_H5AREAD_CHAR_4
-H5A_PROVISIONAL_mp_H5AREAD_CHAR_5
-H5A_PROVISIONAL_mp_H5AREAD_CHAR_6
-H5A_PROVISIONAL_mp_H5AREAD_CHAR_7
-H5A_mp_H5AGET_SPACE_F
-H5A_mp_H5AGET_TYPE_F
-H5A_mp_H5AGET_NAME_F
-H5A_mp_H5AGET_NAME_BY_IDX_F
-H5A_mp_H5AGET_NUM_ATTRS_F
-H5A_mp_H5ADELETE_F
-H5A_mp_H5ACLOSE_F
-H5A_mp_H5AGET_STORAGE_SIZE_F
-H5A_mp_H5AGET_CREATE_PLIST_F
-H5A_mp_H5ARENAME_BY_NAME_F
-H5A_mp_H5AOPEN_F
-H5A_mp_H5ADELETE_BY_IDX_F
-H5A_mp_H5ADELETE_BY_NAME_F
-H5A_mp_H5AOPEN_BY_IDX_F
-H5A_mp_H5AGET_INFO_F
-H5A_mp_H5AGET_INFO_BY_IDX_F
-H5A_mp_H5AGET_INFO_BY_NAME_F
-H5A_mp_H5ACREATE_BY_NAME_F
-H5A_mp_H5AEXISTS_F
-H5A_mp_H5AEXISTS_BY_NAME_F
-H5A_mp_H5AOPEN_BY_NAME_F
-H5A_mp_H5ARENAME_F
- at H5_NOF03EXP@H5A_PROVISIONAL_mp_H5AWRITE_PTR
- at H5_NOF03EXP@H5A_PROVISIONAL_mp_H5AREAD_PTR
-; H5D
-H5D_mp_H5DCREATE_F
-H5D_mp_H5DOPEN_F
-H5D_mp_H5DCLOSE_F
-H5D_PROVISIONAL_mp_H5DWRITE_REFERENCE_OBJ
-H5D_PROVISIONAL_mp_H5DWRITE_REFERENCE_DSETREG
-H5D_PROVISIONAL_mp_H5DWRITE_INTEGER_SCALAR
-H5D_PROVISIONAL_mp_H5DWRITE_INTEGER_1
-H5D_PROVISIONAL_mp_H5DWRITE_INTEGER_2
-H5D_PROVISIONAL_mp_H5DWRITE_INTEGER_3
-H5D_PROVISIONAL_mp_H5DWRITE_INTEGER_4
-H5D_PROVISIONAL_mp_H5DWRITE_INTEGER_5
-H5D_PROVISIONAL_mp_H5DWRITE_INTEGER_6
-H5D_PROVISIONAL_mp_H5DWRITE_INTEGER_7
-H5D_PROVISIONAL_mp_H5DWRITE_CHAR_SCALAR
-H5D_PROVISIONAL_mp_H5DWRITE_CHAR_1
-H5D_PROVISIONAL_mp_H5DWRITE_CHAR_2
-H5D_PROVISIONAL_mp_H5DWRITE_CHAR_3
-H5D_PROVISIONAL_mp_H5DWRITE_CHAR_4
-H5D_PROVISIONAL_mp_H5DWRITE_CHAR_5
-H5D_PROVISIONAL_mp_H5DWRITE_CHAR_6
-H5D_PROVISIONAL_mp_H5DWRITE_CHAR_7
-H5D_PROVISIONAL_mp_H5DWRITE_REAL_SCALAR
-H5D_PROVISIONAL_mp_H5DWRITE_REAL_1
-H5D_PROVISIONAL_mp_H5DWRITE_REAL_2
-H5D_PROVISIONAL_mp_H5DWRITE_REAL_3
-H5D_PROVISIONAL_mp_H5DWRITE_REAL_4
-H5D_PROVISIONAL_mp_H5DWRITE_REAL_5
-H5D_PROVISIONAL_mp_H5DWRITE_REAL_6
-H5D_PROVISIONAL_mp_H5DWRITE_REAL_7
-H5D_PROVISIONAL_mp_H5DREAD_REFERENCE_OBJ
-H5D_PROVISIONAL_mp_H5DREAD_REFERENCE_DSETREG
-H5D_PROVISIONAL_mp_H5DREAD_INTEGER_SCALAR
-H5D_PROVISIONAL_mp_H5DREAD_INTEGER_1
-H5D_PROVISIONAL_mp_H5DREAD_INTEGER_2
-H5D_PROVISIONAL_mp_H5DREAD_INTEGER_3
-H5D_PROVISIONAL_mp_H5DREAD_INTEGER_4
-H5D_PROVISIONAL_mp_H5DREAD_INTEGER_5
-H5D_PROVISIONAL_mp_H5DREAD_INTEGER_6
-H5D_PROVISIONAL_mp_H5DREAD_INTEGER_7
-H5D_PROVISIONAL_mp_H5DREAD_CHAR_SCALAR
-H5D_PROVISIONAL_mp_H5DREAD_CHAR_1
-H5D_PROVISIONAL_mp_H5DREAD_CHAR_2
-H5D_PROVISIONAL_mp_H5DREAD_CHAR_3
-H5D_PROVISIONAL_mp_H5DREAD_CHAR_4
-H5D_PROVISIONAL_mp_H5DREAD_CHAR_5
-H5D_PROVISIONAL_mp_H5DREAD_CHAR_6
-H5D_PROVISIONAL_mp_H5DREAD_CHAR_7
-H5D_PROVISIONAL_mp_H5DREAD_REAL_SCALAR
-H5D_PROVISIONAL_mp_H5DREAD_REAL_1
-H5D_PROVISIONAL_mp_H5DREAD_REAL_2
-H5D_PROVISIONAL_mp_H5DREAD_REAL_3
-H5D_PROVISIONAL_mp_H5DREAD_REAL_4
-H5D_PROVISIONAL_mp_H5DREAD_REAL_5
-H5D_PROVISIONAL_mp_H5DREAD_REAL_6
-H5D_PROVISIONAL_mp_H5DREAD_REAL_7
-H5D_mp_H5DGET_SPACE_F
-H5D_mp_H5DGET_TYPE_F
-H5D_mp_H5DSET_EXTENT_F
-H5D_mp_H5DGET_CREATE_PLIST_F
-H5D_mp_H5DGET_STORAGE_SIZE_F
-H5D_mp_H5DVLEN_GET_MAX_LEN_F
-H5D_mp_H5DWRITE_VL_INTEGER
-H5D_mp_H5DREAD_VL_INTEGER
-H5D_mp_H5DWRITE_VL_REAL
-H5D_mp_H5DREAD_VL_REAL
-H5D_mp_H5DWRITE_VL_STRING
-H5D_mp_H5DREAD_VL_STRING
-H5D_PROVISIONAL_mp_H5DFILL_INTEGER
-H5D_PROVISIONAL_mp_H5DFILL_REAL
-H5D_PROVISIONAL_mp_H5DFILL_CHAR
-H5D_mp_H5DGET_SPACE_STATUS_F
-H5D_mp_H5DCREATE_ANON_F
-H5D_mp_H5DGET_SPACE_F
-H5D_mp_H5DGET_TYPE_F
-H5D_mp_H5DSET_EXTENT_F
-H5D_mp_H5DGET_CREATE_PLIST_F
-H5D_mp_H5DGET_STORAGE_SIZE_F
-H5D_mp_H5DVLEN_GET_MAX_LEN_F
-H5D_mp_H5DGET_ACCESS_PLIST_F
- at H5_NOF03EXP@H5D_PROVISIONAL_mp_H5DWRITE_PTR
- at H5_NOF03EXP@H5D_PROVISIONAL_mp_H5DREAD_PTR
- at H5_NOF03EXP@H5D_PROVISIONAL_mp_H5DVLEN_RECLAIM_F
-; H5E
-H5E_mp_H5ECLEAR_F
-H5E_mp_H5EPRINT_F
-H5E_mp_H5EGET_MAJOR_F
-H5E_mp_H5EGET_MINOR_F
-H5E_PROVISIONAL_mp_H5ESET_AUTO_F
-; H5F
-H5F_mp_H5FCREATE_F
-H5F_mp_H5FFLUSH_F
-H5F_mp_H5FCLOSE_F
-H5F_mp_H5FGET_OBJ_COUNT_F
-H5F_mp_H5FGET_OBJ_IDS_F
-H5F_mp_H5FGET_FREESPACE_F
-H5F_mp_H5FMOUNT_F
-H5F_mp_H5FUNMOUNT_F
-H5F_mp_H5FOPEN_F
-H5F_mp_H5FREOPEN_F
-H5F_mp_H5FGET_CREATE_PLIST_F
-H5F_mp_H5FGET_ACCESS_PLIST_F
-H5F_mp_H5FIS_HDF5_F
-H5F_mp_H5FGET_NAME_F
-H5F_mp_H5FGET_FILESIZE_F
- at H5_NOF03EXP@H5F_PROVISIONAL_mp_H5FGET_FILE_IMAGE_F
-; H5G
-H5G_mp_H5GOPEN_F
-H5G_mp_H5GCREATE_F
-H5G_mp_H5GCLOSE_F
-H5G_mp_H5GGET_OBJ_INFO_IDX_F
-H5G_mp_H5GN_MEMBERS_F
-H5G_mp_H5GLINK_F
-H5G_mp_H5GLINK2_F
-H5G_mp_H5GUNLINK_F
-H5G_mp_H5GMOVE_F
-H5G_mp_H5GMOVE2_F
-H5G_mp_H5GGET_LINKVAL_F
-H5G_mp_H5GSET_COMMENT_F
-H5G_mp_H5GGET_COMMENT_F
-H5G_mp_H5GCREATE_ANON_F
-H5G_mp_H5GGET_CREATE_PLIST_F
-H5G_mp_H5GGET_INFO_F
-H5G_mp_H5GGET_INFO_BY_IDX_F
-H5G_mp_H5GGET_INFO_BY_NAME_F
-H5G_mp_H5GGET_OBJ_INFO_IDX_F
-; H5GLOBAL
-; PREDEFINED_TYPES DATA
-; FLOATING_TYPES DATA
-; INTEGER_TYPES DATA
-; H5F_FLAGS DATA
-; H5GENERIC_FLAGS DATA
-; H5G_FLAGS DATA
-; H5D_FLAGS DATA
-; H5FD_FLAGS DATA
-; H5FD_HID_FLAGS DATA
-; H5I_FLAGS DATA
-; H5L_FLAGS DATA
-; H5O_FLAGS DATA
-; H5P_FLAGS DATA
-; H5P_FLAGS_INT DATA
-; H5R_FLAGS DATA
-; H5S_FLAGS DATA
-; H5T_FLAGS DATA
-; H5Z_FLAGS DATA
-; H5LIB_FLAGS DATA
-; H5I
-H5I_mp_H5IGET_TYPE_F
-H5I_mp_H5IGET_NAME_F
-H5I_mp_H5IINC_REF_F
-H5I_mp_H5IDEC_REF_F
-H5I_mp_H5IGET_REF_F
-H5I_mp_H5IGET_FILE_ID_F
-H5I_mp_H5IIS_VALID_F
-; H5L
-H5L_mp_H5LCOPY_F
-H5L_mp_H5LDELETE_F
-H5L_mp_H5LCREATE_SOFT_F
-H5L_mp_H5LCREATE_HARD_F
-H5L_mp_H5LCREATE_EXTERNAL_F
-H5L_mp_H5LDELETE_BY_IDX_F
-H5L_mp_H5LEXISTS_F
-H5L_mp_H5LGET_INFO_F
-H5L_mp_H5LGET_INFO_BY_IDX_F
-H5L_mp_H5LIS_REGISTERED_F
-H5L_mp_H5LMOVE_F
-H5L_mp_H5LGET_NAME_BY_IDX_F
- at H5_NOF03EXP@H5L_PROVISIONAL_mp_H5LITERATE_F
- at H5_NOF03EXP@H5L_PROVISIONAL_mp_H5LITERATE_BY_NAME_F
-; H5O
-H5O_mp_H5OCLOSE_F
-H5O_mp_H5OCOPY_F
-H5O_mp_H5ODECR_REFCOUNT_F
-H5O_mp_H5OEXISTS_BY_NAME_F
-H5O_mp_H5OGET_COMMENT_F
-H5O_mp_H5OGET_COMMENT_BY_NAME_F
-H5O_mp_H5OINCR_REFCOUNT_F
-H5O_mp_H5OLINK_F
-H5O_mp_H5OOPEN_BY_ADDR_F
-H5O_mp_H5OOPEN_BY_IDX_F
-H5O_mp_H5OOPEN_F
-H5O_mp_H5OSET_COMMENT_F
-H5O_mp_H5OSET_COMMENT_BY_NAME_F
- at H5_NOF03EXP@H5O_PROVISIONAL_mp_H5OGET_INFO_BY_IDX_F
- at H5_NOF03EXP@H5O_PROVISIONAL_mp_H5OGET_INFO_BY_NAME_F
- at H5_NOF03EXP@H5O_PROVISIONAL_mp_H5OGET_INFO_F
- at H5_NOF03EXP@H5O_PROVISIONAL_mp_H5OVISIT_BY_NAME_F
- at H5_NOF03EXP@H5O_PROVISIONAL_mp_H5OVISIT_F
-; H5P
-H5P_mp_H5PCREATE_F
-H5P_mp_H5PSET_PRESERVE_F
-H5P_mp_H5PGET_PRESERVE_F
-H5P_mp_H5PGET_CLASS_F
-H5P_mp_H5PCOPY_F
-H5P_mp_H5PCLOSE_F
-H5P_mp_H5PSET_CHUNK_F
-H5P_mp_H5PGET_CHUNK_F
-H5P_mp_H5PSET_DEFLATE_F
-H5P_PROVISIONAL_mp_H5PSET_FILL_VALUE_INTEGER
-H5P_PROVISIONAL_mp_H5PGET_FILL_VALUE_INTEGER
-H5P_PROVISIONAL_mp_H5PSET_FILL_VALUE_REAL
-H5P_PROVISIONAL_mp_H5PGET_FILL_VALUE_REAL
-H5P_PROVISIONAL_mp_H5PSET_FILL_VALUE_CHAR
-H5P_PROVISIONAL_mp_H5PGET_FILL_VALUE_CHAR
-H5P_mp_H5PGET_VERSION_F
-H5P_mp_H5PSET_USERBLOCK_F
-H5P_mp_H5PGET_USERBLOCK_F
-H5P_mp_H5PSET_SIZES_F
-H5P_mp_H5PGET_SIZES_F
-H5P_mp_H5PSET_SYM_K_F
-H5P_mp_H5PGET_SYM_K_F
-H5P_mp_H5PSET_ISTORE_K_F
-H5P_mp_H5PGET_ISTORE_K_F
-H5P_mp_H5PGET_DRIVER_F
-H5P_mp_H5PSET_FAPL_STDIO_F
-H5P_mp_H5PSET_FAPL_SEC2_F
-H5P_mp_H5PSET_ALIGNMENT_F
-H5P_mp_H5PGET_ALIGNMENT_F
-H5P_mp_H5PSET_FAPL_CORE_F
-H5P_mp_H5PGET_FAPL_CORE_F
-H5P_mp_H5PSET_FAPL_FAMILY_F
-H5P_mp_H5PGET_FAPL_FAMILY_F
-H5P_mp_H5PSET_CACHE_F
-H5P_mp_H5PGET_CACHE_F
-H5P_mp_H5PSET_FAPL_SPLIT_F
-H5P_mp_H5PSET_GC_REFERENCES_F
-H5P_mp_H5PGET_GC_REFERENCES_F
-H5P_mp_H5PSET_LAYOUT_F
-H5P_mp_H5PGET_LAYOUT_F
-H5P_mp_H5PSET_FILTER_F
-H5P_mp_H5PGET_NFILTERS_F
-H5P_mp_H5PGET_FILTER_F
-H5P_mp_H5PSET_EXTERNAL_F
-H5P_mp_H5PGET_EXTERNAL_COUNT_F
-H5P_mp_H5PGET_EXTERNAL_F
-H5P_mp_H5PSET_BTREE_RATIOS_F
-H5P_mp_H5PGET_BTREE_RATIOS_F
-H5P_mp_H5PGET_FCLOSE_DEGREE_F
-H5P_mp_H5PSET_FCLOSE_DEGREE_F
-H5P_mp_H5PEQUAL_F
-H5P_mp_H5PSET_BUFFER_F
-H5P_mp_H5PGET_BUFFER_F
-H5P_mp_H5PFILL_VALUE_DEFINED_F
-H5P_mp_H5PSET_ALLOC_TIME_F
-H5P_mp_H5PGET_ALLOC_TIME_F
-H5P_mp_H5PSET_FILL_TIME_F
-H5P_mp_H5PGET_FILL_TIME_F
-H5P_mp_H5PSET_META_BLOCK_SIZE_F
-H5P_mp_H5PGET_META_BLOCK_SIZE_F
-H5P_mp_H5PSET_SIEVE_BUF_SIZE_F
-H5P_mp_H5PGET_SIEVE_BUF_SIZE_F
-H5P_mp_H5PSET_SMALL_DATA_BLOCK_SIZE_F
-H5P_mp_H5PGET_SMALL_DATA_BLOCK_SIZE_F
-H5P_mp_H5PSET_HYPER_VECTOR_SIZE_F
-H5P_mp_H5PGET_HYPER_VECTOR_SIZE_F
-H5P_PROVISIONAL_mp_H5PSET_INTEGER
-H5P_PROVISIONAL_mp_H5PSET_REAL
-H5P_PROVISIONAL_mp_H5PSET_CHAR
-H5P_PROVISIONAL_mp_H5PGET_INTEGER
-H5P_PROVISIONAL_mp_H5PGET_REAL
-H5P_PROVISIONAL_mp_H5PGET_CHAR
-H5P_mp_H5PEXIST_F
-H5P_mp_H5PGET_SIZE_F
-H5P_mp_H5PGET_NPROPS_F
-H5P_mp_H5PGET_CLASS_NAME_F
-H5P_mp_H5PGET_CLASS_PARENT_F
-H5P_mp_H5PISA_CLASS_F
-H5P_mp_H5PCOPY_PROP_F
-H5P_mp_H5PREMOVE_F
-H5P_mp_H5PUNREGISTER_F
-H5P_mp_H5PCLOSE_CLASS_F
-H5P_PROVISIONAL_mp_H5PCREATE_CLASS_F
-H5P_PROVISIONAL_mp_H5PREGISTER_INTEGER
-H5P_PROVISIONAL_mp_H5PREGISTER_REAL
-H5P_PROVISIONAL_mp_H5PREGISTER_CHAR
-H5P_PROVISIONAL_mp_H5PINSERT_INTEGER
-H5P_PROVISIONAL_mp_H5PINSERT_REAL
-H5P_PROVISIONAL_mp_H5PINSERT_CHAR
-H5P_mp_H5PSET_SHUFFLE_F
-H5P_mp_H5PSET_EDC_CHECK_F
-H5P_mp_H5PGET_EDC_CHECK_F
-H5P_mp_H5PSET_FLETCHER32_F
-H5P_mp_H5PSET_FAMILY_OFFSET_F
-H5P_mp_H5PSET_FAPL_MULTI_L
-H5P_mp_H5PSET_FAPL_MULTI_S
-H5P_mp_H5PGET_FAPL_MULTI_F
-H5P_mp_H5PSET_SZIP_F
-H5P_mp_H5PALL_FILTERS_AVAIL_F
-H5P_mp_H5PGET_FILTER_BY_ID_F
-H5P_mp_H5PMODIFY_FILTER_F
-H5P_mp_H5PREMOVE_FILTER_F
-H5P_mp_H5PGET_ATTR_PHASE_CHANGE_F
-H5P_mp_H5PSET_ATTR_CREATION_ORDER_F
-H5P_mp_H5PSET_SHARED_MESG_NINDEXES_F
-H5P_mp_H5PSET_SHARED_MESG_INDEX_F
-H5P_mp_H5PGET_ATTR_CREATION_ORDER_F
-H5P_mp_H5PSET_LIBVER_BOUNDS_F
-H5P_mp_H5PSET_LINK_CREATION_ORDER_F
-H5P_mp_H5PGET_LINK_PHASE_CHANGE_F
-H5P_mp_H5PGET_OBJ_TRACK_TIMES_F
-H5P_mp_H5PSET_OBJ_TRACK_TIMES_F
-H5P_mp_H5PSET_CREATE_INTER_GROUP_F
-H5P_mp_H5PGET_LINK_CREATION_ORDER_F
-H5P_mp_H5PSET_CHAR_ENCODING_F
-H5P_mp_H5PGET_CHAR_ENCODING_F
-H5P_mp_H5PSET_COPY_OBJECT_F
-H5P_mp_H5PGET_COPY_OBJECT_F
-H5P_mp_H5PGET_DATA_TRANSFORM_F
-H5P_mp_H5PSET_DATA_TRANSFORM_F
-H5P_mp_H5PGET_LOCAL_HEAP_SIZE_HINT_F
-H5P_mp_H5PGET_EST_LINK_INFO_F
-H5P_mp_H5PSET_LOCAL_HEAP_SIZE_HINT_F
-H5P_mp_H5PSET_EST_LINK_INFO_F
-H5P_mp_H5PSET_LINK_PHASE_CHANGE_F
-H5P_mp_H5PSET_FAPL_DIRECT_F
-H5P_mp_H5PGET_FAPL_DIRECT_F
-H5P_mp_H5PSET_ATTR_PHASE_CHANGE_F
-H5P_mp_H5PSET_NBIT_F
-H5P_mp_H5PSET_SCALEOFFSET_F
-H5P_mp_H5PSET_NLINKS_F
-H5P_mp_H5PGET_NLINKS_F
-H5P_mp_H5PGET_CREATE_INTER_GROUP_F
-H5P_mp_H5PSET_CHUNK_CACHE_F
-H5P_mp_H5PGET_CHUNK_CACHE_F
- at H5_NOF03EXP@H5P_PROVISIONAL_mp_H5PSET_FILL_VALUE_PTR
- at H5_NOF03EXP@H5P_PROVISIONAL_mp_H5PGET_FILL_VALUE_PTR
- at H5_NOF03EXP@H5P_PROVISIONAL_mp_H5PSET_PTR
- at H5_NOF03EXP@H5P_PROVISIONAL_mp_H5PGET_PTR
- at H5_NOF03EXP@H5P_PROVISIONAL_mp_H5PREGISTER_PTR
- at H5_NOF03EXP@H5P_PROVISIONAL_mp_H5PINSERT_PTR
- at H5_NOF03EXP@H5P_PROVISIONAL_mp_H5PGET_FILE_IMAGE_F
- at H5_NOF03EXP@H5P_PROVISIONAL_mp_H5PSET_FILE_IMAGE_F
-; H5R
-H5R_PROVISIONAL_mp_H5RCREATE_OBJECT_F
-H5R_PROVISIONAL_mp_H5RCREATE_REGION_F
-H5R_PROVISIONAL_mp_H5RDEREFERENCE_OBJECT_F
-H5R_PROVISIONAL_mp_H5RDEREFERENCE_REGION_F
-H5R_PROVISIONAL_mp_H5RGET_REGION_REGION_F
-H5R_mp_H5RGET_OBJECT_TYPE_OBJ_F
-H5R_PROVISIONAL_mp_H5RGET_NAME_OBJECT_F
-H5R_PROVISIONAL_mp_H5RGET_NAME_REGION_F
- at H5_NOF03EXP@H5R_PROVISIONAL_mp_H5RGET_REGION_PTR_F
- at H5_NOF03EXP@H5R_PROVISIONAL_mp_H5RCREATE_PTR_F
- at H5_NOF03EXP@H5R_PROVISIONAL_mp_H5RDEREFERENCE_PTR_F
- at H5_NOF03EXP@H5R_PROVISIONAL_mp_H5RGET_NAME_PTR_F
- at H5_NOF03EXP@H5R_PROVISIONAL_mp_H5RGET_OBJ_TYPE_F
-; H5S
-H5S_mp_H5SCREATE_SIMPLE_F
-H5S_mp_H5SCLOSE_F
-H5S_mp_H5SCREATE_F
-H5S_mp_H5SCOPY_F
-H5S_mp_H5SGET_SELECT_HYPER_NBLOCKS_F
-H5S_mp_H5SGET_SELECT_HYPER_BLOCKLIST_F
-H5S_mp_H5SGET_SELECT_BOUNDS_F
-H5S_mp_H5SGET_SELECT_ELEM_NPOINTS_F
-H5S_mp_H5SGET_SELECT_ELEM_POINTLIST_F
-H5S_mp_H5SSELECT_ELEMENTS_F
-H5S_mp_H5SSELECT_ALL_F
-H5S_mp_H5SSELECT_NONE_F
-H5S_mp_H5SSELECT_VALID_F
-H5S_mp_H5SGET_SIMPLE_EXTENT_NPOINTS_F
-H5S_mp_H5SGET_SELECT_NPOINTS_F
-H5S_mp_H5SGET_SIMPLE_EXTENT_NDIMS_F
-H5S_mp_H5SGET_SIMPLE_EXTENT_DIMS_F
-H5S_mp_H5SGET_SIMPLE_EXTENT_TYPE_F
-H5S_mp_H5SSET_EXTENT_SIMPLE_F
-H5S_mp_H5SIS_SIMPLE_F
-H5S_mp_H5SOFFSET_SIMPLE_F
-H5S_mp_H5SEXTENT_COPY_F
-H5S_mp_H5SSET_EXTENT_NONE_F
-H5S_mp_H5SSELECT_HYPERSLAB_F
-H5S_mp_H5SGET_SELECT_TYPE_F
-H5S_mp_H5SDECODE_F
-H5S_mp_H5SENCODE_F
-H5S_mp_H5SEXTENT_EQUAL_F
-; H5T
-H5T_mp_H5TOPEN_F
-H5T_mp_H5TCOMMIT_F
-H5T_mp_H5TCOPY_F
-H5T_mp_H5TEQUAL_F
-H5T_mp_H5TCLOSE_F
-H5T_mp_H5TGET_CLASS_F
-H5T_mp_H5TGET_SIZE_F
-H5T_mp_H5TSET_SIZE_F
-H5T_mp_H5TGET_ORDER_F
-H5T_mp_H5TSET_ORDER_F
-H5T_mp_H5TGET_PRECISION_F
-H5T_mp_H5TSET_PRECISION_F
-H5T_mp_H5TGET_OFFSET_F
-H5T_mp_H5TSET_OFFSET_F
-H5T_mp_H5TGET_PAD_F
-H5T_mp_H5TSET_PAD_F
-H5T_mp_H5TGET_SIGN_F
-H5T_mp_H5TSET_SIGN_F
-H5T_mp_H5TGET_FIELDS_F
-H5T_mp_H5TSET_FIELDS_F
-H5T_mp_H5TGET_EBIAS_F
-H5T_mp_H5TSET_EBIAS_F
-H5T_mp_H5TGET_NORM_F
-H5T_mp_H5TSET_NORM_F
-H5T_mp_H5TGET_INPAD_F
-H5T_mp_H5TSET_INPAD_F
-H5T_mp_H5TGET_CSET_F
-H5T_mp_H5TSET_CSET_F
-H5T_mp_H5TGET_STRPAD_F
-H5T_mp_H5TSET_STRPAD_F
-H5T_mp_H5TGET_NMEMBERS_F
-H5T_mp_H5TGET_MEMBER_NAME_F
-H5T_mp_H5TGET_MEMBER_OFFSET_F
-H5T_mp_H5TGET_MEMBER_INDEX_F
-H5T_mp_H5TGET_ARRAY_DIMS_F
-H5T_mp_H5TGET_ARRAY_NDIMS_F
-H5T_mp_H5TGET_SUPER_F
-H5T_mp_H5TGET_MEMBER_TYPE_F
-H5T_mp_H5TCREATE_F
-H5T_mp_H5TINSERT_F
-H5T_mp_H5TPACK_F
-H5T_mp_H5TARRAY_CREATE_F
-H5T_mp_H5TENUM_CREATE_F
-H5T_mp_H5TENUM_INSERT_F
-H5T_mp_H5TENUM_NAMEOF_F
-H5T_mp_H5TENUM_VALUEOF_F
-H5T_mp_H5TGET_MEMBER_VALUE_F
-H5T_mp_H5TSET_TAG_F
-H5T_mp_H5TGET_TAG_F
-H5T_mp_H5TVLEN_CREATE_F
-H5T_mp_H5TIS_VARIABLE_STR_F
-H5T_mp_H5TGET_MEMBER_CLASS_F
-H5T_mp_H5TCOMMIT_ANON_F
-H5T_mp_H5TCOMMITTED_F
-H5T_mp_H5TDECODE_F
-H5T_mp_H5TENCODE_F
-H5T_mp_H5TGET_CREATE_PLIST_F
-H5T_mp_H5TCOMPILER_CONV_F
-H5T_mp_H5TGET_NATIVE_TYPE_F
- at H5_NOF03EXP@H5T_PROVISIONAL_mp_H5TCONVERT_F
-; H5Z
-H5Z_mp_H5ZUNREGISTER_F
-H5Z_mp_H5ZFILTER_AVAIL_F
-H5Z_mp_H5ZGET_FILTER_INFO_F
-; Parallel
- at H5_NOPAREXP@H5FDMPIO_mp_H5PSET_FAPL_MPIO_F
- at H5_NOPAREXP@H5FDMPIO_mp_H5PGET_FAPL_MPIO_F
- at H5_NOPAREXP@H5FDMPIO_mp_H5PSET_DXPL_MPIO_F
- at H5_NOPAREXP@H5FDMPIO_mp_H5PGET_DXPL_MPIO_F
- at H5_NOPAREXP@H5FDMPIO_mp_H5PGET_MPIO_ACTUAL_IO_MODE_F
+EXPORTS
+; H5LIB
+H5LIB_mp_H5OPEN_F
+H5LIB_mp_H5CLOSE_F
+H5LIB_mp_H5GET_LIBVERSION_F
+H5LIB_mp_H5CHECK_VERSION_F
+H5LIB_mp_H5GARBAGE_COLLECT_F
+H5LIB_mp_H5DONT_ATEXIT_F
+H5LIB_mp_H5KIND_TO_TYPE
+ at H5_NOF03EXP@H5LIB_PROVISIONAL_mp_H5OFFSETOF
+; H5_DBLE_INTERFACE
+H5_DBLE_INTERFACE_mp_H5AREAD_DOUBLE_SCALAR
+H5_DBLE_INTERFACE_mp_H5AREAD_DOUBLE_1
+H5_DBLE_INTERFACE_mp_H5AREAD_DOUBLE_2
+H5_DBLE_INTERFACE_mp_H5AREAD_DOUBLE_3
+H5_DBLE_INTERFACE_mp_H5AREAD_DOUBLE_4
+H5_DBLE_INTERFACE_mp_H5AREAD_DOUBLE_5
+H5_DBLE_INTERFACE_mp_H5AREAD_DOUBLE_6
+H5_DBLE_INTERFACE_mp_H5AREAD_DOUBLE_7
+H5_DBLE_INTERFACE_mp_H5AWRITE_DOUBLE_SCALAR
+H5_DBLE_INTERFACE_mp_H5AWRITE_DOUBLE_1
+H5_DBLE_INTERFACE_mp_H5AWRITE_DOUBLE_2
+H5_DBLE_INTERFACE_mp_H5AWRITE_DOUBLE_3
+H5_DBLE_INTERFACE_mp_H5AWRITE_DOUBLE_4
+H5_DBLE_INTERFACE_mp_H5AWRITE_DOUBLE_5
+H5_DBLE_INTERFACE_mp_H5AWRITE_DOUBLE_6
+H5_DBLE_INTERFACE_mp_H5AWRITE_DOUBLE_7
+H5_DBLE_INTERFACE_mp_H5DFILL_DOUBLE
+H5_DBLE_INTERFACE_mp_H5DREAD_DOUBLE_SCALAR
+H5_DBLE_INTERFACE_mp_H5DREAD_DOUBLE_1
+H5_DBLE_INTERFACE_mp_H5DREAD_DOUBLE_2
+H5_DBLE_INTERFACE_mp_H5DREAD_DOUBLE_3
+H5_DBLE_INTERFACE_mp_H5DREAD_DOUBLE_4
+H5_DBLE_INTERFACE_mp_H5DREAD_DOUBLE_5
+H5_DBLE_INTERFACE_mp_H5DREAD_DOUBLE_6
+H5_DBLE_INTERFACE_mp_H5DREAD_DOUBLE_7
+H5_DBLE_INTERFACE_mp_H5DWRITE_DOUBLE_SCALAR
+H5_DBLE_INTERFACE_mp_H5DWRITE_DOUBLE_1
+H5_DBLE_INTERFACE_mp_H5DWRITE_DOUBLE_2
+H5_DBLE_INTERFACE_mp_H5DWRITE_DOUBLE_3
+H5_DBLE_INTERFACE_mp_H5DWRITE_DOUBLE_4
+H5_DBLE_INTERFACE_mp_H5DWRITE_DOUBLE_5
+H5_DBLE_INTERFACE_mp_H5DWRITE_DOUBLE_6
+H5_DBLE_INTERFACE_mp_H5DWRITE_DOUBLE_7
+H5_DBLE_INTERFACE_mp_H5PGET_DOUBLE
+H5_DBLE_INTERFACE_mp_H5PSET_DOUBLE
+H5_DBLE_INTERFACE_mp_H5PSET_FILL_VALUE_DOUBLE
+H5_DBLE_INTERFACE_mp_H5PGET_FILL_VALUE_DOUBLE
+H5_DBLE_INTERFACE_mp_H5PINSERT_DOUBLE
+H5_DBLE_INTERFACE_mp_H5PREGISTER_DOUBLE
+; H5A
+H5A_mp_H5ACREATE_F
+H5A_mp_H5AOPEN_NAME_F
+H5A_mp_H5AOPEN_IDX_F
+H5A_PROVISIONAL_mp_H5AWRITE_INTEGER_SCALAR
+H5A_PROVISIONAL_mp_H5AWRITE_INTEGER_1
+H5A_PROVISIONAL_mp_H5AWRITE_INTEGER_2
+H5A_PROVISIONAL_mp_H5AWRITE_INTEGER_3
+H5A_PROVISIONAL_mp_H5AWRITE_INTEGER_4
+H5A_PROVISIONAL_mp_H5AWRITE_INTEGER_5
+H5A_PROVISIONAL_mp_H5AWRITE_INTEGER_6
+H5A_PROVISIONAL_mp_H5AWRITE_INTEGER_7
+H5A_PROVISIONAL_mp_H5AWRITE_REAL_SCALAR
+H5A_PROVISIONAL_mp_H5AWRITE_REAL_1
+H5A_PROVISIONAL_mp_H5AWRITE_REAL_2
+H5A_PROVISIONAL_mp_H5AWRITE_REAL_3
+H5A_PROVISIONAL_mp_H5AWRITE_REAL_4
+H5A_PROVISIONAL_mp_H5AWRITE_REAL_5
+H5A_PROVISIONAL_mp_H5AWRITE_REAL_6
+H5A_PROVISIONAL_mp_H5AWRITE_REAL_7
+H5A_PROVISIONAL_mp_H5AWRITE_CHAR_SCALAR
+H5A_PROVISIONAL_mp_H5AWRITE_CHAR_1
+H5A_PROVISIONAL_mp_H5AWRITE_CHAR_2
+H5A_PROVISIONAL_mp_H5AWRITE_CHAR_3
+H5A_PROVISIONAL_mp_H5AWRITE_CHAR_4
+H5A_PROVISIONAL_mp_H5AWRITE_CHAR_5
+H5A_PROVISIONAL_mp_H5AWRITE_CHAR_6
+H5A_PROVISIONAL_mp_H5AWRITE_CHAR_7
+H5A_PROVISIONAL_mp_H5AREAD_INTEGER_SCALAR
+H5A_PROVISIONAL_mp_H5AREAD_INTEGER_1
+H5A_PROVISIONAL_mp_H5AREAD_INTEGER_2
+H5A_PROVISIONAL_mp_H5AREAD_INTEGER_3
+H5A_PROVISIONAL_mp_H5AREAD_INTEGER_4
+H5A_PROVISIONAL_mp_H5AREAD_INTEGER_5
+H5A_PROVISIONAL_mp_H5AREAD_INTEGER_6
+H5A_PROVISIONAL_mp_H5AREAD_INTEGER_7
+H5A_PROVISIONAL_mp_H5AREAD_REAL_SCALAR
+H5A_PROVISIONAL_mp_H5AREAD_REAL_1
+H5A_PROVISIONAL_mp_H5AREAD_REAL_2
+H5A_PROVISIONAL_mp_H5AREAD_REAL_3
+H5A_PROVISIONAL_mp_H5AREAD_REAL_4
+H5A_PROVISIONAL_mp_H5AREAD_REAL_5
+H5A_PROVISIONAL_mp_H5AREAD_REAL_6
+H5A_PROVISIONAL_mp_H5AREAD_REAL_7
+H5A_PROVISIONAL_mp_H5AREAD_CHAR_SCALAR
+H5A_PROVISIONAL_mp_H5AREAD_CHAR_1
+H5A_PROVISIONAL_mp_H5AREAD_CHAR_2
+H5A_PROVISIONAL_mp_H5AREAD_CHAR_3
+H5A_PROVISIONAL_mp_H5AREAD_CHAR_4
+H5A_PROVISIONAL_mp_H5AREAD_CHAR_5
+H5A_PROVISIONAL_mp_H5AREAD_CHAR_6
+H5A_PROVISIONAL_mp_H5AREAD_CHAR_7
+H5A_mp_H5AGET_SPACE_F
+H5A_mp_H5AGET_TYPE_F
+H5A_mp_H5AGET_NAME_F
+H5A_mp_H5AGET_NAME_BY_IDX_F
+H5A_mp_H5AGET_NUM_ATTRS_F
+H5A_mp_H5ADELETE_F
+H5A_mp_H5ACLOSE_F
+H5A_mp_H5AGET_STORAGE_SIZE_F
+H5A_mp_H5AGET_CREATE_PLIST_F
+H5A_mp_H5ARENAME_BY_NAME_F
+H5A_mp_H5AOPEN_F
+H5A_mp_H5ADELETE_BY_IDX_F
+H5A_mp_H5ADELETE_BY_NAME_F
+H5A_mp_H5AOPEN_BY_IDX_F
+H5A_mp_H5AGET_INFO_F
+H5A_mp_H5AGET_INFO_BY_IDX_F
+H5A_mp_H5AGET_INFO_BY_NAME_F
+H5A_mp_H5ACREATE_BY_NAME_F
+H5A_mp_H5AEXISTS_F
+H5A_mp_H5AEXISTS_BY_NAME_F
+H5A_mp_H5AOPEN_BY_NAME_F
+H5A_mp_H5ARENAME_F
+ at H5_NOF03EXP@H5A_PROVISIONAL_mp_H5AWRITE_PTR
+ at H5_NOF03EXP@H5A_PROVISIONAL_mp_H5AREAD_PTR
+; H5D
+H5D_mp_H5DCREATE_F
+H5D_mp_H5DOPEN_F
+H5D_mp_H5DCLOSE_F
+H5D_PROVISIONAL_mp_H5DWRITE_REFERENCE_OBJ
+H5D_PROVISIONAL_mp_H5DWRITE_REFERENCE_DSETREG
+H5D_PROVISIONAL_mp_H5DWRITE_INTEGER_SCALAR
+H5D_PROVISIONAL_mp_H5DWRITE_INTEGER_1
+H5D_PROVISIONAL_mp_H5DWRITE_INTEGER_2
+H5D_PROVISIONAL_mp_H5DWRITE_INTEGER_3
+H5D_PROVISIONAL_mp_H5DWRITE_INTEGER_4
+H5D_PROVISIONAL_mp_H5DWRITE_INTEGER_5
+H5D_PROVISIONAL_mp_H5DWRITE_INTEGER_6
+H5D_PROVISIONAL_mp_H5DWRITE_INTEGER_7
+H5D_PROVISIONAL_mp_H5DWRITE_CHAR_SCALAR
+H5D_PROVISIONAL_mp_H5DWRITE_CHAR_1
+H5D_PROVISIONAL_mp_H5DWRITE_CHAR_2
+H5D_PROVISIONAL_mp_H5DWRITE_CHAR_3
+H5D_PROVISIONAL_mp_H5DWRITE_CHAR_4
+H5D_PROVISIONAL_mp_H5DWRITE_CHAR_5
+H5D_PROVISIONAL_mp_H5DWRITE_CHAR_6
+H5D_PROVISIONAL_mp_H5DWRITE_CHAR_7
+H5D_PROVISIONAL_mp_H5DWRITE_REAL_SCALAR
+H5D_PROVISIONAL_mp_H5DWRITE_REAL_1
+H5D_PROVISIONAL_mp_H5DWRITE_REAL_2
+H5D_PROVISIONAL_mp_H5DWRITE_REAL_3
+H5D_PROVISIONAL_mp_H5DWRITE_REAL_4
+H5D_PROVISIONAL_mp_H5DWRITE_REAL_5
+H5D_PROVISIONAL_mp_H5DWRITE_REAL_6
+H5D_PROVISIONAL_mp_H5DWRITE_REAL_7
+H5D_PROVISIONAL_mp_H5DREAD_REFERENCE_OBJ
+H5D_PROVISIONAL_mp_H5DREAD_REFERENCE_DSETREG
+H5D_PROVISIONAL_mp_H5DREAD_INTEGER_SCALAR
+H5D_PROVISIONAL_mp_H5DREAD_INTEGER_1
+H5D_PROVISIONAL_mp_H5DREAD_INTEGER_2
+H5D_PROVISIONAL_mp_H5DREAD_INTEGER_3
+H5D_PROVISIONAL_mp_H5DREAD_INTEGER_4
+H5D_PROVISIONAL_mp_H5DREAD_INTEGER_5
+H5D_PROVISIONAL_mp_H5DREAD_INTEGER_6
+H5D_PROVISIONAL_mp_H5DREAD_INTEGER_7
+H5D_PROVISIONAL_mp_H5DREAD_CHAR_SCALAR
+H5D_PROVISIONAL_mp_H5DREAD_CHAR_1
+H5D_PROVISIONAL_mp_H5DREAD_CHAR_2
+H5D_PROVISIONAL_mp_H5DREAD_CHAR_3
+H5D_PROVISIONAL_mp_H5DREAD_CHAR_4
+H5D_PROVISIONAL_mp_H5DREAD_CHAR_5
+H5D_PROVISIONAL_mp_H5DREAD_CHAR_6
+H5D_PROVISIONAL_mp_H5DREAD_CHAR_7
+H5D_PROVISIONAL_mp_H5DREAD_REAL_SCALAR
+H5D_PROVISIONAL_mp_H5DREAD_REAL_1
+H5D_PROVISIONAL_mp_H5DREAD_REAL_2
+H5D_PROVISIONAL_mp_H5DREAD_REAL_3
+H5D_PROVISIONAL_mp_H5DREAD_REAL_4
+H5D_PROVISIONAL_mp_H5DREAD_REAL_5
+H5D_PROVISIONAL_mp_H5DREAD_REAL_6
+H5D_PROVISIONAL_mp_H5DREAD_REAL_7
+H5D_mp_H5DGET_SPACE_F
+H5D_mp_H5DGET_TYPE_F
+H5D_mp_H5DSET_EXTENT_F
+H5D_mp_H5DGET_CREATE_PLIST_F
+H5D_mp_H5DGET_STORAGE_SIZE_F
+H5D_mp_H5DVLEN_GET_MAX_LEN_F
+H5D_mp_H5DWRITE_VL_INTEGER
+H5D_mp_H5DREAD_VL_INTEGER
+H5D_mp_H5DWRITE_VL_REAL
+H5D_mp_H5DREAD_VL_REAL
+H5D_mp_H5DWRITE_VL_STRING
+H5D_mp_H5DREAD_VL_STRING
+H5D_PROVISIONAL_mp_H5DFILL_INTEGER
+H5D_PROVISIONAL_mp_H5DFILL_REAL
+H5D_PROVISIONAL_mp_H5DFILL_CHAR
+H5D_mp_H5DGET_SPACE_STATUS_F
+H5D_mp_H5DCREATE_ANON_F
+H5D_mp_H5DGET_SPACE_F
+H5D_mp_H5DGET_TYPE_F
+H5D_mp_H5DSET_EXTENT_F
+H5D_mp_H5DGET_CREATE_PLIST_F
+H5D_mp_H5DGET_STORAGE_SIZE_F
+H5D_mp_H5DVLEN_GET_MAX_LEN_F
+H5D_mp_H5DGET_ACCESS_PLIST_F
+ at H5_NOF03EXP@H5D_PROVISIONAL_mp_H5DWRITE_PTR
+ at H5_NOF03EXP@H5D_PROVISIONAL_mp_H5DREAD_PTR
+ at H5_NOF03EXP@H5D_PROVISIONAL_mp_H5DVLEN_RECLAIM_F
+; H5E
+H5E_mp_H5ECLEAR_F
+H5E_mp_H5EPRINT_F
+H5E_mp_H5EGET_MAJOR_F
+H5E_mp_H5EGET_MINOR_F
+H5E_PROVISIONAL_mp_H5ESET_AUTO_F
+; H5F
+H5F_mp_H5FCREATE_F
+H5F_mp_H5FFLUSH_F
+H5F_mp_H5FCLOSE_F
+H5F_mp_H5FGET_OBJ_COUNT_F
+H5F_mp_H5FGET_OBJ_IDS_F
+H5F_mp_H5FGET_FREESPACE_F
+H5F_mp_H5FMOUNT_F
+H5F_mp_H5FUNMOUNT_F
+H5F_mp_H5FOPEN_F
+H5F_mp_H5FREOPEN_F
+H5F_mp_H5FGET_CREATE_PLIST_F
+H5F_mp_H5FGET_ACCESS_PLIST_F
+H5F_mp_H5FIS_HDF5_F
+H5F_mp_H5FGET_NAME_F
+H5F_mp_H5FGET_FILESIZE_F
+ at H5_NOF03EXP@H5F_PROVISIONAL_mp_H5FGET_FILE_IMAGE_F
+; H5G
+H5G_mp_H5GOPEN_F
+H5G_mp_H5GCREATE_F
+H5G_mp_H5GCLOSE_F
+H5G_mp_H5GGET_OBJ_INFO_IDX_F
+H5G_mp_H5GN_MEMBERS_F
+H5G_mp_H5GLINK_F
+H5G_mp_H5GLINK2_F
+H5G_mp_H5GUNLINK_F
+H5G_mp_H5GMOVE_F
+H5G_mp_H5GMOVE2_F
+H5G_mp_H5GGET_LINKVAL_F
+H5G_mp_H5GSET_COMMENT_F
+H5G_mp_H5GGET_COMMENT_F
+H5G_mp_H5GCREATE_ANON_F
+H5G_mp_H5GGET_CREATE_PLIST_F
+H5G_mp_H5GGET_INFO_F
+H5G_mp_H5GGET_INFO_BY_IDX_F
+H5G_mp_H5GGET_INFO_BY_NAME_F
+H5G_mp_H5GGET_OBJ_INFO_IDX_F
+; H5GLOBAL
+; PREDEFINED_TYPES DATA
+; FLOATING_TYPES DATA
+; INTEGER_TYPES DATA
+; H5F_FLAGS DATA
+; H5GENERIC_FLAGS DATA
+; H5G_FLAGS DATA
+; H5D_FLAGS DATA
+; H5FD_FLAGS DATA
+; H5FD_HID_FLAGS DATA
+; H5I_FLAGS DATA
+; H5L_FLAGS DATA
+; H5O_FLAGS DATA
+; H5P_FLAGS DATA
+; H5P_FLAGS_INT DATA
+; H5R_FLAGS DATA
+; H5S_FLAGS DATA
+; H5T_FLAGS DATA
+; H5Z_FLAGS DATA
+; H5LIB_FLAGS DATA
+; H5I
+H5I_mp_H5IGET_TYPE_F
+H5I_mp_H5IGET_NAME_F
+H5I_mp_H5IINC_REF_F
+H5I_mp_H5IDEC_REF_F
+H5I_mp_H5IGET_REF_F
+H5I_mp_H5IGET_FILE_ID_F
+H5I_mp_H5IIS_VALID_F
+; H5L
+H5L_mp_H5LCOPY_F
+H5L_mp_H5LDELETE_F
+H5L_mp_H5LCREATE_SOFT_F
+H5L_mp_H5LCREATE_HARD_F
+H5L_mp_H5LCREATE_EXTERNAL_F
+H5L_mp_H5LDELETE_BY_IDX_F
+H5L_mp_H5LEXISTS_F
+H5L_mp_H5LGET_INFO_F
+H5L_mp_H5LGET_INFO_BY_IDX_F
+H5L_mp_H5LIS_REGISTERED_F
+H5L_mp_H5LMOVE_F
+H5L_mp_H5LGET_NAME_BY_IDX_F
+ at H5_NOF03EXP@H5L_PROVISIONAL_mp_H5LITERATE_F
+ at H5_NOF03EXP@H5L_PROVISIONAL_mp_H5LITERATE_BY_NAME_F
+; H5O
+H5O_mp_H5OCLOSE_F
+H5O_mp_H5OCOPY_F
+H5O_mp_H5ODECR_REFCOUNT_F
+H5O_mp_H5OEXISTS_BY_NAME_F
+H5O_mp_H5OGET_COMMENT_F
+H5O_mp_H5OGET_COMMENT_BY_NAME_F
+H5O_mp_H5OINCR_REFCOUNT_F
+H5O_mp_H5OLINK_F
+H5O_mp_H5OOPEN_BY_ADDR_F
+H5O_mp_H5OOPEN_BY_IDX_F
+H5O_mp_H5OOPEN_F
+H5O_mp_H5OSET_COMMENT_F
+H5O_mp_H5OSET_COMMENT_BY_NAME_F
+ at H5_NOF03EXP@H5O_PROVISIONAL_mp_H5OGET_INFO_BY_IDX_F
+ at H5_NOF03EXP@H5O_PROVISIONAL_mp_H5OGET_INFO_BY_NAME_F
+ at H5_NOF03EXP@H5O_PROVISIONAL_mp_H5OGET_INFO_F
+ at H5_NOF03EXP@H5O_PROVISIONAL_mp_H5OVISIT_BY_NAME_F
+ at H5_NOF03EXP@H5O_PROVISIONAL_mp_H5OVISIT_F
+; H5P
+H5P_mp_H5PCREATE_F
+H5P_mp_H5PSET_PRESERVE_F
+H5P_mp_H5PGET_PRESERVE_F
+H5P_mp_H5PGET_CLASS_F
+H5P_mp_H5PCOPY_F
+H5P_mp_H5PCLOSE_F
+H5P_mp_H5PSET_CHUNK_F
+H5P_mp_H5PGET_CHUNK_F
+H5P_mp_H5PSET_DEFLATE_F
+H5P_PROVISIONAL_mp_H5PSET_FILL_VALUE_INTEGER
+H5P_PROVISIONAL_mp_H5PGET_FILL_VALUE_INTEGER
+H5P_PROVISIONAL_mp_H5PSET_FILL_VALUE_REAL
+H5P_PROVISIONAL_mp_H5PGET_FILL_VALUE_REAL
+H5P_PROVISIONAL_mp_H5PSET_FILL_VALUE_CHAR
+H5P_PROVISIONAL_mp_H5PGET_FILL_VALUE_CHAR
+H5P_mp_H5PGET_VERSION_F
+H5P_mp_H5PSET_USERBLOCK_F
+H5P_mp_H5PGET_USERBLOCK_F
+H5P_mp_H5PSET_SIZES_F
+H5P_mp_H5PGET_SIZES_F
+H5P_mp_H5PSET_SYM_K_F
+H5P_mp_H5PGET_SYM_K_F
+H5P_mp_H5PSET_ISTORE_K_F
+H5P_mp_H5PGET_ISTORE_K_F
+H5P_mp_H5PGET_DRIVER_F
+H5P_mp_H5PSET_FAPL_STDIO_F
+H5P_mp_H5PSET_FAPL_SEC2_F
+H5P_mp_H5PSET_ALIGNMENT_F
+H5P_mp_H5PGET_ALIGNMENT_F
+H5P_mp_H5PSET_FAPL_CORE_F
+H5P_mp_H5PGET_FAPL_CORE_F
+H5P_mp_H5PSET_FAPL_FAMILY_F
+H5P_mp_H5PGET_FAPL_FAMILY_F
+H5P_mp_H5PSET_CACHE_F
+H5P_mp_H5PGET_CACHE_F
+H5P_mp_H5PSET_FAPL_SPLIT_F
+H5P_mp_H5PSET_GC_REFERENCES_F
+H5P_mp_H5PGET_GC_REFERENCES_F
+H5P_mp_H5PSET_LAYOUT_F
+H5P_mp_H5PGET_LAYOUT_F
+H5P_mp_H5PSET_FILTER_F
+H5P_mp_H5PGET_NFILTERS_F
+H5P_mp_H5PGET_FILTER_F
+H5P_mp_H5PSET_EXTERNAL_F
+H5P_mp_H5PGET_EXTERNAL_COUNT_F
+H5P_mp_H5PGET_EXTERNAL_F
+H5P_mp_H5PSET_BTREE_RATIOS_F
+H5P_mp_H5PGET_BTREE_RATIOS_F
+H5P_mp_H5PGET_FCLOSE_DEGREE_F
+H5P_mp_H5PSET_FCLOSE_DEGREE_F
+H5P_mp_H5PEQUAL_F
+H5P_mp_H5PSET_BUFFER_F
+H5P_mp_H5PGET_BUFFER_F
+H5P_mp_H5PFILL_VALUE_DEFINED_F
+H5P_mp_H5PSET_ALLOC_TIME_F
+H5P_mp_H5PGET_ALLOC_TIME_F
+H5P_mp_H5PSET_FILL_TIME_F
+H5P_mp_H5PGET_FILL_TIME_F
+H5P_mp_H5PSET_META_BLOCK_SIZE_F
+H5P_mp_H5PGET_META_BLOCK_SIZE_F
+H5P_mp_H5PSET_SIEVE_BUF_SIZE_F
+H5P_mp_H5PGET_SIEVE_BUF_SIZE_F
+H5P_mp_H5PSET_SMALL_DATA_BLOCK_SIZE_F
+H5P_mp_H5PGET_SMALL_DATA_BLOCK_SIZE_F
+H5P_mp_H5PSET_HYPER_VECTOR_SIZE_F
+H5P_mp_H5PGET_HYPER_VECTOR_SIZE_F
+H5P_PROVISIONAL_mp_H5PSET_INTEGER
+H5P_PROVISIONAL_mp_H5PSET_REAL
+H5P_PROVISIONAL_mp_H5PSET_CHAR
+H5P_PROVISIONAL_mp_H5PGET_INTEGER
+H5P_PROVISIONAL_mp_H5PGET_REAL
+H5P_PROVISIONAL_mp_H5PGET_CHAR
+H5P_mp_H5PEXIST_F
+H5P_mp_H5PGET_SIZE_F
+H5P_mp_H5PGET_NPROPS_F
+H5P_mp_H5PGET_CLASS_NAME_F
+H5P_mp_H5PGET_CLASS_PARENT_F
+H5P_mp_H5PISA_CLASS_F
+H5P_mp_H5PCOPY_PROP_F
+H5P_mp_H5PREMOVE_F
+H5P_mp_H5PUNREGISTER_F
+H5P_mp_H5PCLOSE_CLASS_F
+H5P_PROVISIONAL_mp_H5PCREATE_CLASS_F
+H5P_PROVISIONAL_mp_H5PREGISTER_INTEGER
+H5P_PROVISIONAL_mp_H5PREGISTER_REAL
+H5P_PROVISIONAL_mp_H5PREGISTER_CHAR
+H5P_PROVISIONAL_mp_H5PINSERT_INTEGER
+H5P_PROVISIONAL_mp_H5PINSERT_REAL
+H5P_PROVISIONAL_mp_H5PINSERT_CHAR
+H5P_mp_H5PSET_SHUFFLE_F
+H5P_mp_H5PSET_EDC_CHECK_F
+H5P_mp_H5PGET_EDC_CHECK_F
+H5P_mp_H5PSET_FLETCHER32_F
+H5P_mp_H5PSET_FAMILY_OFFSET_F
+H5P_mp_H5PSET_FAPL_MULTI_L
+H5P_mp_H5PSET_FAPL_MULTI_S
+H5P_mp_H5PGET_FAPL_MULTI_F
+H5P_mp_H5PSET_SZIP_F
+H5P_mp_H5PALL_FILTERS_AVAIL_F
+H5P_mp_H5PGET_FILTER_BY_ID_F
+H5P_mp_H5PMODIFY_FILTER_F
+H5P_mp_H5PREMOVE_FILTER_F
+H5P_mp_H5PGET_ATTR_PHASE_CHANGE_F
+H5P_mp_H5PSET_ATTR_CREATION_ORDER_F
+H5P_mp_H5PSET_SHARED_MESG_NINDEXES_F
+H5P_mp_H5PSET_SHARED_MESG_INDEX_F
+H5P_mp_H5PGET_ATTR_CREATION_ORDER_F
+H5P_mp_H5PSET_LIBVER_BOUNDS_F
+H5P_mp_H5PSET_LINK_CREATION_ORDER_F
+H5P_mp_H5PGET_LINK_PHASE_CHANGE_F
+H5P_mp_H5PGET_OBJ_TRACK_TIMES_F
+H5P_mp_H5PSET_OBJ_TRACK_TIMES_F
+H5P_mp_H5PSET_CREATE_INTER_GROUP_F
+H5P_mp_H5PGET_LINK_CREATION_ORDER_F
+H5P_mp_H5PSET_CHAR_ENCODING_F
+H5P_mp_H5PGET_CHAR_ENCODING_F
+H5P_mp_H5PSET_COPY_OBJECT_F
+H5P_mp_H5PGET_COPY_OBJECT_F
+H5P_mp_H5PGET_DATA_TRANSFORM_F
+H5P_mp_H5PSET_DATA_TRANSFORM_F
+H5P_mp_H5PGET_LOCAL_HEAP_SIZE_HINT_F
+H5P_mp_H5PGET_EST_LINK_INFO_F
+H5P_mp_H5PSET_LOCAL_HEAP_SIZE_HINT_F
+H5P_mp_H5PSET_EST_LINK_INFO_F
+H5P_mp_H5PSET_LINK_PHASE_CHANGE_F
+H5P_mp_H5PSET_FAPL_DIRECT_F
+H5P_mp_H5PGET_FAPL_DIRECT_F
+H5P_mp_H5PSET_ATTR_PHASE_CHANGE_F
+H5P_mp_H5PSET_NBIT_F
+H5P_mp_H5PSET_SCALEOFFSET_F
+H5P_mp_H5PSET_NLINKS_F
+H5P_mp_H5PGET_NLINKS_F
+H5P_mp_H5PGET_CREATE_INTER_GROUP_F
+H5P_mp_H5PSET_CHUNK_CACHE_F
+H5P_mp_H5PGET_CHUNK_CACHE_F
+ at H5_NOF03EXP@H5P_PROVISIONAL_mp_H5PSET_FILL_VALUE_PTR
+ at H5_NOF03EXP@H5P_PROVISIONAL_mp_H5PGET_FILL_VALUE_PTR
+ at H5_NOF03EXP@H5P_PROVISIONAL_mp_H5PSET_PTR
+ at H5_NOF03EXP@H5P_PROVISIONAL_mp_H5PGET_PTR
+ at H5_NOF03EXP@H5P_PROVISIONAL_mp_H5PREGISTER_PTR
+ at H5_NOF03EXP@H5P_PROVISIONAL_mp_H5PINSERT_PTR
+ at H5_NOF03EXP@H5P_PROVISIONAL_mp_H5PGET_FILE_IMAGE_F
+ at H5_NOF03EXP@H5P_PROVISIONAL_mp_H5PSET_FILE_IMAGE_F
+; H5R
+H5R_PROVISIONAL_mp_H5RCREATE_OBJECT_F
+H5R_PROVISIONAL_mp_H5RCREATE_REGION_F
+H5R_PROVISIONAL_mp_H5RDEREFERENCE_OBJECT_F
+H5R_PROVISIONAL_mp_H5RDEREFERENCE_REGION_F
+H5R_PROVISIONAL_mp_H5RGET_REGION_REGION_F
+H5R_mp_H5RGET_OBJECT_TYPE_OBJ_F
+H5R_PROVISIONAL_mp_H5RGET_NAME_OBJECT_F
+H5R_PROVISIONAL_mp_H5RGET_NAME_REGION_F
+ at H5_NOF03EXP@H5R_PROVISIONAL_mp_H5RGET_REGION_PTR_F
+ at H5_NOF03EXP@H5R_PROVISIONAL_mp_H5RCREATE_PTR_F
+ at H5_NOF03EXP@H5R_PROVISIONAL_mp_H5RDEREFERENCE_PTR_F
+ at H5_NOF03EXP@H5R_PROVISIONAL_mp_H5RGET_NAME_PTR_F
+ at H5_NOF03EXP@H5R_PROVISIONAL_mp_H5RGET_OBJ_TYPE_F
+; H5S
+H5S_mp_H5SCREATE_SIMPLE_F
+H5S_mp_H5SCLOSE_F
+H5S_mp_H5SCREATE_F
+H5S_mp_H5SCOPY_F
+H5S_mp_H5SGET_SELECT_HYPER_NBLOCKS_F
+H5S_mp_H5SGET_SELECT_HYPER_BLOCKLIST_F
+H5S_mp_H5SGET_SELECT_BOUNDS_F
+H5S_mp_H5SGET_SELECT_ELEM_NPOINTS_F
+H5S_mp_H5SGET_SELECT_ELEM_POINTLIST_F
+H5S_mp_H5SSELECT_ELEMENTS_F
+H5S_mp_H5SSELECT_ALL_F
+H5S_mp_H5SSELECT_NONE_F
+H5S_mp_H5SSELECT_VALID_F
+H5S_mp_H5SGET_SIMPLE_EXTENT_NPOINTS_F
+H5S_mp_H5SGET_SELECT_NPOINTS_F
+H5S_mp_H5SGET_SIMPLE_EXTENT_NDIMS_F
+H5S_mp_H5SGET_SIMPLE_EXTENT_DIMS_F
+H5S_mp_H5SGET_SIMPLE_EXTENT_TYPE_F
+H5S_mp_H5SSET_EXTENT_SIMPLE_F
+H5S_mp_H5SIS_SIMPLE_F
+H5S_mp_H5SOFFSET_SIMPLE_F
+H5S_mp_H5SEXTENT_COPY_F
+H5S_mp_H5SSET_EXTENT_NONE_F
+H5S_mp_H5SSELECT_HYPERSLAB_F
+H5S_mp_H5SGET_SELECT_TYPE_F
+H5S_mp_H5SDECODE_F
+H5S_mp_H5SENCODE_F
+H5S_mp_H5SEXTENT_EQUAL_F
+; H5T
+H5T_mp_H5TOPEN_F
+H5T_mp_H5TCOMMIT_F
+H5T_mp_H5TCOPY_F
+H5T_mp_H5TEQUAL_F
+H5T_mp_H5TCLOSE_F
+H5T_mp_H5TGET_CLASS_F
+H5T_mp_H5TGET_SIZE_F
+H5T_mp_H5TSET_SIZE_F
+H5T_mp_H5TGET_ORDER_F
+H5T_mp_H5TSET_ORDER_F
+H5T_mp_H5TGET_PRECISION_F
+H5T_mp_H5TSET_PRECISION_F
+H5T_mp_H5TGET_OFFSET_F
+H5T_mp_H5TSET_OFFSET_F
+H5T_mp_H5TGET_PAD_F
+H5T_mp_H5TSET_PAD_F
+H5T_mp_H5TGET_SIGN_F
+H5T_mp_H5TSET_SIGN_F
+H5T_mp_H5TGET_FIELDS_F
+H5T_mp_H5TSET_FIELDS_F
+H5T_mp_H5TGET_EBIAS_F
+H5T_mp_H5TSET_EBIAS_F
+H5T_mp_H5TGET_NORM_F
+H5T_mp_H5TSET_NORM_F
+H5T_mp_H5TGET_INPAD_F
+H5T_mp_H5TSET_INPAD_F
+H5T_mp_H5TGET_CSET_F
+H5T_mp_H5TSET_CSET_F
+H5T_mp_H5TGET_STRPAD_F
+H5T_mp_H5TSET_STRPAD_F
+H5T_mp_H5TGET_NMEMBERS_F
+H5T_mp_H5TGET_MEMBER_NAME_F
+H5T_mp_H5TGET_MEMBER_OFFSET_F
+H5T_mp_H5TGET_MEMBER_INDEX_F
+H5T_mp_H5TGET_ARRAY_DIMS_F
+H5T_mp_H5TGET_ARRAY_NDIMS_F
+H5T_mp_H5TGET_SUPER_F
+H5T_mp_H5TGET_MEMBER_TYPE_F
+H5T_mp_H5TCREATE_F
+H5T_mp_H5TINSERT_F
+H5T_mp_H5TPACK_F
+H5T_mp_H5TARRAY_CREATE_F
+H5T_mp_H5TENUM_CREATE_F
+H5T_mp_H5TENUM_INSERT_F
+H5T_mp_H5TENUM_NAMEOF_F
+H5T_mp_H5TENUM_VALUEOF_F
+H5T_mp_H5TGET_MEMBER_VALUE_F
+H5T_mp_H5TSET_TAG_F
+H5T_mp_H5TGET_TAG_F
+H5T_mp_H5TVLEN_CREATE_F
+H5T_mp_H5TIS_VARIABLE_STR_F
+H5T_mp_H5TGET_MEMBER_CLASS_F
+H5T_mp_H5TCOMMIT_ANON_F
+H5T_mp_H5TCOMMITTED_F
+H5T_mp_H5TDECODE_F
+H5T_mp_H5TENCODE_F
+H5T_mp_H5TGET_CREATE_PLIST_F
+H5T_mp_H5TCOMPILER_CONV_F
+H5T_mp_H5TGET_NATIVE_TYPE_F
+ at H5_NOF03EXP@H5T_PROVISIONAL_mp_H5TCONVERT_F
+; H5Z
+H5Z_mp_H5ZUNREGISTER_F
+H5Z_mp_H5ZFILTER_AVAIL_F
+H5Z_mp_H5ZGET_FILTER_INFO_F
+; Parallel
+ at H5_NOPAREXP@H5FDMPIO_mp_H5PSET_FAPL_MPIO_F
+ at H5_NOPAREXP@H5FDMPIO_mp_H5PGET_FAPL_MPIO_F
+ at H5_NOPAREXP@H5FDMPIO_mp_H5PSET_DXPL_MPIO_F
+ at H5_NOPAREXP@H5FDMPIO_mp_H5PGET_DXPL_MPIO_F
+ at H5_NOPAREXP@H5FDMPIO_mp_H5PGET_MPIO_ACTUAL_IO_MODE_F
diff --git a/fortran/test/CMakeLists.txt b/fortran/test/CMakeLists.txt
index 17c55a5..d10f2ef 100644
--- a/fortran/test/CMakeLists.txt
+++ b/fortran/test/CMakeLists.txt
@@ -21,7 +21,18 @@ set_target_properties (${HDF5_F90_C_TEST_LIB_TARGET} PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES "$<INSTALL_INTERFACE:$<INSTALL_PREFIX>/include>"
)
-add_library (${HDF5_F90_TEST_LIB_TARGET} ${LIB_TYPE} tf.f90)
+# See if the F2008 intrinsic STORAGE_SIZE and C_SIZEOF are supported. If not then
+# fall back to F2003. If F2003 not supported then use F90 for the tests.
+
+if (FORTRAN_HAVE_STORAGE_SIZE AND FORTRAN_HAVE_C_SIZEOF)
+ add_library (${HDF5_F90_TEST_LIB_TARGET} ${LIB_TYPE} tf_F08.f90 tf.f90)
+elseif (HDF5_ENABLE_F2003)
+ add_library (${HDF5_F90_TEST_LIB_TARGET} ${LIB_TYPE} tf_F03.f90 tf.f90)
+else (FORTRAN_HAVE_STORAGE_SIZE AND FORTRAN_HAVE_C_SIZEOF)
+ add_library (${HDF5_F90_TEST_LIB_TARGET} ${LIB_TYPE} tf_F90.f90 tf.f90)
+endif (FORTRAN_HAVE_STORAGE_SIZE AND FORTRAN_HAVE_C_SIZEOF)
+
+
set (SHARED_LINK_FLAGS " ")
if (WIN32)
if (BUILD_SHARED_LIBS)
@@ -83,7 +94,6 @@ set_target_properties (testhdf5_fortran PROPERTIES FOLDER test/fortran)
#-- Adding test for testhdf5_fortran_1_8
add_executable (testhdf5_fortran_1_8
fortranlib_test_1_8.f90
- tH5F.f90
tH5O.f90
tH5A_1_8.f90
tH5G_1_8.f90
@@ -107,7 +117,6 @@ set_target_properties (testhdf5_fortran_1_8 PROPERTIES FOLDER test/fortran)
if (HDF5_ENABLE_F2003)
add_executable (fortranlib_test_F03
fortranlib_test_F03.f90
- tH5F.f90
tH5E_F03.f90
tH5F_F03.f90
tH5L_F03.f90
diff --git a/fortran/test/Makefile.am b/fortran/test/Makefile.am
index 9c6b906..735ab7a 100644
--- a/fortran/test/Makefile.am
+++ b/fortran/test/Makefile.am
@@ -53,7 +53,23 @@ endif
check_PROGRAMS=$(TEST_PROG)
-libh5test_fortran_la_SOURCES= tf.f90 t.c
+if FORTRAN_HAVE_STORAGE_SIZE
+if FORTRAN_HAVE_C_SIZEOF
+ libh5test_fortran_la_SOURCES = tf_F08.f90
+else
+ libh5test_fortran_la_SOURCES = tf_F03.f90
+endif
+else
+if FORTRAN_2003_CONDITIONAL_F
+ libh5test_fortran_la_SOURCES = tf_F03.f90
+else
+ libh5test_fortran_la_SOURCES = tf_F90.f90
+endif
+endif
+
+# tf.f90 depends on either tf_F08.f90 or tf_F03.f90 so they need to be
+# compiled first
+libh5test_fortran_la_SOURCES += tf.f90 t.c
# Source files are used for both the library and fortranlib_test.
# Automake will complain about this without the following workaround.
@@ -63,11 +79,11 @@ fortranlib_test_CFLAGS=$(AM_CFLAGS)
fortranlib_test_SOURCES = tH5F.f90 tH5D.f90 tH5R.f90 tH5S.f90 tH5T.f90 tH5VL.f90 tH5Z.f90 \
tH5Sselect.f90 tH5P.f90 tH5A.f90 tH5I.f90 tH5G.f90 tH5E.f90 tHDF5.f90 fortranlib_test.f90
-fortranlib_test_1_8_SOURCES = tH5F.f90 tH5O.f90 tH5A_1_8.f90 tH5G_1_8.f90 tH5MISC_1_8.f90 tHDF5_1_8.f90\
+fortranlib_test_1_8_SOURCES = tH5O.f90 tH5A_1_8.f90 tH5G_1_8.f90 tH5MISC_1_8.f90 tHDF5_1_8.f90\
fortranlib_test_1_8.f90
if FORTRAN_2003_CONDITIONAL_F
- fortranlib_test_F03_SOURCES = tH5F.f90 tH5E_F03.f90 tH5F_F03.f90 tH5L_F03.f90 \
+ fortranlib_test_F03_SOURCES = tH5E_F03.f90 tH5F_F03.f90 tH5L_F03.f90 \
tH5O_F03.f90 tH5P_F03.f90 tH5T_F03.f90 tHDF5_F03.f90 fortranlib_test_F03.f90
endif
diff --git a/fortran/test/Makefile.in b/fortran/test/Makefile.in
index bd1d01d..ca91cf5 100644
--- a/fortran/test/Makefile.in
+++ b/fortran/test/Makefile.in
@@ -101,7 +101,20 @@ CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
LTLIBRARIES = $(noinst_LTLIBRARIES)
libh5test_fortran_la_LIBADD =
-am_libh5test_fortran_la_OBJECTS = tf.lo t.lo
+am__libh5test_fortran_la_SOURCES_DIST = tf_F90.f90 tf.f90 t.c \
+ tf_F03.f90 tf_F08.f90
+ at FORTRAN_2003_CONDITIONAL_F_FALSE@@FORTRAN_HAVE_STORAGE_SIZE_FALSE at am_libh5test_fortran_la_OBJECTS = tf_F90.lo \
+ at FORTRAN_2003_CONDITIONAL_F_FALSE@@FORTRAN_HAVE_STORAGE_SIZE_FALSE@ tf.lo \
+ at FORTRAN_2003_CONDITIONAL_F_FALSE@@FORTRAN_HAVE_STORAGE_SIZE_FALSE@ t.lo
+ at FORTRAN_2003_CONDITIONAL_F_TRUE@@FORTRAN_HAVE_STORAGE_SIZE_FALSE at am_libh5test_fortran_la_OBJECTS = tf_F03.lo \
+ at FORTRAN_2003_CONDITIONAL_F_TRUE@@FORTRAN_HAVE_STORAGE_SIZE_FALSE@ tf.lo \
+ at FORTRAN_2003_CONDITIONAL_F_TRUE@@FORTRAN_HAVE_STORAGE_SIZE_FALSE@ t.lo
+ at FORTRAN_HAVE_C_SIZEOF_FALSE@@FORTRAN_HAVE_STORAGE_SIZE_TRUE at am_libh5test_fortran_la_OBJECTS = tf_F03.lo \
+ at FORTRAN_HAVE_C_SIZEOF_FALSE@@FORTRAN_HAVE_STORAGE_SIZE_TRUE@ tf.lo \
+ at FORTRAN_HAVE_C_SIZEOF_FALSE@@FORTRAN_HAVE_STORAGE_SIZE_TRUE@ t.lo
+ at FORTRAN_HAVE_C_SIZEOF_TRUE@@FORTRAN_HAVE_STORAGE_SIZE_TRUE at am_libh5test_fortran_la_OBJECTS = tf_F08.lo \
+ at FORTRAN_HAVE_C_SIZEOF_TRUE@@FORTRAN_HAVE_STORAGE_SIZE_TRUE@ tf.lo \
+ at FORTRAN_HAVE_C_SIZEOF_TRUE@@FORTRAN_HAVE_STORAGE_SIZE_TRUE@ t.lo
libh5test_fortran_la_OBJECTS = $(am_libh5test_fortran_la_OBJECTS)
AM_V_lt = $(am__v_lt_ at AM_V@)
am__v_lt_ = $(am__v_lt_ at AM_DEFAULT_V@)
@@ -138,18 +151,17 @@ fortranlib_test_LINK = $(LIBTOOL) $(AM_V_lt) --tag=FC \
$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(FCLD) \
$(fortranlib_test_FCFLAGS) $(FCFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
-o $@
-am_fortranlib_test_1_8_OBJECTS = tH5F.$(OBJEXT) tH5O.$(OBJEXT) \
- tH5A_1_8.$(OBJEXT) tH5G_1_8.$(OBJEXT) tH5MISC_1_8.$(OBJEXT) \
- tHDF5_1_8.$(OBJEXT) fortranlib_test_1_8.$(OBJEXT)
+am_fortranlib_test_1_8_OBJECTS = tH5O.$(OBJEXT) tH5A_1_8.$(OBJEXT) \
+ tH5G_1_8.$(OBJEXT) tH5MISC_1_8.$(OBJEXT) tHDF5_1_8.$(OBJEXT) \
+ fortranlib_test_1_8.$(OBJEXT)
fortranlib_test_1_8_OBJECTS = $(am_fortranlib_test_1_8_OBJECTS)
fortranlib_test_1_8_LDADD = $(LDADD)
fortranlib_test_1_8_DEPENDENCIES = libh5test_fortran.la $(LIBH5TEST) \
$(LIBH5F) $(LIBHDF5)
-am__fortranlib_test_F03_SOURCES_DIST = tH5F.f90 tH5E_F03.f90 \
- tH5F_F03.f90 tH5L_F03.f90 tH5O_F03.f90 tH5P_F03.f90 \
- tH5T_F03.f90 tHDF5_F03.f90 fortranlib_test_F03.f90
+am__fortranlib_test_F03_SOURCES_DIST = tH5E_F03.f90 tH5F_F03.f90 \
+ tH5L_F03.f90 tH5O_F03.f90 tH5P_F03.f90 tH5T_F03.f90 \
+ tHDF5_F03.f90 fortranlib_test_F03.f90
@FORTRAN_2003_CONDITIONAL_F_TRUE at am_fortranlib_test_F03_OBJECTS = \
- at FORTRAN_2003_CONDITIONAL_F_TRUE@ tH5F.$(OBJEXT) \
@FORTRAN_2003_CONDITIONAL_F_TRUE@ tH5E_F03.$(OBJEXT) \
@FORTRAN_2003_CONDITIONAL_F_TRUE@ tH5F_F03.$(OBJEXT) \
@FORTRAN_2003_CONDITIONAL_F_TRUE@ tH5L_F03.$(OBJEXT) \
@@ -214,9 +226,9 @@ am__v_FCLD_1 =
SOURCES = $(libh5test_fortran_la_SOURCES) $(fflush1_SOURCES) \
$(fflush2_SOURCES) $(fortranlib_test_SOURCES) \
$(fortranlib_test_1_8_SOURCES) $(fortranlib_test_F03_SOURCES)
-DIST_SOURCES = $(libh5test_fortran_la_SOURCES) $(fflush1_SOURCES) \
- $(fflush2_SOURCES) $(fortranlib_test_SOURCES) \
- $(fortranlib_test_1_8_SOURCES) \
+DIST_SOURCES = $(am__libh5test_fortran_la_SOURCES_DIST) \
+ $(fflush1_SOURCES) $(fflush2_SOURCES) \
+ $(fortranlib_test_SOURCES) $(fortranlib_test_1_8_SOURCES) \
$(am__fortranlib_test_F03_SOURCES_DIST)
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
@@ -566,7 +578,6 @@ MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MPE = @MPE@
-MPI_GET_SIZE = @MPI_GET_SIZE@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
@@ -740,7 +751,30 @@ noinst_LTLIBRARIES = libh5test_fortran.la
# Our main targets, the tests themselves
TEST_PROG = fortranlib_test fflush1 fflush2 fortranlib_test_1_8 \
$(am__append_2)
-libh5test_fortran_la_SOURCES = tf.f90 t.c
+
+# tf.f90 depends on either tf_F08.f90 or tf_F03.f90 so they need to be
+# compiled first
+ at FORTRAN_2003_CONDITIONAL_F_FALSE@@FORTRAN_HAVE_STORAGE_SIZE_FALSE at libh5test_fortran_la_SOURCES = tf_F90.f90 \
+ at FORTRAN_2003_CONDITIONAL_F_FALSE@@FORTRAN_HAVE_STORAGE_SIZE_FALSE@ tf.f90 \
+ at FORTRAN_2003_CONDITIONAL_F_FALSE@@FORTRAN_HAVE_STORAGE_SIZE_FALSE@ t.c
+
+# tf.f90 depends on either tf_F08.f90 or tf_F03.f90 so they need to be
+# compiled first
+ at FORTRAN_2003_CONDITIONAL_F_TRUE@@FORTRAN_HAVE_STORAGE_SIZE_FALSE at libh5test_fortran_la_SOURCES = tf_F03.f90 \
+ at FORTRAN_2003_CONDITIONAL_F_TRUE@@FORTRAN_HAVE_STORAGE_SIZE_FALSE@ tf.f90 \
+ at FORTRAN_2003_CONDITIONAL_F_TRUE@@FORTRAN_HAVE_STORAGE_SIZE_FALSE@ t.c
+
+# tf.f90 depends on either tf_F08.f90 or tf_F03.f90 so they need to be
+# compiled first
+ at FORTRAN_HAVE_C_SIZEOF_FALSE@@FORTRAN_HAVE_STORAGE_SIZE_TRUE at libh5test_fortran_la_SOURCES = tf_F03.f90 \
+ at FORTRAN_HAVE_C_SIZEOF_FALSE@@FORTRAN_HAVE_STORAGE_SIZE_TRUE@ tf.f90 \
+ at FORTRAN_HAVE_C_SIZEOF_FALSE@@FORTRAN_HAVE_STORAGE_SIZE_TRUE@ t.c
+
+# tf.f90 depends on either tf_F08.f90 or tf_F03.f90 so they need to be
+# compiled first
+ at FORTRAN_HAVE_C_SIZEOF_TRUE@@FORTRAN_HAVE_STORAGE_SIZE_TRUE at libh5test_fortran_la_SOURCES = tf_F08.f90 \
+ at FORTRAN_HAVE_C_SIZEOF_TRUE@@FORTRAN_HAVE_STORAGE_SIZE_TRUE@ tf.f90 \
+ at FORTRAN_HAVE_C_SIZEOF_TRUE@@FORTRAN_HAVE_STORAGE_SIZE_TRUE@ t.c
# Source files are used for both the library and fortranlib_test.
# Automake will complain about this without the following workaround.
@@ -749,10 +783,10 @@ fortranlib_test_CFLAGS = $(AM_CFLAGS)
fortranlib_test_SOURCES = tH5F.f90 tH5D.f90 tH5R.f90 tH5S.f90 tH5T.f90 tH5VL.f90 tH5Z.f90 \
tH5Sselect.f90 tH5P.f90 tH5A.f90 tH5I.f90 tH5G.f90 tH5E.f90 tHDF5.f90 fortranlib_test.f90
-fortranlib_test_1_8_SOURCES = tH5F.f90 tH5O.f90 tH5A_1_8.f90 tH5G_1_8.f90 tH5MISC_1_8.f90 tHDF5_1_8.f90\
+fortranlib_test_1_8_SOURCES = tH5O.f90 tH5A_1_8.f90 tH5G_1_8.f90 tH5MISC_1_8.f90 tHDF5_1_8.f90\
fortranlib_test_1_8.f90
- at FORTRAN_2003_CONDITIONAL_F_TRUE@fortranlib_test_F03_SOURCES = tH5F.f90 tH5E_F03.f90 tH5F_F03.f90 tH5L_F03.f90 \
+ at FORTRAN_2003_CONDITIONAL_F_TRUE@fortranlib_test_F03_SOURCES = tH5E_F03.f90 tH5F_F03.f90 tH5L_F03.f90 \
@FORTRAN_2003_CONDITIONAL_F_TRUE@ tH5O_F03.f90 tH5P_F03.f90 tH5T_F03.f90 tHDF5_F03.f90 fortranlib_test_F03.f90
fflush1_SOURCES = fflush1.f90
diff --git a/fortran/test/fortranlib_test_1_8.f90 b/fortran/test/fortranlib_test_1_8.f90
index 66f799b..039dc6c 100644
--- a/fortran/test/fortranlib_test_1_8.f90
+++ b/fortran/test/fortranlib_test_1_8.f90
@@ -58,10 +58,10 @@ PROGRAM fortranlibtest
ENDIF
WRITE(*,*)
- ret_total_error = 0
- CALL file_space("file_space_1_8",cleanup, ret_total_error)
- CALL write_test_status(ret_total_error, &
- ' Testing file free space', &
+ CALL h5eset_auto_f(0, ret_total_error)
+ IF(ret_total_error.NE.0) &
+ CALL write_test_status(ret_total_error, &
+ ' h5eset_auto_f', &
total_error)
ret_total_error = 0
diff --git a/fortran/test/tH5L_F03.f90 b/fortran/test/tH5L_F03.f90
index 8cc17fb..795f1e2 100644
--- a/fortran/test/tH5L_F03.f90
+++ b/fortran/test/tH5L_F03.f90
@@ -58,7 +58,7 @@ CONTAINS
!**
!***************************************************************
- INTEGER FUNCTION liter_cb(group, name, link_info, op_data) bind(C)
+ INTEGER(KIND=C_INT) FUNCTION liter_cb(group, name, link_info, op_data) bind(C)
USE HDF5
USE ISO_C_BINDING
diff --git a/fortran/test/tH5MISC_1_8.f90 b/fortran/test/tH5MISC_1_8.f90
index bb7d50a..efc350e 100644
--- a/fortran/test/tH5MISC_1_8.f90
+++ b/fortran/test/tH5MISC_1_8.f90
@@ -257,7 +257,7 @@ SUBROUTINE test_h5s_encode(cleanup, total_error)
! /* Verify the decoded dataspace */
CALL h5sget_simple_extent_npoints_f(decoded_sid1, n, error)
CALL check("h5sget_simple_extent_npoints_f", error, total_error)
- CALL VERIFY("h5sget_simple_extent_npoints_f", INT(n), SPACE1_DIM1 * SPACE1_DIM2 * SPACE1_DIM3, &
+ CALL VERIFY("h5sget_simple_extent_npoints_f", INT(n), INT(SPACE1_DIM1 * SPACE1_DIM2 * SPACE1_DIM3), &
total_error)
!
diff --git a/fortran/test/tH5O_F03.f90 b/fortran/test/tH5O_F03.f90
index 598e83e..b7003b3 100644
--- a/fortran/test/tH5O_F03.f90
+++ b/fortran/test/tH5O_F03.f90
@@ -68,7 +68,7 @@ CONTAINS
IMPLICIT NONE
- INTEGER(HID_T) :: group_id
+ INTEGER(HID_T), VALUE :: group_id
CHARACTER(LEN=1), DIMENSION(1:180) :: name
TYPE(h5o_info_t) :: oinfo
TYPE(ovisit_ud_t) :: op_data
diff --git a/fortran/test/tH5P_F03.f90 b/fortran/test/tH5P_F03.f90
index 6039a52..945d0a5 100644
--- a/fortran/test/tH5P_F03.f90
+++ b/fortran/test/tH5P_F03.f90
@@ -43,7 +43,7 @@ MODULE test_genprop_cls_cb1_mod
USE ISO_C_BINDING
IMPLICIT NONE
- TYPE, bind(C) :: cop_cb_struct_ ! /* Struct for iterations */
+ TYPE, BIND(C) :: cop_cb_struct_ ! /* Struct for iterations */
INTEGER :: count
INTEGER(HID_T) :: id
END TYPE cop_cb_struct_
@@ -59,10 +59,10 @@ CONTAINS
INTEGER(HID_T), INTENT(IN), VALUE :: list_id
TYPE(cop_cb_struct_) :: create_data
-
+
create_data%count = create_data%count + 1
create_data%id = list_id
-
+
test_genprop_cls_cb1_f = 0
END FUNCTION test_genprop_cls_cb1_f
@@ -106,20 +106,16 @@ SUBROUTINE test_create(total_error)
INTEGER(hsize_t), DIMENSION(1:5), PARAMETER :: ch_size= (/1, 1, 1, 4, 1/)
CHARACTER(LEN=14) :: filename ='test_create.h5'
- ! /* compound datatype operations */
- TYPE, BIND(C) :: comp_datatype
- REAL :: a
- INTEGER :: x
- DOUBLE PRECISION :: y
- CHARACTER(LEN=1) :: z
- END TYPE comp_datatype
-
TYPE(comp_datatype), TARGET :: rd_c, fill_ctype
INTEGER :: error
INTEGER(SIZE_T) :: h5off
TYPE(C_PTR) :: f_ptr
LOGICAL :: differ1, differ2
-
+ CHARACTER(LEN=1) :: cfill
+ INTEGER :: ifill
+ REAL :: rfill
+ REAL(KIND=dp) :: dpfill
+
!/*
! * Create a file.
! */
@@ -136,8 +132,7 @@ SUBROUTINE test_create(total_error)
CALL check("h5pset_chunk_f",error, total_error)
! /* Create a compound datatype */
-
- CALL h5tcreate_f(H5T_COMPOUND_F, INT(SIZEOF(fill_ctype),size_t), comp_type_id, error)
+ CALL h5tcreate_f(H5T_COMPOUND_F, H5_SIZEOF(fill_ctype), comp_type_id, error)
CALL check("h5tcreate_f", error, total_error)
h5off = H5OFFSETOF(C_LOC(fill_ctype), C_LOC(fill_ctype%a))
CALL h5tinsert_f(comp_type_id, "a", h5off , H5T_NATIVE_REAL, error)
@@ -171,6 +166,41 @@ SUBROUTINE test_create(total_error)
f_ptr = C_LOC(fill_ctype)
+ ! Test various fill values
+ CALL H5Pset_fill_value_f(dcpl, H5T_NATIVE_CHARACTER, 'X', error)
+ CALL check("H5Pset_fill_value_f",error, total_error)
+ CALL h5pget_fill_value_f(dcpl, H5T_NATIVE_CHARACTER, cfill, error)
+ CALL check("H5Pget_fill_value_f",error, total_error)
+ IF(cfill.NE.'X')THEN
+ PRINT*,"***ERROR: Returned wrong fill value (character)"
+ total_error = total_error + 1
+ ENDIF
+ CALL H5Pset_fill_value_f(dcpl, H5T_NATIVE_INTEGER, 9, error)
+ CALL check("H5Pset_fill_value_f",error, total_error)
+ CALL h5pget_fill_value_f(dcpl, H5T_NATIVE_INTEGER, ifill, error)
+ CALL check("H5Pget_fill_value_f",error, total_error)
+ IF(ifill.NE.9)THEN
+ PRINT*,"***ERROR: Returned wrong fill value (integer)"
+ total_error = total_error + 1
+ ENDIF
+ CALL H5Pset_fill_value_f(dcpl, H5T_NATIVE_DOUBLE, 1.0_dp, error)
+ CALL check("H5Pset_fill_value_f",error, total_error)
+ CALL h5pget_fill_value_f(dcpl, H5T_NATIVE_DOUBLE, dpfill, error)
+ CALL check("H5Pget_fill_value_f",error, total_error)
+ IF(.NOT.dreal_eq( REAL(dpfill,dp), 1.0_dp))THEN
+ PRINT*,"***ERROR: Returned wrong fill value (double)"
+ total_error = total_error + 1
+ ENDIF
+ CALL H5Pset_fill_value_f(dcpl, H5T_NATIVE_REAL, 2.0, error)
+ CALL check("H5Pset_fill_value_f",error, total_error)
+ CALL h5pget_fill_value_f(dcpl, H5T_NATIVE_REAL, rfill, error)
+ CALL check("H5Pget_fill_value_f",error, total_error)
+ IF(.NOT.dreal_eq( REAL(rfill,dp), REAL(2.0,dp)))THEN
+ PRINT*,"***ERROR: Returned wrong fill value (real)"
+ total_error = total_error + 1
+ ENDIF
+
+ ! For the actual compound type
CALL H5Pset_fill_value_f(dcpl, comp_type_id, f_ptr, error)
CALL check("H5Pget_fill_value_f",error, total_error)
@@ -252,12 +282,7 @@ SUBROUTINE test_genprop_class_callback(total_error)
INTEGER(hid_t) :: lid2 !/* 2nd Generic Property list ID */
INTEGER(size_t) :: nprops !/* Number of properties in class */
- TYPE cb_struct
- INTEGER :: count
- INTEGER(hid_t) :: id
- END TYPE cb_struct
-
- TYPE(cb_struct), TARGET :: crt_cb_struct, cls_cb_struct
+ TYPE(cop_cb_struct_), TARGET :: crt_cb_struct, cls_cb_struct
CHARACTER(LEN=7) :: CLASS1_NAME = "Class 1"
TYPE(C_FUNPTR) :: f1, f5
@@ -394,6 +419,8 @@ SUBROUTINE test_h5p_file_image(total_error)
TYPE(C_PTR), DIMENSION(1:count) :: f_ptr1
TYPE(C_PTR), DIMENSION(1:1) :: f_ptr2
+ INTEGER(HSIZE_T) :: sizeof_buffer
+
! Initialize file image buffer
DO i = 1, count
buffer(i) = i*10
@@ -412,7 +439,8 @@ SUBROUTINE test_h5p_file_image(total_error)
! Set file image
f_ptr = C_LOC(buffer(1))
- size = SIZEOF(buffer)
+ size = H5_SIZEOF(buffer(1))*count
+
CALL h5pset_file_image_f(fapl_1, f_ptr, size, error)
CALL check("h5pset_file_image_f", error, total_error)
@@ -465,8 +493,8 @@ SUBROUTINE external_test_offset(cleanup,total_error)
INTEGER(hid_t) :: dset=-1 ! dataset
INTEGER(hid_t) :: grp=-1 ! group to emit diagnostics
INTEGER(size_t) :: i, j ! miscellaneous counters
- CHARACTER(LEN=180) :: filename ! file names
- INTEGER, DIMENSION(1:25) :: part ! raw data buffers
+ CHARACTER(LEN=180) :: filename ! file names
+ INTEGER, DIMENSION(1:25) :: part
INTEGER, DIMENSION(1:100), TARGET :: whole ! raw data buffers
INTEGER(hsize_t), DIMENSION(1:1) :: cur_size ! current data space size
INTEGER(hid_t) :: hs_space ! hyperslab data space
@@ -475,6 +503,7 @@ SUBROUTINE external_test_offset(cleanup,total_error)
CHARACTER(LEN=1) :: ichr1 ! character conversion holder
INTEGER :: error ! error status
TYPE(C_PTR) :: f_ptr ! fortran pointer
+ INTEGER(HSIZE_T) :: sizeof_part
CHARACTER(LEN=1,KIND=C_CHAR), DIMENSION(1:30) :: temparray
@@ -503,15 +532,18 @@ SUBROUTINE external_test_offset(cleanup,total_error)
CALL check("h5gcreate_f",error, total_error)
! Create the dataset
+
+ sizeof_part = INT(H5_SIZEOF(part(1))*25, hsize_t)
+
CALL h5pcreate_f(H5P_DATASET_CREATE_F, dcpl, error)
CALL check("h5pcreate_f", error, total_error)
- CALL h5pset_external_f(dcpl, "extern_1a.raw", INT(0,off_t), INT(SIZEOF(part), hsize_t), error)
+ CALL h5pset_external_f(dcpl, "extern_1a.raw", INT(0,off_t), sizeof_part, error)
CALL check("h5pset_external_f",error,total_error)
- CALL h5pset_external_f(dcpl, "extern_2a.raw", INT(10,off_t), INT(SIZEOF(part), hsize_t), error)
+ CALL h5pset_external_f(dcpl, "extern_2a.raw", INT(10,off_t), sizeof_part, error)
CALL check("h5pset_external_f",error,total_error)
- CALL h5pset_external_f(dcpl, "extern_3a.raw", INT(20,off_t), INT(SIZEOF(part), hsize_t), error)
+ CALL h5pset_external_f(dcpl, "extern_3a.raw", INT(20,off_t), sizeof_part, error)
CALL check("h5pset_external_f",error,total_error)
- CALL h5pset_external_f(dcpl, "extern_4a.raw", INT(30,off_t), INT(SIZEOF(part), hsize_t), error)
+ CALL h5pset_external_f(dcpl, "extern_4a.raw", INT(30,off_t), sizeof_part, error)
CALL check("h5pset_external_f",error,total_error)
cur_size(1) = 100
diff --git a/fortran/test/tH5T_F03.f90 b/fortran/test/tH5T_F03.f90
index fc3ebd0..f15424d 100644
--- a/fortran/test/tH5T_F03.f90
+++ b/fortran/test/tH5T_F03.f90
@@ -661,9 +661,6 @@ END SUBROUTINE test_array_compound_atomic
USE ISO_C_BINDING
IMPLICIT NONE
- INTEGER, PARAMETER :: r_k4 = SELECTED_REAL_KIND(5)
- INTEGER, PARAMETER :: r_k8 = SELECTED_REAL_KIND(10)
-
INTEGER, INTENT(INOUT) :: total_error
INTEGER, PARAMETER :: LENGTH = 5
@@ -685,8 +682,8 @@ END SUBROUTINE test_array_compound_atomic
TYPE CmpField_struct
INTEGER, DIMENSION(1:ALEN) :: a
- REAL(KIND=r_k4), DIMENSION(1:ALEN) :: b
- REAL(KIND=r_k8), DIMENSION(1:ALEN) :: c
+ REAL(KIND=sp), DIMENSION(1:ALEN) :: b
+ REAL(KIND=dp), DIMENSION(1:ALEN) :: c
ENDTYPE CmpField_struct
TYPE(CmpField_struct), DIMENSION(1:LENGTH), TARGET :: cf
@@ -702,7 +699,7 @@ END SUBROUTINE test_array_compound_atomic
TYPE(CmpDTSinfo_struct) :: dtsinfo
TYPE fld_t_struct
- REAL(KIND=r_k4), DIMENSION(1:ALEN) :: b
+ REAL(KIND=sp), DIMENSION(1:ALEN) :: b
END TYPE fld_t_struct
INTEGER(SIZE_T) :: type_sizei ! Size of the integer datatype
@@ -741,10 +738,10 @@ END SUBROUTINE test_array_compound_atomic
! -----------------------
CALL h5tget_size_f(H5T_NATIVE_INTEGER, type_sizei, error)
CALL check("h5tget_size_f", error, total_error)
- IF(sizeof(cf(1)%b(1)).EQ.4)THEN
+ IF(h5_sizeof(cf(1)%b(1)).EQ.4_size_t)THEN
CALL h5tget_size_f(H5T_NATIVE_REAL_4, type_sizer, error)
CALL check("h5tget_size_f", error, total_error)
- ELSE IF(sizeof(cf(1)%b(1)).EQ.8)THEN
+ ELSE IF(h5_sizeof(cf(1)%b(1)).EQ.8_size_t)THEN
CALL h5tget_size_f(H5T_NATIVE_REAL_8, type_sizer, error)
CALL check("h5tget_size_f", error, total_error)
ENDIF
diff --git a/fortran/test/tHDF5_1_8.f90 b/fortran/test/tHDF5_1_8.f90
index 47eec16..9d1c3ec 100644
--- a/fortran/test/tHDF5_1_8.f90
+++ b/fortran/test/tHDF5_1_8.f90
@@ -33,6 +33,5 @@ MODULE THDF5_1_8
USE TH5MISC_1_8
USE TH5A_1_8
USE TH5G_1_8
- USE TH5F
USE TH5O
END MODULE THDF5_1_8
diff --git a/fortran/test/tf.f90 b/fortran/test/tf.f90
index 2964840..063e93d 100644
--- a/fortran/test/tf.f90
+++ b/fortran/test/tf.f90
@@ -29,7 +29,9 @@
!*****
MODULE TH5_MISC
- INTEGER, PARAMETER :: dp = SELECTED_REAL_KIND(15, 307)
+ USE TH5_MISC_PROVISIONAL
+
+ IMPLICIT NONE
CONTAINS
diff --git a/fortran/test/tf_F03.f90 b/fortran/test/tf_F03.f90
new file mode 100644
index 0000000..4513783
--- /dev/null
+++ b/fortran/test/tf_F03.f90
@@ -0,0 +1,128 @@
+!****h* root/fortran/test/tf_F03.f90
+!
+! NAME
+! tf_F03.f90
+!
+! FUNCTION
+! Contains functions that are part of the F2003 standard, and are not F2008 compliant.
+! Needed by the hdf5 fortran tests.
+!
+! COPYRIGHT
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+! Copyright by The HDF Group. *
+! Copyright by the Board of Trustees of the University of Illinois. *
+! All rights reserved. *
+! *
+! This file is part of HDF5. The full HDF5 copyright notice, including *
+! terms governing use, modification, and redistribution, is contained in *
+! the files COPYING and Copyright.html. COPYING can be found at the root *
+! of the source code distribution tree; Copyright.html can be found at the *
+! root level of an installed copy of the electronic HDF5 document set and *
+! is linked from the top-level documents page. It can also be found at *
+! http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have *
+! access to either file, you may request a copy from help at hdfgroup.org. *
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+!
+! CONTAINS SUBROUTINES
+! H5_SIZEOF
+!
+! NOTES
+! The Sun/Oracle compiler has the following restrictions on the SIZEOF intrinsic function:
+!
+! "The SIZEOF intrinsic cannot be applied to arrays of an assumed size, characters of a
+! length that is passed, or subroutine calls or names. SIZEOF returns default INTEGER*4 data.
+! If compiling for a 64-bit environment, the compiler will issue a warning if the result overflows
+! the INTEGER*4 data range. To use SIZEOF in a 64-bit environment with arrays larger
+! than the INTEGER*4 limit (2 Gbytes), the SIZEOF function and
+! the variables receiving the result must be declared INTEGER*8."
+!
+! Thus, we can not overload the H5_SIZEOF function to handle arrays (as used in tH5P_F03.f90), or
+! characters that do not have a set length (as used in tH5P_F03.f90), sigh...
+!
+!*****
+MODULE TH5_MISC_PROVISIONAL
+
+ USE ISO_C_BINDING
+ IMPLICIT NONE
+
+ INTEGER, PARAMETER :: sp = SELECTED_REAL_KIND(5) ! This should map to REAL*4 on most modern processors
+ INTEGER, PARAMETER :: dp = SELECTED_REAL_KIND(10) ! This should map to REAL*8 on most modern processors
+
+ ! generic compound datatype
+ TYPE, BIND(C) :: comp_datatype
+ REAL :: a
+ INTEGER :: x
+ DOUBLE PRECISION :: y
+ CHARACTER(LEN=1) :: z
+ END TYPE comp_datatype
+
+ PUBLIC :: H5_SIZEOF
+ INTERFACE H5_SIZEOF
+ MODULE PROCEDURE H5_SIZEOF_CMPD
+ MODULE PROCEDURE H5_SIZEOF_I, H5_SIZEOF_CHR
+ MODULE PROCEDURE H5_SIZEOF_SP,H5_SIZEOF_DP
+ END INTERFACE
+
+CONTAINS
+
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5_sizeof_cmpd
+ !DEC$endif
+ INTEGER(C_SIZE_T) FUNCTION H5_SIZEOF_CMPD(a)
+ IMPLICIT NONE
+ TYPE(comp_datatype), INTENT(in) :: a
+
+ H5_SIZEOF_CMPD = SIZEOF(a)
+
+ END FUNCTION H5_SIZEOF_CMPD
+
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5_sizeof_chr
+!DEC$endif
+ INTEGER(C_SIZE_T) FUNCTION H5_SIZEOF_CHR(a)
+ IMPLICIT NONE
+ CHARACTER(LEN=1), INTENT(in):: a
+
+ H5_SIZEOF_CHR = SIZEOF(a)
+
+ END FUNCTION H5_SIZEOF_CHR
+
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5_sizeof_i
+!DEC$endif
+ INTEGER(C_SIZE_T) FUNCTION H5_SIZEOF_I(a)
+ IMPLICIT NONE
+ INTEGER, INTENT(in):: a
+
+ H5_SIZEOF_I = SIZEOF(a)
+
+ END FUNCTION H5_SIZEOF_I
+
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5_sizeof_sp
+!DEC$endif
+ INTEGER(C_SIZE_T) FUNCTION H5_SIZEOF_SP(a)
+ IMPLICIT NONE
+ REAL(sp), INTENT(in):: a
+
+ H5_SIZEOF_SP = SIZEOF(a)
+
+ END FUNCTION H5_SIZEOF_SP
+
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5_sizeof_dp
+!DEC$endif
+ INTEGER(C_SIZE_T) FUNCTION H5_SIZEOF_DP(a)
+ IMPLICIT NONE
+ REAL(dp), INTENT(in):: a
+
+ H5_SIZEOF_DP = SIZEOF(a)
+
+ END FUNCTION H5_SIZEOF_DP
+
+END MODULE TH5_MISC_PROVISIONAL
diff --git a/fortran/test/tf_F08.f90 b/fortran/test/tf_F08.f90
new file mode 100644
index 0000000..5583f3f
--- /dev/null
+++ b/fortran/test/tf_F08.f90
@@ -0,0 +1,128 @@
+!****h* root/fortran/test/tf_F08.f90
+!
+! NAME
+! tf_F08.f90
+!
+! FUNCTION
+! Contains functions that are part of the F2008 standard and needed by
+! the hdf5 fortran tests.
+!
+! COPYRIGHT
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+! Copyright by The HDF Group. *
+! Copyright by the Board of Trustees of the University of Illinois. *
+! All rights reserved. *
+! *
+! This file is part of HDF5. The full HDF5 copyright notice, including *
+! terms governing use, modification, and redistribution, is contained in *
+! the files COPYING and Copyright.html. COPYING can be found at the root *
+! of the source code distribution tree; Copyright.html can be found at the *
+! root level of an installed copy of the electronic HDF5 document set and *
+! is linked from the top-level documents page. It can also be found at *
+! http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have *
+! access to either file, you may request a copy from help at hdfgroup.org. *
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+!
+! CONTAINS SUBROUTINES
+! H5_SIZEOF
+!
+! NOTES
+! This file contains "sizeof" functions that are F2008 standard compliant
+! and replace the non-standard 'SIZEOF' functions found in the file tf_F03.
+! Unfortunity we need to wrap the C_SIZEOF/STORAGE_SIZE functions to handle different
+! data types from the various tests.
+!
+! F08+TS29113 requires C interoperable variable as argument for C_SIZEOF.
+!
+! This file will be build instead of tf_F03.f90 if the intrinsic fortran
+! function C_SIZEOF/STORAGE_SIZE is found during configure.
+!
+!*****
+MODULE TH5_MISC_PROVISIONAL
+
+ USE ISO_C_BINDING
+ IMPLICIT NONE
+
+ INTEGER, PARAMETER :: sp = SELECTED_REAL_KIND(5) ! This should map to REAL*4 on most modern processors
+ INTEGER, PARAMETER :: dp = SELECTED_REAL_KIND(10) ! This should map to REAL*8 on most modern processors
+
+ ! generic compound datatype
+ TYPE, BIND(C) :: comp_datatype
+ REAL :: a
+ INTEGER :: x
+ DOUBLE PRECISION :: y
+ CHARACTER(LEN=1) :: z
+ END TYPE comp_datatype
+
+ PUBLIC :: H5_SIZEOF
+ INTERFACE H5_SIZEOF
+ MODULE PROCEDURE H5_SIZEOF_CMPD
+ MODULE PROCEDURE H5_SIZEOF_CHR
+ MODULE PROCEDURE H5_SIZEOF_I
+ MODULE PROCEDURE H5_SIZEOF_SP,H5_SIZEOF_DP
+ END INTERFACE
+
+CONTAINS
+
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5_sizeof_cmpd
+!DEC$endif
+ INTEGER(C_SIZE_T) FUNCTION H5_SIZEOF_CMPD(a)
+ IMPLICIT NONE
+ TYPE(comp_datatype), INTENT(in) :: a
+
+ H5_SIZEOF_CMPD = C_SIZEOF(a)
+
+ END FUNCTION H5_SIZEOF_CMPD
+
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5_sizeof_chr
+!DEC$endif
+ INTEGER(C_SIZE_T) FUNCTION H5_SIZEOF_CHR(a)
+ IMPLICIT NONE
+ CHARACTER(LEN=*), INTENT(in) :: a
+
+ H5_SIZEOF_CHR = storage_size(a, c_size_t)/storage_size(c_char_'a',c_size_t)
+
+ END FUNCTION H5_SIZEOF_CHR
+
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5_sizeof_i
+!DEC$endif
+ INTEGER(C_SIZE_T) FUNCTION H5_SIZEOF_I(a)
+ IMPLICIT NONE
+ INTEGER, INTENT(in):: a
+
+ H5_SIZEOF_I = storage_size(a, c_size_t)/storage_size(c_char_'a',c_size_t)
+
+ END FUNCTION H5_SIZEOF_I
+
+
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5_sizeof_sp
+!DEC$endif
+ INTEGER(C_SIZE_T) FUNCTION H5_SIZEOF_SP(a)
+ IMPLICIT NONE
+ REAL(sp), INTENT(in):: a
+
+ H5_SIZEOF_SP = storage_size(a, c_size_t)/storage_size(c_char_'a',c_size_t)
+
+ END FUNCTION H5_SIZEOF_SP
+
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5_sizeof_dp
+!DEC$endif
+ INTEGER(C_SIZE_T) FUNCTION H5_SIZEOF_DP(a)
+ IMPLICIT NONE
+ REAL(dp), INTENT(in):: a
+
+ H5_SIZEOF_DP = storage_size(a, c_size_t)/storage_size(c_char_'a',c_size_t)
+
+ END FUNCTION H5_SIZEOF_DP
+
+END MODULE TH5_MISC_PROVISIONAL
diff --git a/fortran/test/tHDF5_1_8.f90 b/fortran/test/tf_F90.f90
similarity index 77%
copy from fortran/test/tHDF5_1_8.f90
copy to fortran/test/tf_F90.f90
index 47eec16..11a047c 100644
--- a/fortran/test/tHDF5_1_8.f90
+++ b/fortran/test/tf_F90.f90
@@ -1,14 +1,11 @@
-!****h* ROBODoc/HDF5
+!****h* root/fortran/test/tf_F90.f90
!
! NAME
-! MODULE THDF5_1_8
+! tf_F90.f90
!
-! FILE
-! src/fortran/test/tHDF5_1_8.f90
-!
-! PURPOSE
-! This is the test module used for testing the Fortran90 HDF library
-! 1.8.* APIs
+! FUNCTION
+! Module for when the compiler is not F2003 or F2008 compliant.
+! Needed by tf.f90 for the test programs.
!
! COPYRIGHT
! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
@@ -27,12 +24,10 @@
! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
!
!*****
+MODULE TH5_MISC_PROVISIONAL
+ IMPLICIT NONE
+
+ INTEGER, PARAMETER :: sp = KIND(0.0)
+ INTEGER, PARAMETER :: dp = KIND(0.D0)
-MODULE THDF5_1_8
- USE TH5_MISC
- USE TH5MISC_1_8
- USE TH5A_1_8
- USE TH5G_1_8
- USE TH5F
- USE TH5O
-END MODULE THDF5_1_8
+END MODULE TH5_MISC_PROVISIONAL
diff --git a/fortran/testpar/Makefile.in b/fortran/testpar/Makefile.in
index 989c626..583b6dc 100644
--- a/fortran/testpar/Makefile.in
+++ b/fortran/testpar/Makefile.in
@@ -504,7 +504,6 @@ MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MPE = @MPE@
-MPI_GET_SIZE = @MPI_GET_SIZE@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
diff --git a/hl/CMakeLists.txt b/hl/CMakeLists.txt
index 22c0770..e693dd7 100644
--- a/hl/CMakeLists.txt
+++ b/hl/CMakeLists.txt
@@ -4,7 +4,7 @@ PROJECT (HDF5_HL C CXX)
#-----------------------------------------------------------------------------
# Apply Definitions to compiler in this directory and below
#-----------------------------------------------------------------------------
-add_definitions (${HDF5_EXTRA_C_FLAGS})
+add_definitions (${HDF_EXTRA_C_FLAGS})
#-----------------------------------------------------------------------------
# Shared Libs
diff --git a/hl/Makefile.in b/hl/Makefile.in
index 17a1ff0..cda0122 100644
--- a/hl/Makefile.in
+++ b/hl/Makefile.in
@@ -508,7 +508,6 @@ MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MPE = @MPE@
-MPI_GET_SIZE = @MPI_GET_SIZE@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
diff --git a/hl/c++/Makefile.in b/hl/c++/Makefile.in
index 4b11ad8..3839814 100644
--- a/hl/c++/Makefile.in
+++ b/hl/c++/Makefile.in
@@ -504,7 +504,6 @@ MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MPE = @MPE@
-MPI_GET_SIZE = @MPI_GET_SIZE@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
diff --git a/hl/c++/examples/Makefile.in b/hl/c++/examples/Makefile.in
index 3938a3b..5712043 100644
--- a/hl/c++/examples/Makefile.in
+++ b/hl/c++/examples/Makefile.in
@@ -451,7 +451,6 @@ MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MPE = @MPE@
-MPI_GET_SIZE = @MPI_GET_SIZE@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
diff --git a/hl/c++/src/Makefile.in b/hl/c++/src/Makefile.in
index 23ea5d6..6555461 100644
--- a/hl/c++/src/Makefile.in
+++ b/hl/c++/src/Makefile.in
@@ -510,7 +510,6 @@ MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MPE = @MPE@
-MPI_GET_SIZE = @MPI_GET_SIZE@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
@@ -673,8 +672,10 @@ CHECK_CLEANFILES = *.chkexe *.chklog *.clog
# Add libtool shared library version numbers to the HDF5 library
# See libtool versioning documentation online.
-LT_VERS_INTERFACE = 8
-LT_VERS_REVISION = 2
+# After making changes, run bin/reconfigure to update other configure related
+# files like Makefile.in.
+LT_VERS_INTERFACE = 9
+LT_VERS_REVISION = 0
LT_VERS_AGE = 0
# This is our main target
diff --git a/hl/c++/test/Makefile.in b/hl/c++/test/Makefile.in
index cee963a..f6bd246 100644
--- a/hl/c++/test/Makefile.in
+++ b/hl/c++/test/Makefile.in
@@ -507,7 +507,6 @@ MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MPE = @MPE@
-MPI_GET_SIZE = @MPI_GET_SIZE@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
diff --git a/hl/examples/Makefile.in b/hl/examples/Makefile.in
index 2bf5764..6bbf493 100644
--- a/hl/examples/Makefile.in
+++ b/hl/examples/Makefile.in
@@ -451,7 +451,6 @@ MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MPE = @MPE@
-MPI_GET_SIZE = @MPI_GET_SIZE@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
diff --git a/hl/fortran/Makefile.in b/hl/fortran/Makefile.in
index c2d6610..8fe9e35 100644
--- a/hl/fortran/Makefile.in
+++ b/hl/fortran/Makefile.in
@@ -508,7 +508,6 @@ MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MPE = @MPE@
-MPI_GET_SIZE = @MPI_GET_SIZE@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
diff --git a/hl/fortran/examples/Makefile.in b/hl/fortran/examples/Makefile.in
index 1eb9c9d..1051658 100644
--- a/hl/fortran/examples/Makefile.in
+++ b/hl/fortran/examples/Makefile.in
@@ -451,7 +451,6 @@ MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MPE = @MPE@
-MPI_GET_SIZE = @MPI_GET_SIZE@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
diff --git a/hl/fortran/src/Makefile.am b/hl/fortran/src/Makefile.am
index c8c4541..512c2c8 100644
--- a/hl/fortran/src/Makefile.am
+++ b/hl/fortran/src/Makefile.am
@@ -49,7 +49,7 @@ endif
libhdf5hl_fortran_la_SOURCES=H5DSfc.c H5LTfc.c H5IMfc.c H5IMcc.c H5TBfc.c \
H5DSff.f90 H5LTff.f90 H5IMff.f90 H5TBff.f90
-# HDF5 HL Fortran library depends on HDF5 Library.
+# HDF5 HL Fortran library depends on HDF5 Library.
libhdf5hl_fortran_la_LIBADD=$(LIBH5_HL) $(LIBH5F)
# Fortran module files can have different extensions and different names
diff --git a/hl/fortran/src/Makefile.in b/hl/fortran/src/Makefile.in
index f49f748..99cf547 100644
--- a/hl/fortran/src/Makefile.in
+++ b/hl/fortran/src/Makefile.in
@@ -525,7 +525,6 @@ MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MPE = @MPE@
-MPI_GET_SIZE = @MPI_GET_SIZE@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
@@ -688,8 +687,10 @@ CHECK_CLEANFILES = *.chkexe *.chklog *.clog
# Add libtool shared library version numbers to the HDF5 library
# See libtool versioning documentation online.
-LT_VERS_INTERFACE = 8
-LT_VERS_REVISION = 2
+# After making changes, run bin/reconfigure to update other configure related
+# files like Makefile.in.
+LT_VERS_INTERFACE = 9
+LT_VERS_REVISION = 0
LT_VERS_AGE = 0
# Our main target, the high-level fortran library
@@ -708,7 +709,7 @@ libhdf5hl_fortran_la_SOURCES = H5DSfc.c H5LTfc.c H5IMfc.c H5IMcc.c H5TBfc.c \
H5DSff.f90 H5LTff.f90 H5IMff.f90 H5TBff.f90
-# HDF5 HL Fortran library depends on HDF5 Library.
+# HDF5 HL Fortran library depends on HDF5 Library.
libhdf5hl_fortran_la_LIBADD = $(LIBH5_HL) $(LIBH5F)
# Automake needs to be taught how to build lib, progs, and tests targets.
diff --git a/hl/fortran/test/Makefile.in b/hl/fortran/test/Makefile.in
index e142edf..4a929a6 100644
--- a/hl/fortran/test/Makefile.in
+++ b/hl/fortran/test/Makefile.in
@@ -516,7 +516,6 @@ MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MPE = @MPE@
-MPI_GET_SIZE = @MPI_GET_SIZE@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
diff --git a/hl/fortran/test/tsttable.f90 b/hl/fortran/test/tsttable.f90
index 66ec5c6..bb88abf 100644
--- a/hl/fortran/test/tsttable.f90
+++ b/hl/fortran/test/tsttable.f90
@@ -175,13 +175,30 @@ SUBROUTINE test_table1()
CALL h5tbwrite_field_name_f(file_id,dsetname1,field_names(4),start,nrecords,type_sizer,&
bufr,errcode)
-
!-------------------------------------------------------------------------
! read field
!-------------------------------------------------------------------------
+ ! Read an invalid field, should fail
+ CALL h5tbread_field_name_f(file_id,dsetname1,'DoesNotExist',start,nrecords,type_sizec,&
+ bufsr,errcode)
+
+ IF(errcode.GE.0)THEN
+ PRINT *, 'error in h5tbread_field_name_f'
+ CALL h5fclose_f(file_id, errcode)
+ CALL h5close_f(errcode)
+ STOP
+ ENDIF
+
+ ! Read a valid field, should pass
CALL h5tbread_field_name_f(file_id,dsetname1,field_names(1),start,nrecords,type_sizec,&
bufsr,errcode)
+ IF(errcode.LT.0)THEN
+ PRINT *, 'error in h5tbread_field_name_f'
+ CALL h5fclose_f(file_id, errcode)
+ CALL h5close_f(errcode)
+ STOP
+ ENDIF
!
! compare read and write buffers.
@@ -329,8 +346,6 @@ SUBROUTINE test_table1()
! we insert a field callsed "field5" with the same type and buffer as field 4 (Real)
!-------------------------------------------------------------------------
-
-
CALL test_begin(' Insert field ')
CALL h5tbinsert_field_f(file_id,dsetname1,"field5",field_types(4),4,bufr,errcode)
diff --git a/hl/src/H5DS.c b/hl/src/H5DS.c
index e60d587..df69380 100644
--- a/hl/src/H5DS.c
+++ b/hl/src/H5DS.c
@@ -22,6 +22,9 @@
#include "H5TBprivate.h"
+/* Local routines */
+static herr_t H5DS_is_reserved(hid_t did);
+static hid_t H5DS_get_REFLIST_type(void);
/*-------------------------------------------------------------------------
* Function: H5DSset_scale
@@ -221,11 +224,11 @@ herr_t H5DSattach_scale(hid_t did,
*-------------------------------------------------------------------------
*/
/* create a reference for the >>DS<< dataset */
- if (H5Rcreate(&ref_to_ds,dsid,".",H5R_OBJECT,-1) < 0)
+ if (H5Rcreate(&ref_to_ds, dsid, ".", H5R_OBJECT, (hid_t)-1) < 0)
return FAIL;
/* create a reference for the >>data<< dataset */
- if (H5Rcreate(&dsl.ref,did,".",H5R_OBJECT,-1) < 0)
+ if (H5Rcreate(&dsl.ref, did, ".", H5R_OBJECT, (hid_t)-1) < 0)
return FAIL;
/* try to find the attribute "DIMENSION_LIST" on the >>data<< dataset */
@@ -254,7 +257,7 @@ herr_t H5DSattach_scale(hid_t did,
goto out;
/* allocate and initialize the VL */
- buf = (hvl_t *)malloc((size_t)rank * sizeof(hvl_t));
+ buf = (hvl_t *)HDmalloc((size_t)rank * sizeof(hvl_t));
if(buf == NULL)
goto out;
@@ -265,7 +268,7 @@ herr_t H5DSattach_scale(hid_t did,
/* store the REF information in the index of the dataset that has the DS */
buf[idx].len = 1;
- buf[idx].p = malloc( 1 * sizeof(hobj_ref_t));
+ buf[idx].p = HDmalloc( 1 * sizeof(hobj_ref_t));
((hobj_ref_t *)buf[idx].p)[0] = ref_to_ds;
/* write the attribute with the reference */
@@ -282,7 +285,7 @@ herr_t H5DSattach_scale(hid_t did,
if(H5Aclose(aid) < 0)
goto out;
- free(buf);
+ HDfree(buf);
buf = NULL;
}
@@ -303,7 +306,7 @@ herr_t H5DSattach_scale(hid_t did,
goto out;
/* allocate and initialize the VL */
- buf = (hvl_t *)malloc((size_t)rank * sizeof(hvl_t));
+ buf = (hvl_t *)HDmalloc((size_t)rank * sizeof(hvl_t));
if(buf == NULL)
goto out;
@@ -343,13 +346,13 @@ herr_t H5DSattach_scale(hid_t did,
if(buf[idx].len > 0) {
buf[idx].len++;
len = buf[idx].len;
- buf[idx].p = realloc(buf[idx].p, len * sizeof(hobj_ref_t));
+ buf[idx].p = HDrealloc(buf[idx].p, len * sizeof(hobj_ref_t));
((hobj_ref_t *)buf[idx].p)[len - 1] = ref_to_ds;
} /* end if */
else {
/* store the REF information in the index of the dataset that has the DS */
buf[idx].len = 1;
- buf[idx].p = malloc(sizeof(hobj_ref_t));
+ buf[idx].p = HDmalloc(sizeof(hobj_ref_t));
((hobj_ref_t *)buf[idx].p)[0] = ref_to_ds;
} /* end else */
} /* end if */
@@ -367,7 +370,7 @@ herr_t H5DSattach_scale(hid_t did,
goto out;
if(H5Aclose(aid) < 0)
goto out;
- free(buf);
+ HDfree(buf);
buf = NULL;
} /* has_dimlist */
@@ -447,7 +450,7 @@ herr_t H5DSattach_scale(hid_t did,
nelmts++;
- dsbuf = (ds_list_t*) malloc((size_t)nelmts * sizeof(ds_list_t));
+ dsbuf = (ds_list_t*) HDmalloc((size_t)nelmts * sizeof(ds_list_t));
if(dsbuf == NULL)
goto out;
@@ -497,7 +500,7 @@ herr_t H5DSattach_scale(hid_t did,
if (H5Tclose(ntid) < 0)
goto out;
- free(dsbuf);
+ HDfree(dsbuf);
dsbuf = NULL;
} /* has_reflist */
@@ -519,9 +522,9 @@ herr_t H5DSattach_scale(hid_t did,
/* error zone */
out:
if(buf)
- free(buf);
+ HDfree(buf);
if(dsbuf)
- free(dsbuf);
+ HDfree(dsbuf);
H5E_BEGIN_TRY {
H5Sclose(sid);
@@ -673,7 +676,7 @@ herr_t H5DSdetach_scale(hid_t did,
goto out;
/* allocate and initialize the VL */
- buf = (hvl_t *)malloc((size_t)rank * sizeof(hvl_t));
+ buf = (hvl_t *)HDmalloc((size_t)rank * sizeof(hvl_t));
if(buf == NULL)
goto out;
@@ -718,7 +721,7 @@ herr_t H5DSdetach_scale(hid_t did,
((hobj_ref_t *)buf[idx].p)[j] = ((hobj_ref_t *)buf[idx].p)[len-1];
len = --buf[idx].len;
if(len == 0) {
- free(buf[idx].p);
+ HDfree(buf[idx].p);
buf[idx].p = NULL;
}
/* Since a reference to a dim. scale can be inserted only once,
@@ -760,7 +763,7 @@ herr_t H5DSdetach_scale(hid_t did,
if(H5Aclose(aid) < 0)
goto out;
- free(buf);
+ HDfree(buf);
buf = NULL;
@@ -786,7 +789,7 @@ herr_t H5DSdetach_scale(hid_t did,
if((nelmts = H5Sget_simple_extent_npoints(sid)) < 0)
goto out;
- dsbuf = (ds_list_t*) malloc((size_t)nelmts * sizeof(ds_list_t));
+ dsbuf = (ds_list_t*) HDmalloc((size_t)nelmts * sizeof(ds_list_t));
if(dsbuf == NULL)
goto out;
@@ -876,7 +879,7 @@ herr_t H5DSdetach_scale(hid_t did,
if (H5Tclose(ntid) < 0)
goto out;
- free(dsbuf);
+ HDfree(dsbuf);
dsbuf = NULL;
return SUCCEED;
@@ -890,7 +893,7 @@ out:
H5Tclose(tid);
if(dsbuf) {
- free(dsbuf);
+ HDfree(dsbuf);
dsbuf = NULL;
}
if(buf) {
@@ -898,9 +901,9 @@ out:
free the pointers allocated when we read data in */
for(i = 0; i < rank; i++) {
if(buf[i].p)
- free(buf[i].p);
+ HDfree(buf[i].p);
}
- free(buf);
+ HDfree(buf);
buf = NULL;
}
} H5E_END_TRY;
@@ -1033,7 +1036,7 @@ htri_t H5DSis_attached(hid_t did,
goto out;
/* allocate and initialize the VL */
- buf = (hvl_t*)malloc((size_t)rank * sizeof(hvl_t));
+ buf = (hvl_t*)HDmalloc((size_t)rank * sizeof(hvl_t));
if(buf == NULL)
goto out;
@@ -1079,7 +1082,7 @@ htri_t H5DSis_attached(hid_t did,
goto out;
if (H5Aclose(aid) < 0)
goto out;
- free(buf);
+ HDfree(buf);
buf = NULL;
} /* has_dimlist */
@@ -1116,7 +1119,7 @@ htri_t H5DSis_attached(hid_t did,
if((nelmts = H5Sget_simple_extent_npoints(sid)) < 0)
goto out;
- dsbuf = (ds_list_t*) malloc((size_t)nelmts * sizeof(ds_list_t));
+ dsbuf = (ds_list_t*) HDmalloc((size_t)nelmts * sizeof(ds_list_t));
if (dsbuf == NULL)
goto out;
@@ -1170,7 +1173,7 @@ htri_t H5DSis_attached(hid_t did,
if (H5Aclose(aid) < 0)
goto out;
- free(dsbuf);
+ HDfree(dsbuf);
dsbuf = NULL;
} /* has_reflist */
@@ -1189,11 +1192,11 @@ out:
} H5E_END_TRY;
if (buf) {
- free(buf);
+ HDfree(buf);
buf = NULL;
}
if(dsbuf) {
- free(dsbuf);
+ HDfree(dsbuf);
dsbuf = NULL;
}
return FAIL;
@@ -1317,7 +1320,7 @@ herr_t H5DSiterate_scales(hid_t did,
goto out;
/* allocate and initialize the VL */
- buf = (hvl_t*)malloc((size_t)rank * sizeof(hvl_t));
+ buf = (hvl_t*)HDmalloc((size_t)rank * sizeof(hvl_t));
if(buf == NULL)
goto out;
@@ -1380,7 +1383,7 @@ herr_t H5DSiterate_scales(hid_t did,
if (H5Aclose(aid) < 0)
goto out;
- free(buf);
+ HDfree(buf);
buf = NULL;
} /* if has_dimlist */
@@ -1390,7 +1393,7 @@ out:
H5E_BEGIN_TRY {
if(buf) {
H5Dvlen_reclaim(tid,sid,H5P_DEFAULT,buf);
- free(buf);
+ HDfree(buf);
}
H5Sclose(sid);
H5Aclose(aid);
@@ -1441,6 +1444,9 @@ herr_t H5DSset_label(hid_t did, unsigned int idx, const char *label)
if (H5I_DATASET != it)
return FAIL;
+ if (label == NULL)
+ return FAIL;
+
/* get dataset space */
if ((sid = H5Dget_space(did)) < 0)
return FAIL;
@@ -1489,7 +1495,7 @@ herr_t H5DSset_label(hid_t did, unsigned int idx, const char *label)
goto out;
/* allocate and initialize */
- buf = (const char **) malloc((size_t) rank * sizeof(char *));
+ buf = (const char **) HDmalloc((size_t) rank * sizeof(char *));
if (buf == NULL)
goto out;
@@ -1513,7 +1519,7 @@ herr_t H5DSset_label(hid_t did, unsigned int idx, const char *label)
goto out;
if (buf)
{
- free(buf);
+ HDfree(buf);
buf = NULL;
}
}
@@ -1532,7 +1538,7 @@ herr_t H5DSset_label(hid_t did, unsigned int idx, const char *label)
goto out;
/* allocate and initialize */
- buf = (const char **) malloc((size_t) rank * sizeof(char *));
+ buf = (const char **) HDmalloc((size_t) rank * sizeof(char *));
if (buf == NULL)
goto out;
@@ -1543,7 +1549,7 @@ herr_t H5DSset_label(hid_t did, unsigned int idx, const char *label)
/* free the ptr that will be replaced by label */
if (buf[idx])
- free((void *)buf[idx]);
+ HDfree((void *)buf[idx]);
/* store the label information in the required index */
buf[idx] = label;
@@ -1559,7 +1565,7 @@ herr_t H5DSset_label(hid_t did, unsigned int idx, const char *label)
for (i = 0; i < (unsigned int) rank; i++)
{
if (buf[i])
- free((void *)buf[i]);
+ HDfree((void *)buf[i]);
}
/* close */
@@ -1569,7 +1575,7 @@ herr_t H5DSset_label(hid_t did, unsigned int idx, const char *label)
goto out;
if (buf)
{
- free(buf);
+ HDfree(buf);
buf = NULL;
}
}
@@ -1586,9 +1592,9 @@ out:
for (i = 0; i < (unsigned int) rank; i++)
{
if (buf[i])
- free((void *)buf[i]);
+ HDfree((void *)buf[i]);
}
- free(buf);
+ HDfree(buf);
}
H5E_BEGIN_TRY
{
@@ -1692,7 +1698,7 @@ ssize_t H5DSget_label(hid_t did, unsigned int idx, char *label, size_t size)
goto out;
/* allocate and initialize */
- buf = (char **) malloc((size_t) rank * sizeof(char *));
+ buf = (char **) HDmalloc((size_t) rank * sizeof(char *));
if (buf == NULL)
goto out;
@@ -1724,7 +1730,7 @@ ssize_t H5DSget_label(hid_t did, unsigned int idx, char *label, size_t size)
for (i = 0; i < rank; i++)
{
if (buf[i])
- free(buf[i]);
+ HDfree(buf[i]);
}
/* close */
@@ -1734,7 +1740,7 @@ ssize_t H5DSget_label(hid_t did, unsigned int idx, char *label, size_t size)
goto out;
if (buf)
{
- free(buf);
+ HDfree(buf);
buf = NULL;
}
@@ -1748,9 +1754,9 @@ out:
for (i = 0; i < rank; i++)
{
if (buf[i])
- free(buf[i]);
+ HDfree(buf[i]);
}
- free(buf);
+ HDfree(buf);
}
H5E_BEGIN_TRY
{
@@ -1845,7 +1851,7 @@ ssize_t H5DSget_scale_name(hid_t did,
goto out;
/* allocate a temporary buffer */
- buf = (char*)malloc(nbytes * sizeof(char));
+ buf = (char*)HDmalloc(nbytes * sizeof(char));
if (buf == NULL)
goto out;
@@ -1872,9 +1878,9 @@ ssize_t H5DSget_scale_name(hid_t did,
if (H5Sclose(sid) < 0)
goto out;
if (buf)
- free(buf);
+ HDfree(buf);
- return (ssize_t)(nbytes - 1);
+ return (ssize_t) MAX(0,nbytes-1);
/* error zone */
out:
@@ -1884,7 +1890,7 @@ out:
H5Sclose(sid);
} H5E_END_TRY;
if (buf)
- free(buf);
+ HDfree(buf);
return FAIL;
}
@@ -1909,11 +1915,12 @@ out:
htri_t H5DSis_scale(hid_t did)
{
hid_t tid = -1; /* attribute type ID */
- hid_t aid; /* attribute ID */
+ hid_t aid = -1; /* attribute ID */
herr_t has_class; /* has the "CLASS" attribute */
htri_t is_ds; /* boolean return value */
H5I_type_t it; /* ID type */
- char buf[20];
+ char *buf; /* Name of attribute */
+ hsize_t storage_size; /* Size of storage for attribute */
/*-------------------------------------------------------------------------
* parameter checking
@@ -1941,19 +1948,41 @@ htri_t H5DSis_scale(hid_t did)
if((tid = H5Aget_type(aid)) < 0)
goto out;
+ /* check to make sure attribute is a string */
+ if(H5T_STRING != H5Tget_class(tid))
+ goto out;
+
+ /* check to make sure string is null-terminated */
+ if(H5T_STR_NULLTERM != H5Tget_strpad(tid))
+ goto out;
+
+ /* allocate buffer large enough to hold string */
+ if((storage_size = H5Aget_storage_size(aid)) == 0)
+ goto out;
+
+ buf = (char*)HDmalloc( (size_t)storage_size * sizeof(char) + 1);
+ if(buf == NULL)
+ goto out;
+
+ /* Read the attribute */
if(H5Aread(aid, tid, buf) < 0)
- goto out;
+ goto out;
- if(strcmp(buf, DIMENSION_SCALE_CLASS)==0)
+ /* compare strings */
+ if(HDstrncmp(buf, DIMENSION_SCALE_CLASS, MIN(HDstrlen(DIMENSION_SCALE_CLASS),HDstrlen(buf)))==0)
is_ds = 1;
else
is_ds = 0;
+ HDfree(buf);
+
if(H5Tclose(tid) < 0)
goto out;
if (H5Aclose(aid) < 0)
goto out;
+
+
}
return is_ds;
@@ -2052,7 +2081,7 @@ int H5DSget_num_scales(hid_t did,
goto out;
/* allocate and initialize the VL */
- buf = (hvl_t *)malloc((size_t)rank * sizeof(hvl_t));
+ buf = (hvl_t *)HDmalloc((size_t)rank * sizeof(hvl_t));
if(buf == NULL)
goto out;
@@ -2071,7 +2100,7 @@ int H5DSget_num_scales(hid_t did,
goto out;
if(H5Aclose(aid) < 0)
goto out;
- free(buf);
+ HDfree(buf);
buf = NULL;
} /* has_dimlist */
@@ -2086,7 +2115,7 @@ out:
} H5E_END_TRY;
if(buf)
- free(buf);
+ HDfree(buf);
return FAIL;
}
@@ -2109,12 +2138,14 @@ out:
*-------------------------------------------------------------------------
*/
+static
herr_t H5DS_is_reserved(hid_t did)
{
int has_class;
hid_t tid = -1;
hid_t aid = -1;
- char buf[40];
+ char *buf; /* Name of attribute */
+ hsize_t storage_size; /* Size of storage for attribute */
herr_t ret;
/* try to find the attribute "CLASS" on the dataset */
@@ -2131,16 +2162,36 @@ herr_t H5DS_is_reserved(hid_t did)
if((tid = H5Aget_type(aid)) < 0)
goto out;
+ /* check to make sure attribute is a string */
+ if(H5T_STRING != H5Tget_class(tid))
+ goto out;
+
+ /* check to make sure string is null-terminated */
+ if(H5T_STR_NULLTERM != H5Tget_strpad(tid))
+ goto out;
+
+ /* allocate buffer large enough to hold string */
+ if((storage_size = H5Aget_storage_size(aid)) == 0)
+ goto out;
+
+ buf = (char*)HDmalloc( (size_t)storage_size * sizeof(char) + 1);
+ if(buf == NULL)
+ goto out;
+
+ /* Read the attribute */
if(H5Aread(aid, tid, buf) < 0)
- goto out;
+ goto out;
- if(strcmp(buf, IMAGE_CLASS) == 0 ||
- strcmp(buf, PALETTE_CLASS) == 0 ||
- strcmp(buf, TABLE_CLASS) == 0 )
+
+ if(HDstrncmp(buf, IMAGE_CLASS, MIN(HDstrlen(IMAGE_CLASS),HDstrlen(buf))) == 0 ||
+ HDstrncmp(buf, PALETTE_CLASS, MIN(HDstrlen(PALETTE_CLASS),HDstrlen(buf))) == 0 ||
+ HDstrncmp(buf, TABLE_CLASS, MIN(HDstrlen(TABLE_CLASS),HDstrlen(buf))) == 0 )
ret = 1;
else
ret = 0;
+ HDfree(buf);
+
if (H5Tclose(tid) < 0)
goto out;
@@ -2179,6 +2230,7 @@ out:
*-------------------------------------------------------------------------
*/
+static
hid_t H5DS_get_REFLIST_type(void)
{
hid_t ntid_t = -1;
diff --git a/hl/src/H5DSprivate.h b/hl/src/H5DSprivate.h
index 5094208..61c0a1c 100644
--- a/hl/src/H5DSprivate.h
+++ b/hl/src/H5DSprivate.h
@@ -37,8 +37,6 @@ typedef struct ds_list_t {
*-------------------------------------------------------------------------
*/
-H5_HLDLL herr_t H5DS_is_reserved( hid_t did);
-H5_HLDLL hid_t H5DS_get_REFLIST_type(void);
#endif
diff --git a/hl/src/H5HLprivate2.h b/hl/src/H5HLprivate2.h
index e2597db..1b67c70 100644
--- a/hl/src/H5HLprivate2.h
+++ b/hl/src/H5HLprivate2.h
@@ -22,44 +22,8 @@
/* Public High-Level header */
#include "hdf5_hl.h"
-/* The following is copied from src/H5private.h */
-
-/*
- * Status return values for the `herr_t' type.
- * Since some unix/c routines use 0 and -1 (or more precisely, non-negative
- * vs. negative) as their return code, and some assumption had been made in
- * the code about that, it is important to keep these constants the same
- * values. When checking the success or failure of an integer-valued
- * function, remember to compare against zero and not one of these two
- * values.
- */
-#define SUCCEED 0
-#define FAIL (-1)
-#define UFAIL (unsigned)(-1)
-
-/* minimum of two, three, or four values */
-#undef MIN
-#define MIN(a,b) (((a)<(b)) ? (a) : (b))
-#define MIN2(a,b) MIN(a,b)
-#define MIN3(a,b,c) MIN(a,MIN(b,c))
-#define MIN4(a,b,c,d) MIN(MIN(a,b),MIN(c,d))
-
-/* maximum of two, three, or four values */
-#undef MAX
-#define MAX(a,b) (((a)>(b)) ? (a) : (b))
-#define MAX2(a,b) MAX(a,b)
-#define MAX3(a,b,c) MAX(a,MAX(b,c))
-#define MAX4(a,b,c,d) MAX(MAX(a,b),MAX(c,d))
-
-/*
- * HDF Boolean type.
- */
-#ifndef FALSE
-# define FALSE 0
-#endif
-#ifndef TRUE
-# define TRUE 1
-#endif
+/* HDF5 private functions */
+#include "H5private.h"
#endif /* _H5HLprivate2_H */
diff --git a/hl/src/H5IM.c b/hl/src/H5IM.c
index 2621ca4..33b2dd4 100644
--- a/hl/src/H5IM.c
+++ b/hl/src/H5IM.c
@@ -46,6 +46,10 @@ herr_t H5IMmake_image_8bit( hid_t loc_id,
{
hsize_t dims[IMAGE8_RANK];
+ /* check the arguments */
+ if (dset_name == NULL)
+ return -1;
+
/* Initialize the image dimensions */
dims[0] = height;
dims[1] = width;
@@ -103,9 +107,16 @@ herr_t H5IMmake_image_24bit( hid_t loc_id,
{
hsize_t dims[IMAGE24_RANK];
+ /* check the arguments */
+ if (interlace == NULL)
+ return -1;
+ if (dset_name == NULL)
+ return -1;
+
+
/* Initialize the image dimensions */
- if ( strcmp( interlace, "INTERLACE_PIXEL" ) == 0 )
+ if ( HDstrncmp( interlace, "INTERLACE_PIXEL",15 ) == 0 )
{
/* Number of color planes is defined as the third dimension */
dims[0] = height;
@@ -113,7 +124,7 @@ herr_t H5IMmake_image_24bit( hid_t loc_id,
dims[2] = IMAGE24_RANK;
}
else
- if ( strcmp( interlace, "INTERLACE_PLANE" ) == 0 )
+ if ( HDstrncmp( interlace, "INTERLACE_PLANE",15 ) == 0 )
{
/* Number of color planes is defined as the first dimension */
dims[0] = IMAGE24_RANK;
@@ -172,6 +183,10 @@ static herr_t find_palette(hid_t loc_id,
{
int ret = H5_ITER_CONT;
+ /* check the arguments */
+ if (name == NULL)
+ return -1;
+
/* Shut compiler up */
loc_id = loc_id; ainfo = ainfo; op_data = op_data;
@@ -179,7 +194,7 @@ static herr_t find_palette(hid_t loc_id,
* cause the iterator to immediately return that positive value,
* indicating short-circuit success
*/
- if(strcmp(name, "PALETTE") == 0)
+ if(HDstrncmp(name, "PALETTE",7) == 0)
ret = H5_ITER_STOP;
return ret;
@@ -250,6 +265,12 @@ herr_t H5IMget_image_info( hid_t loc_id,
int has_pal;
int has_attr;
+ /* check the arguments */
+ if (dset_name == NULL)
+ return -1;
+ if (interlace == NULL)
+ return -1;
+
/*assume initially we have no palettes attached*/
*npals = 0;
@@ -294,7 +315,7 @@ herr_t H5IMget_image_info( hid_t loc_id,
/* This is a 24 bit image */
{
- if ( strcmp( interlace, "INTERLACE_PIXEL" ) == 0 )
+ if ( HDstrncmp( interlace, "INTERLACE_PIXEL", 15 ) == 0 )
{
/* Number of color planes is defined as the third dimension */
*height = dims[0];
@@ -302,14 +323,14 @@ herr_t H5IMget_image_info( hid_t loc_id,
*planes = dims[2];
}
else
- if ( strcmp( interlace, "INTERLACE_PLANE" ) == 0 )
+ if ( HDstrncmp( interlace, "INTERLACE_PLANE", 15 ) == 0 )
{
/* Number of color planes is defined as the first dimension */
*planes = dims[0];
*height = dims[1];
*width = dims[2];
}
- else return -1;
+ else return -1;
}
else
/* This is a 8 bit image */
@@ -410,6 +431,10 @@ herr_t H5IMread_image( hid_t loc_id,
{
hid_t did;
+ /* check the arguments */
+ if (dset_name == NULL)
+ return -1;
+
/* Open the dataset. */
if((did = H5Dopen2(loc_id, dset_name, H5P_DEFAULT)) < 0)
return -1;
@@ -460,6 +485,10 @@ herr_t H5IMmake_palette( hid_t loc_id,
int has_pal;
+ /* check the arguments */
+ if (pal_name == NULL)
+ return -1;
+
/* Check if the dataset already exists */
has_pal = H5LTfind_dataset( loc_id, pal_name );
@@ -523,6 +552,13 @@ herr_t H5IMlink_palette( hid_t loc_id,
hsize_t dim_ref;
int ok_pal;
+
+ /* check the arguments */
+ if (image_name == NULL)
+ return -1;
+ if (pal_name == NULL)
+ return -1;
+
/* The image dataset may or may not have the attribute "PALETTE"
* First we try to open to see if it is already there; if not, it is created.
* If it exists, the array of references is extended to hold the reference
@@ -554,7 +590,7 @@ herr_t H5IMlink_palette( hid_t loc_id,
goto out;
/* Create a reference. The reference is created on the local id. */
- if(H5Rcreate(&ref, loc_id, pal_name, H5R_OBJECT, -1) < 0)
+ if(H5Rcreate(&ref, loc_id, pal_name, H5R_OBJECT, (hid_t)-1) < 0)
goto out;
/* Write the attribute with the reference */
@@ -594,7 +630,7 @@ herr_t H5IMlink_palette( hid_t loc_id,
dim_ref = n_refs + 1;
- refbuf = (hobj_ref_t*)malloc( sizeof(hobj_ref_t) * (int)dim_ref );
+ refbuf = (hobj_ref_t*)HDmalloc( sizeof(hobj_ref_t) * (int)dim_ref );
if ( H5Aread( aid, atid, refbuf ) < 0)
goto out;
@@ -604,7 +640,7 @@ herr_t H5IMlink_palette( hid_t loc_id,
goto out;
/* Create a new reference for this palette. */
- if ( H5Rcreate( &ref, loc_id, pal_name, H5R_OBJECT, -1 ) < 0)
+ if ( H5Rcreate( &ref, loc_id, pal_name, H5R_OBJECT, (hid_t)-1 ) < 0)
goto out;
refbuf[n_refs] = ref;
@@ -635,7 +671,7 @@ herr_t H5IMlink_palette( hid_t loc_id,
if(H5Aclose(aid) < 0)
goto out;
- free( refbuf );
+ HDfree( refbuf );
} /* ok_pal == 1 */
@@ -685,6 +721,12 @@ herr_t H5IMunlink_palette( hid_t loc_id,
H5T_class_t aclass;
int ok_pal, has_pal;
+ /* check the arguments */
+ if(image_name == NULL)
+ return -1;
+ if(pal_name == NULL)
+ return -1;
+
/* Try to find the palette dataset */
has_pal = H5LTfind_dataset( loc_id, pal_name );
@@ -780,6 +822,10 @@ herr_t H5IMget_npalettes( hid_t loc_id,
H5T_class_t aclass;
int has_pal;
+ /* check the arguments */
+ if(image_name == NULL)
+ return -1;
+
/*assume initially we have no palettes attached*/
*npals = 0;
@@ -875,6 +921,10 @@ herr_t H5IMget_palette_info( hid_t loc_id,
hid_t pal_space_id;
hsize_t pal_maxdims[2];
+ /* check the arguments */
+ if (image_name == NULL)
+ return -1;
+
/* Open the dataset. */
if((did = H5Dopen2(loc_id, image_name, H5P_DEFAULT)) < 0)
return -1;
@@ -901,7 +951,7 @@ herr_t H5IMget_palette_info( hid_t loc_id,
dim_ref = n_refs;
- refbuf = (hobj_ref_t*)malloc( sizeof(hobj_ref_t) * (int)dim_ref );
+ refbuf = (hobj_ref_t*)HDmalloc( sizeof(hobj_ref_t) * (int)dim_ref );
if ( H5Aread( aid, atid, refbuf ) < 0)
goto out;
@@ -930,7 +980,7 @@ herr_t H5IMget_palette_info( hid_t loc_id,
goto out;
if ( H5Aclose( aid ) < 0)
goto out;
- free( refbuf );
+ HDfree( refbuf );
}
@@ -986,6 +1036,13 @@ herr_t H5IMget_palette( hid_t loc_id,
hobj_ref_t *refbuf; /* buffer to read references */
hid_t pal_id;
+ /* check the arguments */
+ if (image_name == NULL)
+ return -1;
+ if (pal_data == NULL)
+ return -1;
+
+
/* Open the dataset. */
if((did = H5Dopen2(loc_id, image_name, H5P_DEFAULT)) < 0)
return -1;
@@ -1012,7 +1069,7 @@ herr_t H5IMget_palette( hid_t loc_id,
dim_ref = n_refs;
- refbuf = (hobj_ref_t*)malloc( sizeof(hobj_ref_t) * (int)dim_ref );
+ refbuf = (hobj_ref_t*)HDmalloc( sizeof(hobj_ref_t) * (int)dim_ref );
if ( H5Aread( aid, atid, refbuf ) < 0)
goto out;
@@ -1034,7 +1091,7 @@ herr_t H5IMget_palette( hid_t loc_id,
goto out;
if ( H5Aclose( aid ) < 0)
goto out;
- free( refbuf );
+ HDfree( refbuf );
}
/* Close the image dataset. */
@@ -1078,10 +1135,15 @@ herr_t H5IMis_image( hid_t loc_id,
hid_t did;
int has_class;
hid_t atid;
- hid_t aid;
- char attr_data[20];
+ hid_t aid = -1;
+ char* attr_data; /* Name of attribute */
+ hsize_t storage_size; /* Size of storage for attribute */
herr_t ret;
+ /* check the arguments */
+ if (dset_name == NULL)
+ return -1;
+
/* Assume initially fail condition */
ret = -1;
@@ -1106,17 +1168,32 @@ herr_t H5IMis_image( hid_t loc_id,
if((atid = H5Aget_type(aid)) < 0)
goto out;
- if(H5Tget_class(atid) < 0)
- goto out;
+ /* check to make sure attribute is a string */
+ if(H5T_STRING != H5Tget_class(atid))
+ goto out;
+
+ /* check to make sure string is null-terminated */
+ if(H5T_STR_NULLTERM != H5Tget_strpad(atid))
+ goto out;
+
+ /* allocate buffer large enough to hold string */
+ if((storage_size = H5Aget_storage_size(aid)) == 0)
+ goto out;
+
+ attr_data = (char*)HDmalloc( (size_t)storage_size * sizeof(char) + 1);
+ if(attr_data == NULL)
+ goto out;
if(H5Aread(aid, atid, attr_data) < 0)
goto out;
- if(strcmp(attr_data, IMAGE_CLASS) == 0)
+ if(HDstrncmp(attr_data, IMAGE_CLASS, MIN(HDstrlen(IMAGE_CLASS),HDstrlen(attr_data))) == 0)
ret = 1;
else
ret = 0;
+ HDfree(attr_data);
+
if ( H5Tclose( atid ) < 0)
goto out;
@@ -1163,10 +1240,15 @@ herr_t H5IMis_palette( hid_t loc_id,
hid_t did;
int has_class;
hid_t atid;
- hid_t aid;
- char attr_data[20];
+ hid_t aid = -1;
+ char* attr_data; /* Name of attribute */
+ hsize_t storage_size; /* Size of storage for attribute */
herr_t ret;
+ /* check the arguments */
+ if (dset_name == NULL)
+ return -1;
+
/* Assume initially fail condition */
ret = -1;
@@ -1191,17 +1273,32 @@ herr_t H5IMis_palette( hid_t loc_id,
if((atid = H5Aget_type(aid)) < 0)
goto out;
- if(H5Tget_class(atid) < 0)
- goto out;
+ /* check to make sure attribute is a string */
+ if(H5T_STRING != H5Tget_class(atid))
+ goto out;
+
+ /* check to make sure string is null-terminated */
+ if(H5T_STR_NULLTERM != H5Tget_strpad(atid))
+ goto out;
+
+ /* allocate buffer large enough to hold string */
+ if((storage_size = H5Aget_storage_size(aid)) == 0)
+ goto out;
+
+ attr_data = (char*)HDmalloc( (size_t)storage_size * sizeof(char) + 1);
+ if(attr_data == NULL)
+ goto out;
if(H5Aread(aid, atid, attr_data) < 0)
goto out;
- if(strcmp(attr_data, PALETTE_CLASS) == 0)
+ if(HDstrncmp(attr_data, PALETTE_CLASS, MIN(HDstrlen(PALETTE_CLASS),HDstrlen(attr_data))) == 0)
ret = 1;
else
ret = 0;
+ HDfree(attr_data);
+
if ( H5Tclose( atid ) < 0)
goto out;
diff --git a/hl/src/H5LT.c b/hl/src/H5LT.c
index 6da097c..071b8a5 100644
--- a/hl/src/H5LT.c
+++ b/hl/src/H5LT.c
@@ -524,6 +524,10 @@ H5LT_make_dataset_numerical( hid_t loc_id,
{
hid_t did = -1, sid = -1;
+ /* check the arguments */
+ if (dset_name == NULL)
+ return -1;
+
/* Create the data space for the dataset. */
if((sid = H5Screate_simple(rank, dims, NULL)) < 0)
return -1;
@@ -799,6 +803,10 @@ herr_t H5LTmake_dataset_string(hid_t loc_id,
hid_t tid = -1;
size_t size;
+ /* check the arguments */
+ if (dset_name == NULL)
+ return -1;
+
/* create a string data type */
if((tid = H5Tcopy(H5T_C_S1)) < 0 )
goto out;
@@ -977,6 +985,10 @@ H5LT_read_dataset_numerical(hid_t loc_id, const char *dset_name, hid_t tid, void
{
hid_t did;
+ /* check the arguments */
+ if (dset_name == NULL)
+ return -1;
+
/* Open the dataset. */
if((did = H5Dopen2(loc_id, dset_name, H5P_DEFAULT)) < 0)
return -1;
@@ -1168,6 +1180,10 @@ herr_t H5LTread_dataset_string( hid_t loc_id,
hid_t did = -1;
hid_t tid = -1;
+ /* check the arguments */
+ if (dset_name == NULL)
+ return -1;
+
/* Open the dataset. */
if((did = H5Dopen2(loc_id, dset_name, H5P_DEFAULT)) < 0)
return -1;
@@ -1217,6 +1233,10 @@ herr_t H5LTget_dataset_ndims( hid_t loc_id,
hid_t did = -1;
hid_t sid = -1;
+ /* check the arguments */
+ if (dset_name == NULL)
+ return -1;
+
/* Open the dataset. */
if((did = H5Dopen2(loc_id, dset_name, H5P_DEFAULT)) < 0)
return -1;
@@ -1273,6 +1293,10 @@ herr_t H5LTget_dataset_info( hid_t loc_id,
hid_t tid = -1;
hid_t sid = -1;
+ /* check the arguments */
+ if (dset_name == NULL)
+ return -1;
+
/* open the dataset. */
if((did = H5Dopen2(loc_id, dset_name, H5P_DEFAULT)) < 0)
return -1;
@@ -1346,6 +1370,10 @@ find_dataset(hid_t loc_id, const char *name, const H5L_info_t *linfo, void *op_d
*/
int ret = 0;
+ /* check the arguments */
+ if (name == NULL)
+ return ret;
+
/* Shut the compiler up */
loc_id = loc_id;
linfo = linfo;
@@ -1354,7 +1382,7 @@ find_dataset(hid_t loc_id, const char *name, const H5L_info_t *linfo, void *op_d
* cause the iterator to immediately return that positive value,
* indicating short-circuit success
*/
- if(HDstrcmp(name, (char *)op_data) == 0)
+ if(HDstrncmp(name, (char *)op_data, HDstrlen((char *)op_data)) == 0)
ret = 1;
return ret;
@@ -1429,6 +1457,14 @@ herr_t H5LTset_attribute_string( hid_t loc_id,
int has_attr;
size_t attr_size;
+ /* check the arguments */
+ if (obj_name == NULL)
+ return -1;
+ if (attr_name == NULL)
+ return -1;
+ if (attr_data == NULL)
+ return -1;
+
/* Open the object */
if ((obj_id = H5Oopen(loc_id, obj_name, H5P_DEFAULT)) < 0)
return -1;
@@ -1518,6 +1554,12 @@ herr_t H5LT_set_attribute_numerical( hid_t loc_id,
hsize_t dim_size=size;
int has_attr;
+ /* check the arguments */
+ if (obj_name == NULL)
+ return -1;
+ if (attr_name == NULL)
+ return -1;
+
/* Open the object */
if ((obj_id = H5Oopen(loc_id, obj_name, H5P_DEFAULT)) < 0)
return -1;
@@ -1929,6 +1971,10 @@ find_attr(hid_t loc_id, const char *name, const H5A_info_t *ainfo,
{
int ret = H5_ITER_CONT;
+ /* check the arguments */
+ if (name == NULL)
+ return H5_ITER_CONT;
+
/* Shut compiler up */
loc_id = loc_id; ainfo = ainfo;
@@ -1936,7 +1982,7 @@ find_attr(hid_t loc_id, const char *name, const H5A_info_t *ainfo,
* cause the iterator to immediately return that positive value,
* indicating short-circuit success
*/
- if(HDstrcmp(name, (char *)op_data) == 0)
+ if(HDstrncmp(name, (char *)op_data, HDstrlen((char *)op_data)) == 0)
ret = H5_ITER_STOP;
return ret;
@@ -2021,6 +2067,12 @@ herr_t H5LTget_attribute_ndims( hid_t loc_id,
hid_t sid;
hid_t obj_id;
+ /* check the arguments */
+ if (obj_name == NULL)
+ return -1;
+ if (attr_name == NULL)
+ return -1;
+
/* Open the object */
if((obj_id = H5Oopen(loc_id, obj_name, H5P_DEFAULT)) < 0)
return -1;
@@ -2088,6 +2140,12 @@ herr_t H5LTget_attribute_info( hid_t loc_id,
hid_t sid;
hid_t obj_id;
+ /* check the arguments */
+ if (obj_name == NULL)
+ return -1;
+ if (attr_name == NULL)
+ return -1;
+
/* Open the object */
if((obj_id = H5Oopen(loc_id, obj_name, H5P_DEFAULT)) < 0)
return -1;
@@ -2163,6 +2221,10 @@ hid_t H5LTtext_to_dtype(const char *text, H5LT_lang_t lang_type)
{
hid_t type_id;
+ /* check the arguments */
+ if (text == NULL)
+ return -1;
+
if(lang_type <= H5LT_LANG_ERR || lang_type >= H5LT_NO_LANG)
goto out;
@@ -2206,6 +2268,8 @@ out:
static char*
realloc_and_append(hbool_t _no_user_buf, size_t *len, char *buf, char *str_to_add)
{
+ size_t size_str_to_add, size_str;
+
if(_no_user_buf) {
/* If the buffer isn't big enough, reallocate it. Otherwise, go to do strcat. */
if(str_to_add && ((ssize_t)(*len - (HDstrlen(buf) + HDstrlen(str_to_add) + 1)) < LIMIT)) {
@@ -2220,8 +2284,25 @@ realloc_and_append(hbool_t _no_user_buf, size_t *len, char *buf, char *str_to_ad
if(!buf)
goto out;
- if(str_to_add)
- HDstrcat(buf, str_to_add);
+ if(str_to_add) {
+ /* find the size of the buffer to add */
+ size_str_to_add = HDstrlen(str_to_add);
+ /* find the size of the current buffer */
+ size_str = HDstrlen(buf);
+
+ /* Check to make sure the appended string does not
+ * extend past the allocated buffer; if it does then truncate the string
+ */
+ if(size_str < *len - 1) {
+ if( size_str + size_str_to_add < *len - 1) {
+ HDstrncat(buf, str_to_add, size_str_to_add);
+ } else {
+ HDstrncat(buf, str_to_add, (*len - 1) - size_str);
+ }
+ } else {
+ buf[*len-1] = '\0'; /* buffer is full, null terminate */
+ }
+ }
return buf;
@@ -3020,6 +3101,12 @@ herr_t H5LTget_attribute_string( hid_t loc_id,
/* identifiers */
hid_t obj_id;
+ /* check the arguments */
+ if (obj_name == NULL)
+ return -1;
+ if (attr_name == NULL)
+ return -1;
+
/* Open the object */
if ((obj_id = H5Oopen( loc_id, obj_name, H5P_DEFAULT)) < 0)
return -1;
@@ -3440,6 +3527,12 @@ static herr_t H5LT_get_attribute_mem(hid_t loc_id,
hid_t obj_id = -1;
hid_t attr_id = -1;
+ /* check the arguments */
+ if (obj_name == NULL)
+ return -1;
+ if (attr_name == NULL)
+ return -1;
+
/* Open the object */
if((obj_id = H5Oopen(loc_id, obj_name, H5P_DEFAULT)) < 0)
goto out;
@@ -3619,6 +3712,12 @@ H5LTpath_valid(hid_t loc_id, const char *path, hbool_t check_object_valid)
/* Initialize */
ret_value = FALSE;
+ /* check the arguments */
+ if (path == NULL) {
+ ret_value = FAIL;
+ goto done;
+ }
+
/* Find the type of loc_id */
if((obj_type = H5Iget_type(loc_id)) == H5I_BADID) {
ret_value = FAIL;
diff --git a/hl/src/H5LTanalyze.c b/hl/src/H5LTanalyze.c
index 31ec84f..d9ffb36 100644
--- a/hl/src/H5LTanalyze.c
+++ b/hl/src/H5LTanalyze.c
@@ -1,31 +1,13 @@
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * Copyright by The HDF Group. *
- * Copyright by the Board of Trustees of the University of Illinois. *
- * All rights reserved. *
- * *
- * This file is part of HDF5. The full HDF5 copyright notice, including *
- * terms governing use, modification, and redistribution, is contained in *
- * the files COPYING and Copyright.html. COPYING can be found at the root *
- * of the source code distribution tree; Copyright.html can be found at the *
- * root level of an installed copy of the electronic HDF5 document set and *
- * is linked from the top-level documents page. It can also be found at *
- * http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have *
- * access to either file, you may request a copy from help at hdfgroup.org. *
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+#line 2 "H5LTanalyze.c"
-/*
- * This file was generated by Lex with the command "lex -PH5LTyy
- * -oH5LTanalyze.c H5LTanalyze.l". Do NOT modify it by hand, but in
- * line 52, "#ifdef H5_HAVE_UNISTD_H" should be added if the platform
- * doesn't have the unistd.h header file. Also hdf5.h should be added
- * before adding H5_HAVE_UNISTD_H.
- */
+#line 4 "H5LTanalyze.c"
+
+#define YY_INT_ALIGNED short int
+
+/* A lexical scanner generated by flex */
#define yy_create_buffer H5LTyy_create_buffer
#define yy_delete_buffer H5LTyy_delete_buffer
-#define yy_scan_buffer H5LTyy_scan_buffer
-#define yy_scan_string H5LTyy_scan_string
-#define yy_scan_bytes H5LTyy_scan_bytes
#define yy_flex_debug H5LTyy_flex_debug
#define yy_init_buffer H5LTyy_init_buffer
#define yy_flush_buffer H5LTyy_flush_buffer
@@ -34,78 +16,118 @@
#define yyin H5LTyyin
#define yyleng H5LTyyleng
#define yylex H5LTyylex
+#define yylineno H5LTyylineno
#define yyout H5LTyyout
#define yyrestart H5LTyyrestart
#define yytext H5LTyytext
#define yywrap H5LTyywrap
-
-#line 43 "H5LTanalyze.c"
-/* A lexical scanner generated by flex*/
-
-/* Scanner skeleton version:
- * $Header: /home/daffy/u0/vern/flex/RCS/flex.skl,v 2.91 96/09/10 16:58:48 vern Exp $
- */
+#define yyalloc H5LTyyalloc
+#define yyrealloc H5LTyyrealloc
+#define yyfree H5LTyyfree
#define FLEX_SCANNER
#define YY_FLEX_MAJOR_VERSION 2
#define YY_FLEX_MINOR_VERSION 5
+#define YY_FLEX_SUBMINOR_VERSION 37
+#if YY_FLEX_SUBMINOR_VERSION > 0
+#define FLEX_BETA
+#endif
+/* First, we deal with platform-specific or compiler-specific issues. */
+
+/* begin standard C headers. */
#include <stdio.h>
-#include <hdf5.h>
-#ifdef H5_HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-/* cfront 1.2 defines "c_plusplus" instead of "__cplusplus" */
-#ifdef c_plusplus
-#ifndef __cplusplus
-#define __cplusplus
-#endif
+#include <string.h>
+#include <errno.h>
+#include <stdlib.h>
+
+/* end standard C headers. */
+
+/* flex integer type definitions */
+
+#ifndef FLEXINT_H
+#define FLEXINT_H
+
+/* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */
+
+#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+
+/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
+ * if you want the limit (max/min) macros for int types.
+ */
+#ifndef __STDC_LIMIT_MACROS
+#define __STDC_LIMIT_MACROS 1
#endif
+#include <inttypes.h>
+typedef int8_t flex_int8_t;
+typedef uint8_t flex_uint8_t;
+typedef int16_t flex_int16_t;
+typedef uint16_t flex_uint16_t;
+typedef int32_t flex_int32_t;
+typedef uint32_t flex_uint32_t;
+#else
+typedef signed char flex_int8_t;
+typedef short int flex_int16_t;
+typedef int flex_int32_t;
+typedef unsigned char flex_uint8_t;
+typedef unsigned short int flex_uint16_t;
+typedef unsigned int flex_uint32_t;
-#ifdef __cplusplus
+/* Limits of integral types. */
+#ifndef INT8_MIN
+#define INT8_MIN (-128)
+#endif
+#ifndef INT16_MIN
+#define INT16_MIN (-32767-1)
+#endif
+#ifndef INT32_MIN
+#define INT32_MIN (-2147483647-1)
+#endif
+#ifndef INT8_MAX
+#define INT8_MAX (127)
+#endif
+#ifndef INT16_MAX
+#define INT16_MAX (32767)
+#endif
+#ifndef INT32_MAX
+#define INT32_MAX (2147483647)
+#endif
+#ifndef UINT8_MAX
+#define UINT8_MAX (255U)
+#endif
+#ifndef UINT16_MAX
+#define UINT16_MAX (65535U)
+#endif
+#ifndef UINT32_MAX
+#define UINT32_MAX (4294967295U)
+#endif
-#include <stdlib.h>
+#endif /* ! C99 */
-/* Use prototypes in function declarations. */
-#define YY_USE_PROTOS
+#endif /* ! FLEXINT_H */
+
+#ifdef __cplusplus
/* The "const" storage-class-modifier is valid. */
#define YY_USE_CONST
#else /* ! __cplusplus */
-#if __STDC__
+/* C99 requires __STDC__ to be defined as 1. */
+#if defined (__STDC__)
-#define YY_USE_PROTOS
#define YY_USE_CONST
-#endif /* __STDC__ */
+#endif /* defined (__STDC__) */
#endif /* ! __cplusplus */
-#ifdef __TURBOC__
- #pragma warn -rch
- #pragma warn -use
-#include <io.h>
-#include <stdlib.h>
-#define YY_USE_CONST
-#define YY_USE_PROTOS
-#endif
-
#ifdef YY_USE_CONST
#define yyconst const
#else
#define yyconst
#endif
-
-#ifdef YY_USE_PROTOS
-#define YY_PROTO(proto) proto
-#else
-#define YY_PROTO(proto) ()
-#endif
-
/* Returned upon end-of-file. */
#define YY_NULL 0
@@ -120,80 +142,70 @@
* but we do it the disgusting crufty way forced on us by the ()-less
* definition of BEGIN.
*/
-#define BEGIN yy_start = 1 + 2 *
+#define BEGIN (yy_start) = 1 + 2 *
/* Translate the current start state into a value that can be later handed
* to BEGIN to return to the state. The YYSTATE alias is for lex
* compatibility.
*/
-#define YY_START ((yy_start - 1) / 2)
+#define YY_START (((yy_start) - 1) / 2)
#define YYSTATE YY_START
/* Action number for EOF rule of a given start state. */
#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
/* Special action meaning "start processing a new file". */
-#define YY_NEW_FILE yyrestart( yyin )
+#define YY_NEW_FILE H5LTyyrestart(H5LTyyin )
#define YY_END_OF_BUFFER_CHAR 0
/* Size of default input buffer. */
+#ifndef YY_BUF_SIZE
#define YY_BUF_SIZE 16384
+#endif
+
+/* The state buf must be large enough to hold one state per character in the main buffer.
+ */
+#define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type))
+#ifndef YY_TYPEDEF_YY_BUFFER_STATE
+#define YY_TYPEDEF_YY_BUFFER_STATE
typedef struct yy_buffer_state *YY_BUFFER_STATE;
+#endif
-extern int yyleng;
-extern FILE *yyin, *yyout;
+#ifndef YY_TYPEDEF_YY_SIZE_T
+#define YY_TYPEDEF_YY_SIZE_T
+typedef size_t yy_size_t;
+#endif
+
+extern yy_size_t H5LTyyleng;
+
+extern FILE *H5LTyyin, *H5LTyyout;
#define EOB_ACT_CONTINUE_SCAN 0
#define EOB_ACT_END_OF_FILE 1
#define EOB_ACT_LAST_MATCH 2
-/* The funky do-while in the following #define is used to turn the definition
- * int a single C statement (which needs a semi-colon terminator). This
- * avoids problems with code like:
- *
- * if ( condition_holds )
- * yyless( 5 );
- * else
- * do_something_else();
- *
- * Prior to using the do-while the compiler would get upset at the
- * "else" because it interpreted the "if" statement as being all
- * done when it reached the ';' after the yyless() call.
- */
-
-/* Return all but the first 'n' matched characters back to the input stream. */
-
+ #define YY_LESS_LINENO(n)
+
+/* Return all but the first "n" matched characters back to the input stream. */
#define yyless(n) \
do \
{ \
- /* Undo effects of setting up yytext. */ \
- *yy_cp = yy_hold_char; \
+ /* Undo effects of setting up H5LTyytext. */ \
+ int yyless_macro_arg = (n); \
+ YY_LESS_LINENO(yyless_macro_arg);\
+ *yy_cp = (yy_hold_char); \
YY_RESTORE_YY_MORE_OFFSET \
- yy_c_buf_p = yy_cp = yy_bp + n - YY_MORE_ADJ; \
- YY_DO_BEFORE_ACTION; /* set up yytext again */ \
+ (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \
+ YY_DO_BEFORE_ACTION; /* set up H5LTyytext again */ \
} \
while ( 0 )
-#define unput(c) yyunput( c, yytext_ptr )
-
-/* Some routines like yy_flex_realloc() are emitted as static but are
- not called by all lexers. This generates warnings in some compilers,
- notably GCC. Arrange to suppress these. */
-#ifdef __GNUC__
-#define YY_MAY_BE_UNUSED __attribute__((unused))
-#else
-#define YY_MAY_BE_UNUSED
-#endif
-
-/* The following is because we cannot portably get our hands on size_t
- * (without autoconf's help, which isn't available because we want
- * flex-generated scanners to compile on their own).
- */
-typedef unsigned int yy_size_t;
-
+#define unput(c) yyunput( c, (yytext_ptr) )
+#ifndef YY_STRUCT_YY_BUFFER_STATE
+#define YY_STRUCT_YY_BUFFER_STATE
struct yy_buffer_state
{
FILE *yy_input_file;
@@ -209,7 +221,7 @@ struct yy_buffer_state
/* Number of characters read into yy_ch_buf, not including EOB
* characters.
*/
- int yy_n_chars;
+ yy_size_t yy_n_chars;
/* Whether we "own" the buffer - i.e., we know we created it,
* and can realloc() it to grow it, and should free() it to
@@ -230,12 +242,16 @@ struct yy_buffer_state
*/
int yy_at_bol;
+ int yy_bs_lineno; /**< The line count. */
+ int yy_bs_column; /**< The column count. */
+
/* Whether to try to fill the input buffer when we reach the
* end of it.
*/
int yy_fill_buffer;
int yy_buffer_status;
+
#define YY_BUFFER_NEW 0
#define YY_BUFFER_NORMAL 1
/* When an EOF's been seen but there's still some text to process
@@ -245,101 +261,135 @@ struct yy_buffer_state
* possible backing-up.
*
* When we actually see the EOF, we change the status to "new"
- * (via yyrestart()), so that the user can continue scanning by
- * just pointing yyin at a new input file.
+ * (via H5LTyyrestart()), so that the user can continue scanning by
+ * just pointing H5LTyyin at a new input file.
*/
#define YY_BUFFER_EOF_PENDING 2
+
};
+#endif /* !YY_STRUCT_YY_BUFFER_STATE */
-static YY_BUFFER_STATE yy_current_buffer = 0;
+/* Stack of input buffers. */
+static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */
+static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */
+static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */
/* We provide macros for accessing buffer states in case in the
* future we want to put the buffer states in a more general
* "scanner state".
+ *
+ * Returns the top of the stack, or NULL.
*/
-#define YY_CURRENT_BUFFER yy_current_buffer
+#define YY_CURRENT_BUFFER ( (yy_buffer_stack) \
+ ? (yy_buffer_stack)[(yy_buffer_stack_top)] \
+ : NULL)
+/* Same as previous macro, but useful when we know that the buffer stack is not
+ * NULL or when we need an lvalue. For internal use only.
+ */
+#define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)]
-/* yy_hold_char holds the character lost when yytext is formed. */
+/* yy_hold_char holds the character lost when H5LTyytext is formed. */
static char yy_hold_char;
-
-static int yy_n_chars; /* number of characters read into yy_ch_buf */
-
-
-int yyleng;
+static yy_size_t yy_n_chars; /* number of characters read into yy_ch_buf */
+yy_size_t H5LTyyleng;
/* Points to current character in buffer. */
static char *yy_c_buf_p = (char *) 0;
-static int yy_init = 1; /* whether we need to initialize */
+static int yy_init = 0; /* whether we need to initialize */
static int yy_start = 0; /* start state number */
-/* Flag which is used to allow yywrap()'s to do buffer switches
- * instead of setting up a fresh yyin. A bit of a hack ...
+/* Flag which is used to allow H5LTyywrap()'s to do buffer switches
+ * instead of setting up a fresh H5LTyyin. A bit of a hack ...
*/
static int yy_did_buffer_switch_on_eof;
-void yyrestart YY_PROTO(( FILE *input_file ));
+void H5LTyyrestart (FILE *input_file );
+void H5LTyy_switch_to_buffer (YY_BUFFER_STATE new_buffer );
+YY_BUFFER_STATE H5LTyy_create_buffer (FILE *file,int size );
+void H5LTyy_delete_buffer (YY_BUFFER_STATE b );
+void H5LTyy_flush_buffer (YY_BUFFER_STATE b );
+void H5LTyypush_buffer_state (YY_BUFFER_STATE new_buffer );
+void H5LTyypop_buffer_state (void );
+
+static void H5LTyyensure_buffer_stack (void );
+static void H5LTyy_load_buffer_state (void );
+static void H5LTyy_init_buffer (YY_BUFFER_STATE b,FILE *file );
-void yy_switch_to_buffer YY_PROTO(( YY_BUFFER_STATE new_buffer ));
-void yy_load_buffer_state YY_PROTO(( void ));
-YY_BUFFER_STATE yy_create_buffer YY_PROTO(( FILE *file, int size ));
-void yy_delete_buffer YY_PROTO(( YY_BUFFER_STATE b ));
-void yy_init_buffer YY_PROTO(( YY_BUFFER_STATE b, FILE *file ));
-void yy_flush_buffer YY_PROTO(( YY_BUFFER_STATE b ));
-#define YY_FLUSH_BUFFER yy_flush_buffer( yy_current_buffer )
+#define YY_FLUSH_BUFFER H5LTyy_flush_buffer(YY_CURRENT_BUFFER )
-YY_BUFFER_STATE yy_scan_buffer YY_PROTO(( char *base, yy_size_t size ));
-YY_BUFFER_STATE yy_scan_string YY_PROTO(( yyconst char *yy_str ));
-YY_BUFFER_STATE yy_scan_bytes YY_PROTO(( yyconst char *bytes, int len ));
+YY_BUFFER_STATE H5LTyy_scan_buffer (char *base,yy_size_t size );
+YY_BUFFER_STATE H5LTyy_scan_string (yyconst char *yy_str );
+YY_BUFFER_STATE H5LTyy_scan_bytes (yyconst char *bytes,yy_size_t len );
-static void *yy_flex_alloc YY_PROTO(( yy_size_t ));
-static void *yy_flex_realloc YY_PROTO(( void *, yy_size_t )) YY_MAY_BE_UNUSED;
-static void yy_flex_free YY_PROTO(( void * ));
+void *H5LTyyalloc (yy_size_t );
+void *H5LTyyrealloc (void *,yy_size_t );
+void H5LTyyfree (void * );
-#define yy_new_buffer yy_create_buffer
+#define yy_new_buffer H5LTyy_create_buffer
#define yy_set_interactive(is_interactive) \
{ \
- if ( ! yy_current_buffer ) \
- yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \
- yy_current_buffer->yy_is_interactive = is_interactive; \
+ if ( ! YY_CURRENT_BUFFER ){ \
+ H5LTyyensure_buffer_stack (); \
+ YY_CURRENT_BUFFER_LVALUE = \
+ H5LTyy_create_buffer(H5LTyyin,YY_BUF_SIZE ); \
+ } \
+ YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
}
#define yy_set_bol(at_bol) \
{ \
- if ( ! yy_current_buffer ) \
- yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \
- yy_current_buffer->yy_at_bol = at_bol; \
+ if ( ! YY_CURRENT_BUFFER ){\
+ H5LTyyensure_buffer_stack (); \
+ YY_CURRENT_BUFFER_LVALUE = \
+ H5LTyy_create_buffer(H5LTyyin,YY_BUF_SIZE ); \
+ } \
+ YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
}
-#define YY_AT_BOL() (yy_current_buffer->yy_at_bol)
+#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)
+/* Begin user sect3 */
-#define YY_USES_REJECT
typedef unsigned char YY_CHAR;
-FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0;
+
+FILE *H5LTyyin = (FILE *) 0, *H5LTyyout = (FILE *) 0;
+
typedef int yy_state_type;
-extern char *yytext;
-#define yytext_ptr yytext
-static yy_state_type yy_get_previous_state YY_PROTO(( void ));
-static yy_state_type yy_try_NUL_trans YY_PROTO(( yy_state_type current_state ));
-static int yy_get_next_buffer YY_PROTO(( void ));
-static void yy_fatal_error YY_PROTO(( yyconst char msg[] ));
+extern int H5LTyylineno;
+
+int H5LTyylineno = 1;
+
+extern char *H5LTyytext;
+#define yytext_ptr H5LTyytext
+
+static yy_state_type yy_get_previous_state (void );
+static yy_state_type yy_try_NUL_trans (yy_state_type current_state );
+static int yy_get_next_buffer (void );
+static void yy_fatal_error (yyconst char msg[] );
/* Done after the current pattern has been matched and before the
- * corresponding action - sets up yytext.
+ * corresponding action - sets up H5LTyytext.
*/
#define YY_DO_BEFORE_ACTION \
- yytext_ptr = yy_bp; \
- yyleng = (int) (yy_cp - yy_bp); \
- yy_hold_char = *yy_cp; \
+ (yytext_ptr) = yy_bp; \
+ H5LTyyleng = (size_t) (yy_cp - yy_bp); \
+ (yy_hold_char) = *yy_cp; \
*yy_cp = '\0'; \
- yy_c_buf_p = yy_cp;
+ (yy_c_buf_p) = yy_cp;
#define YY_NUM_RULES 66
#define YY_END_OF_BUFFER 67
-static yyconst short int yy_acclist[437] =
+/* This struct is not used in this scanner,
+ but its presence is necessary. */
+struct yy_trans_info
+ {
+ flex_int32_t yy_verify;
+ flex_int32_t yy_nxt;
+ };
+static yyconst flex_int16_t yy_acclist[437] =
{ 0,
64, 64, 64, 64, 67, 66, 64, 66, 64, 65,
66, 56, 66, 55, 66, 62, 66, 63, 66, 66,
@@ -391,7 +441,7 @@ static yyconst short int yy_acclist[437] =
57, 21, 57, 34, 34, 57
} ;
-static yyconst short int yy_accept[546] =
+static yyconst flex_int16_t yy_accept[546] =
{ 0,
1, 2, 3, 4, 5, 6, 7, 9, 12, 14,
16, 18, 20, 21, 22, 23, 24, 26, 28, 30,
@@ -455,7 +505,7 @@ static yyconst short int yy_accept[546] =
432, 434, 435, 437, 437
} ;
-static yyconst int yy_ec[256] =
+static yyconst flex_int32_t yy_ec[256] =
{ 0,
1, 1, 1, 1, 1, 1, 1, 1, 2, 3,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
@@ -487,7 +537,7 @@ static yyconst int yy_ec[256] =
1, 1, 1, 1, 1
} ;
-static yyconst int yy_meta[42] =
+static yyconst flex_int32_t yy_meta[42] =
{ 0,
1, 1, 1, 2, 3, 3, 3, 3, 3, 3,
3, 3, 1, 1, 1, 1, 1, 1, 1, 1,
@@ -496,7 +546,7 @@ static yyconst int yy_meta[42] =
1
} ;
-static yyconst short int yy_base[547] =
+static yyconst flex_int16_t yy_base[547] =
{ 0,
0, 0, 41, 0, 610, 611, 81, 83, 611, 0,
611, 611, 56, 599, 580, 575, 611, 611, 611, 611,
@@ -560,7 +610,7 @@ static yyconst short int yy_base[547] =
0, 611, 0, 611, 106, 275
} ;
-static yyconst short int yy_def[547] =
+static yyconst flex_int16_t yy_def[547] =
{ 0,
544, 1, 544, 3, 544, 544, 544, 544, 544, 545,
544, 544, 544, 544, 544, 544, 544, 544, 544, 544,
@@ -624,7 +674,7 @@ static yyconst short int yy_def[547] =
546, 544, 546, 0, 544, 544
} ;
-static yyconst short int yy_nxt[653] =
+static yyconst flex_int16_t yy_nxt[653] =
{ 0,
6, 7, 8, 9, 10, 10, 10, 10, 10, 10,
10, 10, 11, 12, 6, 6, 13, 6, 6, 6,
@@ -700,7 +750,7 @@ static yyconst short int yy_nxt[653] =
544, 544
} ;
-static yyconst short int yy_chk[653] =
+static yyconst flex_int16_t yy_chk[653] =
{ 0,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
@@ -776,22 +826,25 @@ static yyconst short int yy_chk[653] =
544, 544
} ;
-static yy_state_type yy_state_buf[YY_BUF_SIZE + 2], *yy_state_ptr;
+extern int H5LTyy_flex_debug;
+int H5LTyy_flex_debug = 0;
+
+static yy_state_type *yy_state_buf=0, *yy_state_ptr=0;
static char *yy_full_match;
static int yy_lp;
#define REJECT \
{ \
-*yy_cp = yy_hold_char; /* undo effects of setting up yytext */ \
-yy_cp = yy_full_match; /* restore poss. backed-over text */ \
-++yy_lp; \
+*yy_cp = (yy_hold_char); /* undo effects of setting up H5LTyytext */ \
+yy_cp = (yy_full_match); /* restore poss. backed-over text */ \
+++(yy_lp); \
goto find_rule; \
}
+
#define yymore() yymore_used_but_not_detected
#define YY_MORE_ADJ 0
#define YY_RESTORE_YY_MORE_OFFSET
-char *yytext;
+char *H5LTyytext;
#line 1 "H5LTanalyze.l"
-#define INITIAL 0
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Copyright by The HDF Group. *
* Copyright by the Board of Trustees of the University of Illinois. *
@@ -816,6 +869,7 @@ int my_yyinput(char *, int);
#undef YY_INPUT
#define YY_INPUT(b, r, ms) (r=my_yyinput(b, ms))
#define token(x) (int)x
+#define hid(x) (hid_t)x
#ifdef YY_BUF_SIZE
#undef YY_BUF_SIZE
@@ -858,9 +912,46 @@ extern hbool_t is_opq_tag;
hbool_t first_quote = 1;
+
+#line 917 "H5LTanalyze.c"
+
+#define INITIAL 0
#define TAG_STRING 1
-#line 864 "H5LTanalyze.c"
+#ifndef YY_EXTRA_TYPE
+#define YY_EXTRA_TYPE void *
+#endif
+
+static int yy_init_globals (void );
+
+/* Accessor methods to globals.
+ These are made visible to non-reentrant scanners for convenience. */
+
+int H5LTyylex_destroy (void );
+
+int H5LTyyget_debug (void );
+
+void H5LTyyset_debug (int debug_flag );
+
+YY_EXTRA_TYPE H5LTyyget_extra (void );
+
+void H5LTyyset_extra (YY_EXTRA_TYPE user_defined );
+
+FILE *H5LTyyget_in (void );
+
+void H5LTyyset_in (FILE * in_str );
+
+FILE *H5LTyyget_out (void );
+
+void H5LTyyset_out (FILE * out_str );
+
+yy_size_t H5LTyyget_leng (void );
+
+char *H5LTyyget_text (void );
+
+int H5LTyyget_lineno (void );
+
+void H5LTyyset_lineno (int line_number );
/* Macros after this point can all be overridden by user definitions in
* section 1.
@@ -868,65 +959,30 @@ hbool_t first_quote = 1;
#ifndef YY_SKIP_YYWRAP
#ifdef __cplusplus
-extern "C" int yywrap YY_PROTO(( void ));
+extern "C" int H5LTyywrap (void );
#else
-extern int yywrap YY_PROTO(( void ));
-#endif
+extern int H5LTyywrap (void );
#endif
-
-#ifndef YY_NO_UNPUT
-static void yyunput YY_PROTO(( int c, char *buf_ptr ));
#endif
+ static void yyunput (int c,char *buf_ptr );
+
#ifndef yytext_ptr
-static void yy_flex_strncpy YY_PROTO(( char *, yyconst char *, int ));
+static void yy_flex_strncpy (char *,yyconst char *,int );
#endif
#ifdef YY_NEED_STRLEN
-static int yy_flex_strlen YY_PROTO(( yyconst char * ));
+static int yy_flex_strlen (yyconst char * );
#endif
#ifndef YY_NO_INPUT
-#ifdef __cplusplus
-static int yyinput YY_PROTO(( void ));
-#else
-static int input YY_PROTO(( void ));
-#endif
-#endif
-
-#if YY_STACK_USED
-static int yy_start_stack_ptr = 0;
-static int yy_start_stack_depth = 0;
-static int *yy_start_stack = 0;
-#ifndef YY_NO_PUSH_STATE
-static void yy_push_state YY_PROTO(( int new_state ));
-#endif
-#ifndef YY_NO_POP_STATE
-static void yy_pop_state YY_PROTO(( void ));
-#endif
-#ifndef YY_NO_TOP_STATE
-static int yy_top_state YY_PROTO(( void ));
-#endif
+#ifdef __cplusplus
+static int yyinput (void );
#else
-#define YY_NO_PUSH_STATE 1
-#define YY_NO_POP_STATE 1
-#define YY_NO_TOP_STATE 1
+static int input (void );
#endif
-#ifdef YY_MALLOC_DECL
-YY_MALLOC_DECL
-#else
-#if __STDC__
-#ifndef __cplusplus
-#include <stdlib.h>
-#endif
-#else
-/* Just try to get by without declaring the routines. This will fail
- * miserably on non-ANSI systems for which sizeof(size_t) != sizeof(int)
- * or sizeof(void*) != sizeof(int).
- */
-#endif
#endif
/* Amount of stuff to slurp up with each read. */
@@ -935,12 +991,11 @@ YY_MALLOC_DECL
#endif
/* Copy whatever the last rule matched to the standard output. */
-
#ifndef ECHO
/* This used to be an fputs(), but since the string might contain NUL's,
* we now use fwrite().
*/
-#define ECHO (void) fwrite( yytext, yyleng, 1, yyout )
+#define ECHO do { if (fwrite( H5LTyytext, H5LTyyleng, 1, H5LTyyout )) {} } while (0)
#endif
/* Gets input and stuffs it into "buf". number of characters read, or YY_NULL,
@@ -948,21 +1003,35 @@ YY_MALLOC_DECL
*/
#ifndef YY_INPUT
#define YY_INPUT(buf,result,max_size) \
- if ( yy_current_buffer->yy_is_interactive ) \
+ if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
{ \
- int c = '*', n; \
+ int c = '*'; \
+ size_t n; \
for ( n = 0; n < max_size && \
- (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
+ (c = getc( H5LTyyin )) != EOF && c != '\n'; ++n ) \
buf[n] = (char) c; \
if ( c == '\n' ) \
buf[n++] = (char) c; \
- if ( c == EOF && ferror( yyin ) ) \
+ if ( c == EOF && ferror( H5LTyyin ) ) \
YY_FATAL_ERROR( "input in flex scanner failed" ); \
result = n; \
} \
- else if ( ((result = fread( buf, 1, max_size, yyin )) == 0) \
- && ferror( yyin ) ) \
- YY_FATAL_ERROR( "input in flex scanner failed" );
+ else \
+ { \
+ errno=0; \
+ while ( (result = fread(buf, 1, max_size, H5LTyyin))==0 && ferror(H5LTyyin)) \
+ { \
+ if( errno != EINTR) \
+ { \
+ YY_FATAL_ERROR( "input in flex scanner failed" ); \
+ break; \
+ } \
+ errno=0; \
+ clearerr(H5LTyyin); \
+ } \
+ }\
+\
+
#endif
/* No semi-colon after return; correct usage is to write "yyterminate();" -
@@ -983,14 +1052,20 @@ YY_MALLOC_DECL
#define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
#endif
+/* end tables serialization structures and prototypes */
+
/* Default declaration of generated scanner - a define so the user can
* easily add parameters.
*/
#ifndef YY_DECL
-#define YY_DECL int yylex YY_PROTO(( void ))
-#endif
+#define YY_DECL_IS_OURS 1
-/* Code executed at the beginning of each rule, after yytext and yyleng
+extern int H5LTyylex (void);
+
+#define YY_DECL int H5LTyylex (void)
+#endif /* !YY_DECL */
+
+/* Code executed at the beginning of each rule, after H5LTyytext and H5LTyyleng
* have been set up.
*/
#ifndef YY_USER_ACTION
@@ -1005,56 +1080,68 @@ YY_MALLOC_DECL
#define YY_RULE_SETUP \
YY_USER_ACTION
+/** The main scanner function which does all the work.
+ */
YY_DECL
- {
+{
register yy_state_type yy_current_state;
- register char *yy_cp = NULL, *yy_bp = NULL;
+ register char *yy_cp, *yy_bp;
register int yy_act;
-
-#line 72 "H5LTanalyze.l"
+
+#line 73 "H5LTanalyze.l"
-#line 1018 "H5LTanalyze.c"
+#line 1095 "H5LTanalyze.c"
- if ( yy_init )
+ if ( !(yy_init) )
{
- yy_init = 0;
+ (yy_init) = 1;
#ifdef YY_USER_INIT
YY_USER_INIT;
#endif
- if ( ! yy_start )
- yy_start = 1; /* first start state */
+ /* Create the reject buffer large enough to save one state per allowed character. */
+ if ( ! (yy_state_buf) )
+ (yy_state_buf) = (yy_state_type *)H5LTyyalloc(YY_STATE_BUF_SIZE );
+ if ( ! (yy_state_buf) )
+ YY_FATAL_ERROR( "out of dynamic memory in H5LTyylex()" );
+
+ if ( ! (yy_start) )
+ (yy_start) = 1; /* first start state */
- if ( ! yyin )
- yyin = stdin;
+ if ( ! H5LTyyin )
+ H5LTyyin = stdin;
- if ( ! yyout )
- yyout = stdout;
+ if ( ! H5LTyyout )
+ H5LTyyout = stdout;
- if ( ! yy_current_buffer )
- yy_current_buffer =
- yy_create_buffer( yyin, YY_BUF_SIZE );
+ if ( ! YY_CURRENT_BUFFER ) {
+ H5LTyyensure_buffer_stack ();
+ YY_CURRENT_BUFFER_LVALUE =
+ H5LTyy_create_buffer(H5LTyyin,YY_BUF_SIZE );
+ }
- yy_load_buffer_state();
+ H5LTyy_load_buffer_state( );
}
while ( 1 ) /* loops until end-of-file is reached */
{
- yy_cp = yy_c_buf_p;
+ yy_cp = (yy_c_buf_p);
- /* Support of yytext. */
- *yy_cp = yy_hold_char;
+ /* Support of H5LTyytext. */
+ *yy_cp = (yy_hold_char);
/* yy_bp points to the position in yy_ch_buf of the start of
* the current run.
*/
yy_bp = yy_cp;
- yy_current_state = yy_start;
- yy_state_ptr = yy_state_buf;
- *yy_state_ptr++ = yy_current_state;
+ yy_current_state = (yy_start);
+
+ (yy_state_ptr) = (yy_state_buf);
+ *(yy_state_ptr)++ = yy_current_state;
+
yy_match:
do
{
@@ -1066,316 +1153,314 @@ yy_match:
yy_c = yy_meta[(unsigned int) yy_c];
}
yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
- *yy_state_ptr++ = yy_current_state;
+ *(yy_state_ptr)++ = yy_current_state;
++yy_cp;
}
while ( yy_base[yy_current_state] != 611 );
yy_find_action:
- yy_current_state = *--yy_state_ptr;
- yy_lp = yy_accept[yy_current_state];
+ yy_current_state = *--(yy_state_ptr);
+ (yy_lp) = yy_accept[yy_current_state];
find_rule: /* we branch to this label when backing up */
for ( ; ; ) /* until we find what rule we matched */
{
- if ( yy_lp && yy_lp < yy_accept[yy_current_state + 1] )
+ if ( (yy_lp) && (yy_lp) < yy_accept[yy_current_state + 1] )
{
- yy_act = yy_acclist[yy_lp];
+ yy_act = yy_acclist[(yy_lp)];
{
- yy_full_match = yy_cp;
+ (yy_full_match) = yy_cp;
break;
}
}
--yy_cp;
- yy_current_state = *--yy_state_ptr;
- yy_lp = yy_accept[yy_current_state];
+ yy_current_state = *--(yy_state_ptr);
+ (yy_lp) = yy_accept[yy_current_state];
}
YY_DO_BEFORE_ACTION;
-
do_action: /* This label is used only to access EOF actions. */
-
switch ( yy_act )
{ /* beginning of action switch */
case 1:
YY_RULE_SETUP
-#line 74 "H5LTanalyze.l"
-{return token(H5T_STD_I8BE_TOKEN);}
+#line 75 "H5LTanalyze.l"
+{return hid(H5T_STD_I8BE_TOKEN);}
YY_BREAK
case 2:
YY_RULE_SETUP
-#line 75 "H5LTanalyze.l"
-{return token(H5T_STD_I8LE_TOKEN);}
+#line 76 "H5LTanalyze.l"
+{return hid(H5T_STD_I8LE_TOKEN);}
YY_BREAK
case 3:
YY_RULE_SETUP
-#line 76 "H5LTanalyze.l"
-{return token(H5T_STD_I16BE_TOKEN);}
+#line 77 "H5LTanalyze.l"
+{return hid(H5T_STD_I16BE_TOKEN);}
YY_BREAK
case 4:
YY_RULE_SETUP
-#line 77 "H5LTanalyze.l"
-{return token(H5T_STD_I16LE_TOKEN);}
+#line 78 "H5LTanalyze.l"
+{return hid(H5T_STD_I16LE_TOKEN);}
YY_BREAK
case 5:
YY_RULE_SETUP
-#line 78 "H5LTanalyze.l"
-{return token(H5T_STD_I32BE_TOKEN);}
+#line 79 "H5LTanalyze.l"
+{return hid(H5T_STD_I32BE_TOKEN);}
YY_BREAK
case 6:
YY_RULE_SETUP
-#line 79 "H5LTanalyze.l"
-{return token(H5T_STD_I32LE_TOKEN);}
+#line 80 "H5LTanalyze.l"
+{return hid(H5T_STD_I32LE_TOKEN);}
YY_BREAK
case 7:
YY_RULE_SETUP
-#line 80 "H5LTanalyze.l"
-{return token(H5T_STD_I64BE_TOKEN);}
+#line 81 "H5LTanalyze.l"
+{return hid(H5T_STD_I64BE_TOKEN);}
YY_BREAK
case 8:
YY_RULE_SETUP
-#line 81 "H5LTanalyze.l"
-{return token(H5T_STD_I64LE_TOKEN);}
+#line 82 "H5LTanalyze.l"
+{return hid(H5T_STD_I64LE_TOKEN);}
YY_BREAK
case 9:
YY_RULE_SETUP
-#line 83 "H5LTanalyze.l"
-{return token(H5T_STD_U8BE_TOKEN);}
+#line 84 "H5LTanalyze.l"
+{return hid(H5T_STD_U8BE_TOKEN);}
YY_BREAK
case 10:
YY_RULE_SETUP
-#line 84 "H5LTanalyze.l"
-{return token(H5T_STD_U8LE_TOKEN);}
+#line 85 "H5LTanalyze.l"
+{return hid(H5T_STD_U8LE_TOKEN);}
YY_BREAK
case 11:
YY_RULE_SETUP
-#line 85 "H5LTanalyze.l"
-{return token(H5T_STD_U16BE_TOKEN);}
+#line 86 "H5LTanalyze.l"
+{return hid(H5T_STD_U16BE_TOKEN);}
YY_BREAK
case 12:
YY_RULE_SETUP
-#line 86 "H5LTanalyze.l"
-{return token(H5T_STD_U16LE_TOKEN);}
+#line 87 "H5LTanalyze.l"
+{return hid(H5T_STD_U16LE_TOKEN);}
YY_BREAK
case 13:
YY_RULE_SETUP
-#line 87 "H5LTanalyze.l"
-{return token(H5T_STD_U32BE_TOKEN);}
+#line 88 "H5LTanalyze.l"
+{return hid(H5T_STD_U32BE_TOKEN);}
YY_BREAK
case 14:
YY_RULE_SETUP
-#line 88 "H5LTanalyze.l"
-{return token(H5T_STD_U32LE_TOKEN);}
+#line 89 "H5LTanalyze.l"
+{return hid(H5T_STD_U32LE_TOKEN);}
YY_BREAK
case 15:
YY_RULE_SETUP
-#line 89 "H5LTanalyze.l"
-{return token(H5T_STD_U64BE_TOKEN);}
+#line 90 "H5LTanalyze.l"
+{return hid(H5T_STD_U64BE_TOKEN);}
YY_BREAK
case 16:
YY_RULE_SETUP
-#line 90 "H5LTanalyze.l"
-{return token(H5T_STD_U64LE_TOKEN);}
+#line 91 "H5LTanalyze.l"
+{return hid(H5T_STD_U64LE_TOKEN);}
YY_BREAK
case 17:
YY_RULE_SETUP
-#line 92 "H5LTanalyze.l"
-{return token(H5T_NATIVE_CHAR_TOKEN);}
+#line 93 "H5LTanalyze.l"
+{return hid(H5T_NATIVE_CHAR_TOKEN);}
YY_BREAK
case 18:
YY_RULE_SETUP
-#line 93 "H5LTanalyze.l"
-{return token(H5T_NATIVE_SCHAR_TOKEN);}
+#line 94 "H5LTanalyze.l"
+{return hid(H5T_NATIVE_SCHAR_TOKEN);}
YY_BREAK
case 19:
YY_RULE_SETUP
-#line 94 "H5LTanalyze.l"
-{return token(H5T_NATIVE_UCHAR_TOKEN);}
+#line 95 "H5LTanalyze.l"
+{return hid(H5T_NATIVE_UCHAR_TOKEN);}
YY_BREAK
case 20:
YY_RULE_SETUP
-#line 95 "H5LTanalyze.l"
-{return token(H5T_NATIVE_SHORT_TOKEN);}
+#line 96 "H5LTanalyze.l"
+{return hid(H5T_NATIVE_SHORT_TOKEN);}
YY_BREAK
case 21:
YY_RULE_SETUP
-#line 96 "H5LTanalyze.l"
-{return token(H5T_NATIVE_USHORT_TOKEN);}
+#line 97 "H5LTanalyze.l"
+{return hid(H5T_NATIVE_USHORT_TOKEN);}
YY_BREAK
case 22:
YY_RULE_SETUP
-#line 97 "H5LTanalyze.l"
-{return token(H5T_NATIVE_INT_TOKEN);}
+#line 98 "H5LTanalyze.l"
+{return hid(H5T_NATIVE_INT_TOKEN);}
YY_BREAK
case 23:
YY_RULE_SETUP
-#line 98 "H5LTanalyze.l"
-{return token(H5T_NATIVE_UINT_TOKEN);}
+#line 99 "H5LTanalyze.l"
+{return hid(H5T_NATIVE_UINT_TOKEN);}
YY_BREAK
case 24:
YY_RULE_SETUP
-#line 99 "H5LTanalyze.l"
-{return token(H5T_NATIVE_LONG_TOKEN);}
+#line 100 "H5LTanalyze.l"
+{return hid(H5T_NATIVE_LONG_TOKEN);}
YY_BREAK
case 25:
YY_RULE_SETUP
-#line 100 "H5LTanalyze.l"
-{return token(H5T_NATIVE_ULONG_TOKEN);}
+#line 101 "H5LTanalyze.l"
+{return hid(H5T_NATIVE_ULONG_TOKEN);}
YY_BREAK
case 26:
YY_RULE_SETUP
-#line 101 "H5LTanalyze.l"
-{return token(H5T_NATIVE_LLONG_TOKEN);}
+#line 102 "H5LTanalyze.l"
+{return hid(H5T_NATIVE_LLONG_TOKEN);}
YY_BREAK
case 27:
YY_RULE_SETUP
-#line 102 "H5LTanalyze.l"
-{return token(H5T_NATIVE_ULLONG_TOKEN);}
+#line 103 "H5LTanalyze.l"
+{return hid(H5T_NATIVE_ULLONG_TOKEN);}
YY_BREAK
case 28:
YY_RULE_SETUP
-#line 104 "H5LTanalyze.l"
-{return token(H5T_IEEE_F32BE_TOKEN);}
+#line 105 "H5LTanalyze.l"
+{return hid(H5T_IEEE_F32BE_TOKEN);}
YY_BREAK
case 29:
YY_RULE_SETUP
-#line 105 "H5LTanalyze.l"
-{return token(H5T_IEEE_F32LE_TOKEN);}
+#line 106 "H5LTanalyze.l"
+{return hid(H5T_IEEE_F32LE_TOKEN);}
YY_BREAK
case 30:
YY_RULE_SETUP
-#line 106 "H5LTanalyze.l"
-{return token(H5T_IEEE_F64BE_TOKEN);}
+#line 107 "H5LTanalyze.l"
+{return hid(H5T_IEEE_F64BE_TOKEN);}
YY_BREAK
case 31:
YY_RULE_SETUP
-#line 107 "H5LTanalyze.l"
-{return token(H5T_IEEE_F64LE_TOKEN);}
+#line 108 "H5LTanalyze.l"
+{return hid(H5T_IEEE_F64LE_TOKEN);}
YY_BREAK
case 32:
YY_RULE_SETUP
-#line 108 "H5LTanalyze.l"
-{return token(H5T_NATIVE_FLOAT_TOKEN);}
+#line 109 "H5LTanalyze.l"
+{return hid(H5T_NATIVE_FLOAT_TOKEN);}
YY_BREAK
case 33:
YY_RULE_SETUP
-#line 109 "H5LTanalyze.l"
-{return token(H5T_NATIVE_DOUBLE_TOKEN);}
+#line 110 "H5LTanalyze.l"
+{return hid(H5T_NATIVE_DOUBLE_TOKEN);}
YY_BREAK
case 34:
YY_RULE_SETUP
-#line 110 "H5LTanalyze.l"
-{return token(H5T_NATIVE_LDOUBLE_TOKEN);}
+#line 111 "H5LTanalyze.l"
+{return hid(H5T_NATIVE_LDOUBLE_TOKEN);}
YY_BREAK
case 35:
YY_RULE_SETUP
-#line 112 "H5LTanalyze.l"
+#line 113 "H5LTanalyze.l"
{return token(H5T_STRING_TOKEN);}
YY_BREAK
case 36:
YY_RULE_SETUP
-#line 113 "H5LTanalyze.l"
+#line 114 "H5LTanalyze.l"
{return token(STRSIZE_TOKEN);}
YY_BREAK
case 37:
YY_RULE_SETUP
-#line 114 "H5LTanalyze.l"
+#line 115 "H5LTanalyze.l"
{return token(STRPAD_TOKEN);}
YY_BREAK
case 38:
YY_RULE_SETUP
-#line 115 "H5LTanalyze.l"
+#line 116 "H5LTanalyze.l"
{return token(CSET_TOKEN);}
YY_BREAK
case 39:
YY_RULE_SETUP
-#line 116 "H5LTanalyze.l"
+#line 117 "H5LTanalyze.l"
{return token(CTYPE_TOKEN);}
YY_BREAK
case 40:
YY_RULE_SETUP
-#line 117 "H5LTanalyze.l"
+#line 118 "H5LTanalyze.l"
{return token(H5T_STR_NULLTERM_TOKEN);}
YY_BREAK
case 41:
YY_RULE_SETUP
-#line 118 "H5LTanalyze.l"
+#line 119 "H5LTanalyze.l"
{return token(H5T_STR_NULLPAD_TOKEN);}
YY_BREAK
case 42:
YY_RULE_SETUP
-#line 119 "H5LTanalyze.l"
+#line 120 "H5LTanalyze.l"
{return token(H5T_STR_SPACEPAD_TOKEN);}
YY_BREAK
case 43:
YY_RULE_SETUP
-#line 120 "H5LTanalyze.l"
+#line 121 "H5LTanalyze.l"
{return token(H5T_CSET_ASCII_TOKEN);}
YY_BREAK
case 44:
YY_RULE_SETUP
-#line 121 "H5LTanalyze.l"
+#line 122 "H5LTanalyze.l"
{return token(H5T_CSET_UTF8_TOKEN);}
YY_BREAK
case 45:
YY_RULE_SETUP
-#line 122 "H5LTanalyze.l"
+#line 123 "H5LTanalyze.l"
{return token(H5T_C_S1_TOKEN);}
YY_BREAK
case 46:
YY_RULE_SETUP
-#line 123 "H5LTanalyze.l"
+#line 124 "H5LTanalyze.l"
{return token(H5T_FORTRAN_S1_TOKEN);}
YY_BREAK
case 47:
YY_RULE_SETUP
-#line 124 "H5LTanalyze.l"
+#line 125 "H5LTanalyze.l"
{return token(H5T_VARIABLE_TOKEN);}
YY_BREAK
case 48:
YY_RULE_SETUP
-#line 126 "H5LTanalyze.l"
+#line 127 "H5LTanalyze.l"
{return token(H5T_COMPOUND_TOKEN);}
YY_BREAK
case 49:
YY_RULE_SETUP
-#line 127 "H5LTanalyze.l"
+#line 128 "H5LTanalyze.l"
{return token(H5T_ENUM_TOKEN);}
YY_BREAK
case 50:
YY_RULE_SETUP
-#line 128 "H5LTanalyze.l"
+#line 129 "H5LTanalyze.l"
{return token(H5T_ARRAY_TOKEN);}
YY_BREAK
case 51:
YY_RULE_SETUP
-#line 129 "H5LTanalyze.l"
+#line 130 "H5LTanalyze.l"
{return token(H5T_VLEN_TOKEN);}
YY_BREAK
case 52:
YY_RULE_SETUP
-#line 131 "H5LTanalyze.l"
+#line 132 "H5LTanalyze.l"
{return token(H5T_OPAQUE_TOKEN);}
YY_BREAK
case 53:
YY_RULE_SETUP
-#line 132 "H5LTanalyze.l"
+#line 133 "H5LTanalyze.l"
{return token(OPQ_SIZE_TOKEN);}
YY_BREAK
case 54:
YY_RULE_SETUP
-#line 133 "H5LTanalyze.l"
+#line 134 "H5LTanalyze.l"
{return token(OPQ_TAG_TOKEN);}
YY_BREAK
case 55:
YY_RULE_SETUP
-#line 135 "H5LTanalyze.l"
+#line 136 "H5LTanalyze.l"
{
if( is_str_size || (is_enum && is_enum_memb) ||
is_opq_size || (asindex>-1 && arr_stack[asindex].is_dim) ||
(csindex>-1 && cmpd_stack[csindex].is_field) ) {
- H5LTyylval.ival = atoi(yytext);
+ H5LTyylval.ival = atoi(H5LTyytext);
return NUMBER;
} else
REJECT;
@@ -1383,7 +1468,7 @@ YY_RULE_SETUP
YY_BREAK
case 56:
YY_RULE_SETUP
-#line 145 "H5LTanalyze.l"
+#line 146 "H5LTanalyze.l"
{
/*if it's first quote, and is a compound field name or an enum symbol*/
if((is_opq_tag || is_enum || (csindex>-1 && cmpd_stack[csindex].is_field))
@@ -1396,13 +1481,14 @@ YY_RULE_SETUP
}
YY_BREAK
case 57:
+/* rule 57 can match eol */
YY_RULE_SETUP
-#line 155 "H5LTanalyze.l"
+#line 156 "H5LTanalyze.l"
{
#ifdef H5_HAVE_WIN32_API
- H5LTyylval.sval = _strdup(yytext);
+ H5LTyylval.sval = _strdup(H5LTyytext);
#else /* H5_HAVE_WIN32_API */
- H5LTyylval.sval = strdup(yytext);
+ H5LTyylval.sval = strdup(H5LTyytext);
#endif /* H5_HAVE_WIN32_API */
BEGIN INITIAL;
return STRING;
@@ -1410,50 +1496,52 @@ YY_RULE_SETUP
YY_BREAK
case 58:
YY_RULE_SETUP
-#line 165 "H5LTanalyze.l"
+#line 166 "H5LTanalyze.l"
{return token('{');}
YY_BREAK
case 59:
YY_RULE_SETUP
-#line 166 "H5LTanalyze.l"
+#line 167 "H5LTanalyze.l"
{return token('}');}
YY_BREAK
case 60:
YY_RULE_SETUP
-#line 167 "H5LTanalyze.l"
+#line 168 "H5LTanalyze.l"
{return token('[');}
YY_BREAK
case 61:
YY_RULE_SETUP
-#line 168 "H5LTanalyze.l"
+#line 169 "H5LTanalyze.l"
{return token(']');}
YY_BREAK
case 62:
YY_RULE_SETUP
-#line 169 "H5LTanalyze.l"
+#line 170 "H5LTanalyze.l"
{return token(':');}
YY_BREAK
case 63:
YY_RULE_SETUP
-#line 170 "H5LTanalyze.l"
+#line 171 "H5LTanalyze.l"
{return token(';');}
YY_BREAK
case 64:
+/* rule 64 can match eol */
YY_RULE_SETUP
-#line 171 "H5LTanalyze.l"
+#line 172 "H5LTanalyze.l"
;
YY_BREAK
case 65:
+/* rule 65 can match eol */
YY_RULE_SETUP
-#line 172 "H5LTanalyze.l"
+#line 173 "H5LTanalyze.l"
{ return 0; }
YY_BREAK
case 66:
YY_RULE_SETUP
-#line 174 "H5LTanalyze.l"
+#line 175 "H5LTanalyze.l"
ECHO;
YY_BREAK
-#line 1457 "H5LTanalyze.c"
+#line 1545 "H5LTanalyze.c"
case YY_STATE_EOF(INITIAL):
case YY_STATE_EOF(TAG_STRING):
yyterminate();
@@ -1461,26 +1549,26 @@ ECHO;
case YY_END_OF_BUFFER:
{
/* Amount of text matched not including the EOB char. */
- int yy_amount_of_matched_text = (int) (yy_cp - yytext_ptr) - 1;
+ int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1;
/* Undo the effects of YY_DO_BEFORE_ACTION. */
- *yy_cp = yy_hold_char;
+ *yy_cp = (yy_hold_char);
YY_RESTORE_YY_MORE_OFFSET
- if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_NEW )
+ if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW )
{
/* We're scanning a new file or input source. It's
* possible that this happened because the user
- * just pointed yyin at a new source and called
- * yylex(). If so, then we have to assure
- * consistency between yy_current_buffer and our
+ * just pointed H5LTyyin at a new source and called
+ * H5LTyylex(). If so, then we have to assure
+ * consistency between YY_CURRENT_BUFFER and our
* globals. Here is the right place to do so, because
* this is the first action (other than possibly a
* back-up) that will match for the new input source.
*/
- yy_n_chars = yy_current_buffer->yy_n_chars;
- yy_current_buffer->yy_input_file = yyin;
- yy_current_buffer->yy_buffer_status = YY_BUFFER_NORMAL;
+ (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
+ YY_CURRENT_BUFFER_LVALUE->yy_input_file = H5LTyyin;
+ YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL;
}
/* Note that here we test for yy_c_buf_p "<=" to the position
@@ -1490,13 +1578,13 @@ ECHO;
* end-of-buffer state). Contrast this with the test
* in input().
*/
- if ( yy_c_buf_p <= &yy_current_buffer->yy_ch_buf[yy_n_chars] )
+ if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
{ /* This was really a NUL. */
yy_state_type yy_next_state;
- yy_c_buf_p = yytext_ptr + yy_amount_of_matched_text;
+ (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text;
- yy_current_state = yy_get_previous_state();
+ yy_current_state = yy_get_previous_state( );
/* Okay, we're now positioned to make the NUL
* transition. We couldn't have
@@ -1509,41 +1597,41 @@ ECHO;
yy_next_state = yy_try_NUL_trans( yy_current_state );
- yy_bp = yytext_ptr + YY_MORE_ADJ;
+ yy_bp = (yytext_ptr) + YY_MORE_ADJ;
if ( yy_next_state )
{
/* Consume the NUL. */
- yy_cp = ++yy_c_buf_p;
+ yy_cp = ++(yy_c_buf_p);
yy_current_state = yy_next_state;
goto yy_match;
}
else
{
- yy_cp = yy_c_buf_p;
+ yy_cp = (yy_c_buf_p);
goto yy_find_action;
}
}
- else switch ( yy_get_next_buffer() )
+ else switch ( yy_get_next_buffer( ) )
{
case EOB_ACT_END_OF_FILE:
{
- yy_did_buffer_switch_on_eof = 0;
+ (yy_did_buffer_switch_on_eof) = 0;
- if ( yywrap() )
+ if ( H5LTyywrap( ) )
{
/* Note: because we've taken care in
* yy_get_next_buffer() to have set up
- * yytext, we can now set up
+ * H5LTyytext, we can now set up
* yy_c_buf_p so that if some total
* hoser (like flex itself) wants to
* call the scanner after we return the
* YY_NULL, it'll still work - another
* YY_NULL will get returned.
*/
- yy_c_buf_p = yytext_ptr + YY_MORE_ADJ;
+ (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ;
yy_act = YY_STATE_EOF(YY_START);
goto do_action;
@@ -1551,30 +1639,30 @@ ECHO;
else
{
- if ( ! yy_did_buffer_switch_on_eof )
+ if ( ! (yy_did_buffer_switch_on_eof) )
YY_NEW_FILE;
}
break;
}
case EOB_ACT_CONTINUE_SCAN:
- yy_c_buf_p =
- yytext_ptr + yy_amount_of_matched_text;
+ (yy_c_buf_p) =
+ (yytext_ptr) + yy_amount_of_matched_text;
- yy_current_state = yy_get_previous_state();
+ yy_current_state = yy_get_previous_state( );
- yy_cp = yy_c_buf_p;
- yy_bp = yytext_ptr + YY_MORE_ADJ;
+ yy_cp = (yy_c_buf_p);
+ yy_bp = (yytext_ptr) + YY_MORE_ADJ;
goto yy_match;
case EOB_ACT_LAST_MATCH:
- yy_c_buf_p =
- &yy_current_buffer->yy_ch_buf[yy_n_chars];
+ (yy_c_buf_p) =
+ &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)];
- yy_current_state = yy_get_previous_state();
+ yy_current_state = yy_get_previous_state( );
- yy_cp = yy_c_buf_p;
- yy_bp = yytext_ptr + YY_MORE_ADJ;
+ yy_cp = (yy_c_buf_p);
+ yy_bp = (yytext_ptr) + YY_MORE_ADJ;
goto yy_find_action;
}
break;
@@ -1585,8 +1673,7 @@ ECHO;
"fatal flex scanner internal error--no action found" );
} /* end of action switch */
} /* end of scanning one token */
- } /* end of yylex */
-
+} /* end of H5LTyylex */
/* yy_get_next_buffer - try to read in a new buffer
*
@@ -1595,21 +1682,20 @@ ECHO;
* EOB_ACT_CONTINUE_SCAN - continue scanning from current position
* EOB_ACT_END_OF_FILE - end of file
*/
-
-static int yy_get_next_buffer()
- {
- register char *dest = yy_current_buffer->yy_ch_buf;
- register char *source = yytext_ptr;
+static int yy_get_next_buffer (void)
+{
+ register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
+ register char *source = (yytext_ptr);
register int number_to_move, i;
int ret_val;
- if ( yy_c_buf_p > &yy_current_buffer->yy_ch_buf[yy_n_chars + 1] )
+ if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] )
YY_FATAL_ERROR(
"fatal flex scanner internal error--end of buffer missed" );
- if ( yy_current_buffer->yy_fill_buffer == 0 )
+ if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 )
{ /* Don't try to fill the buffer, so this is an EOF. */
- if ( yy_c_buf_p - yytext_ptr - YY_MORE_ADJ == 1 )
+ if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 )
{
/* We matched a single character, the EOB, so
* treat this as a final EOF.
@@ -1629,86 +1715,52 @@ static int yy_get_next_buffer()
/* Try to read more data. */
/* First move last chars to start of buffer. */
- number_to_move = (int) (yy_c_buf_p - yytext_ptr) - 1;
+ number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1;
for ( i = 0; i < number_to_move; ++i )
*(dest++) = *(source++);
- if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_EOF_PENDING )
+ if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING )
/* don't do the read, it's not guaranteed to return an EOF,
* just force an EOF
*/
- yy_current_buffer->yy_n_chars = yy_n_chars = 0;
+ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0;
else
{
- int num_to_read =
- yy_current_buffer->yy_buf_size - number_to_move - 1;
+ yy_size_t num_to_read =
+ YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
while ( num_to_read <= 0 )
{ /* Not enough room in the buffer - grow it. */
-#ifdef YY_USES_REJECT
+
YY_FATAL_ERROR(
"input buffer overflow, can't enlarge buffer because scanner uses REJECT" );
-#else
-
- /* just a shorter name for the current buffer */
- YY_BUFFER_STATE b = yy_current_buffer;
-
- int yy_c_buf_p_offset =
- (int) (yy_c_buf_p - b->yy_ch_buf);
-
- if ( b->yy_is_our_buffer )
- {
- int new_size = b->yy_buf_size * 2;
-
- if ( new_size <= 0 )
- b->yy_buf_size += b->yy_buf_size / 8;
- else
- b->yy_buf_size *= 2;
-
- b->yy_ch_buf = (char *)
- /* Include room in for 2 EOB chars. */
- yy_flex_realloc( (void *) b->yy_ch_buf,
- b->yy_buf_size + 2 );
- }
- else
- /* Can't grow it, we don't own it. */
- b->yy_ch_buf = 0;
-
- if ( ! b->yy_ch_buf )
- YY_FATAL_ERROR(
- "fatal error - scanner input buffer overflow" );
-
- yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset];
- num_to_read = yy_current_buffer->yy_buf_size -
- number_to_move - 1;
-#endif
}
if ( num_to_read > YY_READ_BUF_SIZE )
num_to_read = YY_READ_BUF_SIZE;
/* Read in more data. */
- YY_INPUT( (&yy_current_buffer->yy_ch_buf[number_to_move]),
- yy_n_chars, num_to_read );
+ YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
+ (yy_n_chars), num_to_read );
- yy_current_buffer->yy_n_chars = yy_n_chars;
+ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
}
- if ( yy_n_chars == 0 )
+ if ( (yy_n_chars) == 0 )
{
if ( number_to_move == YY_MORE_ADJ )
{
ret_val = EOB_ACT_END_OF_FILE;
- yyrestart( yyin );
+ H5LTyyrestart(H5LTyyin );
}
else
{
ret_val = EOB_ACT_LAST_MATCH;
- yy_current_buffer->yy_buffer_status =
+ YY_CURRENT_BUFFER_LVALUE->yy_buffer_status =
YY_BUFFER_EOF_PENDING;
}
}
@@ -1716,28 +1768,36 @@ static int yy_get_next_buffer()
else
ret_val = EOB_ACT_CONTINUE_SCAN;
- yy_n_chars += number_to_move;
- yy_current_buffer->yy_ch_buf[yy_n_chars] = YY_END_OF_BUFFER_CHAR;
- yy_current_buffer->yy_ch_buf[yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR;
+ if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
+ /* Extend the array by 50%, plus the number we really need. */
+ yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1);
+ YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) H5LTyyrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size );
+ if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
+ YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
+ }
- yytext_ptr = &yy_current_buffer->yy_ch_buf[0];
+ (yy_n_chars) += number_to_move;
+ YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR;
+ YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR;
- return ret_val;
- }
+ (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0];
+ return ret_val;
+}
/* yy_get_previous_state - get the state just before the EOB char was reached */
-static yy_state_type yy_get_previous_state()
- {
+ static yy_state_type yy_get_previous_state (void)
+{
register yy_state_type yy_current_state;
register char *yy_cp;
+
+ yy_current_state = (yy_start);
- yy_current_state = yy_start;
- yy_state_ptr = yy_state_buf;
- *yy_state_ptr++ = yy_current_state;
+ (yy_state_ptr) = (yy_state_buf);
+ *(yy_state_ptr)++ = yy_current_state;
- for ( yy_cp = yytext_ptr + YY_MORE_ADJ; yy_cp < yy_c_buf_p; ++yy_cp )
+ for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp )
{
register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
@@ -1747,28 +1807,21 @@ static yy_state_type yy_get_previous_state()
yy_c = yy_meta[(unsigned int) yy_c];
}
yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
- *yy_state_ptr++ = yy_current_state;
+ *(yy_state_ptr)++ = yy_current_state;
}
return yy_current_state;
- }
-
+}
/* yy_try_NUL_trans - try to make a transition on the NUL character
*
* synopsis
* next_state = yy_try_NUL_trans( current_state );
*/
-
-#ifdef YY_USE_PROTOS
-static yy_state_type yy_try_NUL_trans( yy_state_type yy_current_state )
-#else
-static yy_state_type yy_try_NUL_trans( yy_current_state )
-yy_state_type yy_current_state;
-#endif
- {
+ static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state )
+{
register int yy_is_jam;
-
+
register YY_CHAR yy_c = 1;
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
{
@@ -1779,84 +1832,76 @@ yy_state_type yy_current_state;
yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
yy_is_jam = (yy_current_state == 544);
if ( ! yy_is_jam )
- *yy_state_ptr++ = yy_current_state;
-
- return yy_is_jam ? 0 : yy_current_state;
- }
+ *(yy_state_ptr)++ = yy_current_state;
+ return yy_is_jam ? 0 : yy_current_state;
+}
-#ifndef YY_NO_UNPUT
-#ifdef YY_USE_PROTOS
-static void yyunput( int c, register char *yy_bp )
-#else
-static void yyunput( c, yy_bp )
-int c;
-register char *yy_bp;
-#endif
- {
- register char *yy_cp = yy_c_buf_p;
+ static void yyunput (int c, register char * yy_bp )
+{
+ register char *yy_cp;
+
+ yy_cp = (yy_c_buf_p);
- /* undo effects of setting up yytext */
- *yy_cp = yy_hold_char;
+ /* undo effects of setting up H5LTyytext */
+ *yy_cp = (yy_hold_char);
- if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )
+ if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
{ /* need to shift things up to make room */
/* +2 for EOB chars. */
- register int number_to_move = yy_n_chars + 2;
- register char *dest = &yy_current_buffer->yy_ch_buf[
- yy_current_buffer->yy_buf_size + 2];
+ register yy_size_t number_to_move = (yy_n_chars) + 2;
+ register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[
+ YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2];
register char *source =
- &yy_current_buffer->yy_ch_buf[number_to_move];
+ &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move];
- while ( source > yy_current_buffer->yy_ch_buf )
+ while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
*--dest = *--source;
yy_cp += (int) (dest - source);
yy_bp += (int) (dest - source);
- yy_current_buffer->yy_n_chars =
- yy_n_chars = yy_current_buffer->yy_buf_size;
+ YY_CURRENT_BUFFER_LVALUE->yy_n_chars =
+ (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size;
- if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )
+ if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
YY_FATAL_ERROR( "flex scanner push-back overflow" );
}
*--yy_cp = (char) c;
-
- yytext_ptr = yy_bp;
- yy_hold_char = *yy_cp;
- yy_c_buf_p = yy_cp;
- }
-#endif /* ifndef YY_NO_UNPUT */
-
+ (yytext_ptr) = yy_bp;
+ (yy_hold_char) = *yy_cp;
+ (yy_c_buf_p) = yy_cp;
+}
#ifndef YY_NO_INPUT
#ifdef __cplusplus
-static int yyinput()
+ static int yyinput (void)
#else
-static int input()
+ static int input (void)
#endif
- {
- int c;
- *yy_c_buf_p = yy_hold_char;
+{
+ int c;
+
+ *(yy_c_buf_p) = (yy_hold_char);
- if ( *yy_c_buf_p == YY_END_OF_BUFFER_CHAR )
+ if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR )
{
/* yy_c_buf_p now points to the character we want to return.
* If this occurs *before* the EOB characters, then it's a
* valid NUL; if not, then we've hit the end of the buffer.
*/
- if ( yy_c_buf_p < &yy_current_buffer->yy_ch_buf[yy_n_chars] )
+ if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
/* This was really a NUL. */
- *yy_c_buf_p = '\0';
+ *(yy_c_buf_p) = '\0';
else
{ /* need more input */
- int offset = yy_c_buf_p - yytext_ptr;
- ++yy_c_buf_p;
+ yy_size_t offset = (yy_c_buf_p) - (yytext_ptr);
+ ++(yy_c_buf_p);
- switch ( yy_get_next_buffer() )
+ switch ( yy_get_next_buffer( ) )
{
case EOB_ACT_LAST_MATCH:
/* This happens because yy_g_n_b()
@@ -1870,16 +1915,16 @@ static int input()
*/
/* Reset buffer status. */
- yyrestart( yyin );
+ H5LTyyrestart(H5LTyyin );
- /* fall through */
+ /*FALLTHROUGH*/
case EOB_ACT_END_OF_FILE:
{
- if ( yywrap() )
+ if ( H5LTyywrap( ) )
return EOF;
- if ( ! yy_did_buffer_switch_on_eof )
+ if ( ! (yy_did_buffer_switch_on_eof) )
YY_NEW_FILE;
#ifdef __cplusplus
return yyinput();
@@ -1889,171 +1934,165 @@ static int input()
}
case EOB_ACT_CONTINUE_SCAN:
- yy_c_buf_p = yytext_ptr + offset;
+ (yy_c_buf_p) = (yytext_ptr) + offset;
break;
}
}
}
- c = *(unsigned char *) yy_c_buf_p; /* cast for 8-bit char's */
- *yy_c_buf_p = '\0'; /* preserve yytext */
- yy_hold_char = *++yy_c_buf_p;
-
+ c = *(unsigned char *) (yy_c_buf_p); /* cast for 8-bit char's */
+ *(yy_c_buf_p) = '\0'; /* preserve H5LTyytext */
+ (yy_hold_char) = *++(yy_c_buf_p);
return c;
- }
-#endif /* YY_NO_INPUT */
-
-#ifdef YY_USE_PROTOS
-void yyrestart( FILE *input_file )
-#else
-void yyrestart( input_file )
-FILE *input_file;
-#endif
- {
- if ( ! yy_current_buffer )
- yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE );
+}
+#endif /* ifndef YY_NO_INPUT */
- yy_init_buffer( yy_current_buffer, input_file );
- yy_load_buffer_state();
+/** Immediately switch to a different input stream.
+ * @param input_file A readable stream.
+ *
+ * @note This function does not reset the start condition to @c INITIAL .
+ */
+ void H5LTyyrestart (FILE * input_file )
+{
+
+ if ( ! YY_CURRENT_BUFFER ){
+ H5LTyyensure_buffer_stack ();
+ YY_CURRENT_BUFFER_LVALUE =
+ H5LTyy_create_buffer(H5LTyyin,YY_BUF_SIZE );
}
+ H5LTyy_init_buffer(YY_CURRENT_BUFFER,input_file );
+ H5LTyy_load_buffer_state( );
+}
-#ifdef YY_USE_PROTOS
-void yy_switch_to_buffer( YY_BUFFER_STATE new_buffer )
-#else
-void yy_switch_to_buffer( new_buffer )
-YY_BUFFER_STATE new_buffer;
-#endif
- {
- if ( yy_current_buffer == new_buffer )
+/** Switch to a different input buffer.
+ * @param new_buffer The new input buffer.
+ *
+ */
+ void H5LTyy_switch_to_buffer (YY_BUFFER_STATE new_buffer )
+{
+
+ /* TODO. We should be able to replace this entire function body
+ * with
+ * H5LTyypop_buffer_state();
+ * H5LTyypush_buffer_state(new_buffer);
+ */
+ H5LTyyensure_buffer_stack ();
+ if ( YY_CURRENT_BUFFER == new_buffer )
return;
- if ( yy_current_buffer )
+ if ( YY_CURRENT_BUFFER )
{
/* Flush out information for old buffer. */
- *yy_c_buf_p = yy_hold_char;
- yy_current_buffer->yy_buf_pos = yy_c_buf_p;
- yy_current_buffer->yy_n_chars = yy_n_chars;
+ *(yy_c_buf_p) = (yy_hold_char);
+ YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
+ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
}
- yy_current_buffer = new_buffer;
- yy_load_buffer_state();
+ YY_CURRENT_BUFFER_LVALUE = new_buffer;
+ H5LTyy_load_buffer_state( );
/* We don't actually know whether we did this switch during
- * EOF (yywrap()) processing, but the only time this flag
- * is looked at is after yywrap() is called, so it's safe
+ * EOF (H5LTyywrap()) processing, but the only time this flag
+ * is looked at is after H5LTyywrap() is called, so it's safe
* to go ahead and always set it.
*/
- yy_did_buffer_switch_on_eof = 1;
- }
-
-
-#ifdef YY_USE_PROTOS
-void yy_load_buffer_state( void )
-#else
-void yy_load_buffer_state()
-#endif
- {
- yy_n_chars = yy_current_buffer->yy_n_chars;
- yytext_ptr = yy_c_buf_p = yy_current_buffer->yy_buf_pos;
- yyin = yy_current_buffer->yy_input_file;
- yy_hold_char = *yy_c_buf_p;
- }
+ (yy_did_buffer_switch_on_eof) = 1;
+}
+static void H5LTyy_load_buffer_state (void)
+{
+ (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
+ (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;
+ H5LTyyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
+ (yy_hold_char) = *(yy_c_buf_p);
+}
-#ifdef YY_USE_PROTOS
-YY_BUFFER_STATE yy_create_buffer( FILE *file, int size )
-#else
-YY_BUFFER_STATE yy_create_buffer( file, size )
-FILE *file;
-int size;
-#endif
- {
+/** Allocate and initialize an input buffer state.
+ * @param file A readable stream.
+ * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE.
+ *
+ * @return the allocated buffer state.
+ */
+ YY_BUFFER_STATE H5LTyy_create_buffer (FILE * file, int size )
+{
YY_BUFFER_STATE b;
-
- b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) );
+
+ b = (YY_BUFFER_STATE) H5LTyyalloc(sizeof( struct yy_buffer_state ) );
if ( ! b )
- YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
+ YY_FATAL_ERROR( "out of dynamic memory in H5LTyy_create_buffer()" );
b->yy_buf_size = size;
/* yy_ch_buf has to be 2 characters longer than the size given because
* we need to put in 2 end-of-buffer characters.
*/
- b->yy_ch_buf = (char *) yy_flex_alloc( b->yy_buf_size + 2 );
+ b->yy_ch_buf = (char *) H5LTyyalloc(b->yy_buf_size + 2 );
if ( ! b->yy_ch_buf )
- YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
+ YY_FATAL_ERROR( "out of dynamic memory in H5LTyy_create_buffer()" );
b->yy_is_our_buffer = 1;
- yy_init_buffer( b, file );
+ H5LTyy_init_buffer(b,file );
return b;
- }
-
+}
-#ifdef YY_USE_PROTOS
-void yy_delete_buffer( YY_BUFFER_STATE b )
-#else
-void yy_delete_buffer( b )
-YY_BUFFER_STATE b;
-#endif
- {
+/** Destroy the buffer.
+ * @param b a buffer created with H5LTyy_create_buffer()
+ *
+ */
+ void H5LTyy_delete_buffer (YY_BUFFER_STATE b )
+{
+
if ( ! b )
return;
- if ( b == yy_current_buffer )
- yy_current_buffer = (YY_BUFFER_STATE) 0;
+ if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */
+ YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;
if ( b->yy_is_our_buffer )
- yy_flex_free( (void *) b->yy_ch_buf );
-
- yy_flex_free( (void *) b );
- }
-
+ H5LTyyfree((void *) b->yy_ch_buf );
+ H5LTyyfree((void *) b );
+}
-#ifdef YY_USE_PROTOS
-void yy_init_buffer( YY_BUFFER_STATE b, FILE *file )
-#else
-void yy_init_buffer( b, file )
-YY_BUFFER_STATE b;
-FILE *file;
-#endif
-
+/* Initializes or reinitializes a buffer.
+ * This function is sometimes called more than once on the same buffer,
+ * such as during a H5LTyyrestart() or at EOF.
+ */
+ static void H5LTyy_init_buffer (YY_BUFFER_STATE b, FILE * file )
- {
- yy_flush_buffer( b );
+{
+ int oerrno = errno;
+
+ H5LTyy_flush_buffer(b );
b->yy_input_file = file;
b->yy_fill_buffer = 1;
-#if YY_ALWAYS_INTERACTIVE
- b->yy_is_interactive = 1;
-#else
-#if YY_NEVER_INTERACTIVE
- b->yy_is_interactive = 0;
-#else
-#ifdef H5_HAVE_WIN32_API
- b->yy_is_interactive = file ? (_isatty( _fileno(file) ) > 0) : 0;
-#else /* H5_HAVE_WIN32_API */
- b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
-#endif /* H5_HAVE_WIN32_API */
-#endif
-#endif
- }
-
+ /* If b is the current buffer, then H5LTyy_init_buffer was _probably_
+ * called from H5LTyyrestart() or through yy_get_next_buffer.
+ * In that case, we don't want to reset the lineno or column.
+ */
+ if (b != YY_CURRENT_BUFFER){
+ b->yy_bs_lineno = 1;
+ b->yy_bs_column = 0;
+ }
-#ifdef YY_USE_PROTOS
-void yy_flush_buffer( YY_BUFFER_STATE b )
-#else
-void yy_flush_buffer( b )
-YY_BUFFER_STATE b;
-#endif
+ b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
+
+ errno = oerrno;
+}
- {
- if ( ! b )
+/** Discard all buffered characters. On the next scan, YY_INPUT will be called.
+ * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER.
+ *
+ */
+ void H5LTyy_flush_buffer (YY_BUFFER_STATE b )
+{
+ if ( ! b )
return;
b->yy_n_chars = 0;
@@ -2070,31 +2109,127 @@ YY_BUFFER_STATE b;
b->yy_at_bol = 1;
b->yy_buffer_status = YY_BUFFER_NEW;
- if ( b == yy_current_buffer )
- yy_load_buffer_state();
+ if ( b == YY_CURRENT_BUFFER )
+ H5LTyy_load_buffer_state( );
+}
+
+/** Pushes the new state onto the stack. The new state becomes
+ * the current state. This function will allocate the stack
+ * if necessary.
+ * @param new_buffer The new state.
+ *
+ */
+void H5LTyypush_buffer_state (YY_BUFFER_STATE new_buffer )
+{
+ if (new_buffer == NULL)
+ return;
+
+ H5LTyyensure_buffer_stack();
+
+ /* This block is copied from H5LTyy_switch_to_buffer. */
+ if ( YY_CURRENT_BUFFER )
+ {
+ /* Flush out information for old buffer. */
+ *(yy_c_buf_p) = (yy_hold_char);
+ YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
+ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
+ }
+
+ /* Only push if top exists. Otherwise, replace top. */
+ if (YY_CURRENT_BUFFER)
+ (yy_buffer_stack_top)++;
+ YY_CURRENT_BUFFER_LVALUE = new_buffer;
+
+ /* copied from H5LTyy_switch_to_buffer. */
+ H5LTyy_load_buffer_state( );
+ (yy_did_buffer_switch_on_eof) = 1;
+}
+
+/** Removes and deletes the top of the stack, if present.
+ * The next element becomes the new top.
+ *
+ */
+void H5LTyypop_buffer_state (void)
+{
+ if (!YY_CURRENT_BUFFER)
+ return;
+
+ H5LTyy_delete_buffer(YY_CURRENT_BUFFER );
+ YY_CURRENT_BUFFER_LVALUE = NULL;
+ if ((yy_buffer_stack_top) > 0)
+ --(yy_buffer_stack_top);
+
+ if (YY_CURRENT_BUFFER) {
+ H5LTyy_load_buffer_state( );
+ (yy_did_buffer_switch_on_eof) = 1;
}
+}
+/* Allocates the stack if it does not exist.
+ * Guarantees space for at least one push.
+ */
+static void H5LTyyensure_buffer_stack (void)
+{
+ yy_size_t num_to_alloc;
+
+ if (!(yy_buffer_stack)) {
+
+ /* First allocation is just for 2 elements, since we don't know if this
+ * scanner will even need a stack. We use 2 instead of 1 to avoid an
+ * immediate realloc on the next call.
+ */
+ num_to_alloc = 1;
+ (yy_buffer_stack) = (struct yy_buffer_state**)H5LTyyalloc
+ (num_to_alloc * sizeof(struct yy_buffer_state*)
+ );
+ if ( ! (yy_buffer_stack) )
+ YY_FATAL_ERROR( "out of dynamic memory in H5LTyyensure_buffer_stack()" );
+
+ memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*));
+
+ (yy_buffer_stack_max) = num_to_alloc;
+ (yy_buffer_stack_top) = 0;
+ return;
+ }
-#ifndef YY_NO_SCAN_BUFFER
-#ifdef YY_USE_PROTOS
-YY_BUFFER_STATE yy_scan_buffer( char *base, yy_size_t size )
-#else
-YY_BUFFER_STATE yy_scan_buffer( base, size )
-char *base;
-yy_size_t size;
-#endif
- {
- YY_BUFFER_STATE b;
+ if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){
+
+ /* Increase the buffer to prepare for a possible push. */
+ int grow_size = 8 /* arbitrary grow size */;
+
+ num_to_alloc = (yy_buffer_stack_max) + grow_size;
+ (yy_buffer_stack) = (struct yy_buffer_state**)H5LTyyrealloc
+ ((yy_buffer_stack),
+ num_to_alloc * sizeof(struct yy_buffer_state*)
+ );
+ if ( ! (yy_buffer_stack) )
+ YY_FATAL_ERROR( "out of dynamic memory in H5LTyyensure_buffer_stack()" );
+ /* zero only the new slots.*/
+ memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*));
+ (yy_buffer_stack_max) = num_to_alloc;
+ }
+}
+
+/** Setup the input buffer state to scan directly from a user-specified character buffer.
+ * @param base the character buffer
+ * @param size the size in bytes of the character buffer
+ *
+ * @return the newly allocated buffer state object.
+ */
+YY_BUFFER_STATE H5LTyy_scan_buffer (char * base, yy_size_t size )
+{
+ YY_BUFFER_STATE b;
+
if ( size < 2 ||
base[size-2] != YY_END_OF_BUFFER_CHAR ||
base[size-1] != YY_END_OF_BUFFER_CHAR )
/* They forgot to leave room for the EOB's. */
return 0;
- b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) );
+ b = (YY_BUFFER_STATE) H5LTyyalloc(sizeof( struct yy_buffer_state ) );
if ( ! b )
- YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" );
+ YY_FATAL_ERROR( "out of dynamic memory in H5LTyy_scan_buffer()" );
b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */
b->yy_buf_pos = b->yy_ch_buf = base;
@@ -2106,58 +2241,53 @@ yy_size_t size;
b->yy_fill_buffer = 0;
b->yy_buffer_status = YY_BUFFER_NEW;
- yy_switch_to_buffer( b );
+ H5LTyy_switch_to_buffer(b );
return b;
- }
-#endif
-
-
-#ifndef YY_NO_SCAN_STRING
-#ifdef YY_USE_PROTOS
-YY_BUFFER_STATE yy_scan_string( yyconst char *yy_str )
-#else
-YY_BUFFER_STATE yy_scan_string( yy_str )
-yyconst char *yy_str;
-#endif
- {
- int len;
- for ( len = 0; yy_str[len]; ++len )
- ;
-
- return yy_scan_bytes( yy_str, len );
- }
-#endif
+}
+/** Setup the input buffer state to scan a string. The next call to H5LTyylex() will
+ * scan from a @e copy of @a str.
+ * @param yystr a NUL-terminated string to scan
+ *
+ * @return the newly allocated buffer state object.
+ * @note If you want to scan bytes that may contain NUL values, then use
+ * H5LTyy_scan_bytes() instead.
+ */
+YY_BUFFER_STATE H5LTyy_scan_string (yyconst char * yystr )
+{
+
+ return H5LTyy_scan_bytes(yystr,strlen(yystr) );
+}
-#ifndef YY_NO_SCAN_BYTES
-#ifdef YY_USE_PROTOS
-YY_BUFFER_STATE yy_scan_bytes( yyconst char *bytes, int len )
-#else
-YY_BUFFER_STATE yy_scan_bytes( bytes, len )
-yyconst char *bytes;
-int len;
-#endif
- {
+/** Setup the input buffer state to scan the given bytes. The next call to H5LTyylex() will
+ * scan from a @e copy of @a bytes.
+ * @param yybytes the byte buffer to scan
+ * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes.
+ *
+ * @return the newly allocated buffer state object.
+ */
+YY_BUFFER_STATE H5LTyy_scan_bytes (yyconst char * yybytes, yy_size_t _yybytes_len )
+{
YY_BUFFER_STATE b;
char *buf;
yy_size_t n;
int i;
-
+
/* Get memory for full buffer, including space for trailing EOB's. */
- n = len + 2;
- buf = (char *) yy_flex_alloc( n );
+ n = _yybytes_len + 2;
+ buf = (char *) H5LTyyalloc(n );
if ( ! buf )
- YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" );
+ YY_FATAL_ERROR( "out of dynamic memory in H5LTyy_scan_bytes()" );
- for ( i = 0; i < len; ++i )
- buf[i] = bytes[i];
+ for ( i = 0; i < _yybytes_len; ++i )
+ buf[i] = yybytes[i];
- buf[len] = buf[len+1] = YY_END_OF_BUFFER_CHAR;
+ buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR;
- b = yy_scan_buffer( buf, n );
+ b = H5LTyy_scan_buffer(buf,n );
if ( ! b )
- YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" );
+ YY_FATAL_ERROR( "bad buffer in H5LTyy_scan_bytes()" );
/* It's okay to grow etc. this buffer, and we should throw it
* away when we're done.
@@ -2165,148 +2295,204 @@ int len;
b->yy_is_our_buffer = 1;
return b;
- }
+}
+
+#ifndef YY_EXIT_FAILURE
+#define YY_EXIT_FAILURE 2
#endif
+static void yy_fatal_error (yyconst char* msg )
+{
+ (void) fprintf( stderr, "%s\n", msg );
+ exit( YY_EXIT_FAILURE );
+}
-#ifndef YY_NO_PUSH_STATE
-#ifdef YY_USE_PROTOS
-static void yy_push_state( int new_state )
-#else
-static void yy_push_state( new_state )
-int new_state;
-#endif
- {
- if ( yy_start_stack_ptr >= yy_start_stack_depth )
- {
- yy_size_t new_size;
+/* Redefine yyless() so it works in section 3 code. */
- yy_start_stack_depth += YY_START_STACK_INCR;
- new_size = yy_start_stack_depth * sizeof( int );
+#undef yyless
+#define yyless(n) \
+ do \
+ { \
+ /* Undo effects of setting up H5LTyytext. */ \
+ int yyless_macro_arg = (n); \
+ YY_LESS_LINENO(yyless_macro_arg);\
+ H5LTyytext[H5LTyyleng] = (yy_hold_char); \
+ (yy_c_buf_p) = H5LTyytext + yyless_macro_arg; \
+ (yy_hold_char) = *(yy_c_buf_p); \
+ *(yy_c_buf_p) = '\0'; \
+ H5LTyyleng = yyless_macro_arg; \
+ } \
+ while ( 0 )
- if ( ! yy_start_stack )
- yy_start_stack = (int *) yy_flex_alloc( new_size );
+/* Accessor methods (get/set functions) to struct members. */
- else
- yy_start_stack = (int *) yy_flex_realloc(
- (void *) yy_start_stack, new_size );
+/** Get the current line number.
+ *
+ */
+int H5LTyyget_lineno (void)
+{
+
+ return H5LTyylineno;
+}
- if ( ! yy_start_stack )
- YY_FATAL_ERROR(
- "out of memory expanding start-condition stack" );
- }
+/** Get the input stream.
+ *
+ */
+FILE *H5LTyyget_in (void)
+{
+ return H5LTyyin;
+}
- yy_start_stack[yy_start_stack_ptr++] = YY_START;
+/** Get the output stream.
+ *
+ */
+FILE *H5LTyyget_out (void)
+{
+ return H5LTyyout;
+}
- BEGIN(new_state);
- }
-#endif
+/** Get the length of the current token.
+ *
+ */
+yy_size_t H5LTyyget_leng (void)
+{
+ return H5LTyyleng;
+}
+/** Get the current token.
+ *
+ */
-#ifndef YY_NO_POP_STATE
-static void yy_pop_state()
- {
- if ( --yy_start_stack_ptr < 0 )
- YY_FATAL_ERROR( "start-condition stack underflow" );
+char *H5LTyyget_text (void)
+{
+ return H5LTyytext;
+}
- BEGIN(yy_start_stack[yy_start_stack_ptr]);
- }
-#endif
+/** Set the current line number.
+ * @param line_number
+ *
+ */
+void H5LTyyset_lineno (int line_number )
+{
+
+ H5LTyylineno = line_number;
+}
+/** Set the input stream. This does not discard the current
+ * input buffer.
+ * @param in_str A readable stream.
+ *
+ * @see H5LTyy_switch_to_buffer
+ */
+void H5LTyyset_in (FILE * in_str )
+{
+ H5LTyyin = in_str ;
+}
-#ifndef YY_NO_TOP_STATE
-static int yy_top_state()
- {
- return yy_start_stack[yy_start_stack_ptr - 1];
- }
-#endif
+void H5LTyyset_out (FILE * out_str )
+{
+ H5LTyyout = out_str ;
+}
-#ifndef YY_EXIT_FAILURE
-#define YY_EXIT_FAILURE 2
-#endif
+int H5LTyyget_debug (void)
+{
+ return H5LTyy_flex_debug;
+}
+
+void H5LTyyset_debug (int bdebug )
+{
+ H5LTyy_flex_debug = bdebug ;
+}
-#ifdef YY_USE_PROTOS
-static void yy_fatal_error( yyconst char msg[] )
+static int yy_init_globals (void)
+{
+ /* Initialization is the same as for the non-reentrant scanner.
+ * This function is called from H5LTyylex_destroy(), so don't allocate here.
+ */
+
+ (yy_buffer_stack) = 0;
+ (yy_buffer_stack_top) = 0;
+ (yy_buffer_stack_max) = 0;
+ (yy_c_buf_p) = (char *) 0;
+ (yy_init) = 0;
+ (yy_start) = 0;
+
+ (yy_state_buf) = 0;
+ (yy_state_ptr) = 0;
+ (yy_full_match) = 0;
+ (yy_lp) = 0;
+
+/* Defined in main.c */
+#ifdef YY_STDINIT
+ H5LTyyin = stdin;
+ H5LTyyout = stdout;
#else
-static void yy_fatal_error( msg )
-char msg[];
+ H5LTyyin = (FILE *) 0;
+ H5LTyyout = (FILE *) 0;
#endif
- {
- (void) fprintf( stderr, "%s\n", msg );
- exit( YY_EXIT_FAILURE );
- }
+ /* For future reference: Set errno on error, since we are called by
+ * H5LTyylex_init()
+ */
+ return 0;
+}
+/* H5LTyylex_destroy is for both reentrant and non-reentrant scanners. */
+int H5LTyylex_destroy (void)
+{
+
+ /* Pop the buffer stack, destroying each element. */
+ while(YY_CURRENT_BUFFER){
+ H5LTyy_delete_buffer(YY_CURRENT_BUFFER );
+ YY_CURRENT_BUFFER_LVALUE = NULL;
+ H5LTyypop_buffer_state();
+ }
-/* Redefine yyless() so it works in section 3 code. */
+ /* Destroy the stack itself. */
+ H5LTyyfree((yy_buffer_stack) );
+ (yy_buffer_stack) = NULL;
-#undef yyless
-#define yyless(n) \
- do \
- { \
- /* Undo effects of setting up yytext. */ \
- yytext[yyleng] = yy_hold_char; \
- yy_c_buf_p = yytext + n; \
- yy_hold_char = *yy_c_buf_p; \
- *yy_c_buf_p = '\0'; \
- yyleng = n; \
- } \
- while ( 0 )
+ H5LTyyfree ( (yy_state_buf) );
+ (yy_state_buf) = NULL;
+
+ /* Reset the globals. This is important in a non-reentrant scanner so the next time
+ * H5LTyylex() is called, initialization will occur. */
+ yy_init_globals( );
+ return 0;
+}
-/* Internal utility routines. */
+/*
+ * Internal utility routines.
+ */
#ifndef yytext_ptr
-#ifdef YY_USE_PROTOS
-static void yy_flex_strncpy( char *s1, yyconst char *s2, int n )
-#else
-static void yy_flex_strncpy( s1, s2, n )
-char *s1;
-yyconst char *s2;
-int n;
-#endif
- {
+static void yy_flex_strncpy (char* s1, yyconst char * s2, int n )
+{
register int i;
for ( i = 0; i < n; ++i )
s1[i] = s2[i];
- }
+}
#endif
#ifdef YY_NEED_STRLEN
-#ifdef YY_USE_PROTOS
-static int yy_flex_strlen( yyconst char *s )
-#else
-static int yy_flex_strlen( s )
-yyconst char *s;
-#endif
- {
+static int yy_flex_strlen (yyconst char * s )
+{
register int n;
for ( n = 0; s[n]; ++n )
;
return n;
- }
+}
#endif
-
-#ifdef YY_USE_PROTOS
-static void *yy_flex_alloc( yy_size_t size )
-#else
-static void *yy_flex_alloc( size )
-yy_size_t size;
-#endif
- {
+void *H5LTyyalloc (yy_size_t size )
+{
return (void *) malloc( size );
- }
+}
-#ifdef YY_USE_PROTOS
-static void *yy_flex_realloc( void *ptr, yy_size_t size )
-#else
-static void *yy_flex_realloc( ptr, size )
-void *ptr;
-yy_size_t size;
-#endif
- {
+void *H5LTyyrealloc (void * ptr, yy_size_t size )
+{
/* The cast to (char *) in the following accommodates both
* implementations that use char* generic pointers, and those
* that use void* generic pointers. It works with the latter
@@ -2315,26 +2501,17 @@ yy_size_t size;
* as though doing an assignment.
*/
return (void *) realloc( (char *) ptr, size );
- }
+}
-#ifdef YY_USE_PROTOS
-static void yy_flex_free( void *ptr )
-#else
-static void yy_flex_free( ptr )
-void *ptr;
-#endif
- {
- free( ptr );
- }
+void H5LTyyfree (void * ptr )
+{
+ free( (char *) ptr ); /* see H5LTyyrealloc() for (char *) cast */
+}
+
+#define YYTABLES_NAME "yytables"
+
+#line 175 "H5LTanalyze.l"
-#if YY_MAIN
-int main()
- {
- yylex();
- return 0;
- }
-#endif
-#line 174 "H5LTanalyze.l"
int my_yyinput(char *buf, int max_size)
{
@@ -2347,11 +2524,12 @@ int my_yyinput(char *buf, int max_size)
int H5LTyyerror(const char *msg)
{
- printf("ERROR: %s before \"%s\".\n", msg, yytext);
+ printf("ERROR: %s before \"%s\".\n", msg, H5LTyytext);
return 0;
}
-int yywrap()
+int H5LTyywrap()
{
return(1);
}
+
diff --git a/hl/src/H5LTanalyze.l b/hl/src/H5LTanalyze.l
index 9682f78..6c883fc 100644
--- a/hl/src/H5LTanalyze.l
+++ b/hl/src/H5LTanalyze.l
@@ -23,6 +23,7 @@ int my_yyinput(char *, int);
#undef YY_INPUT
#define YY_INPUT(b, r, ms) (r=my_yyinput(b, ms))
#define token(x) (int)x
+#define hid(x) (hid_t)x
#ifdef YY_BUF_SIZE
#undef YY_BUF_SIZE
@@ -71,43 +72,43 @@ hbool_t first_quote = 1;
%%
-H5T_STD_I8BE {return token(H5T_STD_I8BE_TOKEN);}
-H5T_STD_I8LE {return token(H5T_STD_I8LE_TOKEN);}
-H5T_STD_I16BE {return token(H5T_STD_I16BE_TOKEN);}
-H5T_STD_I16LE {return token(H5T_STD_I16LE_TOKEN);}
-H5T_STD_I32BE {return token(H5T_STD_I32BE_TOKEN);}
-H5T_STD_I32LE {return token(H5T_STD_I32LE_TOKEN);}
-H5T_STD_I64BE {return token(H5T_STD_I64BE_TOKEN);}
-H5T_STD_I64LE {return token(H5T_STD_I64LE_TOKEN);}
-
-H5T_STD_U8BE {return token(H5T_STD_U8BE_TOKEN);}
-H5T_STD_U8LE {return token(H5T_STD_U8LE_TOKEN);}
-H5T_STD_U16BE {return token(H5T_STD_U16BE_TOKEN);}
-H5T_STD_U16LE {return token(H5T_STD_U16LE_TOKEN);}
-H5T_STD_U32BE {return token(H5T_STD_U32BE_TOKEN);}
-H5T_STD_U32LE {return token(H5T_STD_U32LE_TOKEN);}
-H5T_STD_U64BE {return token(H5T_STD_U64BE_TOKEN);}
-H5T_STD_U64LE {return token(H5T_STD_U64LE_TOKEN);}
-
-H5T_NATIVE_CHAR {return token(H5T_NATIVE_CHAR_TOKEN);}
-H5T_NATIVE_SCHAR {return token(H5T_NATIVE_SCHAR_TOKEN);}
-H5T_NATIVE_UCHAR {return token(H5T_NATIVE_UCHAR_TOKEN);}
-H5T_NATIVE_SHORT {return token(H5T_NATIVE_SHORT_TOKEN);}
-H5T_NATIVE_USHORT {return token(H5T_NATIVE_USHORT_TOKEN);}
-H5T_NATIVE_INT {return token(H5T_NATIVE_INT_TOKEN);}
-H5T_NATIVE_UINT {return token(H5T_NATIVE_UINT_TOKEN);}
-H5T_NATIVE_LONG {return token(H5T_NATIVE_LONG_TOKEN);}
-H5T_NATIVE_ULONG {return token(H5T_NATIVE_ULONG_TOKEN);}
-H5T_NATIVE_LLONG {return token(H5T_NATIVE_LLONG_TOKEN);}
-H5T_NATIVE_ULLONG {return token(H5T_NATIVE_ULLONG_TOKEN);}
-
-H5T_IEEE_F32BE {return token(H5T_IEEE_F32BE_TOKEN);}
-H5T_IEEE_F32LE {return token(H5T_IEEE_F32LE_TOKEN);}
-H5T_IEEE_F64BE {return token(H5T_IEEE_F64BE_TOKEN);}
-H5T_IEEE_F64LE {return token(H5T_IEEE_F64LE_TOKEN);}
-H5T_NATIVE_FLOAT {return token(H5T_NATIVE_FLOAT_TOKEN);}
-H5T_NATIVE_DOUBLE {return token(H5T_NATIVE_DOUBLE_TOKEN);}
-H5T_NATIVE_LDOUBLE {return token(H5T_NATIVE_LDOUBLE_TOKEN);}
+H5T_STD_I8BE {return hid(H5T_STD_I8BE_TOKEN);}
+H5T_STD_I8LE {return hid(H5T_STD_I8LE_TOKEN);}
+H5T_STD_I16BE {return hid(H5T_STD_I16BE_TOKEN);}
+H5T_STD_I16LE {return hid(H5T_STD_I16LE_TOKEN);}
+H5T_STD_I32BE {return hid(H5T_STD_I32BE_TOKEN);}
+H5T_STD_I32LE {return hid(H5T_STD_I32LE_TOKEN);}
+H5T_STD_I64BE {return hid(H5T_STD_I64BE_TOKEN);}
+H5T_STD_I64LE {return hid(H5T_STD_I64LE_TOKEN);}
+
+H5T_STD_U8BE {return hid(H5T_STD_U8BE_TOKEN);}
+H5T_STD_U8LE {return hid(H5T_STD_U8LE_TOKEN);}
+H5T_STD_U16BE {return hid(H5T_STD_U16BE_TOKEN);}
+H5T_STD_U16LE {return hid(H5T_STD_U16LE_TOKEN);}
+H5T_STD_U32BE {return hid(H5T_STD_U32BE_TOKEN);}
+H5T_STD_U32LE {return hid(H5T_STD_U32LE_TOKEN);}
+H5T_STD_U64BE {return hid(H5T_STD_U64BE_TOKEN);}
+H5T_STD_U64LE {return hid(H5T_STD_U64LE_TOKEN);}
+
+H5T_NATIVE_CHAR {return hid(H5T_NATIVE_CHAR_TOKEN);}
+H5T_NATIVE_SCHAR {return hid(H5T_NATIVE_SCHAR_TOKEN);}
+H5T_NATIVE_UCHAR {return hid(H5T_NATIVE_UCHAR_TOKEN);}
+H5T_NATIVE_SHORT {return hid(H5T_NATIVE_SHORT_TOKEN);}
+H5T_NATIVE_USHORT {return hid(H5T_NATIVE_USHORT_TOKEN);}
+H5T_NATIVE_INT {return hid(H5T_NATIVE_INT_TOKEN);}
+H5T_NATIVE_UINT {return hid(H5T_NATIVE_UINT_TOKEN);}
+H5T_NATIVE_LONG {return hid(H5T_NATIVE_LONG_TOKEN);}
+H5T_NATIVE_ULONG {return hid(H5T_NATIVE_ULONG_TOKEN);}
+H5T_NATIVE_LLONG {return hid(H5T_NATIVE_LLONG_TOKEN);}
+H5T_NATIVE_ULLONG {return hid(H5T_NATIVE_ULLONG_TOKEN);}
+
+H5T_IEEE_F32BE {return hid(H5T_IEEE_F32BE_TOKEN);}
+H5T_IEEE_F32LE {return hid(H5T_IEEE_F32LE_TOKEN);}
+H5T_IEEE_F64BE {return hid(H5T_IEEE_F64BE_TOKEN);}
+H5T_IEEE_F64LE {return hid(H5T_IEEE_F64LE_TOKEN);}
+H5T_NATIVE_FLOAT {return hid(H5T_NATIVE_FLOAT_TOKEN);}
+H5T_NATIVE_DOUBLE {return hid(H5T_NATIVE_DOUBLE_TOKEN);}
+H5T_NATIVE_LDOUBLE {return hid(H5T_NATIVE_LDOUBLE_TOKEN);}
H5T_STRING {return token(H5T_STRING_TOKEN);}
STRSIZE {return token(STRSIZE_TOKEN);}
diff --git a/hl/src/H5LTparse.c b/hl/src/H5LTparse.c
index 4527a5f..aa12185 100644
--- a/hl/src/H5LTparse.c
+++ b/hl/src/H5LTparse.c
@@ -1,63 +1,77 @@
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * Copyright by The HDF Group. *
- * Copyright by the Board of Trustees of the University of Illinois. *
- * All rights reserved. *
- * *
- * This file is part of HDF5. The full HDF5 copyright notice, including *
- * terms governing use, modification, and redistribution, is contained in *
- * the files COPYING and Copyright.html. COPYING can be found at the root *
- * of the source code distribution tree; Copyright.html can be found at the *
- * root level of an installed copy of the electronic HDF5 document set and *
- * is linked from the top-level documents page. It can also be found at *
- * http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have *
- * access to either file, you may request a copy from help at hdfgroup.org. *
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-
-/* This file was generated by Yacc with the command "yacc -pH5LTyy -o H5LTparse.c -d H5LTparse.y"
- * on jam. Do NOT modify it by hand.
- */
-#ifndef lint
-static char const
-yyrcsid[] = "$FreeBSD: src/usr.bin/yacc/skeleton.c,v 1.28 2000/01/17 02:04:06 bde Exp $";
-#endif
-#include <stdlib.h>
-#define YYBYACC 1
-#define YYMAJOR 1
-#define YYMINOR 9
-#define YYLEX yylex()
-#define YYEMPTY -1
-#define yyclearin (yychar=(YYEMPTY))
-#define yyerrok (yyerrflag=0)
-#define YYRECOVERING() (yyerrflag!=0)
-static int yygrowstack();
-#define yyparse H5LTyyparse
-#define yylex H5LTyylex
-#define yyerror H5LTyyerror
-#define yychar H5LTyychar
-#define yyval H5LTyyval
-#define yylval H5LTyylval
-#define yydebug H5LTyydebug
-#define yynerrs H5LTyynerrs
-#define yyerrflag H5LTyyerrflag
-#define yyss H5LTyyss
-#define yyssp H5LTyyssp
-#define yyvs H5LTyyvs
-#define yyvsp H5LTyyvsp
-#define yylhs H5LTyylhs
-#define yylen H5LTyylen
-#define yydefred H5LTyydefred
-#define yydgoto H5LTyydgoto
-#define yysindex H5LTyysindex
-#define yyrindex H5LTyyrindex
-#define yygindex H5LTyygindex
-#define yytable H5LTyytable
-#define yycheck H5LTyycheck
-#define yyname H5LTyyname
-#define yyrule H5LTyyrule
-#define yysslim H5LTyysslim
-#define yystacksize H5LTyystacksize
-#define YYPREFIX "H5LTyy"
-#line 17 "H5LTparse.y"
+/* A Bison parser, made by GNU Bison 2.7. */
+
+/* Bison implementation for Yacc-like parsers in C
+
+ Copyright (C) 1984, 1989-1990, 2000-2012 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
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+/* As a special exception, you may create a larger work that contains
+ part or all of the Bison parser skeleton and distribute that work
+ under terms of your choice, so long as that work isn't itself a
+ parser generator using the skeleton or a modified version thereof
+ as a parser skeleton. Alternatively, if you modify or redistribute
+ the parser skeleton itself, you may (at your option) remove this
+ special exception, which will cause the skeleton and the resulting
+ Bison output files to be licensed under the GNU General Public
+ License without this special exception.
+
+ This special exception was added by the Free Software Foundation in
+ version 2.2 of Bison. */
+
+/* C LALR(1) parser skeleton written by Richard Stallman, by
+ simplifying the original so-called "semantic" parser. */
+
+/* All symbols defined below should begin with yy or YY, to avoid
+ infringing on user name space. This should be done even for local
+ variables, as they might otherwise be expanded by user macros.
+ There are some unavoidable exceptions within include files to
+ define necessary library symbols; they are noted "INFRINGES ON
+ USER NAME SPACE" below. */
+
+/* Identify Bison output. */
+#define YYBISON 1
+
+/* Bison version. */
+#define YYBISON_VERSION "2.7"
+
+/* Skeleton name. */
+#define YYSKELETON_NAME "yacc.c"
+
+/* Pure parsers. */
+#define YYPURE 0
+
+/* Push parsers. */
+#define YYPUSH 0
+
+/* Pull parsers. */
+#define YYPULL 1
+
+
+/* Substitute the variable and function names. */
+#define yyparse H5LTyyparse
+#define yylex H5LTyylex
+#define yyerror H5LTyyerror
+#define yylval H5LTyylval
+#define yychar H5LTyychar
+#define yydebug H5LTyydebug
+#define yynerrs H5LTyynerrs
+
+/* Copy the first part of user declarations. */
+/* Line 371 of yacc.c */
+#line 16 "H5LTparse.y"
+
#include <stdio.h>
#include <string.h>
#include <hdf5.h>
@@ -91,7 +105,7 @@ struct arr_info {
};
/*stack for nested array type*/
struct arr_info arr_stack[STACK_SIZE];
-int asindex = -1; /*pointer to the top of array stack*/
+int asindex = -1; /*pointer to the top of array stack*/
hbool_t is_str_size = 0; /*flag to lexer for string size*/
hbool_t is_str_pad = 0; /*flag to lexer for string padding*/
@@ -99,7 +113,7 @@ H5T_str_t str_pad; /*variable for string padding*/
H5T_cset_t str_cset; /*variable for string character set*/
hbool_t is_variable = 0; /*variable for variable-length string*/
size_t str_size; /*variable for string size*/
-
+
hid_t enum_id; /*type ID*/
hbool_t is_enum = 0; /*flag to lexer for enum type*/
hbool_t is_enum_memb = 0; /*flag to lexer for enum member*/
@@ -108,881 +122,1933 @@ char* enum_memb_symbol; /*enum member symbol string*/
hbool_t is_opq_size = 0; /*flag to lexer for opaque type size*/
hbool_t is_opq_tag = 0; /*flag to lexer for opaque type tag*/
+
+/* Line 371 of yacc.c */
+#line 128 "H5LTparse.c"
+
+# ifndef YY_NULL
+# if defined __cplusplus && 201103L <= __cplusplus
+# define YY_NULL nullptr
+# else
+# define YY_NULL 0
+# endif
+# endif
+
+/* Enabling verbose error messages. */
+#ifdef YYERROR_VERBOSE
+# undef YYERROR_VERBOSE
+# define YYERROR_VERBOSE 1
+#else
+# define YYERROR_VERBOSE 0
+#endif
+
+/* In a future release of Bison, this section will be replaced
+ by #include "H5LTparse.h". */
+#ifndef YY_H5LTYY_H5LTPARSE_H_INCLUDED
+# define YY_H5LTYY_H5LTPARSE_H_INCLUDED
+/* Enabling traces. */
+#ifndef YYDEBUG
+# define YYDEBUG 0
+#endif
+#if YYDEBUG
+extern int H5LTyydebug;
+#endif
+
+/* Tokens. */
+#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
+ };
+#endif
+
+
+#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
+typedef union YYSTYPE
+{
+/* Line 387 of yacc.c */
#line 68 "H5LTparse.y"
-typedef union {
- int ival; /*for integer token*/
- char *sval; /*for name string*/
+
+ int ival; /*for integer token*/
+ char *sval; /*for name string*/
+ hid_t hid; /*for hid_t token*/
+
+
+/* Line 387 of yacc.c */
+#line 236 "H5LTparse.c"
} YYSTYPE;
-#line 117 "H5LTparse.c"
-#define YYERRCODE 256
-#define H5T_STD_I8BE_TOKEN 257
-#define H5T_STD_I8LE_TOKEN 258
-#define H5T_STD_I16BE_TOKEN 259
-#define H5T_STD_I16LE_TOKEN 260
-#define H5T_STD_I32BE_TOKEN 261
-#define H5T_STD_I32LE_TOKEN 262
-#define H5T_STD_I64BE_TOKEN 263
-#define H5T_STD_I64LE_TOKEN 264
-#define H5T_STD_U8BE_TOKEN 265
-#define H5T_STD_U8LE_TOKEN 266
-#define H5T_STD_U16BE_TOKEN 267
-#define H5T_STD_U16LE_TOKEN 268
-#define H5T_STD_U32BE_TOKEN 269
-#define H5T_STD_U32LE_TOKEN 270
-#define H5T_STD_U64BE_TOKEN 271
-#define H5T_STD_U64LE_TOKEN 272
-#define H5T_NATIVE_CHAR_TOKEN 273
-#define H5T_NATIVE_SCHAR_TOKEN 274
-#define H5T_NATIVE_UCHAR_TOKEN 275
-#define H5T_NATIVE_SHORT_TOKEN 276
-#define H5T_NATIVE_USHORT_TOKEN 277
-#define H5T_NATIVE_INT_TOKEN 278
-#define H5T_NATIVE_UINT_TOKEN 279
-#define H5T_NATIVE_LONG_TOKEN 280
-#define H5T_NATIVE_ULONG_TOKEN 281
-#define H5T_NATIVE_LLONG_TOKEN 282
-#define H5T_NATIVE_ULLONG_TOKEN 283
-#define H5T_IEEE_F32BE_TOKEN 284
-#define H5T_IEEE_F32LE_TOKEN 285
-#define H5T_IEEE_F64BE_TOKEN 286
-#define H5T_IEEE_F64LE_TOKEN 287
-#define H5T_NATIVE_FLOAT_TOKEN 288
-#define H5T_NATIVE_DOUBLE_TOKEN 289
-#define H5T_NATIVE_LDOUBLE_TOKEN 290
-#define H5T_STRING_TOKEN 291
-#define STRSIZE_TOKEN 292
-#define STRPAD_TOKEN 293
-#define CSET_TOKEN 294
-#define CTYPE_TOKEN 295
-#define H5T_VARIABLE_TOKEN 296
-#define H5T_STR_NULLTERM_TOKEN 297
-#define H5T_STR_NULLPAD_TOKEN 298
-#define H5T_STR_SPACEPAD_TOKEN 299
-#define H5T_CSET_ASCII_TOKEN 300
-#define H5T_CSET_UTF8_TOKEN 301
-#define H5T_C_S1_TOKEN 302
-#define H5T_FORTRAN_S1_TOKEN 303
-#define H5T_OPAQUE_TOKEN 304
-#define OPQ_SIZE_TOKEN 305
-#define OPQ_TAG_TOKEN 306
-#define H5T_COMPOUND_TOKEN 307
-#define H5T_ENUM_TOKEN 308
-#define H5T_ARRAY_TOKEN 309
-#define H5T_VLEN_TOKEN 310
-#define STRING 311
-#define NUMBER 312
-const short H5LTyylhs[] = { -1,
- 0, 0, 1, 1, 1, 1, 2, 2, 2, 2,
- 2, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 7, 7,
- 7, 7, 7, 7, 7, 11, 3, 12, 12, 14,
- 13, 15, 16, 16, 17, 18, 4, 19, 19, 22,
- 23, 20, 21, 5, 25, 26, 27, 29, 10, 24,
- 28, 31, 32, 34, 36, 38, 8, 30, 30, 33,
- 33, 33, 35, 35, 37, 37, 40, 9, 39, 39,
- 44, 41, 42, 43,
+# 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
+hid_t H5LTyyparse (void *YYPARSE_PARAM);
+#else
+hid_t H5LTyyparse ();
+#endif
+#else /* ! YYPARSE_PARAM */
+#if defined __STDC__ || defined __cplusplus
+hid_t H5LTyyparse (void);
+#else
+hid_t H5LTyyparse ();
+#endif
+#endif /* ! YYPARSE_PARAM */
+
+#endif /* !YY_H5LTYY_H5LTPARSE_H_INCLUDED */
+
+/* Copy the second part of user declarations. */
+
+/* Line 390 of yacc.c */
+#line 264 "H5LTparse.c"
+
+#ifdef short
+# undef short
+#endif
+
+#ifdef YYTYPE_UINT8
+typedef YYTYPE_UINT8 yytype_uint8;
+#else
+typedef unsigned char yytype_uint8;
+#endif
+
+#ifdef YYTYPE_INT8
+typedef YYTYPE_INT8 yytype_int8;
+#elif (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+typedef signed char yytype_int8;
+#else
+typedef short int yytype_int8;
+#endif
+
+#ifdef YYTYPE_UINT16
+typedef YYTYPE_UINT16 yytype_uint16;
+#else
+typedef unsigned short int yytype_uint16;
+#endif
+
+#ifdef YYTYPE_INT16
+typedef YYTYPE_INT16 yytype_int16;
+#else
+typedef short int yytype_int16;
+#endif
+
+#ifndef YYSIZE_T
+# ifdef __SIZE_TYPE__
+# define YYSIZE_T __SIZE_TYPE__
+# elif defined size_t
+# define YYSIZE_T size_t
+# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+# include <stddef.h> /* INFRINGES ON USER NAME SPACE */
+# define YYSIZE_T size_t
+# else
+# define YYSIZE_T unsigned int
+# endif
+#endif
+
+#define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
+
+#ifndef YY_
+# if defined YYENABLE_NLS && YYENABLE_NLS
+# if ENABLE_NLS
+# include <libintl.h> /* INFRINGES ON USER NAME SPACE */
+# define YY_(Msgid) dgettext ("bison-runtime", Msgid)
+# endif
+# endif
+# ifndef YY_
+# define YY_(Msgid) Msgid
+# endif
+#endif
+
+/* Suppress unused-variable warnings by "using" E. */
+#if ! defined lint || defined __GNUC__
+# define YYUSE(E) ((void) (E))
+#else
+# define YYUSE(E) /* empty */
+#endif
+
+/* Identity function, used to suppress warnings about constant conditions. */
+#ifndef lint
+# define YYID(N) (N)
+#else
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static int
+YYID (int yyi)
+#else
+static int
+YYID (yyi)
+ int yyi;
+#endif
+{
+ return yyi;
+}
+#endif
+
+#if ! defined yyoverflow || YYERROR_VERBOSE
+
+/* The parser invokes alloca or malloc; define the necessary symbols. */
+
+# ifdef YYSTACK_USE_ALLOCA
+# if YYSTACK_USE_ALLOCA
+# ifdef __GNUC__
+# define YYSTACK_ALLOC __builtin_alloca
+# elif defined __BUILTIN_VA_ARG_INCR
+# include <alloca.h> /* INFRINGES ON USER NAME SPACE */
+# elif defined _AIX
+# define YYSTACK_ALLOC __alloca
+# elif defined _MSC_VER
+# include <malloc.h> /* INFRINGES ON USER NAME SPACE */
+# define alloca _alloca
+# else
+# define YYSTACK_ALLOC alloca
+# if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+ /* Use EXIT_SUCCESS as a witness for stdlib.h. */
+# ifndef EXIT_SUCCESS
+# define EXIT_SUCCESS 0
+# endif
+# endif
+# endif
+# endif
+# endif
+
+# ifdef YYSTACK_ALLOC
+ /* Pacify GCC's `empty if-body' warning. */
+# define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
+# ifndef YYSTACK_ALLOC_MAXIMUM
+ /* The OS might guarantee only one guard page at the bottom of the stack,
+ and a page size can be as small as 4096 bytes. So we cannot safely
+ invoke alloca (N) if N exceeds 4096. Use a slightly smaller number
+ to allow for a few compiler-allocated temporary stack slots. */
+# define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
+# endif
+# else
+# define YYSTACK_ALLOC YYMALLOC
+# define YYSTACK_FREE YYFREE
+# ifndef YYSTACK_ALLOC_MAXIMUM
+# define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
+# endif
+# if (defined __cplusplus && ! defined EXIT_SUCCESS \
+ && ! ((defined YYMALLOC || defined malloc) \
+ && (defined YYFREE || defined free)))
+# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+# ifndef EXIT_SUCCESS
+# define EXIT_SUCCESS 0
+# endif
+# endif
+# ifndef YYMALLOC
+# define YYMALLOC malloc
+# if ! defined malloc && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
+# endif
+# endif
+# ifndef YYFREE
+# define YYFREE free
+# if ! defined free && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+void free (void *); /* INFRINGES ON USER NAME SPACE */
+# endif
+# endif
+# endif
+#endif /* ! defined yyoverflow || YYERROR_VERBOSE */
+
+
+#if (! defined yyoverflow \
+ && (! defined __cplusplus \
+ || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
+
+/* A type that is properly aligned for any stack member. */
+union yyalloc
+{
+ yytype_int16 yyss_alloc;
+ YYSTYPE yyvs_alloc;
};
-const short H5LTyylen[] = { 2,
- 0, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 0, 5, 0, 2, 0,
- 7, 1, 0, 2, 1, 0, 6, 0, 2, 0,
- 0, 5, 1, 4, 0, 0, 0, 0, 15, 1,
- 1, 0, 0, 0, 0, 0, 20, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 0, 7, 0, 2,
- 0, 6, 1, 1,
+
+/* The size of the maximum gap between one aligned stack and the next. */
+# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
+
+/* The size of an array large to enough to hold all stacks, each with
+ N elements. */
+# define YYSTACK_BYTES(N) \
+ ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
+ + YYSTACK_GAP_MAXIMUM)
+
+# define YYCOPY_NEEDED 1
+
+/* Relocate STACK from its old location to the new one. The
+ local variables YYSIZE and YYSTACKSIZE give the old and new number of
+ elements in the stack, and YYPTR gives the new location of the
+ stack. Advance YYPTR to a properly aligned location for the next
+ stack. */
+# define YYSTACK_RELOCATE(Stack_alloc, Stack) \
+ do \
+ { \
+ YYSIZE_T yynewbytes; \
+ YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \
+ Stack = &yyptr->Stack_alloc; \
+ yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
+ yyptr += yynewbytes / sizeof (*yyptr); \
+ } \
+ while (YYID (0))
+
+#endif
+
+#if defined YYCOPY_NEEDED && YYCOPY_NEEDED
+/* Copy COUNT objects from SRC to DST. The source and destination do
+ not overlap. */
+# ifndef YYCOPY
+# if defined __GNUC__ && 1 < __GNUC__
+# define YYCOPY(Dst, Src, Count) \
+ __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src)))
+# else
+# define YYCOPY(Dst, Src, Count) \
+ do \
+ { \
+ YYSIZE_T yyi; \
+ for (yyi = 0; yyi < (Count); yyi++) \
+ (Dst)[yyi] = (Src)[yyi]; \
+ } \
+ while (YYID (0))
+# endif
+# endif
+#endif /* !YYCOPY_NEEDED */
+
+/* YYFINAL -- State number of the termination state. */
+#define YYFINAL 58
+/* YYLAST -- Last index in YYTABLE. */
+#define YYLAST 203
+
+/* YYNTOKENS -- Number of terminals. */
+#define YYNTOKENS 66
+/* YYNNTS -- Number of nonterminals. */
+#define YYNNTS 46
+/* YYNRULES -- Number of rules. */
+#define YYNRULES 95
+/* YYNRULES -- Number of states. */
+#define YYNSTATES 143
+
+/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
+#define YYUNDEFTOK 2
+#define YYMAXUTOK 313
+
+#define YYTRANSLATE(YYX) \
+ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
+
+/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */
+static const yytype_uint8 yytranslate[] =
+{
+ 0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 63, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 64, 65,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 61, 2, 62, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 59, 2, 60, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
+ 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
+ 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
+ 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
+ 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
+ 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
+ 55, 56, 57, 58
};
-const short H5LTyydefred[] = { 0,
- 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
- 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
- 32, 33, 34, 35, 36, 37, 38, 39, 40, 41,
- 42, 43, 44, 45, 0, 0, 46, 0, 56, 0,
- 0, 2, 3, 4, 5, 6, 7, 8, 9, 10,
- 11, 0, 0, 0, 0, 0, 0, 72, 65, 48,
- 0, 58, 0, 0, 0, 0, 87, 0, 64, 78,
- 79, 0, 70, 0, 47, 50, 49, 89, 60, 0,
- 59, 73, 66, 0, 0, 0, 57, 0, 0, 0,
- 88, 0, 90, 63, 61, 0, 67, 52, 0, 93,
- 0, 0, 80, 81, 82, 0, 0, 0, 91, 62,
- 74, 0, 0, 0, 0, 0, 71, 0, 55, 54,
- 51, 94, 0, 0, 0, 92, 83, 84, 0, 68,
- 75, 0, 0, 69, 0, 85, 86, 0, 76, 0,
- 77,
+
+#if YYDEBUG
+/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
+ YYRHS. */
+static const yytype_uint8 yyprhs[] =
+{
+ 0, 0, 3, 4, 6, 8, 10, 12, 14, 16,
+ 18, 20, 22, 24, 26, 28, 30, 32, 34, 36,
+ 38, 40, 42, 44, 46, 48, 50, 52, 54, 56,
+ 58, 60, 62, 64, 66, 68, 70, 72, 74, 76,
+ 78, 80, 82, 84, 86, 88, 90, 92, 93, 99,
+ 100, 103, 104, 112, 114, 115, 118, 120, 121, 128,
+ 129, 132, 133, 134, 140, 142, 147, 148, 149, 150,
+ 151, 167, 169, 171, 172, 173, 174, 175, 176, 197,
+ 199, 201, 203, 205, 207, 209, 211, 213, 215, 216,
+ 224, 225, 228, 229, 236, 238
};
-const short H5LTyydgoto[] = { 41,
- 42, 43, 44, 45, 46, 47, 48, 49, 50, 51,
- 54, 66, 77, 84, 99, 114, 120, 56, 68, 81,
- 95, 86, 102, 74, 65, 89, 107, 118, 132, 72,
- 64, 88, 106, 116, 129, 133, 138, 140, 85, 78,
- 93, 101, 123, 115,
+
+/* YYRHS -- A `-1'-separated list of the rules' RHS. */
+static const yytype_int8 yyrhs[] =
+{
+ 67, 0, -1, -1, 68, -1, 69, -1, 72, -1,
+ 80, -1, 87, -1, 70, -1, 71, -1, 95, -1,
+ 105, -1, 88, -1, 3, -1, 4, -1, 5, -1,
+ 6, -1, 7, -1, 8, -1, 9, -1, 10, -1,
+ 11, -1, 12, -1, 13, -1, 14, -1, 15, -1,
+ 16, -1, 17, -1, 18, -1, 19, -1, 20, -1,
+ 21, -1, 22, -1, 23, -1, 24, -1, 25, -1,
+ 26, -1, 27, -1, 28, -1, 29, -1, 30, -1,
+ 31, -1, 32, -1, 33, -1, 34, -1, 35, -1,
+ 36, -1, -1, 53, 73, 59, 74, 60, -1, -1,
+ 74, 75, -1, -1, 68, 76, 63, 77, 63, 78,
+ 65, -1, 57, -1, -1, 64, 79, -1, 58, -1,
+ -1, 55, 81, 59, 82, 68, 60, -1, -1, 82,
+ 83, -1, -1, -1, 61, 84, 86, 85, 62, -1,
+ 58, -1, 56, 59, 68, 60, -1, -1, -1, -1,
+ -1, 50, 59, 51, 89, 93, 65, 90, 52, 91,
+ 63, 94, 63, 65, 92, 60, -1, 58, -1, 57,
+ -1, -1, -1, -1, -1, -1, 37, 59, 38, 96,
+ 101, 65, 97, 39, 102, 65, 98, 40, 103, 65,
+ 99, 41, 104, 65, 100, 60, -1, 42, -1, 58,
+ -1, 43, -1, 44, -1, 45, -1, 46, -1, 47,
+ -1, 48, -1, 49, -1, -1, 54, 59, 70, 65,
+ 106, 107, 60, -1, -1, 107, 108, -1, -1, 63,
+ 110, 63, 109, 111, 65, -1, 57, -1, 58, -1
};
-const short H5LTyysindex[] = { -255,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, -82, -79, 0, -78, 0, -76,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, -208, -220, -36, -201, -34, -255, 0, 0, 0,
- 27, 0, -35, -213, -221, -37, 0, -91, 0, 0,
- 0, 34, 0, 35, 0, 0, 0, 0, 0, -30,
- 0, 0, 0, 62, -33, -215, 0, -195, -206, -210,
- 0, -209, 0, 0, 0, -259, 0, 0, 69, 0,
- 70, 12, 0, 0, 0, 47, 73, 50, 0, 0,
- 0, -202, -200, 51, -199, -183, 0, 80, 0, 0,
- 0, 0, 56, -258, 57, 0, 0, 0, 58, 0,
- 0, -7, -176, 0, -252, 0, 0, 61, 0, -4,
- 0,
+
+/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
+static const yytype_uint16 yyrline[] =
+{
+ 0, 101, 101, 102, 104, 105, 106, 107, 109, 110,
+ 111, 112, 113, 116, 117, 118, 119, 120, 121, 122,
+ 123, 124, 125, 126, 127, 128, 129, 130, 131, 132,
+ 133, 134, 135, 136, 137, 138, 139, 140, 141, 142,
+ 145, 146, 147, 148, 149, 150, 151, 155, 154, 163,
+ 164, 166, 166, 200, 206, 207, 210, 212, 212, 221,
+ 222, 224, 225, 224, 232, 235, 241, 242, 247, 248,
+ 239, 254, 256, 260, 261, 269, 278, 285, 258, 309,
+ 310, 312, 313, 314, 316, 317, 319, 320, 324, 323,
+ 328, 329, 331, 331, 383, 385
};
-const short H5LTyyrindex[] = { 122,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 64, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0,
+#endif
+
+#if YYDEBUG || YYERROR_VERBOSE || 0
+/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
+ First, the terminals, then, starting at YYNTOKENS, nonterminals. */
+static const char *const yytname[] =
+{
+ "$end", "error", "$undefined", "H5T_STD_I8BE_TOKEN",
+ "H5T_STD_I8LE_TOKEN", "H5T_STD_I16BE_TOKEN", "H5T_STD_I16LE_TOKEN",
+ "H5T_STD_I32BE_TOKEN", "H5T_STD_I32LE_TOKEN", "H5T_STD_I64BE_TOKEN",
+ "H5T_STD_I64LE_TOKEN", "H5T_STD_U8BE_TOKEN", "H5T_STD_U8LE_TOKEN",
+ "H5T_STD_U16BE_TOKEN", "H5T_STD_U16LE_TOKEN", "H5T_STD_U32BE_TOKEN",
+ "H5T_STD_U32LE_TOKEN", "H5T_STD_U64BE_TOKEN", "H5T_STD_U64LE_TOKEN",
+ "H5T_NATIVE_CHAR_TOKEN", "H5T_NATIVE_SCHAR_TOKEN",
+ "H5T_NATIVE_UCHAR_TOKEN", "H5T_NATIVE_SHORT_TOKEN",
+ "H5T_NATIVE_USHORT_TOKEN", "H5T_NATIVE_INT_TOKEN",
+ "H5T_NATIVE_UINT_TOKEN", "H5T_NATIVE_LONG_TOKEN",
+ "H5T_NATIVE_ULONG_TOKEN", "H5T_NATIVE_LLONG_TOKEN",
+ "H5T_NATIVE_ULLONG_TOKEN", "H5T_IEEE_F32BE_TOKEN",
+ "H5T_IEEE_F32LE_TOKEN", "H5T_IEEE_F64BE_TOKEN", "H5T_IEEE_F64LE_TOKEN",
+ "H5T_NATIVE_FLOAT_TOKEN", "H5T_NATIVE_DOUBLE_TOKEN",
+ "H5T_NATIVE_LDOUBLE_TOKEN", "H5T_STRING_TOKEN", "STRSIZE_TOKEN",
+ "STRPAD_TOKEN", "CSET_TOKEN", "CTYPE_TOKEN", "H5T_VARIABLE_TOKEN",
+ "H5T_STR_NULLTERM_TOKEN", "H5T_STR_NULLPAD_TOKEN",
+ "H5T_STR_SPACEPAD_TOKEN", "H5T_CSET_ASCII_TOKEN", "H5T_CSET_UTF8_TOKEN",
+ "H5T_C_S1_TOKEN", "H5T_FORTRAN_S1_TOKEN", "H5T_OPAQUE_TOKEN",
+ "OPQ_SIZE_TOKEN", "OPQ_TAG_TOKEN", "H5T_COMPOUND_TOKEN",
+ "H5T_ENUM_TOKEN", "H5T_ARRAY_TOKEN", "H5T_VLEN_TOKEN", "STRING",
+ "NUMBER", "'{'", "'}'", "'['", "']'", "'\"'", "':'", "';'", "$accept",
+ "start", "ddl_type", "atomic_type", "integer_type", "fp_type",
+ "compound_type", "$@1", "memb_list", "memb_def", "$@2", "field_name",
+ "field_offset", "offset", "array_type", "$@3", "dim_list", "dim", "$@4",
+ "$@5", "dimsize", "vlen_type", "opaque_type", "$@6", "@7", "$@8", "$@9",
+ "opaque_size", "opaque_tag", "string_type", "$@10", "$@11", "$@12",
+ "$@13", "@14", "strsize", "strpad", "cset", "ctype", "enum_type", "$@15",
+ "enum_list", "enum_def", "$@16", "enum_symbol", "enum_val", YY_NULL
};
-const short H5LTyygindex[] = { 0,
- -20, 0, 0, 0, 0, 71, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,
+#endif
+
+# ifdef YYPRINT
+/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
+ token YYLEX-NUM. */
+static const yytype_uint16 yytoknum[] =
+{
+ 0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
+ 265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
+ 275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
+ 285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
+ 295, 296, 297, 298, 299, 300, 301, 302, 303, 304,
+ 305, 306, 307, 308, 309, 310, 311, 312, 313, 123,
+ 125, 91, 93, 34, 58, 59
};
-#define YYTABLESIZE 273
-const short H5LTyytable[] = { 79,
- 92, 1, 2, 3, 4, 5, 6, 7, 8, 9,
- 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
- 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
- 30, 31, 32, 33, 34, 35, 63, 103, 104, 105,
- 52, 127, 128, 53, 55, 76, 57, 80, 36, 136,
- 137, 37, 38, 39, 40, 1, 2, 3, 4, 5,
- 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
- 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
- 26, 27, 70, 58, 59, 67, 60, 75, 62, 69,
- 73, 91, 82, 83, 87, 90, 94, 96, 71, 97,
- 98, 100, 108, 109, 110, 111, 112, 113, 117, 121,
- 124, 119, 122, 125, 126, 130, 131, 134, 135, 139,
- 141, 1, 53, 0, 0, 61, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 2, 3, 4, 5,
- 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
- 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
- 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 36, 0, 0, 37, 38, 39, 40, 1,
- 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
- 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
- 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
- 32, 33, 34, 35, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 36, 0, 0, 37,
- 38, 39, 40,
+# endif
+
+/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
+static const yytype_uint8 yyr1[] =
+{
+ 0, 66, 67, 67, 68, 68, 68, 68, 69, 69,
+ 69, 69, 69, 70, 70, 70, 70, 70, 70, 70,
+ 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,
+ 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,
+ 71, 71, 71, 71, 71, 71, 71, 73, 72, 74,
+ 74, 76, 75, 77, 78, 78, 79, 81, 80, 82,
+ 82, 84, 85, 83, 86, 87, 89, 90, 91, 92,
+ 88, 93, 94, 96, 97, 98, 99, 100, 95, 101,
+ 101, 102, 102, 102, 103, 103, 104, 104, 106, 105,
+ 107, 107, 109, 108, 110, 111
};
-const short H5LTyycheck[] = { 91,
- 34, 257, 258, 259, 260, 261, 262, 263, 264, 265,
- 266, 267, 268, 269, 270, 271, 272, 273, 274, 275,
- 276, 277, 278, 279, 280, 281, 282, 283, 284, 285,
- 286, 287, 288, 289, 290, 291, 57, 297, 298, 299,
- 123, 300, 301, 123, 123, 66, 123, 68, 304, 302,
- 303, 307, 308, 309, 310, 257, 258, 259, 260, 261,
- 262, 263, 264, 265, 266, 267, 268, 269, 270, 271,
- 272, 273, 274, 275, 276, 277, 278, 279, 280, 281,
- 282, 283, 296, 292, 305, 59, 123, 125, 123, 125,
- 312, 125, 59, 59, 125, 34, 312, 293, 312, 306,
- 311, 311, 34, 34, 93, 59, 34, 58, 311, 59,
- 294, 312, 312, 34, 59, 59, 59, 125, 295, 59,
- 125, 0, 59, -1, -1, 55, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 257, 258, 259, 260, 261,
- 262, 263, 264, 265, 266, 267, 268, 269, 270, 271,
- 272, 273, 274, 275, 276, 277, 278, 279, 280, 281,
- 282, 283, 284, 285, 286, 287, 288, 289, 290, 291,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 304, -1, -1, 307, 308, 309, 310, 257,
- 258, 259, 260, 261, 262, 263, 264, 265, 266, 267,
- 268, 269, 270, 271, 272, 273, 274, 275, 276, 277,
- 278, 279, 280, 281, 282, 283, 284, 285, 286, 287,
- 288, 289, 290, 291, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 304, -1, -1, 307,
- 308, 309, 310,
+
+/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
+static const yytype_uint8 yyr2[] =
+{
+ 0, 2, 0, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 0, 5, 0,
+ 2, 0, 7, 1, 0, 2, 1, 0, 6, 0,
+ 2, 0, 0, 5, 1, 4, 0, 0, 0, 0,
+ 15, 1, 1, 0, 0, 0, 0, 0, 20, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 0, 7,
+ 0, 2, 0, 6, 1, 1
};
-#define YYFINAL 41
-#ifndef YYDEBUG
-#define YYDEBUG 0
-#endif
-#define YYMAXTOKEN 312
-#if YYDEBUG
-const char * const H5LTyyname[] = {
-"end-of-file",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-"'\"'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"':'","';'",0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'['",0,"']'",0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'{'",0,"'}'",0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-"H5T_STD_I8BE_TOKEN","H5T_STD_I8LE_TOKEN","H5T_STD_I16BE_TOKEN",
-"H5T_STD_I16LE_TOKEN","H5T_STD_I32BE_TOKEN","H5T_STD_I32LE_TOKEN",
-"H5T_STD_I64BE_TOKEN","H5T_STD_I64LE_TOKEN","H5T_STD_U8BE_TOKEN",
-"H5T_STD_U8LE_TOKEN","H5T_STD_U16BE_TOKEN","H5T_STD_U16LE_TOKEN",
-"H5T_STD_U32BE_TOKEN","H5T_STD_U32LE_TOKEN","H5T_STD_U64BE_TOKEN",
-"H5T_STD_U64LE_TOKEN","H5T_NATIVE_CHAR_TOKEN","H5T_NATIVE_SCHAR_TOKEN",
-"H5T_NATIVE_UCHAR_TOKEN","H5T_NATIVE_SHORT_TOKEN","H5T_NATIVE_USHORT_TOKEN",
-"H5T_NATIVE_INT_TOKEN","H5T_NATIVE_UINT_TOKEN","H5T_NATIVE_LONG_TOKEN",
-"H5T_NATIVE_ULONG_TOKEN","H5T_NATIVE_LLONG_TOKEN","H5T_NATIVE_ULLONG_TOKEN",
-"H5T_IEEE_F32BE_TOKEN","H5T_IEEE_F32LE_TOKEN","H5T_IEEE_F64BE_TOKEN",
-"H5T_IEEE_F64LE_TOKEN","H5T_NATIVE_FLOAT_TOKEN","H5T_NATIVE_DOUBLE_TOKEN",
-"H5T_NATIVE_LDOUBLE_TOKEN","H5T_STRING_TOKEN","STRSIZE_TOKEN","STRPAD_TOKEN",
-"CSET_TOKEN","CTYPE_TOKEN","H5T_VARIABLE_TOKEN","H5T_STR_NULLTERM_TOKEN",
-"H5T_STR_NULLPAD_TOKEN","H5T_STR_SPACEPAD_TOKEN","H5T_CSET_ASCII_TOKEN",
-"H5T_CSET_UTF8_TOKEN","H5T_C_S1_TOKEN","H5T_FORTRAN_S1_TOKEN",
-"H5T_OPAQUE_TOKEN","OPQ_SIZE_TOKEN","OPQ_TAG_TOKEN","H5T_COMPOUND_TOKEN",
-"H5T_ENUM_TOKEN","H5T_ARRAY_TOKEN","H5T_VLEN_TOKEN","STRING","NUMBER",
+
+/* YYDEFACT[STATE-NAME] -- Default reduction number in state STATE-NUM.
+ Performed when YYTABLE doesn't specify something else to do. Zero
+ means the default is an error. */
+static const yytype_uint8 yydefact[] =
+{
+ 2, 13, 14, 15, 16, 17, 18, 19, 20, 21,
+ 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
+ 32, 33, 34, 35, 36, 37, 38, 39, 40, 41,
+ 42, 43, 44, 45, 46, 0, 0, 47, 0, 57,
+ 0, 0, 3, 4, 8, 9, 5, 6, 7, 12,
+ 10, 11, 0, 0, 0, 0, 0, 0, 1, 73,
+ 66, 49, 0, 59, 0, 0, 0, 0, 88, 0,
+ 65, 79, 80, 0, 71, 0, 48, 51, 50, 90,
+ 61, 0, 60, 74, 67, 0, 0, 0, 58, 0,
+ 0, 0, 89, 0, 91, 64, 62, 0, 68, 53,
+ 0, 94, 0, 0, 81, 82, 83, 0, 0, 54,
+ 92, 63, 75, 0, 0, 0, 0, 0, 72, 0,
+ 56, 55, 52, 95, 0, 0, 0, 93, 84, 85,
+ 0, 69, 76, 0, 0, 70, 0, 86, 87, 0,
+ 77, 0, 78
};
-const char * const H5LTyyrule[] = {
-"$accept : start",
-"start :",
-"start : ddl_type",
-"ddl_type : atomic_type",
-"ddl_type : compound_type",
-"ddl_type : array_type",
-"ddl_type : vlen_type",
-"atomic_type : integer_type",
-"atomic_type : fp_type",
-"atomic_type : string_type",
-"atomic_type : enum_type",
-"atomic_type : opaque_type",
-"integer_type : H5T_STD_I8BE_TOKEN",
-"integer_type : H5T_STD_I8LE_TOKEN",
-"integer_type : H5T_STD_I16BE_TOKEN",
-"integer_type : H5T_STD_I16LE_TOKEN",
-"integer_type : H5T_STD_I32BE_TOKEN",
-"integer_type : H5T_STD_I32LE_TOKEN",
-"integer_type : H5T_STD_I64BE_TOKEN",
-"integer_type : H5T_STD_I64LE_TOKEN",
-"integer_type : H5T_STD_U8BE_TOKEN",
-"integer_type : H5T_STD_U8LE_TOKEN",
-"integer_type : H5T_STD_U16BE_TOKEN",
-"integer_type : H5T_STD_U16LE_TOKEN",
-"integer_type : H5T_STD_U32BE_TOKEN",
-"integer_type : H5T_STD_U32LE_TOKEN",
-"integer_type : H5T_STD_U64BE_TOKEN",
-"integer_type : H5T_STD_U64LE_TOKEN",
-"integer_type : H5T_NATIVE_CHAR_TOKEN",
-"integer_type : H5T_NATIVE_SCHAR_TOKEN",
-"integer_type : H5T_NATIVE_UCHAR_TOKEN",
-"integer_type : H5T_NATIVE_SHORT_TOKEN",
-"integer_type : H5T_NATIVE_USHORT_TOKEN",
-"integer_type : H5T_NATIVE_INT_TOKEN",
-"integer_type : H5T_NATIVE_UINT_TOKEN",
-"integer_type : H5T_NATIVE_LONG_TOKEN",
-"integer_type : H5T_NATIVE_ULONG_TOKEN",
-"integer_type : H5T_NATIVE_LLONG_TOKEN",
-"integer_type : H5T_NATIVE_ULLONG_TOKEN",
-"fp_type : H5T_IEEE_F32BE_TOKEN",
-"fp_type : H5T_IEEE_F32LE_TOKEN",
-"fp_type : H5T_IEEE_F64BE_TOKEN",
-"fp_type : H5T_IEEE_F64LE_TOKEN",
-"fp_type : H5T_NATIVE_FLOAT_TOKEN",
-"fp_type : H5T_NATIVE_DOUBLE_TOKEN",
-"fp_type : H5T_NATIVE_LDOUBLE_TOKEN",
-"$$1 :",
-"compound_type : H5T_COMPOUND_TOKEN $$1 '{' memb_list '}'",
-"memb_list :",
-"memb_list : memb_list memb_def",
-"$$2 :",
-"memb_def : ddl_type $$2 '\"' field_name '\"' field_offset ';'",
-"field_name : STRING",
-"field_offset :",
-"field_offset : ':' offset",
-"offset : NUMBER",
-"$$3 :",
-"array_type : H5T_ARRAY_TOKEN $$3 '{' dim_list ddl_type '}'",
-"dim_list :",
-"dim_list : dim_list dim",
-"$$4 :",
-"$$5 :",
-"dim : '[' $$4 dimsize $$5 ']'",
-"dimsize : NUMBER",
-"vlen_type : H5T_VLEN_TOKEN '{' ddl_type '}'",
-"$$6 :",
-"$$7 :",
-"$$8 :",
-"$$9 :",
-"opaque_type : H5T_OPAQUE_TOKEN '{' OPQ_SIZE_TOKEN $$6 opaque_size ';' $$7 OPQ_TAG_TOKEN $$8 '\"' opaque_tag '\"' ';' $$9 '}'",
-"opaque_size : NUMBER",
-"opaque_tag : STRING",
-"$$10 :",
-"$$11 :",
-"$$12 :",
-"$$13 :",
-"$$14 :",
-"string_type : H5T_STRING_TOKEN '{' STRSIZE_TOKEN $$10 strsize ';' $$11 STRPAD_TOKEN strpad ';' $$12 CSET_TOKEN cset ';' $$13 CTYPE_TOKEN ctype ';' $$14 '}'",
-"strsize : H5T_VARIABLE_TOKEN",
-"strsize : NUMBER",
-"strpad : H5T_STR_NULLTERM_TOKEN",
-"strpad : H5T_STR_NULLPAD_TOKEN",
-"strpad : H5T_STR_SPACEPAD_TOKEN",
-"cset : H5T_CSET_ASCII_TOKEN",
-"cset : H5T_CSET_UTF8_TOKEN",
-"ctype : H5T_C_S1_TOKEN",
-"ctype : H5T_FORTRAN_S1_TOKEN",
-"$$15 :",
-"enum_type : H5T_ENUM_TOKEN '{' integer_type ';' $$15 enum_list '}'",
-"enum_list :",
-"enum_list : enum_list enum_def",
-"$$16 :",
-"enum_def : '\"' enum_symbol '\"' $$16 enum_val ';'",
-"enum_symbol : STRING",
-"enum_val : NUMBER",
+
+/* YYDEFGOTO[NTERM-NUM]. */
+static const yytype_int16 yydefgoto[] =
+{
+ -1, 41, 42, 43, 44, 45, 46, 54, 67, 78,
+ 85, 100, 115, 121, 47, 56, 69, 82, 87, 103,
+ 96, 48, 49, 66, 90, 108, 133, 75, 119, 50,
+ 65, 89, 117, 134, 141, 73, 107, 130, 139, 51,
+ 79, 86, 94, 116, 102, 124
};
+
+/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
+ STATE-NUM. */
+#define YYPACT_NINF -25
+static const yytype_int16 yypact[] =
+{
+ 114, -25, -25, -25, -25, -25, -25, -25, -25, -25,
+ -25, -25, -25, -25, -25, -25, -25, -25, -25, -25,
+ -25, -25, -25, -25, -25, -25, -25, -25, -25, -25,
+ -25, -25, -25, -25, -25, -24, -20, -25, -15, -25,
+ -14, 49, -25, -25, -25, -25, -25, -25, -25, -25,
+ -25, -25, 19, 45, 38, 168, 39, 114, -25, -25,
+ -25, -25, 34, -25, 40, -4, 43, 56, -25, -3,
+ -25, -25, -25, 37, -25, 42, -25, -25, -25, -25,
+ -25, 44, -25, -25, -25, 50, -23, 47, -25, 64,
+ 62, 51, -25, 58, -25, -25, -25, -2, -25, -25,
+ 89, -25, 90, 92, -25, -25, -25, 91, 94, 95,
+ -25, -25, -25, 98, 100, 96, 102, 122, -25, 103,
+ -25, -25, -25, -25, 133, 9, 134, -25, -25, -25,
+ 135, -25, -25, 105, 160, -25, 46, -25, -25, 137,
+ -25, 143, -25
+};
+
+/* YYPGOTO[NTERM-NUM]. */
+static const yytype_int8 yypgoto[] =
+{
+ -25, -25, -21, -25, 108, -25, -25, -25, -25, -25,
+ -25, -25, -25, -25, -25, -25, -25, -25, -25, -25,
+ -25, -25, -25, -25, -25, -25, -25, -25, -25, -25,
+ -25, -25, -25, -25, -25, -25, -25, -25, -25, -25,
+ -25, -25, -25, -25, -25, -25
+};
+
+/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
+ positive, shift that token. If negative, reduce the rule which
+ number is the opposite. If YYTABLE_NINF, syntax error. */
+#define YYTABLE_NINF -1
+static const yytype_uint8 yytable[] =
+{
+ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
+ 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
+ 21, 22, 23, 24, 25, 26, 27, 28, 29, 30,
+ 31, 32, 33, 34, 35, 52, 64, 92, 71, 53,
+ 93, 104, 105, 106, 55, 57, 77, 36, 81, 58,
+ 37, 38, 39, 40, 72, 128, 129, 59, 80, 1,
+ 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
+ 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
+ 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
+ 32, 33, 34, 35, 137, 138, 60, 61, 63, 68,
+ 70, 74, 83, 97, 88, 95, 36, 84, 99, 37,
+ 38, 39, 40, 91, 98, 101, 76, 1, 2, 3,
+ 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,
+ 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
+ 24, 25, 26, 27, 28, 29, 30, 31, 32, 33,
+ 34, 35, 109, 110, 111, 118, 112, 113, 120, 114,
+ 123, 122, 125, 62, 36, 135, 126, 37, 38, 39,
+ 40, 1, 2, 3, 4, 5, 6, 7, 8, 9,
+ 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
+ 20, 21, 22, 23, 24, 25, 26, 27, 127, 131,
+ 132, 136, 140, 142
+};
+
+#define yypact_value_is_default(Yystate) \
+ (!!((Yystate) == (-25)))
+
+#define yytable_value_is_error(Yytable_value) \
+ YYID (0)
+
+static const yytype_uint8 yycheck[] =
+{
+ 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
+ 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
+ 23, 24, 25, 26, 27, 28, 29, 30, 31, 32,
+ 33, 34, 35, 36, 37, 59, 57, 60, 42, 59,
+ 63, 43, 44, 45, 59, 59, 67, 50, 69, 0,
+ 53, 54, 55, 56, 58, 46, 47, 38, 61, 3,
+ 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,
+ 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
+ 24, 25, 26, 27, 28, 29, 30, 31, 32, 33,
+ 34, 35, 36, 37, 48, 49, 51, 59, 59, 65,
+ 60, 58, 65, 39, 60, 58, 50, 65, 57, 53,
+ 54, 55, 56, 63, 52, 57, 60, 3, 4, 5,
+ 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
+ 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
+ 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
+ 36, 37, 63, 63, 62, 57, 65, 63, 58, 64,
+ 58, 65, 40, 55, 50, 60, 63, 53, 54, 55,
+ 56, 3, 4, 5, 6, 7, 8, 9, 10, 11,
+ 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
+ 22, 23, 24, 25, 26, 27, 28, 29, 65, 65,
+ 65, 41, 65, 60
+};
+
+/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
+ symbol of state STATE-NUM. */
+static const yytype_uint8 yystos[] =
+{
+ 0, 3, 4, 5, 6, 7, 8, 9, 10, 11,
+ 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
+ 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
+ 32, 33, 34, 35, 36, 37, 50, 53, 54, 55,
+ 56, 67, 68, 69, 70, 71, 72, 80, 87, 88,
+ 95, 105, 59, 59, 73, 59, 81, 59, 0, 38,
+ 51, 59, 70, 59, 68, 96, 89, 74, 65, 82,
+ 60, 42, 58, 101, 58, 93, 60, 68, 75, 106,
+ 61, 68, 83, 65, 65, 76, 107, 84, 60, 97,
+ 90, 63, 60, 63, 108, 58, 86, 39, 52, 57,
+ 77, 57, 110, 85, 43, 44, 45, 102, 91, 63,
+ 63, 62, 65, 63, 64, 78, 109, 98, 57, 94,
+ 58, 79, 65, 58, 111, 40, 63, 65, 46, 47,
+ 103, 65, 65, 92, 99, 60, 41, 48, 49, 104,
+ 65, 100, 60
+};
+
+#define yyerrok (yyerrstatus = 0)
+#define yyclearin (yychar = YYEMPTY)
+#define YYEMPTY (-2)
+#define YYEOF 0
+
+#define YYACCEPT goto yyacceptlab
+#define YYABORT goto yyabortlab
+#define YYERROR goto yyerrorlab
+
+
+/* Like YYERROR except do call yyerror. This remains here temporarily
+ to ease the transition to the new meaning of YYERROR, for GCC.
+ Once GCC version 2 has supplanted version 1, this can go. However,
+ YYFAIL appears to be in use. Nevertheless, it is formally deprecated
+ in Bison 2.4.2's NEWS entry, where a plan to phase it out is
+ discussed. */
+
+#define YYFAIL goto yyerrlab
+#if defined YYFAIL
+ /* This is here to suppress warnings from the GCC cpp's
+ -Wunused-macros. Normally we don't worry about that warning, but
+ some users do, and we want to make it easy for users to remove
+ YYFAIL uses, which will produce warnings from Bison 2.5. */
+#endif
+
+#define YYRECOVERING() (!!yyerrstatus)
+
+#define YYBACKUP(Token, Value) \
+do \
+ if (yychar == YYEMPTY) \
+ { \
+ yychar = (Token); \
+ yylval = (Value); \
+ YYPOPSTACK (yylen); \
+ yystate = *yyssp; \
+ goto yybackup; \
+ } \
+ else \
+ { \
+ yyerror (YY_("syntax error: cannot back up")); \
+ YYERROR; \
+ } \
+while (YYID (0))
+
+/* Error token number */
+#define YYTERROR 1
+#define YYERRCODE 256
+
+
+/* This macro is provided for backward compatibility. */
+#ifndef YY_LOCATION_PRINT
+# define YY_LOCATION_PRINT(File, Loc) ((void) 0)
+#endif
+
+
+/* YYLEX -- calling `yylex' with the right arguments. */
+#ifdef YYLEX_PARAM
+# define YYLEX yylex (YYLEX_PARAM)
+#else
+# define YYLEX yylex ()
#endif
+
+/* Enable debugging if requested. */
#if YYDEBUG
-#include <stdio.h>
+
+# ifndef YYFPRINTF
+# include <stdio.h> /* INFRINGES ON USER NAME SPACE */
+# define YYFPRINTF fprintf
+# endif
+
+# define YYDPRINTF(Args) \
+do { \
+ if (yydebug) \
+ YYFPRINTF Args; \
+} while (YYID (0))
+
+# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \
+do { \
+ if (yydebug) \
+ { \
+ YYFPRINTF (stderr, "%s ", Title); \
+ yy_symbol_print (stderr, \
+ Type, Value); \
+ YYFPRINTF (stderr, "\n"); \
+ } \
+} while (YYID (0))
+
+
+/*--------------------------------.
+| Print this symbol on YYOUTPUT. |
+`--------------------------------*/
+
+/*ARGSUSED*/
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static void
+yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
+#else
+static void
+yy_symbol_value_print (yyoutput, yytype, yyvaluep)
+ FILE *yyoutput;
+ int yytype;
+ YYSTYPE const * const yyvaluep;
#endif
-#ifdef YYSTACKSIZE
-#undef YYMAXDEPTH
-#define YYMAXDEPTH YYSTACKSIZE
+{
+ FILE *yyo = yyoutput;
+ YYUSE (yyo);
+ if (!yyvaluep)
+ return;
+# ifdef YYPRINT
+ if (yytype < YYNTOKENS)
+ YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
+# else
+ YYUSE (yyoutput);
+# endif
+ switch (yytype)
+ {
+ default:
+ break;
+ }
+}
+
+
+/*--------------------------------.
+| Print this symbol on YYOUTPUT. |
+`--------------------------------*/
+
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static void
+yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
#else
-#ifdef YYMAXDEPTH
-#define YYSTACKSIZE YYMAXDEPTH
+static void
+yy_symbol_print (yyoutput, yytype, yyvaluep)
+ FILE *yyoutput;
+ int yytype;
+ YYSTYPE const * const yyvaluep;
+#endif
+{
+ if (yytype < YYNTOKENS)
+ YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
+ else
+ YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
+
+ yy_symbol_value_print (yyoutput, yytype, yyvaluep);
+ YYFPRINTF (yyoutput, ")");
+}
+
+/*------------------------------------------------------------------.
+| yy_stack_print -- Print the state stack from its BOTTOM up to its |
+| TOP (included). |
+`------------------------------------------------------------------*/
+
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static void
+yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop)
#else
-#define YYSTACKSIZE 10000
-#define YYMAXDEPTH 10000
+static void
+yy_stack_print (yybottom, yytop)
+ yytype_int16 *yybottom;
+ yytype_int16 *yytop;
#endif
+{
+ YYFPRINTF (stderr, "Stack now");
+ for (; yybottom <= yytop; yybottom++)
+ {
+ int yybot = *yybottom;
+ YYFPRINTF (stderr, " %d", yybot);
+ }
+ YYFPRINTF (stderr, "\n");
+}
+
+# define YY_STACK_PRINT(Bottom, Top) \
+do { \
+ if (yydebug) \
+ yy_stack_print ((Bottom), (Top)); \
+} while (YYID (0))
+
+
+/*------------------------------------------------.
+| Report that the YYRULE is going to be reduced. |
+`------------------------------------------------*/
+
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static void
+yy_reduce_print (YYSTYPE *yyvsp, int yyrule)
+#else
+static void
+yy_reduce_print (yyvsp, yyrule)
+ YYSTYPE *yyvsp;
+ int yyrule;
#endif
-#define YYINITSTACKSIZE 200
+{
+ int yynrhs = yyr2[yyrule];
+ int yyi;
+ unsigned long int yylno = yyrline[yyrule];
+ YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
+ yyrule - 1, yylno);
+ /* The symbols being reduced. */
+ for (yyi = 0; yyi < yynrhs; yyi++)
+ {
+ YYFPRINTF (stderr, " $%d = ", yyi + 1);
+ yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
+ &(yyvsp[(yyi + 1) - (yynrhs)])
+ );
+ YYFPRINTF (stderr, "\n");
+ }
+}
+
+# define YY_REDUCE_PRINT(Rule) \
+do { \
+ if (yydebug) \
+ yy_reduce_print (yyvsp, Rule); \
+} while (YYID (0))
+
+/* Nonzero means print parse trace. It is left uninitialized so that
+ multiple parsers can coexist. */
int yydebug;
-int yynerrs;
-int yyerrflag;
-int yychar;
-short *yyssp;
-YYSTYPE *yyvsp;
-YYSTYPE yyval;
-YYSTYPE yylval;
-short *yyss;
-short *yysslim;
-YYSTYPE *yyvs;
-int yystacksize;
-/* allocate initial stack or double stack size, up to YYMAXDEPTH */
-static int yygrowstack()
+#else /* !YYDEBUG */
+# define YYDPRINTF(Args)
+# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
+# define YY_STACK_PRINT(Bottom, Top)
+# define YY_REDUCE_PRINT(Rule)
+#endif /* !YYDEBUG */
+
+
+/* YYINITDEPTH -- initial size of the parser's stacks. */
+#ifndef YYINITDEPTH
+# define YYINITDEPTH 200
+#endif
+
+/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
+ if the built-in stack extension method is used).
+
+ Do not make this value too large; the results are undefined if
+ YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
+ evaluated with infinite-precision integer arithmetic. */
+
+#ifndef YYMAXDEPTH
+# define YYMAXDEPTH 10000
+#endif
+
+
+#if YYERROR_VERBOSE
+
+# ifndef yystrlen
+# if defined __GLIBC__ && defined _STRING_H
+# define yystrlen strlen
+# else
+/* Return the length of YYSTR. */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static YYSIZE_T
+yystrlen (const char *yystr)
+#else
+static YYSIZE_T
+yystrlen (yystr)
+ const char *yystr;
+#endif
{
- int newsize, i;
- short *newss;
- YYSTYPE *newvs;
-
- if ((newsize = yystacksize) == 0)
- newsize = YYINITSTACKSIZE;
- else if (newsize >= YYMAXDEPTH)
- return -1;
- else if ((newsize *= 2) > YYMAXDEPTH)
- newsize = YYMAXDEPTH;
- i = yyssp - yyss;
- newss = yyss ? (short *)realloc(yyss, newsize * sizeof *newss) :
- (short *)malloc(newsize * sizeof *newss);
- if (newss == NULL)
- return -1;
- yyss = newss;
- yyssp = newss + i;
- newvs = yyvs ? (YYSTYPE *)realloc(yyvs, newsize * sizeof *newvs) :
- (YYSTYPE *)malloc(newsize * sizeof *newvs);
- if (newvs == NULL)
- return -1;
- yyvs = newvs;
- yyvsp = newvs + i;
- yystacksize = newsize;
- yysslim = yyss + newsize - 1;
- return 0;
+ YYSIZE_T yylen;
+ for (yylen = 0; yystr[yylen]; yylen++)
+ continue;
+ return yylen;
}
+# endif
+# endif
-#define YYABORT goto yyabort
-#define YYREJECT goto yyabort
-#define YYACCEPT goto yyaccept
-#define YYERROR goto yyerrlab
-
-#ifndef YYPARSE_PARAM
-#if defined(__cplusplus) || __STDC__
-#define YYPARSE_PARAM_ARG void
-#define YYPARSE_PARAM_DECL
-#else /* ! ANSI-C/C++ */
-#define YYPARSE_PARAM_ARG
-#define YYPARSE_PARAM_DECL
-#endif /* ANSI-C/C++ */
-#else /* YYPARSE_PARAM */
-#ifndef YYPARSE_PARAM_TYPE
-#define YYPARSE_PARAM_TYPE void *
+# ifndef yystpcpy
+# if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
+# define yystpcpy stpcpy
+# else
+/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
+ YYDEST. */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static char *
+yystpcpy (char *yydest, const char *yysrc)
+#else
+static char *
+yystpcpy (yydest, yysrc)
+ char *yydest;
+ const char *yysrc;
#endif
-#if defined(__cplusplus) || __STDC__
-#define YYPARSE_PARAM_ARG YYPARSE_PARAM_TYPE YYPARSE_PARAM
-#define YYPARSE_PARAM_DECL
-#else /* ! ANSI-C/C++ */
-#define YYPARSE_PARAM_ARG YYPARSE_PARAM
-#define YYPARSE_PARAM_DECL YYPARSE_PARAM_TYPE YYPARSE_PARAM;
-#endif /* ANSI-C/C++ */
-#endif /* ! YYPARSE_PARAM */
-
-int
-yyparse (YYPARSE_PARAM_ARG)
- YYPARSE_PARAM_DECL
{
- register int yym, yyn, yystate;
-#if YYDEBUG
- register const char *yys;
+ char *yyd = yydest;
+ const char *yys = yysrc;
- if ((yys = getenv("YYDEBUG")))
+ while ((*yyd++ = *yys++) != '\0')
+ continue;
+
+ return yyd - 1;
+}
+# endif
+# endif
+
+# ifndef yytnamerr
+/* Copy to YYRES the contents of YYSTR after stripping away unnecessary
+ quotes and backslashes, so that it's suitable for yyerror. The
+ heuristic is that double-quoting is unnecessary unless the string
+ contains an apostrophe, a comma, or backslash (other than
+ backslash-backslash). YYSTR is taken from yytname. If YYRES is
+ null, do not copy; instead, return the length of what the result
+ would have been. */
+static YYSIZE_T
+yytnamerr (char *yyres, const char *yystr)
+{
+ if (*yystr == '"')
{
- yyn = *yys;
- if (yyn >= '0' && yyn <= '9')
- yydebug = yyn - '0';
+ YYSIZE_T yyn = 0;
+ char const *yyp = yystr;
+
+ for (;;)
+ switch (*++yyp)
+ {
+ case '\'':
+ case ',':
+ goto do_not_strip_quotes;
+
+ case '\\':
+ if (*++yyp != '\\')
+ goto do_not_strip_quotes;
+ /* Fall through. */
+ default:
+ if (yyres)
+ yyres[yyn] = *yyp;
+ yyn++;
+ break;
+
+ case '"':
+ if (yyres)
+ yyres[yyn] = '\0';
+ return yyn;
+ }
+ do_not_strip_quotes: ;
}
-#endif
- yynerrs = 0;
- yyerrflag = 0;
- yychar = (-1);
+ if (! yyres)
+ return yystrlen (yystr);
+
+ return yystpcpy (yyres, yystr) - yyres;
+}
+# endif
+
+/* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message
+ about the unexpected token YYTOKEN for the state stack whose top is
+ YYSSP.
- if (yyss == NULL && yygrowstack()) goto yyoverflow;
- yyssp = yyss;
- yyvsp = yyvs;
- *yyssp = yystate = 0;
+ Return 0 if *YYMSG was successfully written. Return 1 if *YYMSG is
+ not large enough to hold the message. In that case, also set
+ *YYMSG_ALLOC to the required number of bytes. Return 2 if the
+ required number of bytes is too large to store. */
+static int
+yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
+ yytype_int16 *yyssp, int yytoken)
+{
+ YYSIZE_T yysize0 = yytnamerr (YY_NULL, yytname[yytoken]);
+ YYSIZE_T yysize = yysize0;
+ enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
+ /* Internationalized format string. */
+ const char *yyformat = YY_NULL;
+ /* Arguments of yyformat. */
+ char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
+ /* Number of reported tokens (one for the "unexpected", one per
+ "expected"). */
+ int yycount = 0;
-yyloop:
- if ((yyn = yydefred[yystate])) goto yyreduce;
- if (yychar < 0)
+ /* There are many possibilities here to consider:
+ - Assume YYFAIL is not used. It's too flawed to consider. See
+ <http://lists.gnu.org/archive/html/bison-patches/2009-12/msg00024.html>
+ for details. YYERROR is fine as it does not invoke this
+ function.
+ - If this state is a consistent state with a default action, then
+ the only way this function was invoked is if the default action
+ is an error action. In that case, don't check for expected
+ tokens because there are none.
+ - The only way there can be no lookahead present (in yychar) is if
+ this state is a consistent state with a default action. Thus,
+ detecting the absence of a lookahead is sufficient to determine
+ that there is no unexpected or expected token to report. In that
+ case, just report a simple "syntax error".
+ - Don't assume there isn't a lookahead just because this state is a
+ consistent state with a default action. There might have been a
+ previous inconsistent state, consistent state with a non-default
+ action, or user semantic action that manipulated yychar.
+ - Of course, the expected token list depends on states to have
+ correct lookahead information, and it depends on the parser not
+ to perform extra reductions after fetching a lookahead from the
+ scanner and before detecting a syntax error. Thus, state merging
+ (from LALR or IELR) and default reductions corrupt the expected
+ token list. However, the list is correct for canonical LR with
+ one exception: it will still contain any token that will not be
+ accepted due to an error action in a later state.
+ */
+ if (yytoken != YYEMPTY)
{
- if ((yychar = yylex()) < 0) yychar = 0;
-#if YYDEBUG
- if (yydebug)
+ int yyn = yypact[*yyssp];
+ yyarg[yycount++] = yytname[yytoken];
+ if (!yypact_value_is_default (yyn))
{
- yys = 0;
- if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
- if (!yys) yys = "illegal-symbol";
- printf("%sdebug: state %d, reading %d (%s)\n",
- YYPREFIX, yystate, yychar, yys);
+ /* Start YYX at -YYN if negative to avoid negative indexes in
+ YYCHECK. In other words, skip the first -YYN actions for
+ this state because they are default actions. */
+ int yyxbegin = yyn < 0 ? -yyn : 0;
+ /* Stay within bounds of both yycheck and yytname. */
+ int yychecklim = YYLAST - yyn + 1;
+ int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
+ int yyx;
+
+ for (yyx = yyxbegin; yyx < yyxend; ++yyx)
+ if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR
+ && !yytable_value_is_error (yytable[yyx + yyn]))
+ {
+ if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
+ {
+ yycount = 1;
+ yysize = yysize0;
+ break;
+ }
+ yyarg[yycount++] = yytname[yyx];
+ {
+ YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULL, yytname[yyx]);
+ if (! (yysize <= yysize1
+ && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
+ return 2;
+ yysize = yysize1;
+ }
+ }
}
-#endif
}
- if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
- yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+
+ switch (yycount)
{
-#if YYDEBUG
- if (yydebug)
- printf("%sdebug: state %d, shifting to state %d\n",
- YYPREFIX, yystate, yytable[yyn]);
-#endif
- if (yyssp >= yysslim && yygrowstack())
+# define YYCASE_(N, S) \
+ case N: \
+ yyformat = S; \
+ break
+ YYCASE_(0, YY_("syntax error"));
+ YYCASE_(1, YY_("syntax error, unexpected %s"));
+ YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
+ YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s"));
+ YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
+ YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
+# undef YYCASE_
+ }
+
+ {
+ YYSIZE_T yysize1 = yysize + yystrlen (yyformat);
+ if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
+ return 2;
+ yysize = yysize1;
+ }
+
+ if (*yymsg_alloc < yysize)
+ {
+ *yymsg_alloc = 2 * yysize;
+ if (! (yysize <= *yymsg_alloc
+ && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM))
+ *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM;
+ return 1;
+ }
+
+ /* Avoid sprintf, as that infringes on the user's name space.
+ Don't have undefined behavior even if the translation
+ produced a string with the wrong number of "%s"s. */
+ {
+ char *yyp = *yymsg;
+ int yyi = 0;
+ while ((*yyp = *yyformat) != '\0')
+ if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount)
{
- goto yyoverflow;
+ yyp += yytnamerr (yyp, yyarg[yyi++]);
+ yyformat += 2;
}
- *++yyssp = yystate = yytable[yyn];
- *++yyvsp = yylval;
- yychar = (-1);
- if (yyerrflag > 0) --yyerrflag;
- goto yyloop;
- }
- if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
- yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ else
+ {
+ yyp++;
+ yyformat++;
+ }
+ }
+ return 0;
+}
+#endif /* YYERROR_VERBOSE */
+
+/*-----------------------------------------------.
+| Release the memory associated to this symbol. |
+`-----------------------------------------------*/
+
+/*ARGSUSED*/
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static void
+yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
+#else
+static void
+yydestruct (yymsg, yytype, yyvaluep)
+ const char *yymsg;
+ int yytype;
+ YYSTYPE *yyvaluep;
+#endif
+{
+ YYUSE (yyvaluep);
+
+ if (!yymsg)
+ yymsg = "Deleting";
+ YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
+
+ switch (yytype)
{
- yyn = yytable[yyn];
- goto yyreduce;
+
+ default:
+ break;
}
- if (yyerrflag) goto yyinrecovery;
-#if defined(lint) || defined(__GNUC__)
- goto yynewerror;
+}
+
+
+
+
+/* The lookahead symbol. */
+int yychar;
+
+
+#ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
+# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
+# define YY_IGNORE_MAYBE_UNINITIALIZED_END
#endif
-yynewerror:
- yyerror("syntax error");
-#if defined(lint) || defined(__GNUC__)
- goto yyerrlab;
+#ifndef YY_INITIAL_VALUE
+# define YY_INITIAL_VALUE(Value) /* Nothing. */
#endif
-yyerrlab:
- ++yynerrs;
-yyinrecovery:
- if (yyerrflag < 3)
- {
- yyerrflag = 3;
- for (;;)
- {
- if ((yyn = yysindex[*yyssp]) && (yyn += YYERRCODE) >= 0 &&
- yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
- {
-#if YYDEBUG
- if (yydebug)
- printf("%sdebug: state %d, error recovery shifting\
- to state %d\n", YYPREFIX, *yyssp, yytable[yyn]);
+
+/* The semantic value of the lookahead symbol. */
+YYSTYPE yylval YY_INITIAL_VALUE(yyval_default);
+
+/* Number of syntax errors so far. */
+int yynerrs;
+
+
+/*----------.
+| yyparse. |
+`----------*/
+
+#ifdef YYPARSE_PARAM
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+hid_t
+yyparse (void *YYPARSE_PARAM)
+#else
+hid_t
+yyparse (YYPARSE_PARAM)
+ void *YYPARSE_PARAM;
#endif
- if (yyssp >= yysslim && yygrowstack())
- {
- goto yyoverflow;
- }
- *++yyssp = yystate = yytable[yyn];
- *++yyvsp = yylval;
- goto yyloop;
- }
- else
- {
-#if YYDEBUG
- if (yydebug)
- printf("%sdebug: error recovery discarding state %d\n",
- YYPREFIX, *yyssp);
+#else /* ! YYPARSE_PARAM */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+hid_t
+yyparse (void)
+#else
+hid_t
+yyparse ()
+
#endif
- if (yyssp <= yyss) goto yyabort;
- --yyssp;
- --yyvsp;
- }
- }
+#endif
+{
+ int yystate;
+ /* Number of tokens to shift before error messages enabled. */
+ int yyerrstatus;
+
+ /* The stacks and their tools:
+ `yyss': related to states.
+ `yyvs': related to semantic values.
+
+ Refer to the stacks through separate pointers, to allow yyoverflow
+ to reallocate them elsewhere. */
+
+ /* The state stack. */
+ yytype_int16 yyssa[YYINITDEPTH];
+ yytype_int16 *yyss;
+ yytype_int16 *yyssp;
+
+ /* The semantic value stack. */
+ YYSTYPE yyvsa[YYINITDEPTH];
+ YYSTYPE *yyvs;
+ YYSTYPE *yyvsp;
+
+ YYSIZE_T yystacksize;
+
+ int yyn;
+ int yyresult;
+ /* Lookahead token as an internal (translated) token number. */
+ int yytoken = 0;
+ /* The variables used to return semantic value and location from the
+ action routines. */
+ YYSTYPE yyval;
+
+#if YYERROR_VERBOSE
+ /* Buffer for error messages, and its allocated size. */
+ char yymsgbuf[128];
+ char *yymsg = yymsgbuf;
+ YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
+#endif
+
+#define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N))
+
+ /* The number of symbols on the RHS of the reduced rule.
+ Keep to zero when no symbol should be popped. */
+ int yylen = 0;
+
+ yyssp = yyss = yyssa;
+ yyvsp = yyvs = yyvsa;
+ yystacksize = YYINITDEPTH;
+
+ YYDPRINTF ((stderr, "Starting parse\n"));
+
+ yystate = 0;
+ yyerrstatus = 0;
+ yynerrs = 0;
+ yychar = YYEMPTY; /* Cause a token to be read. */
+ goto yysetstate;
+
+/*------------------------------------------------------------.
+| yynewstate -- Push a new state, which is found in yystate. |
+`------------------------------------------------------------*/
+ yynewstate:
+ /* In all cases, when you get here, the value and location stacks
+ have just been pushed. So pushing a state here evens the stacks. */
+ yyssp++;
+
+ yysetstate:
+ *yyssp = yystate;
+
+ if (yyss + yystacksize - 1 <= yyssp)
+ {
+ /* Get the current used size of the three stacks, in elements. */
+ YYSIZE_T yysize = yyssp - yyss + 1;
+
+#ifdef yyoverflow
+ {
+ /* Give user a chance to reallocate the stack. Use copies of
+ these so that the &'s don't force the real ones into
+ memory. */
+ YYSTYPE *yyvs1 = yyvs;
+ yytype_int16 *yyss1 = yyss;
+
+ /* Each stack pointer address is followed by the size of the
+ data in use in that stack, in bytes. This used to be a
+ conditional around just the two extra args, but that might
+ be undefined if yyoverflow is a macro. */
+ yyoverflow (YY_("memory exhausted"),
+ &yyss1, yysize * sizeof (*yyssp),
+ &yyvs1, yysize * sizeof (*yyvsp),
+ &yystacksize);
+
+ yyss = yyss1;
+ yyvs = yyvs1;
+ }
+#else /* no yyoverflow */
+# ifndef YYSTACK_RELOCATE
+ goto yyexhaustedlab;
+# else
+ /* Extend the stack our own way. */
+ if (YYMAXDEPTH <= yystacksize)
+ goto yyexhaustedlab;
+ yystacksize *= 2;
+ if (YYMAXDEPTH < yystacksize)
+ yystacksize = YYMAXDEPTH;
+
+ {
+ yytype_int16 *yyss1 = yyss;
+ union yyalloc *yyptr =
+ (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
+ if (! yyptr)
+ goto yyexhaustedlab;
+ YYSTACK_RELOCATE (yyss_alloc, yyss);
+ YYSTACK_RELOCATE (yyvs_alloc, yyvs);
+# undef YYSTACK_RELOCATE
+ if (yyss1 != yyssa)
+ YYSTACK_FREE (yyss1);
+ }
+# endif
+#endif /* no yyoverflow */
+
+ yyssp = yyss + yysize - 1;
+ yyvsp = yyvs + yysize - 1;
+
+ YYDPRINTF ((stderr, "Stack size increased to %lu\n",
+ (unsigned long int) yystacksize));
+
+ if (yyss + yystacksize - 1 <= yyssp)
+ YYABORT;
+ }
+
+ YYDPRINTF ((stderr, "Entering state %d\n", yystate));
+
+ if (yystate == YYFINAL)
+ YYACCEPT;
+
+ goto yybackup;
+
+/*-----------.
+| yybackup. |
+`-----------*/
+yybackup:
+
+ /* Do appropriate processing given the current state. Read a
+ lookahead token if we need one and don't already have one. */
+
+ /* First try to decide what to do without reference to lookahead token. */
+ yyn = yypact[yystate];
+ if (yypact_value_is_default (yyn))
+ goto yydefault;
+
+ /* Not known => get a lookahead token if don't already have one. */
+
+ /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */
+ if (yychar == YYEMPTY)
+ {
+ YYDPRINTF ((stderr, "Reading a token: "));
+ yychar = YYLEX;
}
- else
+
+ if (yychar <= YYEOF)
{
- if (yychar == 0) goto yyabort;
-#if YYDEBUG
- if (yydebug)
- {
- yys = 0;
- if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
- if (!yys) yys = "illegal-symbol";
- printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
- YYPREFIX, yystate, yychar, yys);
- }
-#endif
- yychar = (-1);
- goto yyloop;
+ yychar = yytoken = YYEOF;
+ YYDPRINTF ((stderr, "Now at end of input.\n"));
+ }
+ else
+ {
+ yytoken = YYTRANSLATE (yychar);
+ YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
+ }
+
+ /* If the proper action on seeing token YYTOKEN is to reduce or to
+ detect an error, take that action. */
+ yyn += yytoken;
+ if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
+ goto yydefault;
+ yyn = yytable[yyn];
+ if (yyn <= 0)
+ {
+ if (yytable_value_is_error (yyn))
+ goto yyerrlab;
+ yyn = -yyn;
+ goto yyreduce;
}
+
+ /* Count tokens shifted since error; after three, turn off error
+ status. */
+ if (yyerrstatus)
+ yyerrstatus--;
+
+ /* Shift the lookahead token. */
+ YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
+
+ /* Discard the shifted token. */
+ yychar = YYEMPTY;
+
+ yystate = yyn;
+ YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
+ *++yyvsp = yylval;
+ YY_IGNORE_MAYBE_UNINITIALIZED_END
+
+ goto yynewstate;
+
+
+/*-----------------------------------------------------------.
+| yydefault -- do the default action for the current state. |
+`-----------------------------------------------------------*/
+yydefault:
+ yyn = yydefact[yystate];
+ if (yyn == 0)
+ goto yyerrlab;
+ goto yyreduce;
+
+
+/*-----------------------------.
+| yyreduce -- Do a reduction. |
+`-----------------------------*/
yyreduce:
-#if YYDEBUG
- if (yydebug)
- printf("%sdebug: state %d, reducing by rule %d (%s)\n",
- YYPREFIX, yystate, yyn, yyrule[yyn]);
-#endif
- yym = yylen[yyn];
- yyval = yyvsp[1-yym];
- switch (yyn)
+ /* yyn is the number of a rule to reduce with. */
+ yylen = yyr2[yyn];
+
+ /* If YYLEN is nonzero, implement the default value of the action:
+ `$$ = $1'.
+
+ Otherwise, the following line sets YYVAL to garbage.
+ This behavior is undocumented and Bison
+ users should not rely upon it. Assigning to YYVAL
+ unconditionally makes the parser a bit smaller, and it avoids a
+ GCC warning that YYVAL may be used uninitialized. */
+ yyval = yyvsp[1-yylen];
+
+
+ YY_REDUCE_PRINT (yyn);
+ switch (yyn)
{
-case 1:
-#line 100 "H5LTparse.y"
-{ memset(arr_stack, 0, STACK_SIZE*sizeof(struct arr_info)); /*initialize here?*/ }
-break;
-case 2:
+ case 2:
+/* Line 1807 of yacc.c */
#line 101 "H5LTparse.y"
-{ return yyval.ival;}
-break;
-case 12:
-#line 115 "H5LTparse.y"
-{ yyval.ival = H5Tcopy(H5T_STD_I8BE); }
-break;
-case 13:
+ { memset(arr_stack, 0, STACK_SIZE*sizeof(struct arr_info)); /*initialize here?*/ }
+ break;
+
+ case 3:
+/* Line 1807 of yacc.c */
+#line 102 "H5LTparse.y"
+ { return (yyval.hid);}
+ break;
+
+ case 13:
+/* Line 1807 of yacc.c */
#line 116 "H5LTparse.y"
-{ yyval.ival = H5Tcopy(H5T_STD_I8LE); }
-break;
-case 14:
+ { (yyval.hid) = H5Tcopy(H5T_STD_I8BE); }
+ break;
+
+ case 14:
+/* Line 1807 of yacc.c */
#line 117 "H5LTparse.y"
-{ yyval.ival = H5Tcopy(H5T_STD_I16BE); }
-break;
-case 15:
+ { (yyval.hid) = H5Tcopy(H5T_STD_I8LE); }
+ break;
+
+ case 15:
+/* Line 1807 of yacc.c */
#line 118 "H5LTparse.y"
-{ yyval.ival = H5Tcopy(H5T_STD_I16LE); }
-break;
-case 16:
+ { (yyval.hid) = H5Tcopy(H5T_STD_I16BE); }
+ break;
+
+ case 16:
+/* Line 1807 of yacc.c */
#line 119 "H5LTparse.y"
-{ yyval.ival = H5Tcopy(H5T_STD_I32BE); }
-break;
-case 17:
+ { (yyval.hid) = H5Tcopy(H5T_STD_I16LE); }
+ break;
+
+ case 17:
+/* Line 1807 of yacc.c */
#line 120 "H5LTparse.y"
-{ yyval.ival = H5Tcopy(H5T_STD_I32LE); }
-break;
-case 18:
+ { (yyval.hid) = H5Tcopy(H5T_STD_I32BE); }
+ break;
+
+ case 18:
+/* Line 1807 of yacc.c */
#line 121 "H5LTparse.y"
-{ yyval.ival = H5Tcopy(H5T_STD_I64BE); }
-break;
-case 19:
+ { (yyval.hid) = H5Tcopy(H5T_STD_I32LE); }
+ break;
+
+ case 19:
+/* Line 1807 of yacc.c */
#line 122 "H5LTparse.y"
-{ yyval.ival = H5Tcopy(H5T_STD_I64LE); }
-break;
-case 20:
+ { (yyval.hid) = H5Tcopy(H5T_STD_I64BE); }
+ break;
+
+ case 20:
+/* Line 1807 of yacc.c */
#line 123 "H5LTparse.y"
-{ yyval.ival = H5Tcopy(H5T_STD_U8BE); }
-break;
-case 21:
+ { (yyval.hid) = H5Tcopy(H5T_STD_I64LE); }
+ break;
+
+ case 21:
+/* Line 1807 of yacc.c */
#line 124 "H5LTparse.y"
-{ yyval.ival = H5Tcopy(H5T_STD_U8LE); }
-break;
-case 22:
+ { (yyval.hid) = H5Tcopy(H5T_STD_U8BE); }
+ break;
+
+ case 22:
+/* Line 1807 of yacc.c */
#line 125 "H5LTparse.y"
-{ yyval.ival = H5Tcopy(H5T_STD_U16BE); }
-break;
-case 23:
+ { (yyval.hid) = H5Tcopy(H5T_STD_U8LE); }
+ break;
+
+ case 23:
+/* Line 1807 of yacc.c */
#line 126 "H5LTparse.y"
-{ yyval.ival = H5Tcopy(H5T_STD_U16LE); }
-break;
-case 24:
+ { (yyval.hid) = H5Tcopy(H5T_STD_U16BE); }
+ break;
+
+ case 24:
+/* Line 1807 of yacc.c */
#line 127 "H5LTparse.y"
-{ yyval.ival = H5Tcopy(H5T_STD_U32BE); }
-break;
-case 25:
+ { (yyval.hid) = H5Tcopy(H5T_STD_U16LE); }
+ break;
+
+ case 25:
+/* Line 1807 of yacc.c */
#line 128 "H5LTparse.y"
-{ yyval.ival = H5Tcopy(H5T_STD_U32LE); }
-break;
-case 26:
+ { (yyval.hid) = H5Tcopy(H5T_STD_U32BE); }
+ break;
+
+ case 26:
+/* Line 1807 of yacc.c */
#line 129 "H5LTparse.y"
-{ yyval.ival = H5Tcopy(H5T_STD_U64BE); }
-break;
-case 27:
+ { (yyval.hid) = H5Tcopy(H5T_STD_U32LE); }
+ break;
+
+ case 27:
+/* Line 1807 of yacc.c */
#line 130 "H5LTparse.y"
-{ yyval.ival = H5Tcopy(H5T_STD_U64LE); }
-break;
-case 28:
+ { (yyval.hid) = H5Tcopy(H5T_STD_U64BE); }
+ break;
+
+ case 28:
+/* Line 1807 of yacc.c */
#line 131 "H5LTparse.y"
-{ yyval.ival = H5Tcopy(H5T_NATIVE_CHAR); }
-break;
-case 29:
+ { (yyval.hid) = H5Tcopy(H5T_STD_U64LE); }
+ break;
+
+ case 29:
+/* Line 1807 of yacc.c */
#line 132 "H5LTparse.y"
-{ yyval.ival = H5Tcopy(H5T_NATIVE_SCHAR); }
-break;
-case 30:
+ { (yyval.hid) = H5Tcopy(H5T_NATIVE_CHAR); }
+ break;
+
+ case 30:
+/* Line 1807 of yacc.c */
#line 133 "H5LTparse.y"
-{ yyval.ival = H5Tcopy(H5T_NATIVE_UCHAR); }
-break;
-case 31:
+ { (yyval.hid) = H5Tcopy(H5T_NATIVE_SCHAR); }
+ break;
+
+ case 31:
+/* Line 1807 of yacc.c */
#line 134 "H5LTparse.y"
-{ yyval.ival = H5Tcopy(H5T_NATIVE_SHORT); }
-break;
-case 32:
+ { (yyval.hid) = H5Tcopy(H5T_NATIVE_UCHAR); }
+ break;
+
+ case 32:
+/* Line 1807 of yacc.c */
#line 135 "H5LTparse.y"
-{ yyval.ival = H5Tcopy(H5T_NATIVE_USHORT); }
-break;
-case 33:
+ { (yyval.hid) = H5Tcopy(H5T_NATIVE_SHORT); }
+ break;
+
+ case 33:
+/* Line 1807 of yacc.c */
#line 136 "H5LTparse.y"
-{ yyval.ival = H5Tcopy(H5T_NATIVE_INT); }
-break;
-case 34:
+ { (yyval.hid) = H5Tcopy(H5T_NATIVE_USHORT); }
+ break;
+
+ case 34:
+/* Line 1807 of yacc.c */
#line 137 "H5LTparse.y"
-{ yyval.ival = H5Tcopy(H5T_NATIVE_UINT); }
-break;
-case 35:
+ { (yyval.hid) = H5Tcopy(H5T_NATIVE_INT); }
+ break;
+
+ case 35:
+/* Line 1807 of yacc.c */
#line 138 "H5LTparse.y"
-{ yyval.ival = H5Tcopy(H5T_NATIVE_LONG); }
-break;
-case 36:
+ { (yyval.hid) = H5Tcopy(H5T_NATIVE_UINT); }
+ break;
+
+ case 36:
+/* Line 1807 of yacc.c */
#line 139 "H5LTparse.y"
-{ yyval.ival = H5Tcopy(H5T_NATIVE_ULONG); }
-break;
-case 37:
+ { (yyval.hid) = H5Tcopy(H5T_NATIVE_LONG); }
+ break;
+
+ case 37:
+/* Line 1807 of yacc.c */
#line 140 "H5LTparse.y"
-{ yyval.ival = H5Tcopy(H5T_NATIVE_LLONG); }
-break;
-case 38:
+ { (yyval.hid) = H5Tcopy(H5T_NATIVE_ULONG); }
+ break;
+
+ case 38:
+/* Line 1807 of yacc.c */
#line 141 "H5LTparse.y"
-{ yyval.ival = H5Tcopy(H5T_NATIVE_ULLONG); }
-break;
-case 39:
-#line 144 "H5LTparse.y"
-{ yyval.ival = H5Tcopy(H5T_IEEE_F32BE); }
-break;
-case 40:
+ { (yyval.hid) = H5Tcopy(H5T_NATIVE_LLONG); }
+ break;
+
+ case 39:
+/* Line 1807 of yacc.c */
+#line 142 "H5LTparse.y"
+ { (yyval.hid) = H5Tcopy(H5T_NATIVE_ULLONG); }
+ break;
+
+ case 40:
+/* Line 1807 of yacc.c */
#line 145 "H5LTparse.y"
-{ yyval.ival = H5Tcopy(H5T_IEEE_F32LE); }
-break;
-case 41:
+ { (yyval.hid) = H5Tcopy(H5T_IEEE_F32BE); }
+ break;
+
+ case 41:
+/* Line 1807 of yacc.c */
#line 146 "H5LTparse.y"
-{ yyval.ival = H5Tcopy(H5T_IEEE_F64BE); }
-break;
-case 42:
+ { (yyval.hid) = H5Tcopy(H5T_IEEE_F32LE); }
+ break;
+
+ case 42:
+/* Line 1807 of yacc.c */
#line 147 "H5LTparse.y"
-{ yyval.ival = H5Tcopy(H5T_IEEE_F64LE); }
-break;
-case 43:
+ { (yyval.hid) = H5Tcopy(H5T_IEEE_F64BE); }
+ break;
+
+ case 43:
+/* Line 1807 of yacc.c */
#line 148 "H5LTparse.y"
-{ yyval.ival = H5Tcopy(H5T_NATIVE_FLOAT); }
-break;
-case 44:
+ { (yyval.hid) = H5Tcopy(H5T_IEEE_F64LE); }
+ break;
+
+ case 44:
+/* Line 1807 of yacc.c */
#line 149 "H5LTparse.y"
-{ yyval.ival = H5Tcopy(H5T_NATIVE_DOUBLE); }
-break;
-case 45:
+ { (yyval.hid) = H5Tcopy(H5T_NATIVE_FLOAT); }
+ break;
+
+ case 45:
+/* Line 1807 of yacc.c */
#line 150 "H5LTparse.y"
-{ yyval.ival = H5Tcopy(H5T_NATIVE_LDOUBLE); }
-break;
-case 46:
-#line 154 "H5LTparse.y"
-{ csindex++; cmpd_stack[csindex].id = H5Tcreate(H5T_COMPOUND, 1); /*temporarily set size to 1*/ }
-break;
-case 47:
-#line 156 "H5LTparse.y"
-{ yyval.ival = cmpd_stack[csindex].id;
+ { (yyval.hid) = H5Tcopy(H5T_NATIVE_DOUBLE); }
+ break;
+
+ case 46:
+/* Line 1807 of yacc.c */
+#line 151 "H5LTparse.y"
+ { (yyval.hid) = H5Tcopy(H5T_NATIVE_LDOUBLE); }
+ break;
+
+ case 47:
+/* Line 1807 of yacc.c */
+#line 155 "H5LTparse.y"
+ { csindex++; cmpd_stack[csindex].id = H5Tcreate(H5T_COMPOUND, 1); /*temporarily set size to 1*/ }
+ break;
+
+ case 48:
+/* Line 1807 of yacc.c */
+#line 157 "H5LTparse.y"
+ { (yyval.hid) = cmpd_stack[csindex].id;
cmpd_stack[csindex].id = 0;
- cmpd_stack[csindex].first_memb = 1;
+ cmpd_stack[csindex].first_memb = 1;
csindex--;
}
-break;
-case 50:
-#line 165 "H5LTparse.y"
-{ cmpd_stack[csindex].is_field = 1; /*notify lexer a compound member is parsed*/ }
-break;
-case 51:
-#line 167 "H5LTparse.y"
-{
+ break;
+
+ case 51:
+/* Line 1807 of yacc.c */
+#line 166 "H5LTparse.y"
+ { cmpd_stack[csindex].is_field = 1; /*notify lexer a compound member is parsed*/ }
+ break;
+
+ case 52:
+/* Line 1807 of yacc.c */
+#line 168 "H5LTparse.y"
+ {
size_t origin_size, new_size;
hid_t dtype_id = cmpd_stack[csindex].id;
/*Adjust size and insert member, consider both member size and offset.*/
if(cmpd_stack[csindex].first_memb) { /*reclaim the size 1 temporarily set*/
- new_size = H5Tget_size(yyvsp[-6].ival) + yyvsp[-1].ival;
+ new_size = H5Tget_size((yyvsp[(1) - (7)].hid)) + (yyvsp[(6) - (7)].ival);
H5Tset_size(dtype_id, new_size);
/*member name is saved in yylval.sval by lexer*/
- H5Tinsert(dtype_id, yyvsp[-3].sval, yyvsp[-1].ival, yyvsp[-6].ival);
+ H5Tinsert(dtype_id, (yyvsp[(4) - (7)].sval), (yyvsp[(6) - (7)].ival), (yyvsp[(1) - (7)].hid));
cmpd_stack[csindex].first_memb = 0;
} else {
origin_size = H5Tget_size(dtype_id);
-
- if(yyvsp[-1].ival == 0) {
- new_size = origin_size + H5Tget_size(yyvsp[-6].ival);
+
+ if((yyvsp[(6) - (7)].ival) == 0) {
+ new_size = origin_size + H5Tget_size((yyvsp[(1) - (7)].hid));
H5Tset_size(dtype_id, new_size);
- H5Tinsert(dtype_id, yyvsp[-3].sval, origin_size, yyvsp[-6].ival);
+ H5Tinsert(dtype_id, (yyvsp[(4) - (7)].sval), origin_size, (yyvsp[(1) - (7)].hid));
} else {
- new_size = yyvsp[-1].ival + H5Tget_size(yyvsp[-6].ival);
+ new_size = (yyvsp[(6) - (7)].ival) + H5Tget_size((yyvsp[(1) - (7)].hid));
H5Tset_size(dtype_id, new_size);
- H5Tinsert(dtype_id, yyvsp[-3].sval, yyvsp[-1].ival, yyvsp[-6].ival);
+ H5Tinsert(dtype_id, (yyvsp[(4) - (7)].sval), (yyvsp[(6) - (7)].ival), (yyvsp[(1) - (7)].hid));
}
}
-
+
cmpd_stack[csindex].is_field = 0;
- H5Tclose(yyvsp[-6].ival);
-
+ H5Tclose((yyvsp[(1) - (7)].hid));
+
new_size = H5Tget_size(dtype_id);
}
-break;
-case 52:
-#line 200 "H5LTparse.y"
-{
- yyval.sval = yylval.sval;
+ break;
+
+ case 53:
+/* Line 1807 of yacc.c */
+#line 201 "H5LTparse.y"
+ {
+ (yyval.sval) = yylval.sval;
}
-break;
-case 53:
-#line 205 "H5LTparse.y"
-{ yyval.ival = 0; }
-break;
-case 54:
-#line 207 "H5LTparse.y"
-{ yyval.ival = yylval.ival; }
-break;
-case 56:
-#line 211 "H5LTparse.y"
-{ asindex++; /*pushd onto the stack*/ }
-break;
-case 57:
-#line 213 "H5LTparse.y"
-{
- yyval.ival = H5Tarray_create2(yyvsp[-1].ival, arr_stack[asindex].ndims, arr_stack[asindex].dims);
+ break;
+
+ case 54:
+/* Line 1807 of yacc.c */
+#line 206 "H5LTparse.y"
+ { (yyval.ival) = 0; }
+ break;
+
+ case 55:
+/* Line 1807 of yacc.c */
+#line 208 "H5LTparse.y"
+ { (yyval.ival) = yylval.ival; }
+ break;
+
+ case 57:
+/* Line 1807 of yacc.c */
+#line 212 "H5LTparse.y"
+ { asindex++; /*pushd onto the stack*/ }
+ break;
+
+ case 58:
+/* Line 1807 of yacc.c */
+#line 214 "H5LTparse.y"
+ {
+ (yyval.hid) = H5Tarray_create2((yyvsp[(5) - (6)].hid), arr_stack[asindex].ndims, arr_stack[asindex].dims);
arr_stack[asindex].ndims = 0;
asindex--;
- H5Tclose(yyvsp[-1].ival);
+ H5Tclose((yyvsp[(5) - (6)].hid));
}
-break;
-case 60:
-#line 223 "H5LTparse.y"
-{ arr_stack[asindex].is_dim = 1; /*notice lexer of dimension size*/ }
-break;
-case 61:
+ break;
+
+ case 61:
+/* Line 1807 of yacc.c */
#line 224 "H5LTparse.y"
-{ unsigned ndims = arr_stack[asindex].ndims;
- arr_stack[asindex].dims[ndims] = (hsize_t)yylval.ival;
+ { arr_stack[asindex].is_dim = 1; /*notice lexer of dimension size*/ }
+ break;
+
+ case 62:
+/* Line 1807 of yacc.c */
+#line 225 "H5LTparse.y"
+ { unsigned ndims = arr_stack[asindex].ndims;
+ arr_stack[asindex].dims[ndims] = (hsize_t)yylval.ival;
arr_stack[asindex].ndims++;
- arr_stack[asindex].is_dim = 0;
+ arr_stack[asindex].is_dim = 0;
}
-break;
-case 64:
-#line 235 "H5LTparse.y"
-{ yyval.ival = H5Tvlen_create(yyvsp[-1].ival); H5Tclose(yyvsp[-1].ival); }
-break;
-case 65:
-#line 240 "H5LTparse.y"
-{ is_opq_size = 1; }
-break;
-case 66:
+ break;
+
+ case 65:
+/* Line 1807 of yacc.c */
+#line 236 "H5LTparse.y"
+ { (yyval.hid) = H5Tvlen_create((yyvsp[(3) - (4)].hid)); H5Tclose((yyvsp[(3) - (4)].hid)); }
+ break;
+
+ case 66:
+/* Line 1807 of yacc.c */
#line 241 "H5LTparse.y"
-{
+ { is_opq_size = 1; }
+ break;
+
+ case 67:
+/* Line 1807 of yacc.c */
+#line 242 "H5LTparse.y"
+ {
size_t size = (size_t)yylval.ival;
- yyval.ival = H5Tcreate(H5T_OPAQUE, size);
- is_opq_size = 0;
+ (yyval.hid) = H5Tcreate(H5T_OPAQUE, size);
+ is_opq_size = 0;
}
-break;
-case 67:
-#line 246 "H5LTparse.y"
-{ is_opq_tag = 1; }
-break;
-case 68:
+ break;
+
+ case 68:
+/* Line 1807 of yacc.c */
#line 247 "H5LTparse.y"
-{
- H5Tset_tag(yyvsp[-6].ival, yylval.sval);
+ { is_opq_tag = 1; }
+ break;
+
+ case 69:
+/* Line 1807 of yacc.c */
+#line 248 "H5LTparse.y"
+ {
+ H5Tset_tag((yyvsp[(7) - (13)].hid), yylval.sval);
is_opq_tag = 0;
}
-break;
-case 69:
-#line 251 "H5LTparse.y"
-{ yyval.ival = yyvsp[-8].ival; }
-break;
-case 72:
-#line 259 "H5LTparse.y"
-{ is_str_size = 1; }
-break;
-case 73:
+ break;
+
+ case 70:
+/* Line 1807 of yacc.c */
+#line 252 "H5LTparse.y"
+ { (yyval.hid) = (yyvsp[(7) - (15)].hid); }
+ break;
+
+ case 73:
+/* Line 1807 of yacc.c */
#line 260 "H5LTparse.y"
-{
- if(yyvsp[-1].ival == H5T_VARIABLE_TOKEN)
+ { is_str_size = 1; }
+ break;
+
+ case 74:
+/* Line 1807 of yacc.c */
+#line 261 "H5LTparse.y"
+ {
+ if((yyvsp[(5) - (6)].ival) == H5T_VARIABLE_TOKEN)
is_variable = 1;
- else
+ else
str_size = yylval.ival;
- is_str_size = 0;
+ is_str_size = 0;
}
-break;
-case 74:
-#line 268 "H5LTparse.y"
-{
- if(yyvsp[-1].ival == H5T_STR_NULLTERM_TOKEN)
+ break;
+
+ case 75:
+/* Line 1807 of yacc.c */
+#line 269 "H5LTparse.y"
+ {
+ if((yyvsp[(9) - (10)].ival) == H5T_STR_NULLTERM_TOKEN)
str_pad = H5T_STR_NULLTERM;
- else if(yyvsp[-1].ival == H5T_STR_NULLPAD_TOKEN)
+ else if((yyvsp[(9) - (10)].ival) == H5T_STR_NULLPAD_TOKEN)
str_pad = H5T_STR_NULLPAD;
- else if(yyvsp[-1].ival == H5T_STR_SPACEPAD_TOKEN)
+ else if((yyvsp[(9) - (10)].ival) == H5T_STR_SPACEPAD_TOKEN)
str_pad = H5T_STR_SPACEPAD;
}
-break;
-case 75:
-#line 277 "H5LTparse.y"
-{
- if(yyvsp[-1].ival == H5T_CSET_ASCII_TOKEN)
+ break;
+
+ case 76:
+/* Line 1807 of yacc.c */
+#line 278 "H5LTparse.y"
+ {
+ if((yyvsp[(13) - (14)].ival) == H5T_CSET_ASCII_TOKEN)
str_cset = H5T_CSET_ASCII;
- else if(yyvsp[-1].ival == H5T_CSET_UTF8_TOKEN)
+ else if((yyvsp[(13) - (14)].ival) == H5T_CSET_UTF8_TOKEN)
str_cset = H5T_CSET_UTF8;
}
-break;
-case 76:
-#line 284 "H5LTparse.y"
-{
- if(yyvsp[-1].ival == H5T_C_S1_TOKEN)
- yyval.ival = H5Tcopy(H5T_C_S1);
- else if(yyvsp[-1].ival == H5T_FORTRAN_S1_TOKEN)
- yyval.ival = H5Tcopy(H5T_FORTRAN_S1);
+ break;
+
+ case 77:
+/* Line 1807 of yacc.c */
+#line 285 "H5LTparse.y"
+ {
+ if((yyvsp[(17) - (18)].hid) == H5T_C_S1_TOKEN)
+ (yyval.hid) = H5Tcopy(H5T_C_S1);
+ else if((yyvsp[(17) - (18)].hid) == H5T_FORTRAN_S1_TOKEN)
+ (yyval.hid) = H5Tcopy(H5T_FORTRAN_S1);
}
-break;
-case 77:
-#line 291 "H5LTparse.y"
-{
- hid_t str_id = yyvsp[-1].ival;
+ break;
+
+ case 78:
+/* Line 1807 of yacc.c */
+#line 292 "H5LTparse.y"
+ {
+ hid_t str_id = (yyvsp[(19) - (20)].hid);
/*set string size*/
if(is_variable) {
@@ -990,57 +2056,79 @@ case 77:
is_variable = 0;
} else
H5Tset_size(str_id, str_size);
-
+
/*set string padding and character set*/
H5Tset_strpad(str_id, str_pad);
H5Tset_cset(str_id, str_cset);
- yyval.ival = str_id;
+ (yyval.hid) = str_id;
}
-break;
-case 78:
-#line 308 "H5LTparse.y"
-{yyval.ival = H5T_VARIABLE_TOKEN;}
-break;
-case 80:
-#line 311 "H5LTparse.y"
-{yyval.ival = H5T_STR_NULLTERM_TOKEN;}
-break;
-case 81:
+ break;
+
+ case 79:
+/* Line 1807 of yacc.c */
+#line 309 "H5LTparse.y"
+ {(yyval.ival) = H5T_VARIABLE_TOKEN;}
+ break;
+
+ case 81:
+/* Line 1807 of yacc.c */
#line 312 "H5LTparse.y"
-{yyval.ival = H5T_STR_NULLPAD_TOKEN;}
-break;
-case 82:
+ {(yyval.ival) = H5T_STR_NULLTERM_TOKEN;}
+ break;
+
+ case 82:
+/* Line 1807 of yacc.c */
#line 313 "H5LTparse.y"
-{yyval.ival = H5T_STR_SPACEPAD_TOKEN;}
-break;
-case 83:
-#line 315 "H5LTparse.y"
-{yyval.ival = H5T_CSET_ASCII_TOKEN;}
-break;
-case 84:
+ {(yyval.ival) = H5T_STR_NULLPAD_TOKEN;}
+ break;
+
+ case 83:
+/* Line 1807 of yacc.c */
+#line 314 "H5LTparse.y"
+ {(yyval.ival) = H5T_STR_SPACEPAD_TOKEN;}
+ break;
+
+ case 84:
+/* Line 1807 of yacc.c */
#line 316 "H5LTparse.y"
-{yyval.ival = H5T_CSET_UTF8_TOKEN;}
-break;
-case 85:
-#line 318 "H5LTparse.y"
-{yyval.ival = H5T_C_S1_TOKEN;}
-break;
-case 86:
+ {(yyval.ival) = H5T_CSET_ASCII_TOKEN;}
+ break;
+
+ case 85:
+/* Line 1807 of yacc.c */
+#line 317 "H5LTparse.y"
+ {(yyval.ival) = H5T_CSET_UTF8_TOKEN;}
+ break;
+
+ case 86:
+/* Line 1807 of yacc.c */
#line 319 "H5LTparse.y"
-{yyval.ival = H5T_FORTRAN_S1_TOKEN;}
-break;
-case 87:
-#line 323 "H5LTparse.y"
-{ is_enum = 1; enum_id = H5Tenum_create(yyvsp[-1].ival); H5Tclose(yyvsp[-1].ival); }
-break;
-case 88:
-#line 325 "H5LTparse.y"
-{ is_enum = 0; /*reset*/ yyval.ival = enum_id; }
-break;
-case 91:
-#line 330 "H5LTparse.y"
-{
+ {(yyval.hid) = H5T_C_S1_TOKEN;}
+ break;
+
+ case 87:
+/* Line 1807 of yacc.c */
+#line 320 "H5LTparse.y"
+ {(yyval.hid) = H5T_FORTRAN_S1_TOKEN;}
+ break;
+
+ case 88:
+/* Line 1807 of yacc.c */
+#line 324 "H5LTparse.y"
+ { is_enum = 1; enum_id = H5Tenum_create((yyvsp[(3) - (4)].hid)); H5Tclose((yyvsp[(3) - (4)].hid)); }
+ break;
+
+ case 89:
+/* Line 1807 of yacc.c */
+#line 326 "H5LTparse.y"
+ { is_enum = 0; /*reset*/ (yyval.hid) = enum_id; }
+ break;
+
+ case 92:
+/* Line 1807 of yacc.c */
+#line 331 "H5LTparse.y"
+ {
is_enum_memb = 1; /*indicate member of enum*/
#ifdef H5_HAVE_WIN32_API
enum_memb_symbol = _strdup(yylval.sval);
@@ -1048,10 +2136,12 @@ case 91:
enum_memb_symbol = strdup(yylval.sval);
#endif /* H5_HAVE_WIN32_API */
}
-break;
-case 92:
-#line 339 "H5LTparse.y"
-{
+ break;
+
+ case 93:
+/* Line 1807 of yacc.c */
+#line 340 "H5LTparse.y"
+ {
char char_val=(char)yylval.ival;
short short_val=(short)yylval.ival;
int int_val=(int)yylval.ival;
@@ -1061,93 +2151,270 @@ case 92:
hid_t native = H5Tget_native_type(super, H5T_DIR_ASCEND);
H5T_order_t super_order = H5Tget_order(super);
H5T_order_t native_order = H5Tget_order(native);
-
+
if(is_enum && is_enum_memb) { /*if it's an enum member*/
/*To handle machines of different endianness*/
if(H5Tequal(native, H5T_NATIVE_SCHAR) || H5Tequal(native, H5T_NATIVE_UCHAR)) {
if(super_order != native_order)
- H5Tconvert(native, super, 1, &char_val, NULL, H5P_DEFAULT);
+ H5Tconvert(native, super, 1, &char_val, NULL, H5P_DEFAULT);
H5Tenum_insert(enum_id, enum_memb_symbol, &char_val);
} else if(H5Tequal(native, H5T_NATIVE_SHORT) || H5Tequal(native, H5T_NATIVE_USHORT)) {
if(super_order != native_order)
- H5Tconvert(native, super, 1, &short_val, NULL, H5P_DEFAULT);
+ H5Tconvert(native, super, 1, &short_val, NULL, H5P_DEFAULT);
H5Tenum_insert(enum_id, enum_memb_symbol, &short_val);
} else if(H5Tequal(native, H5T_NATIVE_INT) || H5Tequal(native, H5T_NATIVE_UINT)) {
if(super_order != native_order)
- H5Tconvert(native, super, 1, &int_val, NULL, H5P_DEFAULT);
+ H5Tconvert(native, super, 1, &int_val, NULL, H5P_DEFAULT);
H5Tenum_insert(enum_id, enum_memb_symbol, &int_val);
} else if(H5Tequal(native, H5T_NATIVE_LONG) || H5Tequal(native, H5T_NATIVE_ULONG)) {
if(super_order != native_order)
- H5Tconvert(native, super, 1, &long_val, NULL, H5P_DEFAULT);
+ H5Tconvert(native, super, 1, &long_val, NULL, H5P_DEFAULT);
H5Tenum_insert(enum_id, enum_memb_symbol, &long_val);
} else if(H5Tequal(native, H5T_NATIVE_LLONG) || H5Tequal(native, H5T_NATIVE_ULLONG)) {
if(super_order != native_order)
- H5Tconvert(native, super, 1, &llong_val, NULL, H5P_DEFAULT);
+ H5Tconvert(native, super, 1, &llong_val, NULL, H5P_DEFAULT);
H5Tenum_insert(enum_id, enum_memb_symbol, &llong_val);
}
- is_enum_memb = 0;
+ is_enum_memb = 0;
if(enum_memb_symbol) free(enum_memb_symbol);
}
H5Tclose(super);
H5Tclose(native);
}
-break;
-#line 1098 "H5LTparse.c"
+ break;
+
+
+/* Line 1807 of yacc.c */
+#line 2191 "H5LTparse.c"
+ default: break;
}
- yyssp -= yym;
- yystate = *yyssp;
- yyvsp -= yym;
- yym = yylhs[yyn];
- if (yystate == 0 && yym == 0)
+ /* User semantic actions sometimes alter yychar, and that requires
+ that yytoken be updated with the new translation. We take the
+ approach of translating immediately before every use of yytoken.
+ One alternative is translating here after every semantic action,
+ but that translation would be missed if the semantic action invokes
+ YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or
+ if it invokes YYBACKUP. In the case of YYABORT or YYACCEPT, an
+ incorrect destructor might then be invoked immediately. In the
+ case of YYERROR or YYBACKUP, subsequent parser actions might lead
+ to an incorrect destructor call or verbose syntax error message
+ before the lookahead is translated. */
+ YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
+
+ YYPOPSTACK (yylen);
+ yylen = 0;
+ YY_STACK_PRINT (yyss, yyssp);
+
+ *++yyvsp = yyval;
+
+ /* Now `shift' the result of the reduction. Determine what state
+ that goes to, based on the state we popped back to and the rule
+ number reduced by. */
+
+ yyn = yyr1[yyn];
+
+ yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
+ if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
+ yystate = yytable[yystate];
+ else
+ yystate = yydefgoto[yyn - YYNTOKENS];
+
+ goto yynewstate;
+
+
+/*------------------------------------.
+| yyerrlab -- here on detecting error |
+`------------------------------------*/
+yyerrlab:
+ /* Make sure we have latest lookahead translation. See comments at
+ user semantic actions for why this is necessary. */
+ yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar);
+
+ /* If not already recovering from an error, report this error. */
+ if (!yyerrstatus)
{
-#if YYDEBUG
- if (yydebug)
- printf("%sdebug: after reduction, shifting from state 0 to\
- state %d\n", YYPREFIX, YYFINAL);
-#endif
- yystate = YYFINAL;
- *++yyssp = YYFINAL;
- *++yyvsp = yyval;
- if (yychar < 0)
- {
- if ((yychar = yylex()) < 0) yychar = 0;
-#if YYDEBUG
- if (yydebug)
- {
- yys = 0;
- if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
- if (!yys) yys = "illegal-symbol";
- printf("%sdebug: state %d, reading %d (%s)\n",
- YYPREFIX, YYFINAL, yychar, yys);
- }
+ ++yynerrs;
+#if ! YYERROR_VERBOSE
+ yyerror (YY_("syntax error"));
+#else
+# define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \
+ yyssp, yytoken)
+ {
+ char const *yymsgp = YY_("syntax error");
+ int yysyntax_error_status;
+ yysyntax_error_status = YYSYNTAX_ERROR;
+ if (yysyntax_error_status == 0)
+ yymsgp = yymsg;
+ else if (yysyntax_error_status == 1)
+ {
+ if (yymsg != yymsgbuf)
+ YYSTACK_FREE (yymsg);
+ yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc);
+ if (!yymsg)
+ {
+ yymsg = yymsgbuf;
+ yymsg_alloc = sizeof yymsgbuf;
+ yysyntax_error_status = 2;
+ }
+ else
+ {
+ yysyntax_error_status = YYSYNTAX_ERROR;
+ yymsgp = yymsg;
+ }
+ }
+ yyerror (yymsgp);
+ if (yysyntax_error_status == 2)
+ goto yyexhaustedlab;
+ }
+# undef YYSYNTAX_ERROR
#endif
- }
- if (yychar == 0) goto yyaccept;
- goto yyloop;
}
- if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
- yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
- yystate = yytable[yyn];
- else
- yystate = yydgoto[yym];
-#if YYDEBUG
- if (yydebug)
- printf("%sdebug: after reduction, shifting from state %d \
-to state %d\n", YYPREFIX, *yyssp, yystate);
+
+
+
+ if (yyerrstatus == 3)
+ {
+ /* If just tried and failed to reuse lookahead token after an
+ error, discard it. */
+
+ if (yychar <= YYEOF)
+ {
+ /* Return failure if at end of input. */
+ if (yychar == YYEOF)
+ YYABORT;
+ }
+ else
+ {
+ yydestruct ("Error: discarding",
+ yytoken, &yylval);
+ yychar = YYEMPTY;
+ }
+ }
+
+ /* Else will try to reuse lookahead token after shifting the error
+ token. */
+ goto yyerrlab1;
+
+
+/*---------------------------------------------------.
+| yyerrorlab -- error raised explicitly by YYERROR. |
+`---------------------------------------------------*/
+yyerrorlab:
+
+ /* Pacify compilers like GCC when the user code never invokes
+ YYERROR and the label yyerrorlab therefore never appears in user
+ code. */
+ if (/*CONSTCOND*/ 0)
+ goto yyerrorlab;
+
+ /* Do not reclaim the symbols of the rule which action triggered
+ this YYERROR. */
+ YYPOPSTACK (yylen);
+ yylen = 0;
+ YY_STACK_PRINT (yyss, yyssp);
+ yystate = *yyssp;
+ goto yyerrlab1;
+
+
+/*-------------------------------------------------------------.
+| yyerrlab1 -- common code for both syntax error and YYERROR. |
+`-------------------------------------------------------------*/
+yyerrlab1:
+ yyerrstatus = 3; /* Each real token shifted decrements this. */
+
+ for (;;)
+ {
+ yyn = yypact[yystate];
+ if (!yypact_value_is_default (yyn))
+ {
+ yyn += YYTERROR;
+ if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
+ {
+ yyn = yytable[yyn];
+ if (0 < yyn)
+ break;
+ }
+ }
+
+ /* Pop the current state because it cannot handle the error token. */
+ if (yyssp == yyss)
+ YYABORT;
+
+
+ yydestruct ("Error: popping",
+ yystos[yystate], yyvsp);
+ YYPOPSTACK (1);
+ yystate = *yyssp;
+ YY_STACK_PRINT (yyss, yyssp);
+ }
+
+ YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
+ *++yyvsp = yylval;
+ YY_IGNORE_MAYBE_UNINITIALIZED_END
+
+
+ /* Shift the error token. */
+ YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
+
+ yystate = yyn;
+ goto yynewstate;
+
+
+/*-------------------------------------.
+| yyacceptlab -- YYACCEPT comes here. |
+`-------------------------------------*/
+yyacceptlab:
+ yyresult = 0;
+ goto yyreturn;
+
+/*-----------------------------------.
+| yyabortlab -- YYABORT comes here. |
+`-----------------------------------*/
+yyabortlab:
+ yyresult = 1;
+ goto yyreturn;
+
+#if !defined yyoverflow || YYERROR_VERBOSE
+/*-------------------------------------------------.
+| yyexhaustedlab -- memory exhaustion comes here. |
+`-------------------------------------------------*/
+yyexhaustedlab:
+ yyerror (YY_("memory exhausted"));
+ yyresult = 2;
+ /* Fall through. */
#endif
- if (yyssp >= yysslim && yygrowstack())
+
+yyreturn:
+ if (yychar != YYEMPTY)
+ {
+ /* Make sure we have latest lookahead translation. See comments at
+ user semantic actions for why this is necessary. */
+ yytoken = YYTRANSLATE (yychar);
+ yydestruct ("Cleanup: discarding lookahead",
+ yytoken, &yylval);
+ }
+ /* Do not reclaim the symbols of the rule which action triggered
+ this YYABORT or YYACCEPT. */
+ YYPOPSTACK (yylen);
+ YY_STACK_PRINT (yyss, yyssp);
+ while (yyssp != yyss)
{
- goto yyoverflow;
+ yydestruct ("Cleanup: popping",
+ yystos[*yyssp], yyvsp);
+ YYPOPSTACK (1);
}
- *++yyssp = yystate;
- *++yyvsp = yyval;
- goto yyloop;
-yyoverflow:
- yyerror("yacc stack overflow");
-yyabort:
- return (1);
-yyaccept:
- return (0);
+#ifndef yyoverflow
+ if (yyss != yyssa)
+ YYSTACK_FREE (yyss);
+#endif
+#if YYERROR_VERBOSE
+ if (yymsg != yymsgbuf)
+ YYSTACK_FREE (yymsg);
+#endif
+ /* Make sure YYID is used. */
+ return YYID (yyresult);
}
+
+
diff --git a/hl/src/H5LTparse.h b/hl/src/H5LTparse.h
index 2dd8057..621dacd 100644
--- a/hl/src/H5LTparse.h
+++ b/hl/src/H5LTparse.h
@@ -1,65 +1,144 @@
-#ifndef YYERRCODE
-#define YYERRCODE 256
+/* A Bison parser, made by GNU Bison 2.7. */
+
+/* Bison interface for Yacc-like parsers in C
+
+ Copyright (C) 1984, 1989-1990, 2000-2012 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
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+/* As a special exception, you may create a larger work that contains
+ part or all of the Bison parser skeleton and distribute that work
+ under terms of your choice, so long as that work isn't itself a
+ parser generator using the skeleton or a modified version thereof
+ as a parser skeleton. Alternatively, if you modify or redistribute
+ the parser skeleton itself, you may (at your option) remove this
+ special exception, which will cause the skeleton and the resulting
+ Bison output files to be licensed under the GNU General Public
+ License without this special exception.
+
+ This special exception was added by the Free Software Foundation in
+ version 2.2 of Bison. */
+
+#ifndef YY_H5LTYY_H5LTPARSE_H_INCLUDED
+# define YY_H5LTYY_H5LTPARSE_H_INCLUDED
+/* Enabling traces. */
+#ifndef YYDEBUG
+# define YYDEBUG 0
+#endif
+#if YYDEBUG
+extern int H5LTyydebug;
#endif
-#define H5T_STD_I8BE_TOKEN 257
-#define H5T_STD_I8LE_TOKEN 258
-#define H5T_STD_I16BE_TOKEN 259
-#define H5T_STD_I16LE_TOKEN 260
-#define H5T_STD_I32BE_TOKEN 261
-#define H5T_STD_I32LE_TOKEN 262
-#define H5T_STD_I64BE_TOKEN 263
-#define H5T_STD_I64LE_TOKEN 264
-#define H5T_STD_U8BE_TOKEN 265
-#define H5T_STD_U8LE_TOKEN 266
-#define H5T_STD_U16BE_TOKEN 267
-#define H5T_STD_U16LE_TOKEN 268
-#define H5T_STD_U32BE_TOKEN 269
-#define H5T_STD_U32LE_TOKEN 270
-#define H5T_STD_U64BE_TOKEN 271
-#define H5T_STD_U64LE_TOKEN 272
-#define H5T_NATIVE_CHAR_TOKEN 273
-#define H5T_NATIVE_SCHAR_TOKEN 274
-#define H5T_NATIVE_UCHAR_TOKEN 275
-#define H5T_NATIVE_SHORT_TOKEN 276
-#define H5T_NATIVE_USHORT_TOKEN 277
-#define H5T_NATIVE_INT_TOKEN 278
-#define H5T_NATIVE_UINT_TOKEN 279
-#define H5T_NATIVE_LONG_TOKEN 280
-#define H5T_NATIVE_ULONG_TOKEN 281
-#define H5T_NATIVE_LLONG_TOKEN 282
-#define H5T_NATIVE_ULLONG_TOKEN 283
-#define H5T_IEEE_F32BE_TOKEN 284
-#define H5T_IEEE_F32LE_TOKEN 285
-#define H5T_IEEE_F64BE_TOKEN 286
-#define H5T_IEEE_F64LE_TOKEN 287
-#define H5T_NATIVE_FLOAT_TOKEN 288
-#define H5T_NATIVE_DOUBLE_TOKEN 289
-#define H5T_NATIVE_LDOUBLE_TOKEN 290
-#define H5T_STRING_TOKEN 291
-#define STRSIZE_TOKEN 292
-#define STRPAD_TOKEN 293
-#define CSET_TOKEN 294
-#define CTYPE_TOKEN 295
-#define H5T_VARIABLE_TOKEN 296
-#define H5T_STR_NULLTERM_TOKEN 297
-#define H5T_STR_NULLPAD_TOKEN 298
-#define H5T_STR_SPACEPAD_TOKEN 299
-#define H5T_CSET_ASCII_TOKEN 300
-#define H5T_CSET_UTF8_TOKEN 301
-#define H5T_C_S1_TOKEN 302
-#define H5T_FORTRAN_S1_TOKEN 303
-#define H5T_OPAQUE_TOKEN 304
-#define OPQ_SIZE_TOKEN 305
-#define OPQ_TAG_TOKEN 306
-#define H5T_COMPOUND_TOKEN 307
-#define H5T_ENUM_TOKEN 308
-#define H5T_ARRAY_TOKEN 309
-#define H5T_VLEN_TOKEN 310
-#define STRING 311
-#define NUMBER 312
-typedef union {
- int ival; /*for integer token*/
- char *sval; /*for name string*/
+/* Tokens. */
+#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
+ };
+#endif
+
+
+#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
+typedef union YYSTYPE
+{
+/* Line 2065 of yacc.c */
+#line 68 "H5LTparse.y"
+
+ int ival; /*for integer token*/
+ char *sval; /*for name string*/
+ hid_t hid; /*for hid_t token*/
+
+
+/* Line 2065 of yacc.c */
+#line 122 "H5LTparse.h"
} 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_H5LTPARSE_H_INCLUDED */
diff --git a/hl/src/H5LTparse.y b/hl/src/H5LTparse.y
index d4c786c..4c07533 100644
--- a/hl/src/H5LTparse.y
+++ b/hl/src/H5LTparse.y
@@ -66,20 +66,21 @@ hbool_t is_opq_tag = 0; /*flag to lexer for opaque type tag*/
%}
%union {
- int ival; /*for integer token*/
- char *sval; /*for name string*/
+ int ival; /*for integer token*/
+ char *sval; /*for name string*/
+ hid_t hid; /*for hid_t token*/
}
-%token <ival> H5T_STD_I8BE_TOKEN H5T_STD_I8LE_TOKEN H5T_STD_I16BE_TOKEN H5T_STD_I16LE_TOKEN
-%token <ival> H5T_STD_I32BE_TOKEN H5T_STD_I32LE_TOKEN H5T_STD_I64BE_TOKEN H5T_STD_I64LE_TOKEN
-%token <ival> H5T_STD_U8BE_TOKEN H5T_STD_U8LE_TOKEN H5T_STD_U16BE_TOKEN H5T_STD_U16LE_TOKEN
-%token <ival> H5T_STD_U32BE_TOKEN H5T_STD_U32LE_TOKEN H5T_STD_U64BE_TOKEN H5T_STD_U64LE_TOKEN
-%token <ival> H5T_NATIVE_CHAR_TOKEN H5T_NATIVE_SCHAR_TOKEN H5T_NATIVE_UCHAR_TOKEN
-%token <ival> H5T_NATIVE_SHORT_TOKEN H5T_NATIVE_USHORT_TOKEN H5T_NATIVE_INT_TOKEN H5T_NATIVE_UINT_TOKEN
-%token <ival> H5T_NATIVE_LONG_TOKEN H5T_NATIVE_ULONG_TOKEN H5T_NATIVE_LLONG_TOKEN H5T_NATIVE_ULLONG_TOKEN
+%token <hid> H5T_STD_I8BE_TOKEN H5T_STD_I8LE_TOKEN H5T_STD_I16BE_TOKEN H5T_STD_I16LE_TOKEN
+%token <hid> H5T_STD_I32BE_TOKEN H5T_STD_I32LE_TOKEN H5T_STD_I64BE_TOKEN H5T_STD_I64LE_TOKEN
+%token <hid> H5T_STD_U8BE_TOKEN H5T_STD_U8LE_TOKEN H5T_STD_U16BE_TOKEN H5T_STD_U16LE_TOKEN
+%token <hid> H5T_STD_U32BE_TOKEN H5T_STD_U32LE_TOKEN H5T_STD_U64BE_TOKEN H5T_STD_U64LE_TOKEN
+%token <hid> H5T_NATIVE_CHAR_TOKEN H5T_NATIVE_SCHAR_TOKEN H5T_NATIVE_UCHAR_TOKEN
+%token <hid> H5T_NATIVE_SHORT_TOKEN H5T_NATIVE_USHORT_TOKEN H5T_NATIVE_INT_TOKEN H5T_NATIVE_UINT_TOKEN
+%token <hid> H5T_NATIVE_LONG_TOKEN H5T_NATIVE_ULONG_TOKEN H5T_NATIVE_LLONG_TOKEN H5T_NATIVE_ULLONG_TOKEN
-%token <ival> H5T_IEEE_F32BE_TOKEN H5T_IEEE_F32LE_TOKEN H5T_IEEE_F64BE_TOKEN H5T_IEEE_F64LE_TOKEN
-%token <ival> H5T_NATIVE_FLOAT_TOKEN H5T_NATIVE_DOUBLE_TOKEN H5T_NATIVE_LDOUBLE_TOKEN
+%token <hid> H5T_IEEE_F32BE_TOKEN H5T_IEEE_F32LE_TOKEN H5T_IEEE_F64BE_TOKEN H5T_IEEE_F64LE_TOKEN
+%token <hid> H5T_NATIVE_FLOAT_TOKEN H5T_NATIVE_DOUBLE_TOKEN H5T_NATIVE_LDOUBLE_TOKEN
%token <ival> H5T_STRING_TOKEN STRSIZE_TOKEN STRPAD_TOKEN CSET_TOKEN CTYPE_TOKEN H5T_VARIABLE_TOKEN
%token <ival> H5T_STR_NULLTERM_TOKEN H5T_STR_NULLPAD_TOKEN H5T_STR_SPACEPAD_TOKEN
@@ -98,7 +99,7 @@ hbool_t is_opq_tag = 0; /*flag to lexer for opaque type tag*/
%%
start : { memset(arr_stack, 0, STACK_SIZE*sizeof(struct arr_info)); /*initialize here?*/ }
- | ddl_type { return $<ival>$;}
+ | ddl_type { return $<hid>$;}
;
ddl_type : atomic_type
| compound_type
@@ -112,48 +113,48 @@ atomic_type : integer_type
| opaque_type
;
-integer_type : H5T_STD_I8BE_TOKEN { $<ival>$ = H5Tcopy(H5T_STD_I8BE); }
- | H5T_STD_I8LE_TOKEN { $<ival>$ = H5Tcopy(H5T_STD_I8LE); }
- | H5T_STD_I16BE_TOKEN { $<ival>$ = H5Tcopy(H5T_STD_I16BE); }
- | H5T_STD_I16LE_TOKEN { $<ival>$ = H5Tcopy(H5T_STD_I16LE); }
- | H5T_STD_I32BE_TOKEN { $<ival>$ = H5Tcopy(H5T_STD_I32BE); }
- | H5T_STD_I32LE_TOKEN { $<ival>$ = H5Tcopy(H5T_STD_I32LE); }
- | H5T_STD_I64BE_TOKEN { $<ival>$ = H5Tcopy(H5T_STD_I64BE); }
- | H5T_STD_I64LE_TOKEN { $<ival>$ = H5Tcopy(H5T_STD_I64LE); }
- | H5T_STD_U8BE_TOKEN { $<ival>$ = H5Tcopy(H5T_STD_U8BE); }
- | H5T_STD_U8LE_TOKEN { $<ival>$ = H5Tcopy(H5T_STD_U8LE); }
- | H5T_STD_U16BE_TOKEN { $<ival>$ = H5Tcopy(H5T_STD_U16BE); }
- | H5T_STD_U16LE_TOKEN { $<ival>$ = H5Tcopy(H5T_STD_U16LE); }
- | H5T_STD_U32BE_TOKEN { $<ival>$ = H5Tcopy(H5T_STD_U32BE); }
- | H5T_STD_U32LE_TOKEN { $<ival>$ = H5Tcopy(H5T_STD_U32LE); }
- | H5T_STD_U64BE_TOKEN { $<ival>$ = H5Tcopy(H5T_STD_U64BE); }
- | H5T_STD_U64LE_TOKEN { $<ival>$ = H5Tcopy(H5T_STD_U64LE); }
- | H5T_NATIVE_CHAR_TOKEN { $<ival>$ = H5Tcopy(H5T_NATIVE_CHAR); }
- | H5T_NATIVE_SCHAR_TOKEN { $<ival>$ = H5Tcopy(H5T_NATIVE_SCHAR); }
- | H5T_NATIVE_UCHAR_TOKEN { $<ival>$ = H5Tcopy(H5T_NATIVE_UCHAR); }
- | H5T_NATIVE_SHORT_TOKEN { $<ival>$ = H5Tcopy(H5T_NATIVE_SHORT); }
- | H5T_NATIVE_USHORT_TOKEN { $<ival>$ = H5Tcopy(H5T_NATIVE_USHORT); }
- | H5T_NATIVE_INT_TOKEN { $<ival>$ = H5Tcopy(H5T_NATIVE_INT); }
- | H5T_NATIVE_UINT_TOKEN { $<ival>$ = H5Tcopy(H5T_NATIVE_UINT); }
- | H5T_NATIVE_LONG_TOKEN { $<ival>$ = H5Tcopy(H5T_NATIVE_LONG); }
- | H5T_NATIVE_ULONG_TOKEN { $<ival>$ = H5Tcopy(H5T_NATIVE_ULONG); }
- | H5T_NATIVE_LLONG_TOKEN { $<ival>$ = H5Tcopy(H5T_NATIVE_LLONG); }
- | H5T_NATIVE_ULLONG_TOKEN { $<ival>$ = H5Tcopy(H5T_NATIVE_ULLONG); }
+integer_type : H5T_STD_I8BE_TOKEN { $<hid>$ = H5Tcopy(H5T_STD_I8BE); }
+ | H5T_STD_I8LE_TOKEN { $<hid>$ = H5Tcopy(H5T_STD_I8LE); }
+ | H5T_STD_I16BE_TOKEN { $<hid>$ = H5Tcopy(H5T_STD_I16BE); }
+ | H5T_STD_I16LE_TOKEN { $<hid>$ = H5Tcopy(H5T_STD_I16LE); }
+ | H5T_STD_I32BE_TOKEN { $<hid>$ = H5Tcopy(H5T_STD_I32BE); }
+ | H5T_STD_I32LE_TOKEN { $<hid>$ = H5Tcopy(H5T_STD_I32LE); }
+ | H5T_STD_I64BE_TOKEN { $<hid>$ = H5Tcopy(H5T_STD_I64BE); }
+ | H5T_STD_I64LE_TOKEN { $<hid>$ = H5Tcopy(H5T_STD_I64LE); }
+ | H5T_STD_U8BE_TOKEN { $<hid>$ = H5Tcopy(H5T_STD_U8BE); }
+ | H5T_STD_U8LE_TOKEN { $<hid>$ = H5Tcopy(H5T_STD_U8LE); }
+ | H5T_STD_U16BE_TOKEN { $<hid>$ = H5Tcopy(H5T_STD_U16BE); }
+ | H5T_STD_U16LE_TOKEN { $<hid>$ = H5Tcopy(H5T_STD_U16LE); }
+ | H5T_STD_U32BE_TOKEN { $<hid>$ = H5Tcopy(H5T_STD_U32BE); }
+ | H5T_STD_U32LE_TOKEN { $<hid>$ = H5Tcopy(H5T_STD_U32LE); }
+ | H5T_STD_U64BE_TOKEN { $<hid>$ = H5Tcopy(H5T_STD_U64BE); }
+ | H5T_STD_U64LE_TOKEN { $<hid>$ = H5Tcopy(H5T_STD_U64LE); }
+ | H5T_NATIVE_CHAR_TOKEN { $<hid>$ = H5Tcopy(H5T_NATIVE_CHAR); }
+ | H5T_NATIVE_SCHAR_TOKEN { $<hid>$ = H5Tcopy(H5T_NATIVE_SCHAR); }
+ | H5T_NATIVE_UCHAR_TOKEN { $<hid>$ = H5Tcopy(H5T_NATIVE_UCHAR); }
+ | H5T_NATIVE_SHORT_TOKEN { $<hid>$ = H5Tcopy(H5T_NATIVE_SHORT); }
+ | H5T_NATIVE_USHORT_TOKEN { $<hid>$ = H5Tcopy(H5T_NATIVE_USHORT); }
+ | H5T_NATIVE_INT_TOKEN { $<hid>$ = H5Tcopy(H5T_NATIVE_INT); }
+ | H5T_NATIVE_UINT_TOKEN { $<hid>$ = H5Tcopy(H5T_NATIVE_UINT); }
+ | H5T_NATIVE_LONG_TOKEN { $<hid>$ = H5Tcopy(H5T_NATIVE_LONG); }
+ | H5T_NATIVE_ULONG_TOKEN { $<hid>$ = H5Tcopy(H5T_NATIVE_ULONG); }
+ | H5T_NATIVE_LLONG_TOKEN { $<hid>$ = H5Tcopy(H5T_NATIVE_LLONG); }
+ | H5T_NATIVE_ULLONG_TOKEN { $<hid>$ = H5Tcopy(H5T_NATIVE_ULLONG); }
;
-fp_type : H5T_IEEE_F32BE_TOKEN { $<ival>$ = H5Tcopy(H5T_IEEE_F32BE); }
- | H5T_IEEE_F32LE_TOKEN { $<ival>$ = H5Tcopy(H5T_IEEE_F32LE); }
- | H5T_IEEE_F64BE_TOKEN { $<ival>$ = H5Tcopy(H5T_IEEE_F64BE); }
- | H5T_IEEE_F64LE_TOKEN { $<ival>$ = H5Tcopy(H5T_IEEE_F64LE); }
- | H5T_NATIVE_FLOAT_TOKEN { $<ival>$ = H5Tcopy(H5T_NATIVE_FLOAT); }
- | H5T_NATIVE_DOUBLE_TOKEN { $<ival>$ = H5Tcopy(H5T_NATIVE_DOUBLE); }
- | H5T_NATIVE_LDOUBLE_TOKEN { $<ival>$ = H5Tcopy(H5T_NATIVE_LDOUBLE); }
+fp_type : H5T_IEEE_F32BE_TOKEN { $<hid>$ = H5Tcopy(H5T_IEEE_F32BE); }
+ | H5T_IEEE_F32LE_TOKEN { $<hid>$ = H5Tcopy(H5T_IEEE_F32LE); }
+ | H5T_IEEE_F64BE_TOKEN { $<hid>$ = H5Tcopy(H5T_IEEE_F64BE); }
+ | H5T_IEEE_F64LE_TOKEN { $<hid>$ = H5Tcopy(H5T_IEEE_F64LE); }
+ | H5T_NATIVE_FLOAT_TOKEN { $<hid>$ = H5Tcopy(H5T_NATIVE_FLOAT); }
+ | H5T_NATIVE_DOUBLE_TOKEN { $<hid>$ = H5Tcopy(H5T_NATIVE_DOUBLE); }
+ | H5T_NATIVE_LDOUBLE_TOKEN { $<hid>$ = H5Tcopy(H5T_NATIVE_LDOUBLE); }
;
compound_type : H5T_COMPOUND_TOKEN
{ csindex++; cmpd_stack[csindex].id = H5Tcreate(H5T_COMPOUND, 1); /*temporarily set size to 1*/ }
'{' memb_list '}'
- { $<ival>$ = cmpd_stack[csindex].id;
+ { $<hid>$ = cmpd_stack[csindex].id;
cmpd_stack[csindex].id = 0;
cmpd_stack[csindex].first_memb = 1;
csindex--;
@@ -170,28 +171,28 @@ memb_def : ddl_type { cmpd_stack[csindex].is_field = 1; /*notify le
/*Adjust size and insert member, consider both member size and offset.*/
if(cmpd_stack[csindex].first_memb) { /*reclaim the size 1 temporarily set*/
- new_size = H5Tget_size($<ival>1) + $<ival>6;
+ new_size = H5Tget_size($<hid>1) + $<ival>6;
H5Tset_size(dtype_id, new_size);
/*member name is saved in yylval.sval by lexer*/
- H5Tinsert(dtype_id, $<sval>4, $<ival>6, $<ival>1);
+ H5Tinsert(dtype_id, $<sval>4, $<ival>6, $<hid>1);
cmpd_stack[csindex].first_memb = 0;
} else {
origin_size = H5Tget_size(dtype_id);
if($<ival>6 == 0) {
- new_size = origin_size + H5Tget_size($<ival>1);
+ new_size = origin_size + H5Tget_size($<hid>1);
H5Tset_size(dtype_id, new_size);
- H5Tinsert(dtype_id, $<sval>4, origin_size, $<ival>1);
+ H5Tinsert(dtype_id, $<sval>4, origin_size, $<hid>1);
} else {
- new_size = $<ival>6 + H5Tget_size($<ival>1);
+ new_size = $<ival>6 + H5Tget_size($<hid>1);
H5Tset_size(dtype_id, new_size);
- H5Tinsert(dtype_id, $<sval>4, $<ival>6, $<ival>1);
+ H5Tinsert(dtype_id, $<sval>4, $<ival>6, $<hid>1);
}
}
cmpd_stack[csindex].is_field = 0;
- H5Tclose($<ival>1);
+ H5Tclose($<hid>1);
new_size = H5Tget_size(dtype_id);
}
@@ -211,10 +212,10 @@ offset : NUMBER
array_type : H5T_ARRAY_TOKEN { asindex++; /*pushd onto the stack*/ }
'{' dim_list ddl_type '}'
{
- $<ival>$ = H5Tarray_create2($<ival>5, arr_stack[asindex].ndims, arr_stack[asindex].dims);
+ $<hid>$ = H5Tarray_create2($<hid>5, arr_stack[asindex].ndims, arr_stack[asindex].dims);
arr_stack[asindex].ndims = 0;
asindex--;
- H5Tclose($<ival>5);
+ H5Tclose($<hid>5);
}
;
dim_list :
@@ -232,7 +233,7 @@ dimsize : NUMBER
;
vlen_type : H5T_VLEN_TOKEN '{' ddl_type '}'
- { $<ival>$ = H5Tvlen_create($<ival>3); H5Tclose($<ival>3); }
+ { $<hid>$ = H5Tvlen_create($<hid>3); H5Tclose($<hid>3); }
;
opaque_type : H5T_OPAQUE_TOKEN
@@ -240,15 +241,15 @@ opaque_type : H5T_OPAQUE_TOKEN
OPQ_SIZE_TOKEN { is_opq_size = 1; } opaque_size ';'
{
size_t size = (size_t)yylval.ival;
- $<ival>$ = H5Tcreate(H5T_OPAQUE, size);
+ $<hid>$ = H5Tcreate(H5T_OPAQUE, size);
is_opq_size = 0;
}
OPQ_TAG_TOKEN { is_opq_tag = 1; } '"' opaque_tag '"' ';'
{
- H5Tset_tag($<ival>7, yylval.sval);
+ H5Tset_tag($<hid>7, yylval.sval);
is_opq_tag = 0;
}
- '}' { $<ival>$ = $<ival>7; }
+ '}' { $<hid>$ = $<hid>7; }
;
opaque_size : NUMBER
;
@@ -282,14 +283,14 @@ string_type : H5T_STRING_TOKEN
}
CTYPE_TOKEN ctype ';'
{
- if($<ival>17 == H5T_C_S1_TOKEN)
- $<ival>$ = H5Tcopy(H5T_C_S1);
- else if($<ival>17 == H5T_FORTRAN_S1_TOKEN)
- $<ival>$ = H5Tcopy(H5T_FORTRAN_S1);
+ if($<hid>17 == H5T_C_S1_TOKEN)
+ $<hid>$ = H5Tcopy(H5T_C_S1);
+ else if($<hid>17 == H5T_FORTRAN_S1_TOKEN)
+ $<hid>$ = H5Tcopy(H5T_FORTRAN_S1);
}
'}'
{
- hid_t str_id = $<ival>19;
+ hid_t str_id = $<hid>19;
/*set string size*/
if(is_variable) {
@@ -302,7 +303,7 @@ string_type : H5T_STRING_TOKEN
H5Tset_strpad(str_id, str_pad);
H5Tset_cset(str_id, str_cset);
- $<ival>$ = str_id;
+ $<hid>$ = str_id;
}
;
strsize : H5T_VARIABLE_TOKEN {$<ival>$ = H5T_VARIABLE_TOKEN;}
@@ -315,14 +316,14 @@ strpad : H5T_STR_NULLTERM_TOKEN {$<ival>$ = H5T_STR_NULLTERM_TOKE
cset : H5T_CSET_ASCII_TOKEN {$<ival>$ = H5T_CSET_ASCII_TOKEN;}
| H5T_CSET_UTF8_TOKEN {$<ival>$ = H5T_CSET_UTF8_TOKEN;}
;
-ctype : H5T_C_S1_TOKEN {$<ival>$ = H5T_C_S1_TOKEN;}
- | H5T_FORTRAN_S1_TOKEN {$<ival>$ = H5T_FORTRAN_S1_TOKEN;}
+ctype : H5T_C_S1_TOKEN {$<hid>$ = H5T_C_S1_TOKEN;}
+ | H5T_FORTRAN_S1_TOKEN {$<hid>$ = H5T_FORTRAN_S1_TOKEN;}
;
enum_type : H5T_ENUM_TOKEN '{' integer_type ';'
- { is_enum = 1; enum_id = H5Tenum_create($<ival>3); H5Tclose($<ival>3); }
+ { is_enum = 1; enum_id = H5Tenum_create($<hid>3); H5Tclose($<hid>3); }
enum_list '}'
- { is_enum = 0; /*reset*/ $<ival>$ = enum_id; }
+ { is_enum = 0; /*reset*/ $<hid>$ = enum_id; }
;
enum_list :
| enum_list enum_def
diff --git a/hl/src/H5LTprivate.h b/hl/src/H5LTprivate.h
index 0ee6b5c..98ac06e 100644
--- a/hl/src/H5LTprivate.h
+++ b/hl/src/H5LTprivate.h
@@ -48,6 +48,6 @@ H5_HLDLL herr_t H5LT_find_attribute( hid_t loc_id, const char *name );
H5_HLDLL char* H5LT_dtype_to_text(hid_t dtype, char *dt_str, H5LT_lang_t lang,
size_t *slen, hbool_t no_user_buf);
-H5_HLDLL int H5LTyyparse(void);
+H5_HLDLL hid_t H5LTyyparse(void);
#endif
diff --git a/hl/src/H5PT.c b/hl/src/H5PT.c
index ff4347a..7a0bc20 100644
--- a/hl/src/H5PT.c
+++ b/hl/src/H5PT.c
@@ -13,9 +13,10 @@
* access to either file, you may request a copy from help at hdfgroup.org. *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+#include <stdlib.h>
+
#include "H5PTprivate.h"
#include "H5TBprivate.h"
-#include <stdlib.h>
/* Packet Table private data */
@@ -33,6 +34,7 @@ static H5I_type_t H5PT_ptable_id_type = H5I_UNINIT;
#define H5PT_HASH_TABLE_SIZE 64
/* Packet Table private functions */
+static herr_t H5PT_free_id(void *id);
static herr_t H5PT_close( htbl_t* table );
static herr_t H5PT_create_index(htbl_t *table_id);
static herr_t H5PT_set_index(htbl_t *table_id, hsize_t pt_index);
@@ -82,13 +84,18 @@ hid_t H5PTcreate_fl ( hid_t loc_id,
hsize_t maxdims[1];
hid_t ret_value;
+ /* check the arguments */
+ if (dset_name == NULL) {
+ goto out;
+ }
+
/* Register the packet table ID type if this is the first table created */
if(H5PT_ptable_id_type < 0)
- if((H5PT_ptable_id_type = H5Iregister_type((size_t)H5PT_HASH_TABLE_SIZE, 0, (H5I_free_t)free)) < 0)
+ if((H5PT_ptable_id_type = H5Iregister_type((size_t)H5PT_HASH_TABLE_SIZE, 0, (H5I_free_t)H5PT_free_id)) < 0)
goto out;
/* Get memory for the table identifier */
- table = (htbl_t *)malloc(sizeof(htbl_t));
+ table = (htbl_t *)HDmalloc(sizeof(htbl_t));
/* Create a simple data space with unlimited size */
dims[0] = 0;
@@ -142,7 +149,7 @@ hid_t H5PTcreate_fl ( hid_t loc_id,
H5Pclose(plist_id);
H5Dclose(dset_id);
if(table)
- free(table);
+ HDfree(table);
H5E_END_TRY
return H5I_INVALID_HID;
}
@@ -176,6 +183,11 @@ hid_t H5PTcreate_vl ( hid_t loc_id,
hid_t ret_value=H5I_BADID;
hid_t vltype;
+ /* check the arguments */
+ if (dset_name == NULL) {
+ goto out;
+ }
+
/* Create a variable length type that uses single bytes as its base type */
vltype = H5Tvlen_create(H5T_NATIVE_UCHAR);
if(vltype < 0)
@@ -230,12 +242,17 @@ hid_t H5PTopen( hid_t loc_id,
hid_t ret_value;
hsize_t dims[1];
+ /* check the arguments */
+ if (dset_name == NULL) {
+ goto out;
+ }
+
/* Register the packet table ID type if this is the first table created */
if( H5PT_ptable_id_type < 0)
- if((H5PT_ptable_id_type = H5Iregister_type((size_t)H5PT_HASH_TABLE_SIZE, 0, (H5I_free_t)free)) < 0)
+ if((H5PT_ptable_id_type = H5Iregister_type((size_t)H5PT_HASH_TABLE_SIZE, 0, (H5I_free_t)H5PT_free_id)) < 0)
goto out;
- table = (htbl_t *)malloc(sizeof(htbl_t));
+ table = (htbl_t *)HDmalloc(sizeof(htbl_t));
if ( table == NULL ) {
goto out;
@@ -291,12 +308,26 @@ out:
{
H5Dclose(table->dset_id);
H5Tclose(table->type_id);
- free(table);
+ HDfree(table);
}
H5E_END_TRY
return H5I_INVALID_HID;
}
+/*-------------------------------------------------------------------------
+ * Function: H5PT_free_id
+ *
+ * Purpose: Free an id. Callback for H5Iregister_type.
+ *
+ * Return: Success: 0, Failure: N/A
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5PT_free_id(void *id)
+{
+ HDfree(id);
+ return 0;
+}
/*-------------------------------------------------------------------------
* Function: H5PT_close
@@ -331,7 +362,7 @@ H5PT_close( htbl_t* table)
if(H5Tclose(table->type_id) < 0)
goto out;
- free(table);
+ HDfree(table);
return 0;
@@ -342,7 +373,7 @@ out:
H5Dclose(table->dset_id);
H5Tclose(table->type_id);
H5E_END_TRY
- free(table);
+ HDfree(table);
}
return -1;
}
@@ -371,7 +402,7 @@ herr_t H5PTclose( hid_t table_id )
htbl_t * table;
/* Remove the ID from the library */
- if((table = H5Iremove_verify(table_id, H5PT_ptable_id_type)) ==NULL)
+ if((table = (htbl_t *)H5Iremove_verify(table_id, H5PT_ptable_id_type)) ==NULL)
goto out;
/* If the library found the table, remove it */
diff --git a/hl/src/H5TB.c b/hl/src/H5TB.c
index 0fa23bc..1ca41a8 100644
--- a/hl/src/H5TB.c
+++ b/hl/src/H5TB.c
@@ -15,7 +15,7 @@
#include <stdlib.h>
#include <string.h>
-#include "H5private.h"
+
#include "H5LTprivate.h"
#include "H5TBprivate.h"
@@ -27,14 +27,14 @@
*-------------------------------------------------------------------------
*/
-static int H5TB_find_field(const char *field,
+static hbool_t H5TB_find_field(const char *field,
const char *field_list);
static herr_t H5TB_attach_attributes(const char *table_title,
hid_t loc_id,
const char *dset_name,
hsize_t nfields,
- hid_t tid );
+ hid_t tid);
static hid_t H5TB_create_type(hid_t loc_id,
const char *dset_name,
@@ -64,13 +64,9 @@ static hid_t H5TB_create_type(hid_t loc_id,
*
* Comments:
*
-* Modifications:
-*
*-------------------------------------------------------------------------
*/
-
-
-herr_t H5TBmake_table( const char *table_title,
+herr_t H5TBmake_table(const char *table_title,
hid_t loc_id,
const char *dset_name,
hsize_t nfields,
@@ -82,86 +78,91 @@ herr_t H5TBmake_table( const char *table_title,
hsize_t chunk_size,
void *fill_data,
int compress,
- const void *buf )
+ const void *buf)
{
-
- hid_t did;
- hid_t sid;
- hid_t mem_type_id;
- hid_t plist_id;
+ hid_t did = H5I_BADID;
+ hid_t sid = H5I_BADID;
+ hid_t mem_type_id = H5I_BADID;
+ hid_t plist_id = H5I_BADID;
+ hid_t attr_id = H5I_BADID;
hsize_t dims[1];
hsize_t dims_chunk[1];
- hsize_t maxdims[1] = { H5S_UNLIMITED };
+ hsize_t maxdims[1] = {H5S_UNLIMITED};
char attr_name[255];
- char *member_name;
- hid_t attr_id;
- char aux[255];
+ char *member_name = NULL;
+ unsigned char *tmp_buf = NULL;
hsize_t i;
- unsigned char *tmp_buf;
+ herr_t ret_val = -1;
+ /* check the arguments */
+ if (table_title == NULL) {
+ goto out;
+ }
+ if (dset_name == NULL) {
+ goto out;
+ }
+ if (field_names == NULL) {
+ goto out;
+ }
+
dims[0] = nrecords;
dims_chunk[0] = chunk_size;
/* create the memory data type. */
- if ((mem_type_id = H5Tcreate (H5T_COMPOUND, type_size )) < 0)
- return -1;
+ if((mem_type_id = H5Tcreate(H5T_COMPOUND, type_size)) < 0)
+ goto out;
/* insert fields. */
- for ( i = 0; i < nfields; i++)
- {
+ for(i = 0; i < nfields; i++)
if(H5Tinsert(mem_type_id, field_names[i], field_offset[i], field_types[i] ) < 0)
- return -1;
- }
+ goto out;
/* create a simple data space with unlimited size */
- if ((sid = H5Screate_simple( 1, dims, maxdims )) < 0)
- return -1;
+ if((sid = H5Screate_simple(1, dims, maxdims)) < 0)
+ goto out;
/* modify dataset creation properties, i.e. enable chunking */
- plist_id = H5Pcreate(H5P_DATASET_CREATE);
- if (H5Pset_chunk(plist_id, 1, dims_chunk) < 0)
- return -1;
+ if((plist_id = H5Pcreate(H5P_DATASET_CREATE)) < 0)
+ goto out;
+ if(H5Pset_chunk(plist_id, 1, dims_chunk) < 0)
+ goto out;
/* set the fill value using a struct as the data type. */
- if (fill_data)
- {
+ if(fill_data)
if(H5Pset_fill_value(plist_id, mem_type_id, fill_data) < 0)
- return -1;
- }
+ goto out;
/*
dataset creation property list is modified to use
GZIP compression with the compression effort set to 6.
*/
- if (compress)
- {
+ if(compress)
if(H5Pset_deflate(plist_id, 6) < 0)
- return -1;
- }
+ goto out;
/* create the dataset. */
- if ((did = H5Dcreate2(loc_id, dset_name, mem_type_id, sid, H5P_DEFAULT, plist_id, H5P_DEFAULT)) < 0)
+ if((did = H5Dcreate2(loc_id, dset_name, mem_type_id, sid, H5P_DEFAULT, plist_id, H5P_DEFAULT)) < 0)
goto out;
/* only write if there is something to write */
- if (buf)
- {
- /* Write data to the dataset. */
- if (H5Dwrite( did, mem_type_id, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf ) < 0)
+ if(buf)
+ if(H5Dwrite(did, mem_type_id, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf) < 0)
goto out;
- }
/* terminate access to the data space. */
- if (H5Sclose(sid) < 0)
+ if(H5Sclose(sid) < 0)
goto out;
+ sid = H5I_BADID;
/* end access to the dataset */
- if (H5Dclose(did) < 0)
+ if(H5Dclose(did) < 0)
goto out;
+ did = H5I_BADID;
/* end access to the property list */
- if (H5Pclose(plist_id) < 0)
+ if(H5Pclose(plist_id) < 0)
goto out;
+ plist_id = H5I_BADID;
/*-------------------------------------------------------------------------
* set the conforming table attributes
@@ -169,100 +170,97 @@ herr_t H5TBmake_table( const char *table_title,
*/
/* attach the CLASS attribute */
- if (H5LTset_attribute_string( loc_id, dset_name, "CLASS", TABLE_CLASS ) < 0)
+ if(H5LTset_attribute_string(loc_id, dset_name, "CLASS", TABLE_CLASS) < 0)
goto out;
/* attach the VERSION attribute */
- if (H5LTset_attribute_string( loc_id, dset_name, "VERSION", TABLE_VERSION ) < 0)
+ if(H5LTset_attribute_string(loc_id, dset_name, "VERSION", TABLE_VERSION) < 0)
goto out;
/* attach the TITLE attribute */
- if (H5LTset_attribute_string( loc_id, dset_name, "TITLE", table_title ) < 0)
+ if(H5LTset_attribute_string(loc_id, dset_name, "TITLE", table_title) < 0)
goto out;
/* attach the FIELD_ name attribute */
- for ( i = 0; i < nfields; i++)
- {
+ for(i = 0; i < nfields; i++) {
/* get the member name */
- member_name = H5Tget_member_name( mem_type_id,(unsigned) i );
+ if(NULL == (member_name = H5Tget_member_name(mem_type_id, (unsigned)i)))
+ goto out;
- strcpy( attr_name, "FIELD_" );
- sprintf( aux, "%d", (int)i );
- strcat( attr_name, aux );
- sprintf( aux, "%s", "_NAME" );
- strcat( attr_name, aux );
+ HDsnprintf(attr_name, sizeof(attr_name), "FIELD_%d_NAME", (int)i);
/* attach the attribute */
- if (H5LTset_attribute_string( loc_id, dset_name, attr_name, member_name ) < 0)
+ if(H5LTset_attribute_string(loc_id, dset_name, attr_name, member_name) < 0)
goto out;
- H5free_memory( member_name );
-
- }
+ H5free_memory(member_name);
+ member_name = NULL;
+ } /* end for */
/* attach the FIELD_ fill value attribute */
- if (fill_data )
- {
-
- tmp_buf = (unsigned char *) fill_data;
+ if(fill_data) {
+ tmp_buf = (unsigned char *)fill_data;
/* open the dataset. */
- if ((did = H5Dopen2(loc_id, dset_name, H5P_DEFAULT)) < 0)
- return -1;
-
- if (( sid = H5Screate(H5S_SCALAR)) < 0)
+ if((did = H5Dopen2(loc_id, dset_name, H5P_DEFAULT)) < 0)
goto out;
- for ( i = 0; i < nfields; i++)
- {
-
- /* get the member name */
- member_name = H5Tget_member_name(mem_type_id, (unsigned)i);
+ if((sid = H5Screate(H5S_SCALAR)) < 0)
+ goto out;
- strcpy(attr_name, "FIELD_");
- sprintf(aux, "%d", (int)i);
- strcat(attr_name, aux);
- sprintf(aux, "%s", "_FILL");
- strcat(attr_name, aux);
+ for(i = 0; i < nfields; i++) {
+ HDsnprintf(attr_name, sizeof(attr_name), "FIELD_%d_FILL", (int)i);
- if ((attr_id = H5Acreate2(did, attr_name, field_types[i], sid, H5P_DEFAULT, H5P_DEFAULT)) < 0)
+ if((attr_id = H5Acreate2(did, attr_name, field_types[i], sid, H5P_DEFAULT, H5P_DEFAULT)) < 0)
goto out;
- if (H5Awrite(attr_id, field_types[i], tmp_buf+field_offset[i]) < 0)
+ if(H5Awrite(attr_id, field_types[i], tmp_buf + field_offset[i]) < 0)
goto out;
- if (H5Aclose(attr_id) < 0)
+ if(H5Aclose(attr_id) < 0)
goto out;
-
- H5free_memory(member_name);
- }
+ attr_id = H5I_BADID;
+ } /* end for */
/* terminate access to the data space. */
- if (H5Sclose(sid) < 0)
+ if(H5Sclose(sid) < 0)
goto out;
+ sid = H5I_BADID;
/* end access to the dataset */
- if (H5Dclose(did) < 0)
+ if(H5Dclose(did) < 0)
goto out;
- }
+ did = H5I_BADID;
+ } /* end if */
/* release the datatype. */
- if (H5Tclose( mem_type_id ) < 0)
- return -1;
+ if(H5Tclose(mem_type_id) < 0)
+ goto out;
+ mem_type_id = H5I_BADID;
- return 0;
+ ret_val = 0;
- /* error zone */
out:
- H5E_BEGIN_TRY {
- H5Dclose(did);
- H5Sclose(sid);
- H5Pclose(plist_id);
- H5Tclose(mem_type_id);
- } H5E_END_TRY;
- return -1;
+ if(member_name)
+ H5free_memory(member_name);
+ if(attr_id > 0)
+ if(H5Aclose(attr_id) < 0)
+ ret_val = -1;
+ if(plist_id > 0)
+ if(H5Pclose(plist_id) < 0)
+ ret_val = -1;
+ if(sid > 0)
+ if(H5Sclose(sid) < 0)
+ ret_val = -1;
+ if(did > 0)
+ if(H5Dclose(did) < 0)
+ ret_val = -1;
+ if(mem_type_id > 0)
+ if(H5Tclose(mem_type_id) < 0)
+ ret_val = -1;
-}
+ return ret_val;
+} /* end H5TBmake_table() */
/*-------------------------------------------------------------------------
*
@@ -286,70 +284,61 @@ out:
*
* Comments: Uses memory offsets
*
-* Modifications: April 1, 2004
-* the FIELD_SIZES parameter is used to define the memory type ID
-* returned by H5TB_create_type
-*
*-------------------------------------------------------------------------
*/
-
-herr_t H5TBappend_records( hid_t loc_id,
+herr_t H5TBappend_records(hid_t loc_id,
const char *dset_name,
hsize_t nrecords,
size_t type_size,
const size_t *field_offset,
const size_t *field_sizes,
- const void *buf )
+ const void *buf)
{
- hid_t did;
- hid_t tid=-1;
- hid_t mem_type_id=-1;
- hid_t sid=-1;
- hid_t m_sid=-1;
+ hid_t did = H5I_BADID;
+ hid_t tid = H5I_BADID;
+ hid_t mem_type_id = H5I_BADID;
hsize_t nrecords_orig;
hsize_t nfields;
+ herr_t ret_val = -1;
+
+ /* check the arguments */
+ if (dset_name == NULL)
+ goto out;
/* get the original number of records and fields */
- if (H5TBget_table_info ( loc_id, dset_name, &nfields, &nrecords_orig ) < 0)
- return -1;
+ if(H5TBget_table_info(loc_id, dset_name, &nfields, &nrecords_orig) < 0)
+ goto out;
/* open the dataset. */
- if ((did = H5Dopen2(loc_id, dset_name, H5P_DEFAULT)) < 0)
+ if((did = H5Dopen2(loc_id, dset_name, H5P_DEFAULT)) < 0)
goto out;
/* get the datatypes */
- if ((tid = H5Dget_type( did )) < 0)
+ if((tid = H5Dget_type(did)) < 0)
goto out;
- if ((mem_type_id=H5TB_create_type(loc_id,dset_name,type_size,field_offset,field_sizes,tid)) < 0)
+ if((mem_type_id = H5TB_create_type(loc_id, dset_name, type_size, field_offset, field_sizes, tid)) < 0)
goto out;
/* append the records */
- if ((H5TB_common_append_records(did, mem_type_id, (size_t)nrecords, nrecords_orig, buf)) < 0)
+ if((H5TB_common_append_records(did, mem_type_id, (size_t)nrecords, nrecords_orig, buf)) < 0)
goto out;
- /* close */
- if (H5Tclose( tid ) < 0)
- return -1;
- if (H5Tclose( mem_type_id ) < 0)
- goto out;
- if (H5Dclose( did ) < 0)
- goto out;
-
- return 0;
+ ret_val = 0;
- /* error zone */
out:
- H5E_BEGIN_TRY
- {
- H5Dclose(did);
- H5Tclose(mem_type_id);
- H5Tclose(tid);
- H5Sclose(m_sid);
- H5Sclose(sid);
- } H5E_END_TRY;
- return -1;
-}
+ if(tid > 0)
+ if(H5Tclose(tid) < 0)
+ ret_val = -1;
+ if(mem_type_id > 0)
+ if(H5Tclose(mem_type_id) < 0)
+ ret_val = -1;
+ if(did > 0)
+ if(H5Dclose(did) < 0)
+ ret_val = -1;
+
+ return ret_val;
+} /* end H5TBappend_records() */
/*-------------------------------------------------------------------------
* Function: H5TBwrite_records
@@ -364,96 +353,89 @@ out:
*
* Comments: Uses memory offsets
*
-* Modifications: April 1, 2004
-* the FIELD_SIZES parameter is used to define the memory type ID
-* returned by H5TB_create_type
-*
*-------------------------------------------------------------------------
*/
-
-
-herr_t H5TBwrite_records( hid_t loc_id,
+herr_t H5TBwrite_records(hid_t loc_id,
const char *dset_name,
hsize_t start,
hsize_t nrecords,
size_t type_size,
const size_t *field_offset,
const size_t *field_sizes,
- const void *buf )
+ const void *buf)
{
-
- hid_t did;
- hid_t tid;
+ hid_t did = H5I_BADID;
+ hid_t tid = H5I_BADID;
+ hid_t sid = H5I_BADID;
+ hid_t m_sid = H5I_BADID;
+ hid_t mem_type_id = H5I_BADID;
hsize_t count[1];
hsize_t offset[1];
- hid_t sid=-1;
- hid_t m_sid=-1;
hsize_t mem_size[1];
hsize_t dims[1];
- hid_t mem_type_id=-1;
+ herr_t ret_val = -1;
+
+ /* check the arguments */
+ if (dset_name == NULL)
+ goto out;
/* open the dataset. */
- if ((did = H5Dopen2(loc_id, dset_name, H5P_DEFAULT)) < 0)
- return -1;
+ if((did = H5Dopen2(loc_id, dset_name, H5P_DEFAULT)) < 0)
+ goto out;
/* get the datatype */
- if ((tid = H5Dget_type( did )) < 0)
+ if((tid = H5Dget_type(did)) < 0)
goto out;
- if ((mem_type_id=H5TB_create_type(loc_id,dset_name,type_size,field_offset,field_sizes,tid)) < 0)
+ if((mem_type_id = H5TB_create_type(loc_id, dset_name, type_size, field_offset, field_sizes, tid)) < 0)
goto out;
/* get the dataspace handle */
- if ((sid = H5Dget_space( did )) < 0)
+ if((sid = H5Dget_space(did)) < 0)
goto out;
/* get records */
- if (H5Sget_simple_extent_dims( sid, dims, NULL) < 0)
+ if(H5Sget_simple_extent_dims(sid, dims, NULL) < 0)
goto out;
- if (start + nrecords > dims[0] )
+ if(start + nrecords > dims[0])
goto out;
/* define a hyperslab in the dataset of the size of the records */
offset[0] = start;
count[0] = nrecords;
- if (H5Sselect_hyperslab( sid, H5S_SELECT_SET, offset, NULL, count, NULL) < 0)
+ if(H5Sselect_hyperslab(sid, H5S_SELECT_SET, offset, NULL, count, NULL) < 0)
goto out;
/* create a memory dataspace handle */
mem_size[0] = count[0];
- if ((m_sid = H5Screate_simple( 1, mem_size, NULL )) < 0)
- goto out;
-
- if (H5Dwrite( did, mem_type_id, m_sid, sid, H5P_DEFAULT, buf ) < 0)
+ if((m_sid = H5Screate_simple(1, mem_size, NULL)) < 0)
goto out;
- /* close */
- if (H5Sclose( m_sid ) < 0)
- goto out;
- if (H5Sclose( sid ) < 0)
+ if(H5Dwrite(did, mem_type_id, m_sid, sid, H5P_DEFAULT, buf) < 0)
goto out;
- if (H5Tclose( tid ) < 0)
- goto out;
- if (H5Tclose( mem_type_id ) < 0)
- return -1;
- if (H5Dclose( did ) < 0)
- return -1;
- return 0;
+ ret_val = 0;
- /* error zone */
out:
- H5E_BEGIN_TRY
- {
- H5Dclose(did);
- H5Tclose(mem_type_id);
- H5Tclose(tid);
- H5Sclose(m_sid);
- H5Sclose(sid);
- } H5E_END_TRY;
- return -1;
-}
+ if(m_sid > 0)
+ if(H5Sclose(m_sid) < 0)
+ ret_val = -1;
+ if(sid > 0)
+ if(H5Sclose(sid) < 0)
+ ret_val = -1;
+ if(tid > 0)
+ if(H5Tclose(tid) < 0)
+ ret_val = -1;
+ if(mem_type_id > 0)
+ if(H5Tclose(mem_type_id) < 0)
+ ret_val = -1;
+ if(did > 0)
+ if(H5Dclose(did) < 0)
+ ret_val = -1;
+
+ return ret_val;
+} /* end H5TBwrite_records() */
/*-------------------------------------------------------------------------
* Function: H5TBwrite_fields_name
@@ -468,12 +450,9 @@ out:
*
* Comments:
*
-* Modifications: April 1, 2004
-* the FIELD_SIZES parameter is used to define a memory type ID
-*
*-------------------------------------------------------------------------
*/
-herr_t H5TBwrite_fields_name( hid_t loc_id,
+herr_t H5TBwrite_fields_name(hid_t loc_id,
const char *dset_name,
const char *field_names,
hsize_t start,
@@ -481,147 +460,145 @@ herr_t H5TBwrite_fields_name( hid_t loc_id,
size_t type_size,
const size_t *field_offset,
const size_t *field_sizes,
- const void *buf )
+ const void *buf)
{
- hid_t did;
- hid_t tid=-1;
- hid_t write_type_id=-1;
- hid_t member_type_id;
- hid_t nmtype_id;
- hsize_t count[1];
- hsize_t offset[1];
- hid_t m_sid=-1;
- hid_t file_space_id=-1;
- char *member_name;
+ hid_t did = H5I_BADID;
+ hid_t tid = H5I_BADID;
+ hid_t write_type_id = H5I_BADID;
+ hid_t member_type_id = H5I_BADID;
+ hid_t nmtype_id = H5I_BADID;
+ hid_t m_sid = H5I_BADID;
+ hid_t file_space_id = H5I_BADID;
+ hid_t preserve_id = H5I_BADID;
hssize_t nfields;
hssize_t i, j;
- hid_t preserve_id;
+ hsize_t count[1];
+ hsize_t offset[1];
+ char *member_name = NULL;
size_t size_native;
+ herr_t ret_val = -1;
+
+ /* check the arguments */
+ if (dset_name == NULL)
+ goto out;
+ if (field_names == NULL)
+ goto out;
/* create xfer properties to preserve initialized data */
- if ((preserve_id = H5Pcreate (H5P_DATASET_XFER)) < 0)
- return -1;
- if (H5Pset_preserve (preserve_id, 1) < 0)
- return -1;
+ if((preserve_id = H5Pcreate(H5P_DATASET_XFER)) < 0)
+ goto out;
+ if(H5Pset_preserve(preserve_id, 1) < 0)
+ goto out;
/* open the dataset. */
- if ((did = H5Dopen2(loc_id, dset_name, H5P_DEFAULT)) < 0)
+ if((did = H5Dopen2(loc_id, dset_name, H5P_DEFAULT)) < 0)
goto out;
/* get the datatype */
- if ((tid = H5Dget_type( did )) < 0)
+ if((tid = H5Dget_type(did)) < 0)
goto out;
/* get the number of fields */
- if (( nfields = H5Tget_nmembers( tid )) < 0)
+ if((nfields = H5Tget_nmembers(tid)) < 0)
goto out;
/* create a write id */
- if (( write_type_id = H5Tcreate( H5T_COMPOUND, type_size )) < 0)
+ if((write_type_id = H5Tcreate(H5T_COMPOUND, type_size)) < 0)
goto out;
j = 0;
- /* iterate tru the members */
- for ( i = 0; i < nfields; i++)
- {
+ /* iterate though the members */
+ for(i = 0; i < nfields; i++) {
/* get the member name */
- member_name = H5Tget_member_name( tid, (unsigned)i );
-
- if(H5TB_find_field( member_name, field_names ) > 0 )
- {
+ if(NULL == (member_name = H5Tget_member_name(tid, (unsigned)i)))
+ goto out;
+ if(H5TB_find_field(member_name, field_names)) {
/* get the member type */
- if(( member_type_id = H5Tget_member_type( tid,(unsigned) i )) < 0)
+ if((member_type_id = H5Tget_member_type(tid, (unsigned)i)) < 0)
goto out;
/* convert to native type */
- if ((nmtype_id=H5Tget_native_type(member_type_id,H5T_DIR_DEFAULT)) < 0)
+ if((nmtype_id = H5Tget_native_type(member_type_id, H5T_DIR_DEFAULT)) < 0)
goto out;
- size_native=H5Tget_size(nmtype_id);
+ if(0 == (size_native = H5Tget_size(nmtype_id)))
+ goto out;
/* adjust, if necessary */
- if (field_sizes[j]!=size_native)
- {
- if (H5Tset_size(nmtype_id, field_sizes[j]) < 0)
+ if(field_sizes[j] != size_native)
+ if(H5Tset_size(nmtype_id, field_sizes[j]) < 0)
goto out;
- }
/* the field in the file is found by its name */
- if (field_offset )
- {
- if (H5Tinsert( write_type_id, member_name, field_offset[j], nmtype_id ) < 0)
+ if(field_offset) {
+ if(H5Tinsert(write_type_id, member_name, field_offset[j], nmtype_id) < 0)
goto out;
- }
+ } /* end if */
/* only one field */
- else
- {
- if (H5Tinsert( write_type_id, member_name, (size_t)0, nmtype_id ) < 0)
+ else {
+ if(H5Tinsert(write_type_id, member_name, (size_t)0, nmtype_id) < 0)
goto out;
- }
+ } /* end else */
j++;
/* close */
- if(H5Tclose( member_type_id ) < 0)
+ if(H5Tclose(member_type_id) < 0)
goto out;
- if(H5Tclose( nmtype_id ) < 0)
+ member_type_id = H5I_BADID;
+ if(H5Tclose(nmtype_id) < 0)
goto out;
- }
-
- H5free_memory( member_name );
+ nmtype_id = H5I_BADID;
+ } /* end if */
- }
+ H5free_memory(member_name);
+ member_name = NULL;
+ } /* end for */
/* get the dataspace handle */
- if ((file_space_id = H5Dget_space( did )) < 0)
+ if((file_space_id = H5Dget_space(did)) < 0)
goto out;
- if ((m_sid = H5Screate_simple(1, &nrecords, NULL)) < 0)
+ if((m_sid = H5Screate_simple(1, &nrecords, NULL)) < 0)
goto out;
/* define a hyperslab in the dataset */
offset[0] = start;
count[0] = nrecords;
- if (H5Sselect_hyperslab( file_space_id, H5S_SELECT_SET, offset, NULL, count, NULL) < 0)
+ if(H5Sselect_hyperslab(file_space_id, H5S_SELECT_SET, offset, NULL, count, NULL) < 0)
goto out;
/* write */
- if (H5Dwrite( did, write_type_id, m_sid, file_space_id, preserve_id, buf ) < 0)
- goto out;
-
- /* close */
- if(H5Tclose( write_type_id ) )
+ if(H5Dwrite(did, write_type_id, m_sid, file_space_id, preserve_id, buf) < 0)
goto out;
- if(H5Tclose( tid ) < 0)
- return -1;
- if(H5Dclose( did ) < 0)
- return -1;
- if(H5Pclose( preserve_id ) < 0)
- return -1;
- if(H5Sclose( file_space_id ) < 0)
- return -1;
- if(H5Sclose( m_sid ) < 0)
- return -1;
- return 0;
+ ret_val = 0;
- /* error zone */
out:
- H5E_BEGIN_TRY
- {
- H5Pclose(preserve_id);
- H5Dclose(did);
- H5Sclose(file_space_id);
- H5Sclose(m_sid);
- H5Tclose(write_type_id);
- H5Tclose(tid);
- } H5E_END_TRY;
- return -1;
-
-}
-
+ if(member_name)
+ H5free_memory(member_name);
+ if(preserve_id > 0)
+ if(H5Pclose(preserve_id) < 0)
+ ret_val = -1;
+ if(write_type_id > 0)
+ if(H5Tclose(write_type_id) < 0)
+ ret_val = -1;
+ if(tid > 0)
+ if(H5Tclose(tid) < 0)
+ ret_val = -1;
+ if(file_space_id > 0)
+ if(H5Sclose(file_space_id) < 0)
+ ret_val = -1;
+ if(m_sid > 0)
+ if(H5Sclose(m_sid) < 0)
+ ret_val = -1;
+ if(did > 0)
+ if(H5Dclose(did) < 0)
+ ret_val = -1;
+ return ret_val;
+} /* end H5TBwrite_fields_name() */
/*-------------------------------------------------------------------------
* Function: H5TBwrite_fields_index
@@ -636,14 +613,9 @@ out:
*
* Comments: Uses memory offsets
*
-* Modifications: April 1, 2004
-* the FIELD_SIZES parameter is used to define a memory type ID
-*
*-------------------------------------------------------------------------
*/
-
-
-herr_t H5TBwrite_fields_index( hid_t loc_id,
+herr_t H5TBwrite_fields_index(hid_t loc_id,
const char *dset_name,
hsize_t nfields,
const int *field_index,
@@ -652,43 +624,47 @@ herr_t H5TBwrite_fields_index( hid_t loc_id,
size_t type_size,
const size_t *field_offset,
const size_t *field_sizes,
- const void *buf )
+ const void *buf)
{
- hid_t did;
- hid_t tid=-1;
- hid_t write_type_id=-1;
- hid_t member_type_id;
- hid_t nmtype_id;
+ hid_t did = H5I_BADID;
+ hid_t tid = H5I_BADID;
+ hid_t write_type_id = H5I_BADID;
+ hid_t member_type_id = H5I_BADID;
+ hid_t nmtype_id = H5I_BADID;
+ hid_t m_sid = H5I_BADID;
+ hid_t file_space_id = H5I_BADID;
+ hid_t preserve_id = H5I_BADID;
hsize_t count[1];
hsize_t offset[1];
- hid_t m_sid=-1;
- hid_t file_space_id=-1;
- char *member_name;
hsize_t i;
- hid_t preserve_id;
size_t size_native;
+ char *member_name = NULL;
+ herr_t ret_val = -1;
+
+ /* check the arguments */
+ if (dset_name == NULL)
+ goto out;
/* create xfer properties to preserve initialized data */
- if ((preserve_id = H5Pcreate (H5P_DATASET_XFER)) < 0)
- return -1;
- if (H5Pset_preserve (preserve_id, 1) < 0)
- return -1;
+ if((preserve_id = H5Pcreate(H5P_DATASET_XFER)) < 0)
+ goto out;
+ if(H5Pset_preserve(preserve_id, 1) < 0)
+ goto out;
/* open the dataset. */
- if ((did = H5Dopen2(loc_id, dset_name, H5P_DEFAULT)) < 0)
+ if((did = H5Dopen2(loc_id, dset_name, H5P_DEFAULT)) < 0)
goto out;
/* get the datatype */
- if ((tid = H5Dget_type( did )) < 0)
+ if((tid = H5Dget_type(did)) < 0)
goto out;
/* create a write id */
- if (( write_type_id = H5Tcreate( H5T_COMPOUND, type_size )) < 0)
+ if((write_type_id = H5Tcreate(H5T_COMPOUND, type_size)) < 0)
goto out;
/* iterate tru the members */
- for ( i = 0; i < nfields; i++)
- {
+ for(i = 0; i < nfields; i++) {
unsigned j;
/* Range check value */
@@ -698,91 +674,95 @@ herr_t H5TBwrite_fields_index( hid_t loc_id,
j = (unsigned)field_index[i];
/* get the member name */
- member_name = H5Tget_member_name( tid, j );
+ if(NULL == (member_name = H5Tget_member_name(tid, j)))
+ goto out;
/* get the member type */
- if (( member_type_id = H5Tget_member_type( tid, j )) < 0)
+ if((member_type_id = H5Tget_member_type(tid, j)) < 0)
goto out;
/* convert to native type */
- if ((nmtype_id = H5Tget_native_type(member_type_id,H5T_DIR_DEFAULT)) < 0)
+ if((nmtype_id = H5Tget_native_type(member_type_id,H5T_DIR_DEFAULT)) < 0)
goto out;
- size_native = H5Tget_size(nmtype_id);
+ if(0 == (size_native = H5Tget_size(nmtype_id)))
+ goto out;
- if (field_sizes[i]!=size_native)
- {
- if (H5Tset_size(nmtype_id, field_sizes[i]) < 0)
+ if(field_sizes[i] != size_native)
+ if(H5Tset_size(nmtype_id, field_sizes[i]) < 0)
goto out;
- }
/* the field in the file is found by its name */
- if ( field_offset )
- {
- if (H5Tinsert( write_type_id, member_name, field_offset[ i ], nmtype_id ) < 0)
+ if(field_offset) {
+ if(H5Tinsert(write_type_id, member_name, field_offset[i], nmtype_id) < 0)
goto out;
- }
+ } /* end if */
/* only one field */
- else
- {
- if (H5Tinsert( write_type_id, member_name, (size_t)0, nmtype_id ) < 0)
+ else {
+ if(H5Tinsert(write_type_id, member_name, (size_t)0, nmtype_id) < 0)
goto out;
- }
+ } /* end else */
+
/* close */
- if(H5Tclose( member_type_id ) < 0)
+ if(H5Tclose(member_type_id) < 0)
goto out;
- if(H5Tclose( nmtype_id ) < 0)
+ member_type_id = H5I_BADID;
+ if(H5Tclose(nmtype_id) < 0)
goto out;
+ nmtype_id = H5I_BADID;
- H5free_memory( member_name );
-
- }
+ H5free_memory(member_name);
+ member_name = NULL;
+ } /* end for */
/* get the dataspace handles */
- if ((file_space_id = H5Dget_space( did )) < 0)
+ if((file_space_id = H5Dget_space(did)) < 0)
goto out;
- if ((m_sid = H5Screate_simple(1, &nrecords, NULL)) < 0)
+ if((m_sid = H5Screate_simple(1, &nrecords, NULL)) < 0)
goto out;
/* define a hyperslab in the dataset */
offset[0] = start;
count[0] = nrecords;
- if (H5Sselect_hyperslab( file_space_id, H5S_SELECT_SET, offset, NULL, count, NULL) < 0)
+ if(H5Sselect_hyperslab(file_space_id, H5S_SELECT_SET, offset, NULL, count, NULL) < 0)
goto out;
/* write */
- if (H5Dwrite( did, write_type_id, m_sid, file_space_id, preserve_id, buf ) < 0)
- goto out;
-
- /* close */
- if (H5Tclose( write_type_id ) )
+ if(H5Dwrite(did, write_type_id, m_sid, file_space_id, preserve_id, buf) < 0)
goto out;
- if (H5Tclose( tid ) < 0)
- return -1;
- if (H5Dclose( did ) < 0)
- return -1;
- if (H5Pclose( preserve_id ) < 0)
- return -1;
- if (H5Sclose( file_space_id ) < 0)
- return -1;
- if (H5Sclose( m_sid ) < 0)
- return -1;
- return 0;
+ ret_val = 0;
- /* error zone */
out:
- H5E_BEGIN_TRY
- {
- H5Pclose(preserve_id);
- H5Dclose(did);
- H5Sclose(file_space_id);
- H5Sclose(m_sid);
- H5Tclose(write_type_id);
- H5Tclose(tid);
- } H5E_END_TRY;
- return -1;
-}
+ if(member_name)
+ H5free_memory(member_name);
+ if(preserve_id > 0)
+ if(H5Pclose(preserve_id) < 0)
+ ret_val = -1;
+ if(write_type_id > 0)
+ if(H5Tclose(write_type_id) < 0)
+ ret_val = -1;
+ if(member_type_id > 0)
+ if(H5Tclose(member_type_id) < 0)
+ ret_val = -1;
+ if(nmtype_id > 0)
+ if(H5Tclose(nmtype_id) < 0)
+ ret_val = -1;
+ if(tid > 0)
+ if(H5Tclose(tid) < 0)
+ ret_val = -1;
+ if(file_space_id > 0)
+ if(H5Sclose(file_space_id) < 0)
+ ret_val = -1;
+ if(m_sid > 0)
+ if(H5Sclose(m_sid) < 0)
+ ret_val = -1;
+ if(did > 0)
+ if(H5Dclose(did) < 0)
+ ret_val = -1;
+
+ return ret_val;
+} /* end H5TBwrite_fields_index() */
/*-------------------------------------------------------------------------
@@ -806,71 +786,67 @@ out:
*
* Comments:
*
-* Modifications: April 1, 2004
-* used a memory type ID returned by H5TB_create_type
-*
*-------------------------------------------------------------------------
*/
-
-herr_t H5TBread_table( hid_t loc_id,
+herr_t H5TBread_table(hid_t loc_id,
const char *dset_name,
size_t type_size,
const size_t *field_offset,
const size_t *field_sizes,
- void *dst_buf )
+ void *dst_buf)
{
- hid_t did;
- hid_t ftype_id=-1;
- hid_t mem_type_id=-1;
- hid_t sid;
+ hid_t did = H5I_BADID;
+ hid_t ftype_id = H5I_BADID;
+ hid_t mem_type_id = H5I_BADID;
+ hid_t sid = H5I_BADID;
hsize_t dims[1];
+ herr_t ret_val = -1;
+
+ /* check the arguments */
+ if (dset_name == NULL)
+ goto out;
/* open the dataset. */
- if ((did = H5Dopen2(loc_id, dset_name, H5P_DEFAULT)) < 0)
- return -1;
+ if((did = H5Dopen2(loc_id, dset_name, H5P_DEFAULT)) < 0)
+ goto out;
/* get the dataspace handle */
- if ((sid = H5Dget_space( did )) < 0)
+ if((sid = H5Dget_space(did)) < 0)
goto out;
/* get dimensions */
- if (H5Sget_simple_extent_dims( sid, dims, NULL) < 0)
+ if(H5Sget_simple_extent_dims(sid, dims, NULL) < 0)
goto out;
/* get the datatypes */
- if ((ftype_id=H5Dget_type (did)) < 0)
+ if((ftype_id = H5Dget_type (did)) < 0)
goto out;
- if ((mem_type_id=H5TB_create_type(loc_id,dset_name,type_size,field_offset,field_sizes,ftype_id)) < 0)
+ if((mem_type_id = H5TB_create_type(loc_id, dset_name, type_size, field_offset, field_sizes, ftype_id)) < 0)
goto out;
/* read */
- if (H5Dread( did, mem_type_id, H5S_ALL, H5S_ALL, H5P_DEFAULT, dst_buf) < 0)
- goto out;
-
- /* close */
- if (H5Tclose( ftype_id ) < 0)
+ if(H5Dread(did, mem_type_id, H5S_ALL, H5S_ALL, H5P_DEFAULT, dst_buf) < 0)
goto out;
- if (H5Tclose( mem_type_id ) < 0)
- goto out;
- if (H5Sclose( sid ) < 0)
- goto out;
- if (H5Dclose( did ) < 0)
- return -1;
- return 0;
+ ret_val = 0;
- /* error zone */
out:
- H5E_BEGIN_TRY
- {
- H5Dclose(did);
- H5Tclose(mem_type_id);
- H5Tclose(ftype_id);
- H5Sclose(sid);
- } H5E_END_TRY;
- return -1;
-}
+ if(mem_type_id > 0)
+ if(H5Tclose(mem_type_id) < 0)
+ ret_val = -1;
+ if(ftype_id > 0)
+ if(H5Tclose(ftype_id) < 0)
+ ret_val = -1;
+ if(sid > 0)
+ if(H5Sclose(sid) < 0)
+ ret_val = -1;
+ if(did > 0)
+ if(H5Dclose(did) < 0)
+ ret_val = -1;
+
+ return ret_val;
+} /* end H5TBread_table() */
/*-------------------------------------------------------------------------
* Function: H5TBread_records
@@ -885,74 +861,62 @@ out:
*
* Comments:
*
-* Modifications: April 1, 2004
-* the FIELD_SIZES parameter is used to define the memory type ID
-* returned by H5TB_create_type
-*
*-------------------------------------------------------------------------
*/
-
-
-herr_t H5TBread_records( hid_t loc_id,
+herr_t H5TBread_records(hid_t loc_id,
const char *dset_name,
hsize_t start,
hsize_t nrecords,
size_t type_size,
const size_t *field_offset,
const size_t *field_sizes,
- void *buf )
+ void *buf)
{
-
- hid_t did;
- hid_t ftype_id;
- hid_t mem_type_id=-1;
- hid_t sid=-1;
- hid_t m_sid=-1;
+ hid_t did = H5I_BADID;
+ hid_t ftype_id = H5I_BADID;
+ hid_t mem_type_id = H5I_BADID;
hsize_t nrecords_orig;
hsize_t nfields;
+ herr_t ret_val = -1;
+
+ /* check the arguments */
+ if (dset_name == NULL)
+ goto out;
/* get the number of records and fields */
- if (H5TBget_table_info ( loc_id, dset_name, &nfields, &nrecords_orig ) < 0)
- return -1;
+ if(H5TBget_table_info(loc_id, dset_name, &nfields, &nrecords_orig) < 0)
+ goto out;
/* open the dataset */
- if ((did = H5Dopen2(loc_id, dset_name, H5P_DEFAULT)) < 0)
- return -1;
+ if((did = H5Dopen2(loc_id, dset_name, H5P_DEFAULT)) < 0)
+ goto out;
/* get the datatypes */
- if ((ftype_id = H5Dget_type( did )) < 0)
+ if((ftype_id = H5Dget_type(did)) < 0)
goto out;
- if ((mem_type_id=H5TB_create_type(loc_id,dset_name,type_size,field_offset,field_sizes,ftype_id)) < 0)
+ if((mem_type_id = H5TB_create_type(loc_id, dset_name, type_size, field_offset, field_sizes, ftype_id)) < 0)
goto out;
/* read the records */
- if ((H5TB_common_read_records(did, mem_type_id, start, (size_t)nrecords, nrecords_orig, buf)) < 0)
+ if((H5TB_common_read_records(did, mem_type_id, start, (size_t)nrecords, nrecords_orig, buf)) < 0)
goto out;
- /* close */
- if (H5Tclose( ftype_id ) < 0)
- return -1;
- if (H5Tclose( mem_type_id ) < 0)
- return -1;
- if (H5Dclose( did ) < 0)
- return -1;
-
- return 0;
+ ret_val = 0;
- /* error zone */
out:
- H5E_BEGIN_TRY {
- H5Dclose(did);
- H5Tclose(mem_type_id);
- H5Tclose(ftype_id);
- H5Sclose(m_sid);
- H5Sclose(sid);
- } H5E_END_TRY;
- return -1;
-
-}
+ if(mem_type_id > 0)
+ if(H5Tclose(mem_type_id) < 0)
+ ret_val = -1;
+ if(ftype_id > 0)
+ if(H5Tclose(ftype_id) < 0)
+ ret_val = -1;
+ if(did > 0)
+ if(H5Dclose(did) < 0)
+ ret_val = -1;
+ return ret_val;
+} /* end H5TBread_records() */
/*-------------------------------------------------------------------------
* Function: H5TBread_fields_name
@@ -967,15 +931,9 @@ out:
*
* Comments:
*
-* Modifications: April 1, 2004
-* the FIELD_SIZES parameter is used to define the memory type ID
-* returned by H5TB_create_type
-*
*-------------------------------------------------------------------------
*/
-
-
-herr_t H5TBread_fields_name( hid_t loc_id,
+herr_t H5TBread_fields_name(hid_t loc_id,
const char *dset_name,
const char *field_names,
hsize_t start,
@@ -983,132 +941,145 @@ herr_t H5TBread_fields_name( hid_t loc_id,
size_t type_size,
const size_t *field_offset,
const size_t *field_sizes,
- void *buf )
+ void *buf)
{
-
- hid_t did;
- hid_t ftype_id=-1;
- hid_t mem_type_id=-1;
- hid_t mtype_id;
- hid_t nmtype_id;
- char *member_name;
+ hid_t did = H5I_BADID;
+ hid_t ftype_id = H5I_BADID;
+ hid_t mem_type_id = H5I_BADID;
+ hid_t mtype_id = H5I_BADID;
+ hid_t nmtype_id = H5I_BADID;
+ hid_t sid = H5I_BADID;
+ hid_t m_sid = H5I_BADID;
hssize_t nfields;
hsize_t count[1];
hsize_t offset[1];
- hid_t sid=-1;
- hid_t m_sid=-1;
hsize_t mem_size[1];
size_t size_native;
+ char *member_name = NULL;
hssize_t i, j;
+ herr_t ret_val = -1;
+
+
+ /* check the arguments */
+ if (dset_name == NULL)
+ goto out;
+ if (field_names == NULL)
+ goto out;
/* open the dataset */
- if ((did = H5Dopen2(loc_id, dset_name, H5P_DEFAULT)) < 0)
+ if((did = H5Dopen2(loc_id, dset_name, H5P_DEFAULT)) < 0)
goto out;
/* get the datatype */
- if ((ftype_id = H5Dget_type( did )) < 0)
+ if((ftype_id = H5Dget_type(did)) < 0)
goto out;
/* get the number of fields */
- if (( nfields = H5Tget_nmembers( ftype_id )) < 0)
+ if((nfields = H5Tget_nmembers(ftype_id)) < 0)
goto out;
/* create a memory read id */
- if (( mem_type_id = H5Tcreate( H5T_COMPOUND, type_size )) < 0)
+ if((mem_type_id = H5Tcreate(H5T_COMPOUND, type_size)) < 0)
goto out;
- /* iterate tru the members */
- for ( i=0,j=0; i<nfields; i++)
- {
+ /* iterate through the members */
+ for(i = 0, j = 0; i < nfields; i++) {
/* get the member name */
- member_name = H5Tget_member_name( ftype_id, (unsigned)i );
+ if(NULL == (member_name = H5Tget_member_name(ftype_id, (unsigned)i)))
+ goto out;
- if(H5TB_find_field( member_name, field_names ) > 0 )
- {
+ if(H5TB_find_field(member_name, field_names)) {
/* get the member type */
- if (( mtype_id = H5Tget_member_type( ftype_id, (unsigned) i )) < 0)
+ if((mtype_id = H5Tget_member_type(ftype_id, (unsigned)i)) < 0)
goto out;
/* convert to native type */
- if ((nmtype_id=H5Tget_native_type(mtype_id,H5T_DIR_DEFAULT)) < 0)
+ if((nmtype_id = H5Tget_native_type(mtype_id, H5T_DIR_DEFAULT)) < 0)
goto out;
- size_native=H5Tget_size(nmtype_id);
+ if(0 == (size_native = H5Tget_size(nmtype_id)))
+ goto out;
- if (field_sizes[j]!=size_native)
- {
- if (H5Tset_size(nmtype_id, field_sizes[j]) < 0)
+ if(field_sizes[j] != size_native)
+ if(H5Tset_size(nmtype_id, field_sizes[j]) < 0)
goto out;
- }
+
/* the field in the file is found by its name */
- if(field_offset )
- {
- if(H5Tinsert( mem_type_id, member_name, field_offset[j], nmtype_id ) < 0)
+ if(field_offset) {
+ if(H5Tinsert(mem_type_id, member_name, field_offset[j], nmtype_id) < 0)
goto out;
- }
- else
- {
- if(H5Tinsert( mem_type_id, member_name, (size_t)0, nmtype_id ) < 0)
+ } /* end if */
+ else {
+ if(H5Tinsert(mem_type_id, member_name, (size_t)0, nmtype_id) < 0)
goto out;
- }
+ } /* end else */
/* close */
- if(H5Tclose( mtype_id ) < 0)
+ if(H5Tclose(mtype_id) < 0)
goto out;
- if(H5Tclose( nmtype_id ) < 0)
+ mtype_id = H5I_BADID;
+ if(H5Tclose(nmtype_id) < 0)
goto out;
+ nmtype_id = H5I_BADID;
j++;
- }
- H5free_memory( member_name );
- }
+ } /* end if */
+
+ H5free_memory(member_name);
+ member_name = NULL;
+ } /* end for */
+ /* check to make sure field was found, no reason to continue if it does not exist */
+ if(j == 0)
+ goto out;
+
/* get the dataspace handle */
- if ((sid = H5Dget_space( did )) < 0)
+ if((sid = H5Dget_space(did)) < 0)
goto out;
/* define a hyperslab in the dataset */
offset[0] = start;
count[0] = nrecords;
- if (H5Sselect_hyperslab( sid, H5S_SELECT_SET, offset, NULL, count, NULL) < 0)
+ if(H5Sselect_hyperslab(sid, H5S_SELECT_SET, offset, NULL, count, NULL) < 0)
goto out;
/* create a memory dataspace handle */
mem_size[0] = count[0];
- if ((m_sid = H5Screate_simple( 1, mem_size, NULL )) < 0)
+ if((m_sid = H5Screate_simple(1, mem_size, NULL)) < 0)
goto out;
/* read */
- if (H5Dread( did, mem_type_id, m_sid, sid, H5P_DEFAULT, buf ) < 0)
- goto out;
-
- /* close */
- if (H5Tclose( mem_type_id ) )
- goto out;
- if (H5Tclose( ftype_id ) < 0)
- return -1;
- if (H5Sclose( sid ) < 0)
- goto out;
- if (H5Sclose( m_sid ) < 0)
+ if(H5Dread(did, mem_type_id, m_sid, sid, H5P_DEFAULT, buf) < 0)
goto out;
- if (H5Dclose( did ) < 0)
- return -1;
- return 0;
+ ret_val = 0;
- /* error zone */
out:
- H5E_BEGIN_TRY
- {
- H5Dclose(did);
- H5Tclose(mem_type_id);
- H5Tclose(ftype_id);
- H5Sclose(m_sid);
- H5Sclose(sid);
- } H5E_END_TRY;
- return -1;
-
-}
+ if(member_name)
+ H5free_memory(member_name);
+ if(mtype_id > 0)
+ if(H5Tclose(mtype_id) < 0)
+ ret_val = -1;
+ if(nmtype_id > 0)
+ if(H5Tclose(nmtype_id) < 0)
+ ret_val = -1;
+ if(mem_type_id > 0)
+ if(H5Tclose(mem_type_id) < 0)
+ ret_val = -1;
+ if(ftype_id > 0)
+ if(H5Tclose(ftype_id) < 0)
+ ret_val = -1;
+ if(m_sid > 0)
+ if(H5Sclose(m_sid) < 0)
+ ret_val = -1;
+ if(sid > 0)
+ if(H5Sclose(sid) < 0)
+ ret_val = -1;
+ if(did > 0)
+ if(H5Dclose(did) < 0)
+ ret_val = -1;
+ return ret_val;
+} /* end H5TBread_fields_name() */
/*-------------------------------------------------------------------------
* Function: H5TBread_fields_index
@@ -1123,15 +1094,9 @@ out:
*
* Comments:
*
-* Modifications: April 1, 2004
-* the FIELD_SIZES parameter is used to define the memory type ID
-* returned by H5TB_create_type
-*
*-------------------------------------------------------------------------
*/
-
-
-herr_t H5TBread_fields_index( hid_t loc_id,
+herr_t H5TBread_fields_index(hid_t loc_id,
const char *dset_name,
hsize_t nfields,
const int *field_index,
@@ -1140,38 +1105,41 @@ herr_t H5TBread_fields_index( hid_t loc_id,
size_t type_size,
const size_t *field_offset,
const size_t *field_sizes,
- void *buf )
+ void *buf)
{
-
- hid_t did;
- hid_t tid=-1;
- hid_t read_type_id=-1;
- hid_t member_type_id;
- hid_t nmtype_id;
- char *member_name;
+ hid_t did = H5I_BADID;
+ hid_t tid = H5I_BADID;
+ hid_t read_type_id = H5I_BADID;
+ hid_t member_type_id = H5I_BADID;
+ hid_t nmtype_id = H5I_BADID;
+ hid_t sid = H5I_BADID;
+ hid_t m_sid = H5I_BADID;
hsize_t count[1];
- hsize_t offset[1];
- hid_t sid=-1;
- hid_t m_sid=-1;
+ hsize_t offset[1];
hsize_t mem_size[1];
- size_t size_native;
hsize_t i;
+ size_t size_native;
+ char *member_name = NULL;
+ herr_t ret_val = -1;
+
+ /* check the arguments */
+ if (dset_name == NULL)
+ goto out;
/* open the dataset. */
- if ((did = H5Dopen2(loc_id, dset_name, H5P_DEFAULT)) < 0)
+ if((did = H5Dopen2(loc_id, dset_name, H5P_DEFAULT)) < 0)
goto out;
/* get the datatype */
- if ((tid = H5Dget_type( did )) < 0)
+ if((tid = H5Dget_type(did)) < 0)
goto out;
/* create a read id */
- if (( read_type_id = H5Tcreate( H5T_COMPOUND, type_size )) < 0)
+ if((read_type_id = H5Tcreate(H5T_COMPOUND, type_size)) < 0)
goto out;
/* iterate tru the members */
- for ( i = 0; i < nfields; i++)
- {
+ for(i = 0; i < nfields; i++) {
unsigned j;
/* Range check */
@@ -1181,95 +1149,94 @@ herr_t H5TBread_fields_index( hid_t loc_id,
j = (unsigned)field_index[i];
/* get the member name */
- member_name = H5Tget_member_name( tid, j );
-
- /* get the member type */
- if (( member_type_id = H5Tget_member_type( tid, j )) < 0)
+ if(NULL == (member_name = H5Tget_member_name(tid, (unsigned)j)))
goto out;
- /* get the member size */
- if (H5Tget_size( member_type_id ) == 0 )
+ /* get the member type */
+ if((member_type_id = H5Tget_member_type(tid, (unsigned)j)) < 0)
goto out;
/* convert to native type */
- if ((nmtype_id=H5Tget_native_type(member_type_id,H5T_DIR_DEFAULT)) < 0)
+ if((nmtype_id = H5Tget_native_type(member_type_id, H5T_DIR_DEFAULT)) < 0)
goto out;
- size_native=H5Tget_size(nmtype_id);
+ if(0 == (size_native = H5Tget_size(nmtype_id)))
+ goto out;
- if (field_sizes[i]!=size_native)
- {
- if (H5Tset_size(nmtype_id, field_sizes[i]) < 0)
+ if(field_sizes[i] != size_native)
+ if(H5Tset_size(nmtype_id, field_sizes[i]) < 0)
goto out;
- }
/* the field in the file is found by its name */
- if (field_offset )
- {
- if(H5Tinsert( read_type_id, member_name, field_offset[i], nmtype_id ) < 0)
+ if(field_offset) {
+ if(H5Tinsert(read_type_id, member_name, field_offset[i], nmtype_id) < 0)
goto out;
- }
- else
- {
- if(H5Tinsert( read_type_id, member_name, (size_t)0, nmtype_id ) < 0)
+ } /* end if */
+ else {
+ if(H5Tinsert(read_type_id, member_name, (size_t)0, nmtype_id) < 0)
goto out;
- }
+ } /* end else */
/* close the member type */
- if (H5Tclose( member_type_id ) < 0)
+ if(H5Tclose(member_type_id) < 0)
goto out;
- if (H5Tclose( nmtype_id ) < 0)
+ member_type_id = H5I_BADID;
+ if(H5Tclose(nmtype_id) < 0)
goto out;
+ nmtype_id = H5I_BADID;
- H5free_memory( member_name );
- }
+ H5free_memory(member_name);
+ member_name = NULL;
+ } /* end for */
/* get the dataspace handle */
- if ((sid = H5Dget_space( did )) < 0)
+ if((sid = H5Dget_space(did)) < 0)
goto out;
/* define a hyperslab in the dataset */
offset[0] = start;
count[0] = nrecords;
- if (H5Sselect_hyperslab( sid, H5S_SELECT_SET, offset, NULL, count, NULL) < 0)
+ if(H5Sselect_hyperslab(sid, H5S_SELECT_SET, offset, NULL, count, NULL) < 0)
goto out;
/* create a memory dataspace handle */
mem_size[0] = count[0];
- if ((m_sid = H5Screate_simple( 1, mem_size, NULL )) < 0)
+ if((m_sid = H5Screate_simple(1, mem_size, NULL)) < 0)
goto out;
/* read */
- if (H5Dread( did, read_type_id, m_sid, sid, H5P_DEFAULT, buf ) < 0)
+ if(H5Dread( did, read_type_id, m_sid, sid, H5P_DEFAULT, buf) < 0)
goto out;
- /* close */
- if (H5Sclose( sid ) < 0)
- goto out;
- if (H5Sclose( m_sid ) < 0)
- goto out;
- if (H5Tclose( read_type_id ) )
- goto out;
- if (H5Tclose( tid ) < 0)
- return -1;
- if (H5Dclose( did ) < 0)
- return -1;
-
- return 0;
+ ret_val = 0;
- /* error zone */
out:
- H5E_BEGIN_TRY
- {
- H5Dclose(did);
- H5Tclose(read_type_id);
- H5Tclose(tid);
- H5Sclose(m_sid);
- H5Sclose(sid);
- } H5E_END_TRY;
- return -1;
+ if(member_name)
+ H5free_memory(member_name);
+ if(read_type_id > 0)
+ if(H5Tclose(read_type_id) < 0)
+ ret_val = -1;
+ if(member_type_id > 0)
+ if(H5Tclose(member_type_id) < 0)
+ ret_val = -1;
+ if(nmtype_id > 0)
+ if(H5Tclose(nmtype_id) < 0)
+ ret_val = -1;
+ if(tid > 0)
+ if(H5Tclose(tid) < 0)
+ ret_val = -1;
+ if(m_sid > 0)
+ if(H5Sclose(m_sid) < 0)
+ ret_val = -1;
+ if(sid > 0)
+ if(H5Sclose(sid) < 0)
+ ret_val = -1;
+ if(did > 0)
+ if(H5Dclose(did) < 0)
+ ret_val = -1;
-}
+ return ret_val;
+} /* end H5TBread_fields_index() */
/*-------------------------------------------------------------------------
@@ -1290,34 +1257,36 @@ out:
*
* Date: November 26, 2001
*
-* Modifications: April 29, 2003
-*
-*
*-------------------------------------------------------------------------
*/
-
-herr_t H5TBdelete_record( hid_t loc_id,
+herr_t H5TBdelete_record(hid_t loc_id,
const char *dset_name,
hsize_t start,
- hsize_t nrecords )
+ hsize_t nrecords)
{
+ hid_t did = H5I_BADID;
+ hid_t tid = H5I_BADID;
+ hid_t sid = H5I_BADID;
+ hid_t m_sid = H5I_BADID;
+ hid_t mem_type_id = H5I_BADID;
hsize_t nfields;
hsize_t ntotal_records;
hsize_t read_start;
hsize_t read_nrecords;
- hid_t did=-1;
- hid_t tid=-1;
- hid_t sid=-1;
- hid_t m_sid=-1;
- hid_t mem_type_id=-1;
hsize_t count[1];
hsize_t offset[1];
hsize_t mem_size[1];
- unsigned char *tmp_buf=NULL;
- size_t src_size;
- size_t *src_offset = NULL;
- size_t *src_sizes = NULL;
hsize_t dims[1];
+ size_t src_size;
+ size_t *src_offset = NULL;
+ size_t *src_sizes = NULL;
+ unsigned char *tmp_buf = NULL;
+ herr_t ret_val = -1;
+
+
+ /* check the arguments */
+ if (dset_name == NULL)
+ goto out;
/*-------------------------------------------------------------------------
* first we get information about type size and offsets on disk
@@ -1325,20 +1294,20 @@ herr_t H5TBdelete_record( hid_t loc_id,
*/
/* get the number of records and fields */
- if (H5TBget_table_info ( loc_id, dset_name, &nfields, &ntotal_records ) < 0)
+ if(H5TBget_table_info(loc_id, dset_name, &nfields, &ntotal_records) < 0)
goto out;
- if(NULL == (src_offset = (size_t *)malloc((size_t)nfields * sizeof(size_t))))
+ if(NULL == (src_offset = (size_t *)HDmalloc((size_t)nfields * sizeof(size_t))))
goto out;
- if(NULL == (src_sizes = (size_t *)malloc((size_t)nfields * sizeof(size_t))))
+ if(NULL == (src_sizes = (size_t *)HDmalloc((size_t)nfields * sizeof(size_t))))
goto out;
/* get field info */
- if (H5TBget_field_info( loc_id, dset_name, NULL, src_sizes, src_offset, &src_size ) < 0)
+ if(H5TBget_field_info(loc_id, dset_name, NULL, src_sizes, src_offset, &src_size) < 0)
goto out;
/* open the dataset. */
- if ((did = H5Dopen2(loc_id, dset_name, H5P_DEFAULT)) < 0)
+ if((did = H5Dopen2(loc_id, dset_name, H5P_DEFAULT)) < 0)
goto out;
/*-------------------------------------------------------------------------
@@ -1349,13 +1318,12 @@ herr_t H5TBdelete_record( hid_t loc_id,
read_start = start + nrecords;
read_nrecords = ntotal_records - read_start;
- if ( read_nrecords )
- {
- if(NULL == (tmp_buf = (unsigned char *)calloc((size_t) read_nrecords, src_size )))
+ if(read_nrecords) {
+ if(NULL == (tmp_buf = (unsigned char *)HDcalloc((size_t)read_nrecords, src_size)))
goto out;
/* read the records after the deleted one(s) */
- if (H5TBread_records( loc_id, dset_name, read_start, read_nrecords, src_size, src_offset, src_sizes, tmp_buf ) < 0)
+ if(H5TBread_records(loc_id, dset_name, read_start, read_nrecords, src_size, src_offset, src_sizes, tmp_buf) < 0)
goto out;
/*-------------------------------------------------------------------------
@@ -1364,83 +1332,81 @@ herr_t H5TBdelete_record( hid_t loc_id,
*/
/* get the datatype */
- if ((tid = H5Dget_type( did )) < 0)
+ if((tid = H5Dget_type(did)) < 0)
goto out;
/* get the dataspace handle */
- if ((sid = H5Dget_space( did )) < 0)
+ if((sid = H5Dget_space(did)) < 0)
goto out;
/* create the memory data type. */
- if ((mem_type_id=H5TB_create_type( loc_id, dset_name, src_size, src_offset, src_sizes, tid)) < 0)
+ if((mem_type_id = H5TB_create_type( loc_id, dset_name, src_size, src_offset, src_sizes, tid)) < 0)
goto out;
/* define a hyperslab in the dataset of the size of the records */
offset[0] = start;
count[0] = read_nrecords;
- if (H5Sselect_hyperslab( sid, H5S_SELECT_SET, offset, NULL, count, NULL) < 0)
+ if(H5Sselect_hyperslab(sid, H5S_SELECT_SET, offset, NULL, count, NULL) < 0)
goto out;
/* create a memory dataspace handle */
mem_size[0] = count[0];
- if ((m_sid = H5Screate_simple( 1, mem_size, NULL )) < 0)
+ if((m_sid = H5Screate_simple(1, mem_size, NULL)) < 0)
goto out;
- if (H5Dwrite( did, mem_type_id, m_sid, sid, H5P_DEFAULT, tmp_buf ) < 0)
+ if(H5Dwrite(did, mem_type_id, m_sid, sid, H5P_DEFAULT, tmp_buf) < 0)
goto out;
/* close */
- if (H5Sclose( m_sid ) < 0)
+ if(H5Sclose(m_sid) < 0)
goto out;
- if (H5Tclose( mem_type_id ) < 0)
+ m_sid = H5I_BADID;
+ if(H5Tclose(mem_type_id) < 0)
goto out;
- if (H5Sclose( sid ) < 0)
+ mem_type_id = H5I_BADID;
+ if(H5Sclose(sid) < 0)
goto out;
- if (H5Tclose( tid ) < 0)
+ sid = H5I_BADID;
+ if(H5Tclose(tid) < 0)
goto out;
-
+ tid = H5I_BADID;
} /* read_nrecords */
-
/*-------------------------------------------------------------------------
* change the dataset dimension
*-------------------------------------------------------------------------
*/
dims[0] = ntotal_records - nrecords;
- if (H5Dset_extent( did, dims ) < 0)
- goto out;
-
- /* close dataset */
- if (H5Dclose( did ) < 0)
+ if(H5Dset_extent(did, dims) < 0)
goto out;
- if(tmp_buf)
- free(tmp_buf);
- if(src_offset)
- free(src_offset);
- if(src_sizes)
- free(src_sizes);
-
- return 0;
+ ret_val = 0;
- /* error zone */
out:
if(tmp_buf)
- free(tmp_buf);
+ HDfree(tmp_buf);
if(src_offset)
- free(src_offset);
+ HDfree(src_offset);
if(src_sizes)
- free(src_sizes);
- H5E_BEGIN_TRY
- {
- H5Tclose(mem_type_id);
- H5Dclose(did);
- H5Tclose(tid);
- H5Sclose(sid);
- H5Sclose(m_sid);
- } H5E_END_TRY;
- return -1;
-}
+ HDfree(src_sizes);
+ if(mem_type_id > 0)
+ if(H5Tclose(mem_type_id) < 0)
+ ret_val = -1;
+ if(tid > 0)
+ if(H5Tclose(tid) < 0)
+ ret_val = -1;
+ if(m_sid > 0)
+ if(H5Sclose(m_sid) < 0)
+ ret_val = -1;
+ if(sid > 0)
+ if(H5Sclose(sid) < 0)
+ ret_val = -1;
+ if(did > 0)
+ if(H5Dclose(did) < 0)
+ ret_val = -1;
+
+ return ret_val;
+} /* end H5TBdelete_record() */
/*-------------------------------------------------------------------------
* Function: H5TBinsert_record
@@ -1455,37 +1421,35 @@ out:
*
* Comments: Uses memory offsets
*
-* Modifications: April 1, 2004
-* the FIELD_SIZES parameter is used to define the memory type ID
-* returned by H5TB_create_type
-*
*-------------------------------------------------------------------------
*/
-
-
-herr_t H5TBinsert_record( hid_t loc_id,
+herr_t H5TBinsert_record(hid_t loc_id,
const char *dset_name,
hsize_t start,
hsize_t nrecords,
size_t type_size,
const size_t *field_offset,
const size_t *field_sizes,
- void *buf )
+ void *buf)
{
-
+ hid_t did = H5I_BADID;
+ hid_t tid = H5I_BADID;
+ hid_t mem_type_id = H5I_BADID;
+ hid_t sid = H5I_BADID;
+ hid_t m_sid = H5I_BADID;
hsize_t nfields;
hsize_t ntotal_records;
hsize_t read_nrecords;
- hid_t did;
- hid_t tid=-1;
- hid_t mem_type_id=-1;
hsize_t count[1];
hsize_t offset[1];
- hid_t sid=-1;
- hid_t m_sid=-1;
hsize_t dims[1];
hsize_t mem_dims[1];
- unsigned char *tmp_buf;
+ unsigned char *tmp_buf = NULL;
+ herr_t ret_val = -1;
+
+ /* check the arguments */
+ if (dset_name == NULL)
+ goto out;
/*-------------------------------------------------------------------------
* read the records after the inserted one(s)
@@ -1493,32 +1457,33 @@ herr_t H5TBinsert_record( hid_t loc_id,
*/
/* get the dimensions */
- if (H5TBget_table_info ( loc_id, dset_name, &nfields, &ntotal_records ) < 0)
- return -1;
+ if(H5TBget_table_info(loc_id, dset_name, &nfields, &ntotal_records) < 0)
+ goto out;
/* open the dataset. */
- if ((did = H5Dopen2(loc_id, dset_name, H5P_DEFAULT)) < 0)
+ if((did = H5Dopen2(loc_id, dset_name, H5P_DEFAULT)) < 0)
goto out;
/* get the datatype */
- if ((tid = H5Dget_type( did )) < 0)
+ if((tid = H5Dget_type(did)) < 0)
goto out;
/* create the memory data type. */
- if ((mem_type_id=H5TB_create_type(loc_id,dset_name,type_size,field_offset,field_sizes,tid)) < 0)
+ if((mem_type_id = H5TB_create_type(loc_id, dset_name, type_size, field_offset, field_sizes, tid)) < 0)
goto out;
read_nrecords = ntotal_records - start;
- tmp_buf = (unsigned char *)calloc((size_t) read_nrecords, type_size);
+ if(NULL == (tmp_buf = (unsigned char *)HDcalloc((size_t) read_nrecords, type_size)))
+ goto out;
/* read the records after the inserted one(s) */
- if (H5TBread_records( loc_id, dset_name, start, read_nrecords, type_size, field_offset, field_sizes, tmp_buf ) < 0)
- return -1;
+ if(H5TBread_records(loc_id, dset_name, start, read_nrecords, type_size, field_offset, field_sizes, tmp_buf) < 0)
+ goto out;
/* extend the dataset */
dims[0] = ntotal_records + nrecords;
- if (H5Dset_extent(did, dims) < 0)
+ if(H5Dset_extent(did, dims) < 0)
goto out;
/*-------------------------------------------------------------------------
@@ -1528,27 +1493,29 @@ herr_t H5TBinsert_record( hid_t loc_id,
/* create a simple memory data space */
mem_dims[0] = nrecords;
- if ((m_sid = H5Screate_simple(1, mem_dims, NULL)) < 0)
- return -1;
+ if((m_sid = H5Screate_simple(1, mem_dims, NULL)) < 0)
+ goto out;
/* get the file data space */
- if ((sid = H5Dget_space( did )) < 0)
- return -1;
+ if((sid = H5Dget_space(did)) < 0)
+ goto out;
/* define a hyperslab in the dataset to write the new data */
offset[0] = start;
count[0] = nrecords;
- if (H5Sselect_hyperslab( sid, H5S_SELECT_SET, offset, NULL, count, NULL) < 0)
+ if(H5Sselect_hyperslab(sid, H5S_SELECT_SET, offset, NULL, count, NULL) < 0)
goto out;
- if (H5Dwrite( did, mem_type_id, m_sid, sid, H5P_DEFAULT, buf ) < 0)
+ if(H5Dwrite(did, mem_type_id, m_sid, sid, H5P_DEFAULT, buf) < 0)
goto out;
/* terminate access to the dataspace */
- if (H5Sclose( m_sid ) < 0)
+ if(H5Sclose(m_sid) < 0)
goto out;
- if (H5Sclose( sid ) < 0)
+ m_sid = H5I_BADID;
+ if(H5Sclose(sid) < 0)
goto out;
+ sid = H5I_BADID;
/*-------------------------------------------------------------------------
* write the "pushed down" records
@@ -1556,51 +1523,46 @@ herr_t H5TBinsert_record( hid_t loc_id,
*/
/* create a simple memory data space */
- mem_dims[0]=read_nrecords;
- if ((m_sid = H5Screate_simple( 1, mem_dims, NULL )) < 0)
- return -1;
+ mem_dims[0] = read_nrecords;
+ if((m_sid = H5Screate_simple(1, mem_dims, NULL)) < 0)
+ goto out;
/* get the file data space */
- if ((sid = H5Dget_space( did )) < 0)
- return -1;
+ if((sid = H5Dget_space(did)) < 0)
+ goto out;
/* define a hyperslab in the dataset to write the new data */
offset[0] = start + nrecords;
count[0] = read_nrecords;
- if (H5Sselect_hyperslab( sid, H5S_SELECT_SET, offset, NULL, count, NULL) < 0)
+ if(H5Sselect_hyperslab(sid, H5S_SELECT_SET, offset, NULL, count, NULL) < 0)
goto out;
- if (H5Dwrite( did, mem_type_id, m_sid, sid, H5P_DEFAULT, tmp_buf ) < 0)
+ if(H5Dwrite(did, mem_type_id, m_sid, sid, H5P_DEFAULT, tmp_buf) < 0)
goto out;
- /* close */
- if (H5Sclose( m_sid ) < 0)
- goto out;
- if (H5Sclose( sid ) < 0)
- goto out;
- if (H5Tclose( tid ) < 0)
- return -1;
- if (H5Tclose( mem_type_id ) < 0)
- return -1;
- if (H5Dclose( did ) < 0)
- return -1;
-
- free( tmp_buf );
-
- return 0;
+ ret_val = 0;
- /* error zone */
out:
- H5E_BEGIN_TRY
- {
- H5Dclose(did);
- H5Sclose(sid);
- H5Sclose(m_sid);
- H5Tclose(mem_type_id);
- H5Tclose(tid);
- } H5E_END_TRY;
- return -1;
-}
+ if(tmp_buf)
+ HDfree(tmp_buf);
+ if(sid > 0)
+ if(H5Sclose(sid) < 0)
+ ret_val = -1;
+ if(m_sid > 0)
+ if(H5Sclose(m_sid) < 0)
+ ret_val = -1;
+ if(mem_type_id > 0)
+ if(H5Tclose(mem_type_id) < 0)
+ ret_val = -1;
+ if(tid > 0)
+ if(H5Tclose(tid) < 0)
+ ret_val = -1;
+ if(did > 0)
+ if(H5Dclose(did) < 0)
+ ret_val = -1;
+
+ return ret_val;
+} /* end H5TBinsert_record() */
/*-------------------------------------------------------------------------
* Function: H5TBadd_records_from
@@ -1615,33 +1577,36 @@ out:
*
* Comments:
*
-* Modifications:
-*
-*
*-------------------------------------------------------------------------
*/
-
-herr_t H5TBadd_records_from( hid_t loc_id,
+herr_t H5TBadd_records_from(hid_t loc_id,
const char *dset_name1,
hsize_t start1,
hsize_t nrecords,
const char *dset_name2,
- hsize_t start2 )
+ hsize_t start2)
{
- hid_t did_1;
- hid_t tid_1;
- hid_t sid_1=-1;
- hid_t msid_1=-1;
- size_t type_size1;
+ hid_t did = H5I_BADID;
+ hid_t tid = H5I_BADID;
+ hid_t sid = H5I_BADID;
+ hid_t m_sid = H5I_BADID;
hsize_t count[1];
hsize_t offset[1];
hsize_t mem_size[1];
hsize_t nfields;
hsize_t ntotal_records;
- unsigned char *tmp_buf = NULL;
+ size_t type_size1;
size_t src_size;
- size_t *src_offset = NULL;
- size_t *src_sizes = NULL;
+ size_t *src_offset = NULL;
+ size_t *src_sizes = NULL;
+ unsigned char *tmp_buf = NULL;
+ herr_t ret_val = -1;
+
+ /* check the arguments */
+ if (dset_name1 == NULL)
+ goto out;
+ if (dset_name2 == NULL)
+ goto out;
/*-------------------------------------------------------------------------
* first we get information about type size and offsets on disk
@@ -1649,16 +1614,16 @@ herr_t H5TBadd_records_from( hid_t loc_id,
*/
/* get the number of records and fields */
- if (H5TBget_table_info ( loc_id, dset_name1, &nfields, &ntotal_records ) < 0)
+ if(H5TBget_table_info(loc_id, dset_name1, &nfields, &ntotal_records) < 0)
goto out;
- if(NULL == (src_offset = (size_t *)malloc((size_t)nfields * sizeof(size_t))))
+ if(NULL == (src_offset = (size_t *)HDmalloc((size_t)nfields * sizeof(size_t))))
goto out;
- if(NULL == (src_sizes = (size_t *)malloc((size_t)nfields * sizeof(size_t))))
+ if(NULL == (src_sizes = (size_t *)HDmalloc((size_t)nfields * sizeof(size_t))))
goto out;
/* get field info */
- if (H5TBget_field_info( loc_id, dset_name1, NULL, src_sizes, src_offset, &src_size ) < 0)
+ if(H5TBget_field_info(loc_id, dset_name1, NULL, src_sizes, src_offset, &src_size) < 0)
goto out;
/*-------------------------------------------------------------------------
@@ -1667,86 +1632,69 @@ herr_t H5TBadd_records_from( hid_t loc_id,
*/
/* open the 1st dataset. */
- if ((did_1 = H5Dopen2(loc_id, dset_name1, H5P_DEFAULT)) < 0)
+ if((did = H5Dopen2(loc_id, dset_name1, H5P_DEFAULT)) < 0)
goto out;
/* get the datatype */
- if ((tid_1 = H5Dget_type( did_1 )) < 0)
+ if((tid = H5Dget_type(did)) < 0)
goto out;
/* get the dataspace handle */
- if ((sid_1 = H5Dget_space( did_1 )) < 0)
+ if((sid = H5Dget_space(did)) < 0)
goto out;
/* get the size of the datatype */
- if (( type_size1 = H5Tget_size( tid_1 )) == 0 )
+ if(0 == (type_size1 = H5Tget_size(tid)))
goto out;
- if(NULL == (tmp_buf = (unsigned char *)calloc((size_t)nrecords, type_size1 )))
+ if(NULL == (tmp_buf = (unsigned char *)HDcalloc((size_t)nrecords, type_size1)))
goto out;
/* define a hyperslab in the dataset of the size of the records */
offset[0] = start1;
count[0] = nrecords;
- if (H5Sselect_hyperslab( sid_1, H5S_SELECT_SET, offset, NULL, count, NULL) < 0)
+ if(H5Sselect_hyperslab(sid, H5S_SELECT_SET, offset, NULL, count, NULL) < 0)
goto out;
/* create a memory dataspace handle */
mem_size[0] = count[0];
- if ((msid_1 = H5Screate_simple( 1, mem_size, NULL )) < 0)
+ if((m_sid = H5Screate_simple(1, mem_size, NULL)) < 0)
goto out;
- if (H5Dread( did_1, tid_1, msid_1, sid_1, H5P_DEFAULT, tmp_buf ) < 0)
+ if(H5Dread(did, tid, m_sid, sid, H5P_DEFAULT, tmp_buf) < 0)
goto out;
/*-------------------------------------------------------------------------
* add to the second table
*-------------------------------------------------------------------------
*/
- if (H5TBinsert_record(loc_id,dset_name2,start2,nrecords,src_size,src_offset,src_sizes,tmp_buf ) < 0)
- goto out;
-
- /*-------------------------------------------------------------------------
- * close resources for table 1
- *-------------------------------------------------------------------------
- */
-
- if (H5Sclose( msid_1 ) < 0)
+ if(H5TBinsert_record(loc_id, dset_name2, start2, nrecords, src_size, src_offset, src_sizes, tmp_buf) < 0)
goto out;
- if (H5Sclose( sid_1 ) < 0)
- goto out;
- if (H5Tclose( tid_1 ) < 0)
- goto out;
- if (H5Dclose( did_1 ) < 0)
- goto out;
-
- if(tmp_buf)
- free(tmp_buf);
- if(src_offset)
- free(src_offset);
- if(src_sizes)
- free(src_sizes);
- return 0;
+ ret_val = 0;
- /* error zone */
out:
if(tmp_buf)
- free(tmp_buf);
+ HDfree(tmp_buf);
if(src_offset)
- free(src_offset);
+ HDfree(src_offset);
if(src_sizes)
- free(src_sizes);
- H5E_BEGIN_TRY
- {
- H5Dclose(did_1);
- H5Sclose(sid_1);
- H5Sclose(msid_1);
- H5Tclose(tid_1);
- } H5E_END_TRY;
- return -1;
+ HDfree(src_sizes);
+ if(tid > 0)
+ if(H5Tclose(tid) < 0)
+ ret_val = -1;
+ if(sid > 0)
+ if(H5Sclose(sid) < 0)
+ ret_val = -1;
+ if(m_sid > 0)
+ if(H5Sclose(m_sid) < 0)
+ ret_val = -1;
+ if(did > 0)
+ if(H5Dclose(did) < 0)
+ ret_val = -1;
-}
+ return ret_val;
+} /* end H5TBadd_records_from() */
/*-------------------------------------------------------------------------
* Function: H5TBcombine_tables
@@ -1761,9 +1709,6 @@ out:
*
* Comments:
*
-* Modifications:
-*
-*
*-------------------------------------------------------------------------
*/
herr_t H5TBcombine_tables(hid_t loc_id1,
@@ -1805,11 +1750,18 @@ herr_t H5TBcombine_tables(hid_t loc_id1,
size_t *src_offset = NULL;
size_t *src_sizes = NULL;
char attr_name[255];
- char aux[255];
unsigned char *tmp_buf = NULL;
unsigned char *tmp_fill_buf = NULL;
htri_t has_fill;
- int ret_val = -1;
+ herr_t ret_val = -1;
+
+ /* check the arguments */
+ if (dset_name1 == NULL)
+ goto out;
+ if (dset_name2 == NULL)
+ goto out;
+ if (dset_name3 == NULL)
+ goto out;
/*-------------------------------------------------------------------------
* first we get information about type size and offsets on disk
@@ -1893,7 +1845,8 @@ herr_t H5TBcombine_tables(hid_t loc_id1,
* get attributes
*-------------------------------------------------------------------------
*/
- type_size = H5Tget_size(tid_3);
+ if(0 == (type_size = H5Tget_size(tid_3)))
+ goto out;
/* alloc fill value attribute buffer */
if(NULL == (tmp_fill_buf = (unsigned char *)HDmalloc(type_size)))
@@ -1908,7 +1861,6 @@ herr_t H5TBcombine_tables(hid_t loc_id1,
*-------------------------------------------------------------------------
*/
if(has_fill) {
-
if((sid = H5Screate(H5S_SCALAR)) < 0)
goto out;
@@ -1920,11 +1872,7 @@ herr_t H5TBcombine_tables(hid_t loc_id1,
/* get the member offset */
member_offset = H5Tget_member_offset(tid_3, (unsigned)i);
- HDstrncpy(attr_name, "FIELD_", 6);
- HDsnprintf(aux, 12, "%d", (int)i);
- HDstrncat(attr_name, aux, 12);
- HDsnprintf(aux, 6, "%s", "_FILL");
- HDstrncat(attr_name, aux, 7);
+ HDsnprintf(attr_name, sizeof(attr_name), "FIELD_%d_FILL", (int)i);
if((attr_id = H5Acreate2(did_3, attr_name, member_type_id, sid, H5P_DEFAULT, H5P_DEFAULT)) < 0)
goto out;
@@ -1939,13 +1887,13 @@ herr_t H5TBcombine_tables(hid_t loc_id1,
if(H5Tclose(member_type_id) < 0)
goto out;
member_type_id = H5I_BADID;
- }
+ } /* end for */
/* close data space. */
if(H5Sclose(sid) < 0)
goto out;
sid = H5I_BADID;
- }
+ } /* end if */
/*-------------------------------------------------------------------------
* read data from 1st table
@@ -1978,27 +1926,13 @@ herr_t H5TBcombine_tables(hid_t loc_id1,
goto out;
/*-------------------------------------------------------------------------
- * release resources from 1st table
+ * release temporary resources
*-------------------------------------------------------------------------
*/
if(H5Sclose(m_sid) < 0)
goto out;
m_sid = H5I_BADID;
- if(H5Sclose(sid_1) < 0)
- goto out;
- sid_1 = H5I_BADID;
- if(H5Tclose(tid_1) < 0)
- goto out;
- tid_1 = H5I_BADID;
- if(H5Pclose(pid_1) < 0)
- goto out;
- pid_1 = H5I_BADID;
- if(H5Dclose(did_1) < 0)
- goto out;
- did_1 = H5I_BADID;
-
- /* Release resources. */
- free(tmp_buf);
+ HDfree(tmp_buf);
tmp_buf = NULL;
/*-------------------------------------------------------------------------
@@ -2057,94 +1991,68 @@ herr_t H5TBcombine_tables(hid_t loc_id1,
if(H5TBappend_records(loc_id1, dset_name3, nrecords, src_size, src_offset, src_sizes, tmp_buf) < 0)
goto out;
- /*-------------------------------------------------------------------------
- * release resources from 2nd table
- *-------------------------------------------------------------------------
- */
-
- if(H5Sclose(m_sid) < 0)
- goto out;
- m_sid = H5I_BADID;
- if(H5Sclose(sid_2) < 0)
- goto out;
- sid_2 = H5I_BADID;
- if(H5Tclose(tid_2) < 0)
- goto out;
- tid_2 = H5I_BADID;
- if(H5Pclose(pid_2) < 0)
- goto out;
- pid_2 = H5I_BADID;
- if(H5Dclose(did_2) < 0)
- goto out;
- did_2 = H5I_BADID;
-
- /*-------------------------------------------------------------------------
- * release resources from 3rd table
- *-------------------------------------------------------------------------
- */
-
- if(H5Sclose(sid_3) < 0)
- goto out;
- sid_3 = H5I_BADID;
- if(H5Tclose(tid_3) < 0)
- goto out;
- tid_3 = H5I_BADID;
- if(H5Pclose(pid_3) < 0)
- goto out;
- pid_3 = H5I_BADID;
- if(H5Dclose(did_3) < 0)
- goto out;
- did_3 = H5I_BADID;
-
ret_val = 0;
out:
if(tmp_buf)
- free(tmp_buf);
+ HDfree(tmp_buf);
if(tmp_fill_buf)
- free(tmp_fill_buf);
+ HDfree(tmp_fill_buf);
if(src_offset)
- free(src_offset);
+ HDfree(src_offset);
if(src_sizes)
- free(src_sizes);
-
- H5E_BEGIN_TRY {
- if(member_type_id > 0)
- H5Tclose(member_type_id);
- if(attr_id > 0)
- H5Aclose(attr_id);
- if(sid > 0)
- H5Sclose(sid);
- if(m_sid > 0)
- H5Sclose(m_sid);
- if(pid_1 > 0)
- H5Pclose(pid_1);
- if(tid_1 > 0)
- H5Tclose(tid_1);
- if(sid_1 > 0)
- H5Sclose(sid_1);
- if(did_1 > 0)
- H5Dclose(did_1);
- if(pid_2 > 0)
- H5Pclose(pid_2);
- if(tid_2 > 0)
- H5Tclose(tid_2);
- if(sid_2 > 0)
- H5Sclose(sid_2);
- if(did_2 > 0)
- H5Dclose(did_2);
- if(pid_3 > 0)
- H5Pclose(pid_3);
- if(tid_3 > 0)
- H5Tclose(tid_3);
- if(sid_3 > 0)
- H5Sclose(sid_3);
- if(did_3 > 0)
- H5Dclose(did_3);
- } H5E_END_TRY;
+ HDfree(src_sizes);
+ if(member_type_id > 0)
+ if(H5Tclose(member_type_id) < 0)
+ ret_val = -1;
+ if(attr_id > 0)
+ if(H5Aclose(attr_id) < 0)
+ ret_val = -1;
+ if(sid > 0)
+ if(H5Sclose(sid) < 0)
+ ret_val = -1;
+ if(m_sid > 0)
+ if(H5Sclose(m_sid) < 0)
+ ret_val = -1;
+ if(sid_1 > 0)
+ if(H5Sclose(sid_1) < 0)
+ ret_val = -1;
+ if(tid_1 > 0)
+ if(H5Tclose(tid_1) < 0)
+ ret_val = -1;
+ if(pid_1 > 0)
+ if(H5Pclose(pid_1) < 0)
+ ret_val = -1;
+ if(did_1 > 0)
+ if(H5Dclose(did_1) < 0)
+ ret_val = -1;
+ if(sid_2 > 0)
+ if(H5Sclose(sid_2) < 0)
+ ret_val = -1;
+ if(tid_2 > 0)
+ if(H5Tclose(tid_2) < 0)
+ ret_val = -1;
+ if(pid_2 > 0)
+ if(H5Pclose(pid_2) < 0)
+ ret_val = -1;
+ if(did_2 > 0)
+ if(H5Dclose(did_2) < 0)
+ ret_val = -1;
+ if(sid_3 > 0)
+ if(H5Sclose(sid_3) < 0)
+ ret_val = -1;
+ if(tid_3 > 0)
+ if(H5Tclose(tid_3) < 0)
+ ret_val = -1;
+ if(pid_3 > 0)
+ if(H5Pclose(pid_3) < 0)
+ ret_val = -1;
+ if(did_3 > 0)
+ if(H5Dclose(did_3) < 0)
+ ret_val = -1;
return ret_val;
-}
+} /* end H5TBcombine_tables() */
/*-------------------------------------------------------------------------
* Function: H5TBinsert_field
@@ -2159,36 +2067,40 @@ out:
*
* Comments:
*
-* Modifications:
-*
*-------------------------------------------------------------------------
*/
-
-herr_t H5TBinsert_field( hid_t loc_id,
+herr_t H5TBinsert_field(hid_t loc_id,
const char *dset_name,
const char *field_name,
hid_t field_type,
hsize_t position,
const void *fill_data,
- const void *buf )
+ const void *buf)
{
/* identifiers for the 1st, original dataset */
- hid_t did_1;
- hid_t tid_1;
- hid_t sid_1;
- hid_t pid_1;
- hid_t msid_1;
+ hid_t did_1 = H5I_BADID;
+ hid_t tid_1 = H5I_BADID;
+ hid_t sid_1 = H5I_BADID;
+ hid_t pid_1 = H5I_BADID;
+ hid_t msid_1 = H5I_BADID;
/* identifiers for the 2nd, new dataset */
- hid_t did_2;
- hid_t tid_2;
- hid_t sid_2;
- hid_t pid_2;
- hid_t msid_2;
- hid_t member_type_id;
+ hid_t did_2 = H5I_BADID;
+ hid_t tid_2 = H5I_BADID;
+ hid_t sid_2 = H5I_BADID;
+ hid_t pid_2 = H5I_BADID;
+ hid_t msid_2 = H5I_BADID;
+ /* identifiers for the 3rd, final dataset */
+ hid_t did_3 = H5I_BADID;
+ hid_t tid_3 = H5I_BADID;
+ hid_t sid_3 = H5I_BADID;
+ hid_t member_type_id = H5I_BADID;
+ hid_t write_type_id = H5I_BADID;
+ hid_t preserve_id = H5I_BADID;
+ hid_t attr_id = H5I_BADID;
size_t member_size;
size_t new_member_size = 0;
- char *member_name;
size_t total_size;
+ size_t curr_offset;
hsize_t nfields;
hsize_t nrecords;
hsize_t dims_chunk[1];
@@ -2197,388 +2109,372 @@ herr_t H5TBinsert_field( hid_t loc_id,
hsize_t count[1];
hsize_t offset[1];
hsize_t mem_size[1];
- hid_t write_type_id;
- hid_t preserve_id;
- size_t curr_offset;
- int inserted;
- hsize_t idx;
+ hsize_t i;
char table_title[255];
- size_t member_offset;
char attr_name[255];
- hid_t attr_id;
- char aux[255];
- unsigned char *tmp_buf;
- unsigned char *tmp_fill_buf;
- hsize_t i;
+ char *member_name = NULL;
+ unsigned char *tmp_buf = NULL;
+ unsigned char *tmp_fill_buf = NULL;
+ hbool_t inserted;
+ herr_t ret_val = -1;
+
+ /* check the arguments */
+ if (dset_name == NULL)
+ goto out;
+ if (field_name == NULL)
+ goto out;
/* get the number of records and fields */
- if (H5TBget_table_info ( loc_id, dset_name, &nfields, &nrecords ) < 0)
- return -1;
+ if(H5TBget_table_info(loc_id, dset_name, &nfields, &nrecords) < 0)
+ goto out;
/*-------------------------------------------------------------------------
- * get information about the old data type
- *-------------------------------------------------------------------------
- */
+ * get information about the old data type
+ *-------------------------------------------------------------------------
+ */
/* open the dataset. */
- if ((did_1 = H5Dopen2(loc_id, dset_name, H5P_DEFAULT)) < 0)
- return -1;
+ if((did_1 = H5Dopen2(loc_id, dset_name, H5P_DEFAULT)) < 0)
+ goto out;
/* get creation properties list */
- if ((pid_1 = H5Dget_create_plist( did_1 )) < 0)
+ if((pid_1 = H5Dget_create_plist(did_1)) < 0)
goto out;
/* get the datatype */
- if ((tid_1 = H5Dget_type( did_1 )) < 0)
+ if((tid_1 = H5Dget_type(did_1)) < 0)
goto out;
/* get the size of the datatype */
- if (( total_size = H5Tget_size( tid_1 )) == 0 )
+ if(0 == (total_size = H5Tget_size(tid_1)))
goto out;
/* get the dataspace handle */
- if ((sid_1 = H5Dget_space( did_1 )) < 0)
+ if((sid_1 = H5Dget_space(did_1)) < 0)
goto out;
/* get dimension */
- if (H5Sget_simple_extent_dims( sid_1, dims, NULL) < 0)
+ if(H5Sget_simple_extent_dims(sid_1, dims, NULL) < 0)
goto out;
/*-------------------------------------------------------------------------
- * get attributes
- *-------------------------------------------------------------------------
- */
+ * get attributes
+ *-------------------------------------------------------------------------
+ */
/* get the table title */
- if ((H5TBAget_title( did_1, table_title )) < 0)
+ if((H5TBAget_title(did_1, table_title)) < 0)
goto out;
/* alloc fill value attribute buffer */
- tmp_fill_buf = (unsigned char *)malloc(total_size );
+ if(NULL == (tmp_fill_buf = (unsigned char *)HDmalloc(total_size)))
+ goto out;
/* get the fill value attributes */
- if ((H5TBAget_fill( loc_id, dset_name, did_1, tmp_fill_buf )) < 0)
+ if((H5TBAget_fill(loc_id, dset_name, did_1, tmp_fill_buf)) < 0)
goto out;
/*-------------------------------------------------------------------------
- * create a new data type
- *-------------------------------------------------------------------------
- */
+ * create a new data type
+ *-------------------------------------------------------------------------
+ */
/* get the new member size */
- member_size = H5Tget_size( field_type );
+ if(0 == (member_size = H5Tget_size(field_type)))
+ goto out;
/* create the data type. */
- if (( tid_2 = H5Tcreate (H5T_COMPOUND,(size_t)(total_size + member_size) )) < 0)
+ if((tid_2 = H5Tcreate(H5T_COMPOUND, (size_t)(total_size + member_size))) < 0)
goto out;
curr_offset = 0;
- inserted = 0;
+ inserted = FALSE;
/* insert the old fields, counting with the new one */
- for ( i = 0; i < nfields + 1; i++)
- {
+ for(i = 0; i < nfields + 1; i++) {
+ hsize_t idx;
+
idx = i;
- if (inserted )
+ if(inserted)
idx = i - 1;
- if (i == position )
- {
+ if(i == position) {
/* get the new member size */
- new_member_size = H5Tget_size( field_type );
+ if(0 == (new_member_size = H5Tget_size(field_type)))
+ goto out;
/* insert the new field type */
- if (H5Tinsert( tid_2, field_name, curr_offset, field_type ) < 0)
+ if(H5Tinsert(tid_2, field_name, curr_offset, field_type) < 0)
goto out;
curr_offset += new_member_size;
- inserted = 1;
-
- continue;
- }
-
- /* get the member name */
- member_name = H5Tget_member_name( tid_1, (unsigned)idx );
-
- /* get the member type */
- if (( member_type_id = H5Tget_member_type( tid_1,(unsigned)idx )) < 0)
- goto out;
+ inserted = TRUE;
+ } /* end if */
+ else {
+ /* get the member name */
+ if(NULL == (member_name = H5Tget_member_name(tid_1, (unsigned)idx)))
+ goto out;
- /* get the member size */
- member_size = H5Tget_size( member_type_id );
+ /* get the member type */
+ if((member_type_id = H5Tget_member_type(tid_1, (unsigned)idx)) < 0)
+ goto out;
- /* insert it into the new type */
- if (H5Tinsert( tid_2, member_name, curr_offset, member_type_id ) < 0)
- goto out;
+ /* get the member size */
+ if(0 == (member_size = H5Tget_size(member_type_id)))
+ goto out;
- curr_offset += member_size;
+ /* insert it into the new type */
+ if(H5Tinsert(tid_2, member_name, curr_offset, member_type_id) < 0)
+ goto out;
- H5free_memory( member_name );
+ curr_offset += member_size;
- /* close the member type */
- if(H5Tclose( member_type_id ) < 0)
- goto out;
+ H5free_memory(member_name);
+ member_name = NULL;
- } /* i */
+ /* close the member type */
+ if(H5Tclose(member_type_id) < 0)
+ goto out;
+ member_type_id = H5I_BADID;
+ } /* end else */
+ } /* end for */
/*-------------------------------------------------------------------------
- * create a new temporary dataset
- *-------------------------------------------------------------------------
- */
+ * create a new temporary dataset
+ *-------------------------------------------------------------------------
+ */
/* retrieve the size of chunk */
- if (H5Pget_chunk(pid_1, 1, dims_chunk) < 0)
+ if(H5Pget_chunk(pid_1, 1, dims_chunk) < 0)
goto out;
/* create a new simple data space with unlimited size, using the dimension */
- if ((sid_2 = H5Screate_simple( 1, dims, maxdims)) < 0)
- return -1;
+ if((sid_2 = H5Screate_simple(1, dims, maxdims)) < 0)
+ goto out;
/* modify dataset creation properties, i.e. enable chunking */
- pid_2 = H5Pcreate(H5P_DATASET_CREATE);
- if (H5Pset_chunk(pid_2, 1, dims_chunk) < 0)
- return -1;
+ if((pid_2 = H5Pcreate(H5P_DATASET_CREATE)) < 0)
+ goto out;
+ if(H5Pset_chunk(pid_2, 1, dims_chunk) < 0)
+ goto out;
/* create the dataset. */
- if ((did_2 = H5Dcreate2(loc_id, "new", tid_2, sid_2, H5P_DEFAULT, pid_2, H5P_DEFAULT)) < 0)
+ if((did_2 = H5Dcreate2(loc_id, "new", tid_2, sid_2, H5P_DEFAULT, pid_2, H5P_DEFAULT)) < 0)
goto out;
/*-------------------------------------------------------------------------
- * read data from 1st table
- *-------------------------------------------------------------------------
- */
+ * read data from 1st table
+ *-------------------------------------------------------------------------
+ */
- tmp_buf = (unsigned char *)calloc((size_t)nrecords, (size_t)total_size);
+ if(NULL == (tmp_buf = (unsigned char *)HDcalloc((size_t)nrecords, (size_t)total_size)))
+ goto out;
/* define a hyperslab in the dataset of the size of the records */
offset[0] = 0;
count[0] = nrecords;
- if (H5Sselect_hyperslab(sid_1, H5S_SELECT_SET, offset, NULL, count, NULL) < 0)
+ if(H5Sselect_hyperslab(sid_1, H5S_SELECT_SET, offset, NULL, count, NULL) < 0)
goto out;
/* create a memory dataspace handle */
mem_size[0] = count[0];
- if ((msid_1 = H5Screate_simple(1, mem_size, NULL)) < 0)
+ if((msid_1 = H5Screate_simple(1, mem_size, NULL)) < 0)
goto out;
- if (H5Dread(did_1, tid_1, msid_1, H5S_ALL, H5P_DEFAULT, tmp_buf) < 0)
+ if(H5Dread(did_1, tid_1, msid_1, H5S_ALL, H5P_DEFAULT, tmp_buf) < 0)
goto out;
/*-------------------------------------------------------------------------
- * save data from 1st table into new table, using the 1st type id
- *-------------------------------------------------------------------------
- */
+ * save data from 1st table into new table, using the 1st type id
+ *-------------------------------------------------------------------------
+ */
/* write */
- if (H5Dwrite( did_2, tid_1, msid_1, H5S_ALL, H5P_DEFAULT, tmp_buf ) < 0)
+ if(H5Dwrite(did_2, tid_1, msid_1, H5S_ALL, H5P_DEFAULT, tmp_buf) < 0)
goto out;
/*-------------------------------------------------------------------------
- * save the function supplied data of the new field
- *-------------------------------------------------------------------------
- */
+ * save the function supplied data of the new field
+ *-------------------------------------------------------------------------
+ */
/* create a write id */
- if (( write_type_id = H5Tcreate( H5T_COMPOUND, (size_t)new_member_size )) < 0)
+ if((write_type_id = H5Tcreate(H5T_COMPOUND, (size_t)new_member_size)) < 0)
goto out;
/* the field in the file is found by its name */
- if (H5Tinsert( write_type_id, field_name, (size_t)0, field_type ) < 0)
+ if(H5Tinsert(write_type_id, field_name, (size_t)0, field_type) < 0)
goto out;
/* create xfer properties to preserve initialized data */
- if ((preserve_id = H5Pcreate (H5P_DATASET_XFER)) < 0)
+ if((preserve_id = H5Pcreate(H5P_DATASET_XFER)) < 0)
goto out;
- if (H5Pset_preserve (preserve_id, 1) < 0)
+ if(H5Pset_preserve(preserve_id, 1) < 0)
goto out;
/* only write if there is something to write */
- if ( buf )
- {
+ if(buf) {
/* create a memory dataspace handle */
- if ((msid_2 = H5Screate_simple( 1, mem_size, NULL )) < 0)
+ if((msid_2 = H5Screate_simple(1, mem_size, NULL)) < 0)
goto out;
/* write */
- if (H5Dwrite( did_2, write_type_id, msid_2, sid_2, preserve_id, buf ) < 0)
- goto out;
-
- /* terminate access to the memory dataspace */
- if (H5Sclose( msid_2 ) < 0)
+ if(H5Dwrite(did_2, write_type_id, msid_2, sid_2, preserve_id, buf) < 0)
goto out;
- }
+ } /* end if */
- /* end access to the property list */
- if (H5Pclose( preserve_id ) < 0)
+ /*-------------------------------------------------------------------------
+ * delete 1st table
+ *-------------------------------------------------------------------------
+ */
+ if(H5Ldelete(loc_id, dset_name, H5P_DEFAULT) < 0)
goto out;
/*-------------------------------------------------------------------------
- * release resources from 1st table
- *-------------------------------------------------------------------------
- */
-
- if (H5Sclose( msid_1 ) < 0)
- goto out;
- if (H5Tclose( tid_1 ) < 0)
+ * rename 2nd table
+ *-------------------------------------------------------------------------
+ */
+ if(H5Lmove(loc_id, "new", H5L_SAME_LOC, dset_name, H5P_DEFAULT, H5P_DEFAULT) < 0)
goto out;
- if (H5Pclose( pid_1 ) < 0)
- goto out;
- if (H5Sclose( sid_1 ) < 0)
- goto out;
- if (H5Dclose( did_1 ) < 0)
- goto out;
-
/*-------------------------------------------------------------------------
- * release resources from 2nd table
- *-------------------------------------------------------------------------
- */
+ * attach the conforming table attributes
+ *-------------------------------------------------------------------------
+ */
- if (H5Sclose( sid_2 ) < 0)
+ /* get the number of records and fields */
+ if(H5TBget_table_info(loc_id, dset_name, &nfields, &nrecords) < 0)
goto out;
- if (H5Tclose( tid_2 ) < 0)
+
+ /* open the dataset. */
+ if((did_3 = H5Dopen2(loc_id, dset_name, H5P_DEFAULT)) < 0)
goto out;
- if (H5Pclose( pid_2 ) < 0)
+
+ /* get the datatype */
+ if((tid_3 = H5Dget_type(did_3)) < 0)
goto out;
- if (H5Dclose( did_2 ) < 0)
+
+ /* set the attributes */
+ if(H5TB_attach_attributes(table_title, loc_id, dset_name, (hsize_t)nfields, tid_3) < 0)
goto out;
/*-------------------------------------------------------------------------
- * delete 1st table
- *-------------------------------------------------------------------------
- */
- if (H5Ldelete( loc_id, dset_name, H5P_DEFAULT ) < 0)
- return -1;
-
- /*-------------------------------------------------------------------------
- * rename 2nd table
- *-------------------------------------------------------------------------
- */
-
- if (H5Lmove( loc_id, "new", H5L_SAME_LOC, dset_name, H5P_DEFAULT, H5P_DEFAULT ) < 0)
- return -1;
-
- /*-------------------------------------------------------------------------
- * attach the conforming table attributes
- *-------------------------------------------------------------------------
- */
-
- /* get the number of records and fields */
- if (H5TBget_table_info ( loc_id, dset_name, &nfields, &nrecords ) < 0)
- return -1;
-
- /* open the dataset. */
- if ((did_1 = H5Dopen2(loc_id, dset_name, H5P_DEFAULT)) < 0)
- return -1;
-
- /* get the datatype */
- if ((tid_1 = H5Dget_type( did_1 )) < 0)
+ * attach the fill attributes from previous table
+ *-------------------------------------------------------------------------
+ */
+ if((sid_3 = H5Screate(H5S_SCALAR)) < 0)
goto out;
- /* set the attributes */
- if (H5TB_attach_attributes( table_title, loc_id, dset_name,(hsize_t) nfields, tid_1 ) < 0)
- return -1;
-
- /*-------------------------------------------------------------------------
- * attach the fill attributes from previous table
- *-------------------------------------------------------------------------
- */
-
- if (( sid_1 = H5Screate(H5S_SCALAR)) < 0)
- goto out;
+ for(i = 0; i < (nfields - 1); i++) {
+ size_t member_offset;
- for ( i = 0; i < nfields-1; i++)
- {
/* get the member type */
- if(( member_type_id = H5Tget_member_type( tid_1, (unsigned) i )) < 0)
+ if((member_type_id = H5Tget_member_type(tid_3, (unsigned)i)) < 0)
goto out;
/* get the member offset */
- member_offset = H5Tget_member_offset(tid_1, (unsigned)i);
+ member_offset = H5Tget_member_offset(tid_3, (unsigned)i);
- strcpy(attr_name, "FIELD_");
- sprintf(aux, "%d", (int)i);
- strcat(attr_name, aux);
- sprintf(aux, "%s", "_FILL");
- strcat(attr_name, aux);
+ HDsnprintf(attr_name, sizeof(attr_name), "FIELD_%d_FILL", (int)i);
- if ((attr_id = H5Acreate2(did_1, attr_name, member_type_id, sid_1, H5P_DEFAULT, H5P_DEFAULT)) < 0)
+ if((attr_id = H5Acreate2(did_3, attr_name, member_type_id, sid_3, H5P_DEFAULT, H5P_DEFAULT)) < 0)
goto out;
- if (H5Awrite(attr_id, member_type_id, tmp_fill_buf+member_offset) < 0)
+ if(H5Awrite(attr_id, member_type_id, tmp_fill_buf + member_offset) < 0)
goto out;
- if (H5Aclose(attr_id) < 0)
+ if(H5Aclose(attr_id) < 0)
goto out;
+ attr_id = H5I_BADID;
/* close the member type */
- if (H5Tclose(member_type_id) < 0)
+ if(H5Tclose(member_type_id) < 0)
goto out;
- }
+ member_type_id = H5I_BADID;
+ } /* end for */
/*-------------------------------------------------------------------------
- * attach the fill attribute from the new field, if present
- *-------------------------------------------------------------------------
- */
- if (fill_data)
- {
-
- strcpy(attr_name, "FIELD_");
- sprintf(aux, "%d",(int)(nfields - 1));
- strcat(attr_name, aux);
- sprintf(aux, "%s", "_FILL");
- strcat(attr_name, aux);
+ * attach the fill attribute from the new field, if present
+ *-------------------------------------------------------------------------
+ */
+ if(fill_data) {
+ HDsnprintf(attr_name, sizeof(attr_name), "FIELD_%d_FILL", (int)(nfields - 1));
/* get the member type */
- if ((member_type_id = H5Tget_member_type(tid_1, (unsigned)nfields - 1)) < 0)
+ if((member_type_id = H5Tget_member_type(tid_3, (unsigned)nfields - 1)) < 0)
goto out;
- if ((attr_id = H5Acreate2(did_1, attr_name, member_type_id, sid_1, H5P_DEFAULT, H5P_DEFAULT)) < 0)
+ if((attr_id = H5Acreate2(did_3, attr_name, member_type_id, sid_3, H5P_DEFAULT, H5P_DEFAULT)) < 0)
goto out;
- if (H5Awrite(attr_id, member_type_id, fill_data) < 0)
+ if(H5Awrite(attr_id, member_type_id, fill_data) < 0)
goto out;
- if (H5Aclose(attr_id) < 0)
+ if(H5Aclose(attr_id) < 0)
goto out;
+ attr_id = H5I_BADID;
- if (H5Tclose(member_type_id) < 0)
+ if(H5Tclose(member_type_id) < 0)
goto out;
+ member_type_id = H5I_BADID;
+ } /* end fill_data */
- }
-
- /* close */
- if (H5Sclose( sid_1 ) < 0)
- goto out;
- if (H5Tclose( tid_1 ) < 0)
- goto out;
- if (H5Dclose( did_1 ) < 0)
- goto out;
-
- /* release resources. */
- free ( tmp_buf );
- free ( tmp_fill_buf );
-
- return 0;
+ ret_val = 0;
- /* error zone */
out:
- H5E_BEGIN_TRY
- {
- H5Dclose(did_1);
- H5Sclose(sid_1);
- H5Tclose(tid_1);
- H5Pclose(pid_1);
- H5Dclose(did_2);
- H5Sclose(sid_2);
- H5Tclose(tid_2);
- H5Pclose(pid_2);
-
- } H5E_END_TRY;
- return -1;
+ if(member_name)
+ H5free_memory(member_name);
+ if(tmp_buf)
+ HDfree(tmp_buf);
+ if(tmp_fill_buf)
+ HDfree(tmp_fill_buf);
+ if(preserve_id > 0)
+ if(H5Pclose(preserve_id) < 0)
+ ret_val = -1;
+ if(msid_1 > 0)
+ if(H5Sclose(msid_1) < 0)
+ ret_val = -1;
+ if(tid_1 > 0)
+ if(H5Tclose(tid_1) < 0)
+ ret_val = -1;
+ if(pid_1 > 0)
+ if(H5Pclose(pid_1) < 0)
+ ret_val = -1;
+ if(sid_1 > 0)
+ if(H5Sclose(sid_1) < 0)
+ ret_val = -1;
+ if(did_1 > 0)
+ if(H5Dclose(did_1) < 0)
+ ret_val = -1;
+ if(msid_2 > 0)
+ if(H5Sclose(msid_2) < 0)
+ ret_val = -1;
+ if(sid_2 > 0)
+ if(H5Sclose(sid_2) < 0)
+ ret_val = -1;
+ if(tid_2 > 0)
+ if(H5Tclose(tid_2) < 0)
+ ret_val = -1;
+ if(pid_2 > 0)
+ if(H5Pclose(pid_2) < 0)
+ ret_val = -1;
+ if(did_2 > 0)
+ if(H5Dclose(did_2) < 0)
+ ret_val = -1;
+ if(sid_3 > 0)
+ if(H5Sclose(sid_3) < 0)
+ ret_val = -1;
+ if(tid_3 > 0)
+ if(H5Tclose(tid_3) < 0)
+ ret_val = -1;
+ if(did_3 > 0)
+ if(H5Dclose(did_3) < 0)
+ ret_val = -1;
+
+ return ret_val;
+} /* end H5TBinsert_field() */
-}
/*-------------------------------------------------------------------------
* Function: H5TBdelete_field
*
@@ -2592,54 +2488,60 @@ out:
*
* Comments:
*
-* Modifications:
-*
-*
*-------------------------------------------------------------------------
*/
-
-herr_t H5TBdelete_field( hid_t loc_id,
+herr_t H5TBdelete_field(hid_t loc_id,
const char *dset_name,
- const char *field_name )
+ const char *field_name)
{
/* identifiers for the 1st original dataset */
- hid_t did_1;
- hid_t tid_1;
- hid_t sid_1;
- hid_t pid_1;
+ hid_t did_1 = H5I_BADID;
+ hid_t tid_1 = H5I_BADID;
+ hid_t sid_1 = H5I_BADID;
+ hid_t pid_1 = H5I_BADID;
/* identifiers for the 2nd new dataset */
- hid_t did_2;
- hid_t tid_2;
- hid_t sid_2;
- hid_t pid_2;
- hid_t member_type_id;
+ hid_t did_2 = H5I_BADID;
+ hid_t tid_2 = H5I_BADID;
+ hid_t sid_2 = H5I_BADID;
+ hid_t pid_2 = H5I_BADID;
+ /* identifiers for the 3rd final dataset */
+ hid_t did_3 = H5I_BADID;
+ hid_t tid_3 = H5I_BADID;
+ hid_t member_type_id = H5I_BADID;
+ hid_t preserve_id = H5I_BADID;
+ hid_t read_type_id = H5I_BADID;
+ hid_t write_type_id = H5I_BADID;
+ hid_t attr_id = H5I_BADID;
size_t member_size;
- char *member_name;
size_t type_size1;
size_t type_size2;
+ size_t curr_offset;
+ size_t delete_member_size = 0;
+ size_t member_offset;
hsize_t nfields;
hsize_t nrecords;
hsize_t dims_chunk[1];
hsize_t dims[1];
hsize_t maxdims[1] = { H5S_UNLIMITED };
- hid_t preserve_id;
- size_t curr_offset;
- size_t delete_member_size = 0;
- hid_t read_type_id;
- hid_t write_type_id;
- unsigned char *tmp_buf;
- unsigned char *tmp_fill_buf;
+ hsize_t i;
char attr_name[255];
- char aux[255];
char table_title[255];
- size_t member_offset;
- hid_t attr_id;
- hsize_t i;
- htri_t has_fill = 0;
+ char *member_name = NULL;
+ unsigned char *tmp_buf = NULL;
+ unsigned char *tmp_fill_buf = NULL;
+ htri_t has_fill = FALSE;
+ herr_t ret_val = -1;
+
+
+ /* check the arguments */
+ if (dset_name == NULL)
+ goto out;
+ if (field_name == NULL)
+ goto out;
/* get the number of records and fields */
- if (H5TBget_table_info ( loc_id, dset_name, &nfields, &nrecords ) < 0)
- return -1;
+ if(H5TBget_table_info(loc_id, dset_name, &nfields, &nrecords) < 0)
+ goto out;
/*-------------------------------------------------------------------------
* get information about the old data type
@@ -2647,26 +2549,27 @@ herr_t H5TBdelete_field( hid_t loc_id,
*/
/* open the dataset. */
- if ((did_1 = H5Dopen2(loc_id, dset_name, H5P_DEFAULT)) < 0)
- return -1;
+ if((did_1 = H5Dopen2(loc_id, dset_name, H5P_DEFAULT)) < 0)
+ goto out;
/* get creation properties list */
- if ((pid_1 = H5Dget_create_plist( did_1 )) < 0)
+ if((pid_1 = H5Dget_create_plist(did_1)) < 0)
goto out;
/* get the datatype */
- if ((tid_1 = H5Dget_type( did_1 )) < 0)
+ if((tid_1 = H5Dget_type(did_1)) < 0)
goto out;
/* get the size of the datatype */
- type_size1 = H5Tget_size( tid_1 );
+ if(0 == (type_size1 = H5Tget_size(tid_1)))
+ goto out;
/* get the dataspace handle */
- if ((sid_1 = H5Dget_space( did_1 )) < 0)
+ if((sid_1 = H5Dget_space(did_1)) < 0)
goto out;
/* get dimension */
- if (H5Sget_simple_extent_dims( sid_1, dims, NULL) < 0)
+ if(H5Sget_simple_extent_dims(sid_1, dims, NULL) < 0)
goto out;
/*-------------------------------------------------------------------------
@@ -2675,37 +2578,38 @@ herr_t H5TBdelete_field( hid_t loc_id,
*/
/* check out the field */
- for ( i = 0; i < nfields; i++)
- {
+ for(i = 0; i < nfields; i++) {
/* get the member name */
- member_name = H5Tget_member_name( tid_1,(unsigned) i );
+ if(NULL == (member_name = H5Tget_member_name(tid_1, (unsigned)i)))
+ goto out;
/* we want to find the field to delete */
- if (H5TB_find_field( member_name, field_name ) > 0 )
- {
+ if(H5TB_find_field(member_name, field_name)) {
/* get the member type */
- if (( member_type_id = H5Tget_member_type( tid_1,(unsigned) i )) < 0)
+ if((member_type_id = H5Tget_member_type(tid_1, (unsigned)i)) < 0)
goto out;
/* get the member size */
- delete_member_size = H5Tget_size( member_type_id );
+ if(0 == (delete_member_size = H5Tget_size(member_type_id)))
+ goto out;
/* close the member type */
- if (H5Tclose( member_type_id ) < 0)
+ if(H5Tclose(member_type_id) < 0)
goto out;
+ member_type_id = H5I_BADID;
- H5free_memory( member_name );
+ H5free_memory(member_name);
+ member_name = NULL;
break;
+ } /* end if */
- }
-
- H5free_memory( member_name );
-
- } /* i */
+ H5free_memory(member_name);
+ member_name = NULL;
+ } /* end for */
/* no field to delete was found */
- if (delete_member_size == 0 )
+ if(delete_member_size == 0)
goto out;
/*-------------------------------------------------------------------------
@@ -2716,13 +2620,14 @@ herr_t H5TBdelete_field( hid_t loc_id,
type_size2 = type_size1 - delete_member_size;
/* create the data type. */
- if (( tid_2 = H5Tcreate (H5T_COMPOUND, type_size2 )) < 0)
+ if((tid_2 = H5Tcreate (H5T_COMPOUND, type_size2)) < 0)
goto out;
curr_offset = 0;
/* alloc fill value attribute buffer */
- tmp_fill_buf = (unsigned char *)malloc((size_t) type_size2 );
+ if(NULL == (tmp_fill_buf = (unsigned char *)HDmalloc((size_t)type_size2)))
+ goto out;
/*-------------------------------------------------------------------------
* get attributes from previous table in the process
@@ -2730,62 +2635,56 @@ herr_t H5TBdelete_field( hid_t loc_id,
*/
/* get the table title */
- if ((H5TBAget_title( did_1, table_title )) < 0)
+ if((H5TBAget_title(did_1, table_title)) < 0)
goto out;
/* insert the old fields except the one to delete */
- for ( i = 0; i < nfields; i++)
- {
+ for(i = 0; i < nfields; i++) {
/* get the member name */
- member_name = H5Tget_member_name( tid_1, (unsigned) i );
+ if(NULL == (member_name = H5Tget_member_name(tid_1, (unsigned)i)))
+ goto out;
/* we want to skip the field to delete */
- if (H5TB_find_field( member_name, field_name ) > 0 )
- {
- H5free_memory( member_name );
- continue;
- }
+ if(!H5TB_find_field(member_name, field_name)) {
+ /* get the member type */
+ if((member_type_id = H5Tget_member_type(tid_1, (unsigned)i)) < 0)
+ goto out;
- /* get the member type */
- if (( member_type_id = H5Tget_member_type( tid_1, (unsigned)i )) < 0)
- goto out;
+ /* get the member size */
+ if(0 == (member_size = H5Tget_size(member_type_id)))
+ goto out;
- /* get the member size */
- member_size = H5Tget_size( member_type_id );
+ /* insert it into the new type */
+ if(H5Tinsert(tid_2, member_name, curr_offset, member_type_id) < 0)
+ goto out;
- /* insert it into the new type */
- if (H5Tinsert( tid_2, member_name, curr_offset, member_type_id ) < 0)
- goto out;
+ /*-------------------------------------------------------------------------
+ * get the fill value information
+ *-------------------------------------------------------------------------
+ */
- /*-------------------------------------------------------------------------
- * get the fill value information
- *-------------------------------------------------------------------------
- */
+ HDsnprintf(attr_name, sizeof(attr_name), "FIELD_%d_FILL", (int)i);
- strcpy( attr_name, "FIELD_" );
- sprintf( aux, "%d", (int)i );
- strcat( attr_name, aux );
- sprintf( aux, "%s", "_FILL" );
- strcat( attr_name, aux );
+ /* check if we have the _FILL attribute */
+ if((has_fill = H5LT_find_attribute(did_1, attr_name)) < 0)
+ goto out;
- /* check if we have the _FILL attribute */
- has_fill = H5LT_find_attribute( did_1, attr_name );
+ /* get it */
+ if(has_fill)
+ if(H5LT_get_attribute_disk(did_1, attr_name, tmp_fill_buf + curr_offset) < 0)
+ goto out;
- /* get it */
- if (has_fill == 1 )
- {
- if(H5LT_get_attribute_disk( did_1, attr_name, tmp_fill_buf+curr_offset ) < 0)
- goto out;
- }
+ curr_offset += member_size;
- curr_offset += member_size;
+ /* close the member type */
+ if(H5Tclose(member_type_id) < 0)
+ goto out;
+ member_type_id = H5I_BADID;
+ } /* end if */
H5free_memory(member_name);
-
- /* close the member type */
- if (H5Tclose(member_type_id) < 0)
- goto out;
- } /* i */
+ member_name = NULL;
+ } /* end for */
/*-------------------------------------------------------------------------
* create a new temporary dataset
@@ -2793,143 +2692,116 @@ herr_t H5TBdelete_field( hid_t loc_id,
*/
/* retrieve the size of chunk */
- if (H5Pget_chunk(pid_1, 1, dims_chunk) < 0)
+ if(H5Pget_chunk(pid_1, 1, dims_chunk) < 0)
goto out;
/* create a new simple data space with unlimited size, using the dimension */
- if ((sid_2 = H5Screate_simple(1, dims, maxdims)) < 0)
- return -1;
+ if((sid_2 = H5Screate_simple(1, dims, maxdims)) < 0)
+ goto out;
/* modify dataset creation properties, i.e. enable chunking */
pid_2 = H5Pcreate(H5P_DATASET_CREATE);
- if (H5Pset_chunk(pid_2, 1, dims_chunk) < 0)
- return -1;
+ if(H5Pset_chunk(pid_2, 1, dims_chunk) < 0)
+ goto out;
/* create the dataset. */
- if ((did_2 = H5Dcreate2(loc_id, "new", tid_2, sid_2, H5P_DEFAULT, pid_2, H5P_DEFAULT)) < 0)
+ if((did_2 = H5Dcreate2(loc_id, "new", tid_2, sid_2, H5P_DEFAULT, pid_2, H5P_DEFAULT)) < 0)
goto out;
/*-------------------------------------------------------------------------
* we have to read field by field of the old dataset and save it into the new one
*-------------------------------------------------------------------------
*/
- for ( i = 0; i < nfields; i++)
- {
+ for(i = 0; i < nfields; i++) {
/* get the member name */
- member_name = H5Tget_member_name(tid_1, (unsigned)i);
+ if(NULL == (member_name = H5Tget_member_name(tid_1, (unsigned)i)))
+ goto out;
/* skip the field to delete */
- if (H5TB_find_field(member_name, field_name) > 0)
- {
- H5free_memory(member_name);
- continue;
- }
+ if(!H5TB_find_field(member_name, field_name) > 0) {
+ /* get the member type */
+ if((member_type_id = H5Tget_member_type(tid_1, (unsigned)i)) < 0)
+ goto out;
- /* get the member type */
- if ((member_type_id = H5Tget_member_type(tid_1, (unsigned)i)) < 0)
- goto out;
+ /* get the member size */
+ if(0 == (member_size = H5Tget_size(member_type_id)))
+ goto out;
- /* get the member size */
- member_size = H5Tget_size(member_type_id);
+ /* create a read id */
+ if((read_type_id = H5Tcreate(H5T_COMPOUND, member_size)) < 0)
+ goto out;
- /* create a read id */
- if ((read_type_id = H5Tcreate(H5T_COMPOUND, member_size)) < 0)
- goto out;
+ /* insert it into the new type */
+ if(H5Tinsert(read_type_id, member_name, (size_t)0, member_type_id) < 0)
+ goto out;
- /* insert it into the new type */
- if (H5Tinsert( read_type_id, member_name, (size_t)0, member_type_id ) < 0)
- goto out;
+ if(NULL == (tmp_buf = (unsigned char *)HDcalloc((size_t)nrecords, member_size)))
+ goto out;
- tmp_buf = (unsigned char *)calloc((size_t) nrecords, member_size );
+ /* read */
+ if(H5Dread(did_1, read_type_id, H5S_ALL, H5S_ALL, H5P_DEFAULT, tmp_buf) < 0)
+ goto out;
- /* read */
- if (H5Dread( did_1, read_type_id, H5S_ALL, H5S_ALL, H5P_DEFAULT, tmp_buf ) < 0)
- goto out;
+ /* create a write id */
+ if((write_type_id = H5Tcreate(H5T_COMPOUND, member_size)) < 0)
+ goto out;
- /* create a write id */
- if (( write_type_id = H5Tcreate( H5T_COMPOUND, member_size )) < 0)
- goto out;
+ /* the field in the file is found by its name */
+ if(H5Tinsert(write_type_id, member_name, (size_t)0, member_type_id) < 0)
+ goto out;
- /* the field in the file is found by its name */
- if (H5Tinsert( write_type_id, member_name, (size_t)0, member_type_id ) < 0)
- goto out;
+ /* create xfer properties to preserve initialized data */
+ if((preserve_id = H5Pcreate(H5P_DATASET_XFER)) < 0)
+ goto out;
+ if(H5Pset_preserve(preserve_id, 1) < 0)
+ goto out;
- /* create xfer properties to preserve initialized data */
- if ((preserve_id = H5Pcreate (H5P_DATASET_XFER)) < 0)
- goto out;
- if (H5Pset_preserve (preserve_id, 1) < 0)
- goto out;
+ /* write */
+ if(H5Dwrite(did_2, write_type_id, H5S_ALL, H5S_ALL, preserve_id, tmp_buf) < 0)
+ goto out;
- /* write */
- if(H5Dwrite( did_2, write_type_id, H5S_ALL, H5S_ALL, preserve_id, tmp_buf ) < 0)
- goto out;
+ /* end access to the property list */
+ if(H5Pclose(preserve_id) < 0)
+ goto out;
+ preserve_id = H5I_BADID;
- /* end access to the property list */
- if (H5Pclose( preserve_id ) < 0)
- goto out;
+ /* close the member type */
+ if(H5Tclose(member_type_id) < 0)
+ goto out;
+ member_type_id = H5I_BADID;
- /* close the member type */
- if (H5Tclose( member_type_id ) < 0)
- goto out;
+ /* close the read type */
+ if(H5Tclose(read_type_id) < 0)
+ goto out;
+ read_type_id = H5I_BADID;
- /* close the read type */
- if (H5Tclose( read_type_id ) < 0)
- goto out;
+ /* close the write type */
+ if(H5Tclose(write_type_id) < 0)
+ goto out;
+ write_type_id = H5I_BADID;
- /* close the write type */
- if (H5Tclose( write_type_id ) < 0)
- goto out;
+ HDfree(tmp_buf);
+ tmp_buf = NULL;
+ } /* end if */
/* release resources. */
- H5free_memory( member_name );
- HDfree ( tmp_buf );
-
- } /* i */
-
- /*-------------------------------------------------------------------------
- * release resources from 1st table
- *-------------------------------------------------------------------------
- */
-
- if (H5Tclose( tid_1 ) < 0)
- goto out;
- if (H5Pclose( pid_1 ) < 0)
- goto out;
- if (H5Sclose( sid_1 ) < 0)
- goto out;
- if (H5Dclose( did_1 ) < 0)
- goto out;
-
-
- /*-------------------------------------------------------------------------
- * release resources from 2nd table
- *-------------------------------------------------------------------------
- */
-
- if (H5Sclose( sid_2 ) < 0)
- goto out;
- if (H5Tclose( tid_2 ) < 0)
- goto out;
- if (H5Pclose( pid_2 ) < 0)
- goto out;
- if (H5Dclose( did_2 ) < 0)
- goto out;
+ H5free_memory(member_name);
+ member_name = NULL;
+ } /* end for */
/*-------------------------------------------------------------------------
* delete 1st table
*-------------------------------------------------------------------------
*/
-
- if (H5Ldelete( loc_id, dset_name, H5P_DEFAULT ) < 0)
- return -1;
+ if(H5Ldelete(loc_id, dset_name, H5P_DEFAULT) < 0)
+ goto out;
/*-------------------------------------------------------------------------
* rename 2nd table
*-------------------------------------------------------------------------
*/
-
- if (H5Lmove( loc_id, "new", H5L_SAME_LOC, dset_name, H5P_DEFAULT, H5P_DEFAULT ) < 0)
- return -1;
+ if(H5Lmove(loc_id, "new", H5L_SAME_LOC, dset_name, H5P_DEFAULT, H5P_DEFAULT) < 0)
+ goto out;
/*-------------------------------------------------------------------------
* attach the conforming table attributes
@@ -2937,97 +2809,119 @@ herr_t H5TBdelete_field( hid_t loc_id,
*/
/* get the number of records and fields */
- if (H5TBget_table_info ( loc_id, dset_name, &nfields, &nrecords ) < 0)
- return -1;
+ if(H5TBget_table_info(loc_id, dset_name, &nfields, &nrecords) < 0)
+ goto out;
/* open the dataset. */
- if ((did_1 = H5Dopen2(loc_id, dset_name, H5P_DEFAULT)) < 0)
- return -1;
+ if((did_3 = H5Dopen2(loc_id, dset_name, H5P_DEFAULT)) < 0)
+ goto out;
/* get the datatype */
- if ((tid_1 = H5Dget_type( did_1 )) < 0)
+ if((tid_3 = H5Dget_type(did_3)) < 0)
goto out;
/* set the attributes */
- if (H5TB_attach_attributes( table_title, loc_id, dset_name, nfields, tid_1 ) < 0)
- return -1;
+ if(H5TB_attach_attributes(table_title, loc_id, dset_name, nfields, tid_3) < 0)
+ goto out;
/*-------------------------------------------------------------------------
* attach the fill attributes from previous table
*-------------------------------------------------------------------------
*/
-
- if (has_fill == 1)
- {
+ if(has_fill) {
if((sid_1 = H5Screate(H5S_SCALAR)) < 0)
goto out;
- for(i = 0; i < nfields; i++)
- {
-
+ for(i = 0; i < nfields; i++) {
/* get the member type */
- if (( member_type_id = H5Tget_member_type( tid_1, (unsigned)i )) < 0)
+ if((member_type_id = H5Tget_member_type(tid_3, (unsigned)i)) < 0)
goto out;
/* get the member offset */
- member_offset = H5Tget_member_offset(tid_1, (unsigned)i);
+ member_offset = H5Tget_member_offset(tid_3, (unsigned)i);
- strcpy(attr_name, "FIELD_");
- sprintf(aux, "%d", (int)i);
- strcat(attr_name, aux);
- sprintf(aux, "%s", "_FILL");
- strcat(attr_name, aux);
+ HDsnprintf(attr_name, sizeof(attr_name), "FIELD_%d_FILL", (int)i);
- if ((attr_id = H5Acreate2(did_1, attr_name, member_type_id, sid_1, H5P_DEFAULT, H5P_DEFAULT)) < 0)
+ if((attr_id = H5Acreate2(did_3, attr_name, member_type_id, sid_1, H5P_DEFAULT, H5P_DEFAULT)) < 0)
goto out;
- if (H5Awrite(attr_id, member_type_id, tmp_fill_buf+member_offset) < 0)
+ if(H5Awrite(attr_id, member_type_id, tmp_fill_buf + member_offset) < 0)
goto out;
- if (H5Aclose(attr_id) < 0)
+ if(H5Aclose(attr_id) < 0)
goto out;
+ attr_id = H5I_BADID;
/* close the member type */
- if (H5Tclose(member_type_id) < 0)
+ if(H5Tclose(member_type_id) < 0)
goto out;
- }
+ member_type_id = H5I_BADID;
+ } /* end for */
/* close data space. */
- if (H5Sclose(sid_1) < 0)
+ if(H5Sclose(sid_1) < 0)
goto out;
+ sid_1 = H5I_BADID;
+ } /* end if */
- } /*has_fill*/
-
- /* release the datatype. */
- if (H5Tclose( tid_1 ) < 0)
- goto out;
-
- /* end access to the dataset */
- if (H5Dclose( did_1 ) < 0)
- goto out;
-
- /* Release resources. */
- free ( tmp_fill_buf );
-
- return 0;
+ ret_val = 0;
- /* error zone */
out:
- H5E_BEGIN_TRY
- {
- H5Dclose(did_1);
- H5Sclose(sid_1);
- H5Tclose(tid_1);
- H5Pclose(pid_1);
- H5Dclose(did_2);
- H5Sclose(sid_2);
- H5Tclose(tid_2);
- H5Pclose(pid_2);
-
- } H5E_END_TRY;
- return -1;
+ if(member_name)
+ H5free_memory(member_name);
+ if(tmp_fill_buf)
+ HDfree(tmp_fill_buf);
+ if(tmp_buf)
+ HDfree(tmp_buf);
+ if(attr_id > 0)
+ if(H5Aclose(attr_id) < 0)
+ ret_val = -1;
+ if(preserve_id > 0)
+ if(H5Pclose(preserve_id) < 0)
+ ret_val = -1;
+ if(member_type_id > 0)
+ if(H5Tclose(member_type_id) < 0)
+ ret_val = -1;
+ if(read_type_id > 0)
+ if(H5Tclose(read_type_id) < 0)
+ ret_val = -1;
+ if(write_type_id > 0)
+ if(H5Tclose(write_type_id) < 0)
+ ret_val = -1;
+ if(tid_1 > 0)
+ if(H5Tclose(tid_1) < 0)
+ ret_val = -1;
+ if(pid_1 > 0)
+ if(H5Pclose(pid_1) < 0)
+ ret_val = -1;
+ if(sid_1 > 0)
+ if(H5Sclose(sid_1) < 0)
+ ret_val = -1;
+ if(did_1 > 0)
+ if(H5Dclose(did_1) < 0)
+ ret_val = -1;
+ if(sid_2 > 0)
+ if(H5Sclose(sid_2) < 0)
+ ret_val = -1;
+ if(tid_2 > 0)
+ if(H5Tclose(tid_2) < 0)
+ ret_val = -1;
+ if(pid_2 > 0)
+ if(H5Pclose(pid_2) < 0)
+ ret_val = -1;
+ if(did_2 > 0)
+ if(H5Dclose(did_2) < 0)
+ ret_val = -1;
+ if(tid_3 > 0)
+ if(H5Tclose(tid_3) < 0)
+ ret_val = -1;
+ if(did_3 > 0)
+ if(H5Dclose(did_3) < 0)
+ ret_val = -1;
+
+ return ret_val;
+} /* end H5TBdelete_field() */
-}
/*-------------------------------------------------------------------------
*
* Table attribute functions
@@ -3048,22 +2942,17 @@ out:
*
* Comments:
*
-* Modifications:
-*
*-------------------------------------------------------------------------
*/
-
-herr_t H5TBAget_title( hid_t loc_id,
- char *table_title )
+herr_t H5TBAget_title(hid_t loc_id,
+ char *table_title)
{
/* Get the TITLE attribute */
- if(H5LT_get_attribute_disk( loc_id, "TITLE", table_title ) < 0)
+ if(H5LT_get_attribute_disk(loc_id, "TITLE", table_title) < 0)
return -1;
-
return 0;
-
}
/*-------------------------------------------------------------------------
@@ -3079,8 +2968,6 @@ herr_t H5TBAget_title( hid_t loc_id,
*
* Comments:
*
-* Modifications:
-*
*-------------------------------------------------------------------------
*/
htri_t H5TBAget_fill(hid_t loc_id,
@@ -3088,57 +2975,50 @@ htri_t H5TBAget_fill(hid_t loc_id,
hid_t dset_id,
unsigned char *dst_buf)
{
+ hsize_t nfields;
+ hsize_t nrecords;
+ hsize_t i;
+ size_t *src_offset = NULL;
+ char attr_name[255];
+ htri_t has_fill = FALSE;
+ htri_t ret_val = -1;
- hsize_t nfields;
- hsize_t nrecords;
- char attr_name[255];
- char aux[255];
- hsize_t i;
- size_t *src_offset;
- int has_fill=0;
+ /* check the arguments */
+ if (dset_name == NULL)
+ goto out;
/* get the number of records and fields */
- if (H5TBget_table_info ( loc_id, dset_name, &nfields, &nrecords ) < 0)
- return -1;
-
- src_offset = (size_t *)malloc((size_t)nfields * sizeof(size_t));
+ if(H5TBget_table_info(loc_id, dset_name, &nfields, &nrecords) < 0)
+ goto out;
- if (src_offset == NULL )
- return -1;
+ if(NULL == (src_offset = (size_t *)HDmalloc((size_t)nfields * sizeof(size_t))))
+ goto out;
/* get field info */
- if (H5TBget_field_info( loc_id, dset_name, NULL, NULL, src_offset, NULL ) < 0)
+ if(H5TBget_field_info(loc_id, dset_name, NULL, NULL, src_offset, NULL) < 0)
goto out;
- for ( i = 0; i < nfields; i++)
- {
- strcpy( attr_name, "FIELD_" );
- sprintf( aux, "%d", (int)i );
- strcat( attr_name, aux );
- sprintf( aux, "%s", "_FILL" );
- strcat( attr_name, aux );
+ for(i = 0; i < nfields; i++) {
+ HDsnprintf(attr_name, sizeof(attr_name), "FIELD_%d_FILL", (int)i);
/* check if we have the _FILL attribute */
- has_fill = H5LT_find_attribute( dset_id, attr_name );
+ if((has_fill = H5LT_find_attribute(dset_id, attr_name)) < 0)
+ goto out;
/* get it */
- if (has_fill == 1 )
- {
- if(H5LT_get_attribute_disk( dset_id, attr_name, dst_buf+src_offset[i] ) < 0)
+ if(has_fill)
+ if(H5LT_get_attribute_disk(dset_id, attr_name, dst_buf + src_offset[i]) < 0)
goto out;
- }
-
- }
+ } /* end for */
- free( src_offset );
-
- return has_fill;
+ ret_val = has_fill;
out:
- free( src_offset );
- return -1;
-
-}
+ if(src_offset)
+ HDfree(src_offset);
+
+ return ret_val;
+} /* end H5TBAget_fill() */
/*-------------------------------------------------------------------------
@@ -3161,90 +3041,79 @@ out:
*
* Comments:
*
-* Modifications:
-* May 08, 2003
-* In version 2.0 of Table, the number of records is stored as an
-* attribute "NROWS"
-* November 24, 2008
-* In version 3.0 of Table, "NROWS" was deprecated
-*
-*
*-------------------------------------------------------------------------
*/
-
-herr_t H5TBget_table_info ( hid_t loc_id,
+herr_t H5TBget_table_info(hid_t loc_id,
const char *dset_name,
hsize_t *nfields,
- hsize_t *nrecords )
+ hsize_t *nrecords)
{
- hid_t tid=-1;
- hid_t sid=-1;
- hid_t did=-1;
- int num_members;
+ hid_t tid = H5I_BADID;
+ hid_t sid = H5I_BADID;
+ hid_t did = H5I_BADID;
hsize_t dims[1];
+ int num_members;
+ herr_t ret_val = -1;
+
+ /* check the arguments */
+ if (dset_name == NULL)
+ goto out;
/* open the dataset. */
- if ((did = H5Dopen2(loc_id, dset_name, H5P_DEFAULT)) < 0)
- return -1;
+ if((did = H5Dopen2(loc_id, dset_name, H5P_DEFAULT)) < 0)
+ goto out;
/* get the datatype */
- if ((tid = H5Dget_type( did )) < 0)
+ if((tid = H5Dget_type(did)) < 0)
goto out;
/* get the number of members */
- if ((num_members = H5Tget_nmembers( tid )) < 0)
+ if((num_members = H5Tget_nmembers(tid)) < 0)
goto out;
/*-------------------------------------------------------------------------
* get number of nfields
*-------------------------------------------------------------------------
*/
-
- if (nfields)
+ if(nfields)
*nfields = (hsize_t)num_members;
-
/*-------------------------------------------------------------------------
* get number of records
*-------------------------------------------------------------------------
*/
-
- if (nrecords)
- {
+ if(nrecords) {
/* get the dataspace handle */
- if ((sid = H5Dget_space( did )) < 0)
+ if((sid = H5Dget_space(did)) < 0)
goto out;
/* get dimension */
- if (H5Sget_simple_extent_dims( sid, dims, NULL) < 0)
+ if(H5Sget_simple_extent_dims(sid, dims, NULL) < 0)
goto out;
/* terminate access to the dataspace */
- if (H5Sclose( sid ) < 0)
+ if(H5Sclose(sid) < 0)
goto out;
+ sid = H5I_BADID;
*nrecords = dims[0];
- }
+ } /* end if */
- /* close */
- if (H5Tclose( tid ) < 0)
- goto out;
- if (H5Dclose( did ) < 0)
- return -1;
-
- return 0;
+ ret_val = 0;
- /* error zone */
out:
- H5E_BEGIN_TRY
- {
- H5Dclose(did);
- H5Sclose(sid);
- H5Tclose(tid);
- } H5E_END_TRY;
- return -1;
+ if(sid > 0)
+ if(H5Sclose(sid) < 0)
+ ret_val = -1;
+ if(tid > 0)
+ if(H5Tclose(tid) < 0)
+ ret_val = -1;
+ if(did > 0)
+ if(H5Dclose(did) < 0)
+ ret_val = -1;
-}
+ return ret_val;
+} /* end H5TBget_table_info() */
/*-------------------------------------------------------------------------
* Function: H5TBget_field_info
@@ -3259,100 +3128,105 @@ out:
*
* Comments:
*
-* Modifications:
-*
-*
*-------------------------------------------------------------------------
*/
-herr_t H5TBget_field_info( hid_t loc_id,
+herr_t H5TBget_field_info(hid_t loc_id,
const char *dset_name,
char *field_names[],
size_t *field_sizes,
size_t *field_offsets,
- size_t *type_size )
+ size_t *type_size)
{
- hid_t did = -1; /* dataset ID */
- hid_t tid = -1; /* file type ID */
- hid_t n_tid = -1; /* native type ID */
- hid_t m_tid = -1; /* member type ID */
- hid_t nm_tid = -1; /* native member ID */
- hssize_t nfields;
- hssize_t i;
+ hid_t did = H5I_BADID; /* dataset ID */
+ hid_t tid = H5I_BADID; /* file type ID */
+ hid_t n_tid = H5I_BADID; /* native type ID */
+ hid_t m_tid = H5I_BADID; /* member type ID */
+ hid_t nm_tid = H5I_BADID; /* native member ID */
+ hssize_t nfields;
+ hssize_t i;
+ herr_t ret_val = -1;
+
+ /* check the arguments */
+ if (dset_name == NULL)
+ goto out;
/* open the dataset. */
- if ((did = H5Dopen2(loc_id, dset_name, H5P_DEFAULT)) < 0)
+ if((did = H5Dopen2(loc_id, dset_name, H5P_DEFAULT)) < 0)
goto out;
/* get the datatype */
- if (( tid = H5Dget_type( did )) < 0)
+ if((tid = H5Dget_type(did)) < 0)
goto out;
- if ((n_tid = H5Tget_native_type(tid, H5T_DIR_DEFAULT)) < 0)
+ if((n_tid = H5Tget_native_type(tid, H5T_DIR_DEFAULT)) < 0)
goto out;
/* get the type size */
if(type_size)
- *type_size = H5Tget_size(n_tid);
+ if(0 == (*type_size = H5Tget_size(n_tid)))
+ goto out;
/* get the number of members */
- if (( nfields = H5Tget_nmembers( tid )) < 0)
+ if((nfields = H5Tget_nmembers(tid)) < 0)
goto out;
/* iterate tru the members */
- for ( i = 0; i < nfields; i++) {
+ for(i = 0; i < nfields; i++) {
/* get the member name */
if(field_names) {
- char *member_name;
+ char *member_name;
- member_name = H5Tget_member_name(tid, (unsigned)i);
+ if(NULL == (member_name = H5Tget_member_name(tid, (unsigned)i)))
+ goto out;
strcpy(field_names[i], member_name);
H5free_memory(member_name);
} /* end if */
/* get the member type */
- if(( m_tid = H5Tget_member_type( tid,(unsigned) i )) < 0)
+ if((m_tid = H5Tget_member_type(tid, (unsigned)i)) < 0)
goto out;
- if((nm_tid = H5Tget_native_type(m_tid,H5T_DIR_DEFAULT)) < 0)
+ if((nm_tid = H5Tget_native_type(m_tid, H5T_DIR_DEFAULT)) < 0)
goto out;
/* get the member size */
if(field_sizes)
- field_sizes[i] = H5Tget_size(nm_tid);
+ if(0 == (field_sizes[i] = H5Tget_size(nm_tid)))
+ goto out;
/* get the member offset */
if(field_offsets)
field_offsets[i] = H5Tget_member_offset(n_tid, (unsigned) i);
/* close the member types */
- if (H5Tclose( m_tid ) < 0)
+ if(H5Tclose(m_tid) < 0)
goto out;
- if (H5Tclose( nm_tid ) < 0)
+ m_tid = H5I_BADID;
+ if(H5Tclose(nm_tid) < 0)
goto out;
- } /* i */
+ nm_tid = H5I_BADID;
+ } /* end for */
- /* close */
- if (H5Tclose( tid ) < 0)
- goto out;
- if (H5Tclose( n_tid ) < 0)
- goto out;
- if (H5Dclose( did ) < 0)
- return -1;
-
- return 0;
+ ret_val = 0;
- /* error zone */
out:
- H5E_BEGIN_TRY
- {
- H5Dclose(did);
- H5Tclose(tid);
- H5Tclose(n_tid);
- H5Tclose(m_tid);
- H5Tclose(nm_tid);
- } H5E_END_TRY;
- return -1;
+ if(tid > 0)
+ if(H5Tclose(tid) < 0)
+ ret_val = -1;
+ if(n_tid > 0)
+ if(H5Tclose(n_tid) < 0)
+ ret_val = -1;
+ if(m_tid > 0)
+ if(H5Tclose(m_tid) < 0)
+ ret_val = -1;
+ if(nm_tid > 0)
+ if(H5Tclose(nm_tid) < 0)
+ ret_val = -1;
+ if(did > 0)
+ if(H5Dclose(did) < 0)
+ ret_val = -1;
-}
+ return ret_val;
+} /* end H5TBget_field_info() */
/*-------------------------------------------------------------------------
*
@@ -3366,7 +3240,7 @@ out:
*
* Purpose: Find a string field
*
-* Return: Success: 0, Failure: -1
+* Return: Success: TRUE/FALSE, Failure: N/A
*
* Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
*
@@ -3374,28 +3248,31 @@ out:
*
*-------------------------------------------------------------------------
*/
-
static
-int H5TB_find_field( const char *field, const char *field_list )
+hbool_t H5TB_find_field(const char *field, const char *field_list)
{
const char *start = field_list;
const char *end;
- while ( (end = HDstrstr( start, "," )) != 0 )
- {
+ /* check the arguments */
+ if (field == NULL)
+ return FALSE;
+ if (field_list == NULL)
+ return FALSE;
+
+ while((end = HDstrstr(start, ",")) != 0) {
ptrdiff_t count = end - start;
- if(HDstrncmp(start, field, (size_t)count) == 0 && (size_t)count == HDstrlen(field) )
- return 1;
+ if(HDstrncmp(start, field, (size_t)count) == 0 && (size_t)count == HDstrlen(field))
+ return TRUE;
start = end + 1;
- }
-
- if(HDstrcmp( start, field ) == 0 )
- return 1;
+ } /* end while */
- return -1;
-}
+ if(HDstrncmp(start, field, HDstrlen(field)) == 0)
+ return TRUE;
+ return FALSE;
+} /* end H5TB_find_field() */
/*-------------------------------------------------------------------------
* Function: H5TB_attach_attributes
@@ -3412,63 +3289,56 @@ int H5TB_find_field( const char *field, const char *field_list )
*
* Comments:
*
-* Modifications:
-*
*-------------------------------------------------------------------------
*/
-
static
-herr_t H5TB_attach_attributes( const char *table_title,
+herr_t H5TB_attach_attributes(const char *table_title,
hid_t loc_id,
const char *dset_name,
hsize_t nfields,
- hid_t tid )
+ hid_t tid)
{
-
- char attr_name[255];
- char *member_name;
- char aux[255];
- hsize_t i;
+ char attr_name[255];
+ char *member_name = NULL;
+ hsize_t i;
+ herr_t ret_val = -1;
/* attach the CLASS attribute */
- if (H5LTset_attribute_string( loc_id, dset_name, "CLASS", TABLE_CLASS ) < 0)
+ if(H5LTset_attribute_string(loc_id, dset_name, "CLASS", TABLE_CLASS) < 0)
goto out;
/* attach the VERSION attribute */
- if (H5LTset_attribute_string( loc_id, dset_name, "VERSION", TABLE_VERSION ) < 0)
+ if(H5LTset_attribute_string(loc_id, dset_name, "VERSION", TABLE_VERSION) < 0)
goto out;
/* attach the TITLE attribute */
- if (H5LTset_attribute_string( loc_id, dset_name, "TITLE", table_title ) < 0)
+ if(H5LTset_attribute_string(loc_id, dset_name, "TITLE", table_title) < 0)
goto out;
/* attach the FIELD_ name attribute */
- for ( i = 0; i < nfields; i++)
- {
-
+ for(i = 0; i < nfields; i++) {
/* get the member name */
- member_name = H5Tget_member_name( tid, (unsigned)i );
+ if(NULL == (member_name = H5Tget_member_name(tid, (unsigned)i)))
+ goto out;
- strcpy( attr_name, "FIELD_" );
- sprintf( aux, "%d", (int)i );
- strcat( attr_name, aux );
- sprintf( aux, "%s", "_NAME" );
- strcat( attr_name, aux );
+ HDsnprintf(attr_name, sizeof(attr_name), "FIELD_%d_NAME", (int)i);
/* attach the attribute */
- if (H5LTset_attribute_string( loc_id, dset_name, attr_name, member_name ) < 0)
+ if(H5LTset_attribute_string(loc_id, dset_name, attr_name, member_name) < 0)
goto out;
- H5free_memory( member_name );
-
- }
+ H5free_memory(member_name);
+ member_name = NULL;
+ } /* end for */
- return 0;
+ ret_val = 0;
out:
- return -1;
+ if(member_name)
+ H5free_memory(member_name);
-}
+ return ret_val;
+} /* end H5TB_attach_attributes() */
/*-------------------------------------------------------------------------
* Function: H5TB_create_type
@@ -3483,11 +3353,8 @@ out:
*
* Comments:
*
-* Modifications:
-*
*-------------------------------------------------------------------------
*/
-
static
hid_t H5TB_create_type(hid_t loc_id,
const char *dset_name,
@@ -3496,85 +3363,75 @@ hid_t H5TB_create_type(hid_t loc_id,
const size_t *field_sizes,
hid_t ftype_id)
{
- hid_t mem_type_id;
- hid_t mtype_id=-1;
- hid_t nmtype_id=-1;
+ hid_t mem_type_id = H5I_BADID;
+ hid_t mtype_id = H5I_BADID;
+ hid_t nmtype_id = H5I_BADID;
size_t size_native;
- hsize_t nfields;
- char **fnames;
+ hsize_t nfields = 0;
+ char **fnames = NULL;
unsigned i;
+ hid_t ret_val = -1;
/* get the number of fields */
- if (H5TBget_table_info(loc_id,dset_name,&nfields,NULL) < 0)
- return -1;
+ if(H5TBget_table_info(loc_id, dset_name, &nfields, NULL) < 0)
+ goto out;
- if ((fnames = (char**) malloc(sizeof(char*)*(size_t)nfields))==NULL)
- return -1;
+ if(NULL == (fnames = (char**)HDcalloc(sizeof(char*), (size_t)nfields)))
+ goto out;
- for ( i = 0; i < nfields; i++)
- {
- if ((fnames[i] = (char*) malloc(sizeof(char)*HLTB_MAX_FIELD_LEN))==NULL)
- {
- free(fnames);
- return -1;
- }
- }
+ for(i = 0; i < nfields; i++)
+ if(NULL == (fnames[i] = (char*)HDmalloc(HLTB_MAX_FIELD_LEN)))
+ goto out;
/* get field info */
- if (H5TBget_field_info(loc_id,dset_name,fnames,NULL,NULL,NULL) < 0)
+ if(H5TBget_field_info(loc_id, dset_name, fnames, NULL, NULL, NULL) < 0)
goto out;
/* create the memory data type */
- if ((mem_type_id=H5Tcreate(H5T_COMPOUND,type_size)) < 0)
+ if ((mem_type_id = H5Tcreate(H5T_COMPOUND, type_size)) < 0)
goto out;
/* get each field ID and adjust its size, if necessary */
- for ( i = 0; i < nfields; i++)
- {
- if ((mtype_id = H5Tget_member_type(ftype_id,i)) < 0)
+ for(i = 0; i < nfields; i++) {
+ if((mtype_id = H5Tget_member_type(ftype_id, i)) < 0)
+ goto out;
+ if((nmtype_id = H5Tget_native_type(mtype_id, H5T_DIR_DEFAULT)) < 0)
goto out;
- if ((nmtype_id = H5Tget_native_type(mtype_id,H5T_DIR_DEFAULT)) < 0)
+ if(0 == (size_native = H5Tget_size(nmtype_id)))
goto out;
- size_native = H5Tget_size(nmtype_id);
- if (field_sizes[i]!=size_native)
- {
- if (H5Tset_size(nmtype_id,field_sizes[i]) < 0)
+ if(field_sizes[i] != size_native)
+ if(H5Tset_size(nmtype_id, field_sizes[i]) < 0)
goto out;
- }
- if (H5Tinsert(mem_type_id,fnames[i],field_offset[i],nmtype_id) < 0)
+ if(H5Tinsert(mem_type_id, fnames[i], field_offset[i], nmtype_id) < 0)
goto out;
- if (H5Tclose(mtype_id) < 0)
+ if(H5Tclose(mtype_id) < 0)
goto out;
- if (H5Tclose(nmtype_id) < 0)
+ mtype_id = H5I_BADID;
+ if(H5Tclose(nmtype_id) < 0)
goto out;
- }
+ nmtype_id = H5I_BADID;
+ } /* end for */
- for ( i=0; i<nfields; i++)
- {
- free (fnames[i]);
- }
- free (fnames);
-
- return mem_type_id;
+ ret_val = mem_type_id;
- /* error zone */
out:
- H5E_BEGIN_TRY
- {
- H5Tclose(mtype_id);
- H5Tclose(nmtype_id);
- } H5E_END_TRY;
- for ( i=0; i<nfields; i++)
- {
- if (fnames[i])
- free (fnames[i]);
- }
- if (fnames)
- free (fnames);
- return -1;
-
-}
+ if(fnames) {
+ for(i = 0; i < nfields; i++)
+ if(fnames[i])
+ HDfree(fnames[i]);
+ HDfree(fnames);
+ } /* end if */
+ if(mtype_id > 0)
+ if(H5Tclose(mtype_id) < 0)
+ ret_val = -1;
+ if(nmtype_id > 0)
+ if(H5Tclose(nmtype_id) < 0)
+ ret_val = -1;
+ if(ret_val < 0 && mem_type_id > 0)
+ H5Tclose(mem_type_id);
+ return ret_val;
+} /* end H5TB_create_type() */
/*-------------------------------------------------------------------------
*
@@ -3597,26 +3454,25 @@ out:
*
* Comments: Called by H5TBappend_records and H5PTappend_records
*
-* Modifications:
-*
*-------------------------------------------------------------------------
*/
-herr_t H5TB_common_append_records( hid_t dataset_id,
+herr_t H5TB_common_append_records(hid_t dataset_id,
hid_t mem_type_id,
size_t nrecords,
hsize_t orig_table_size,
- const void * buf)
+ const void *buf)
{
- hsize_t count[1];
- hsize_t offset[1];
hid_t sid = H5I_BADID;
hid_t m_sid = H5I_BADID;
+ hsize_t count[1];
+ hsize_t offset[1];
hsize_t dims[1];
hsize_t mem_dims[1];
+ herr_t ret_val = -1;
/* extend the dataset */
dims[0] = nrecords + orig_table_size;
- if (H5Dset_extent(dataset_id, dims) < 0)
+ if(H5Dset_extent(dataset_id, dims) < 0)
goto out;
/* create a simple memory data space */
@@ -3625,37 +3481,31 @@ herr_t H5TB_common_append_records( hid_t dataset_id,
goto out;
/* get a copy of the new file data space for writing */
- if ((sid = H5Dget_space(dataset_id)) < 0)
+ if((sid = H5Dget_space(dataset_id)) < 0)
goto out;
/* define a hyperslab in the dataset */
offset[0] = orig_table_size;
count[0] = nrecords;
- if (H5Sselect_hyperslab( sid, H5S_SELECT_SET, offset, NULL, count, NULL) < 0)
+ if(H5Sselect_hyperslab(sid, H5S_SELECT_SET, offset, NULL, count, NULL) < 0)
goto out;
/* write the records */
- if (H5Dwrite( dataset_id, mem_type_id, m_sid, sid, H5P_DEFAULT, buf ) < 0)
+ if(H5Dwrite(dataset_id, mem_type_id, m_sid, sid, H5P_DEFAULT, buf) < 0)
goto out;
- /* close */
- if (H5Sclose( m_sid ) < 0)
- goto out;
- if (H5Sclose( sid ) < 0)
- goto out;
-
- return 0;
+ ret_val = 0;
out:
- H5E_BEGIN_TRY
- {
- H5Sclose(m_sid);
- H5Sclose(sid);
- }
- H5E_END_TRY;
- return -1;
-}
+ if(m_sid > 0)
+ if(H5Sclose(m_sid) < 0)
+ ret_val = -1;
+ if(sid > 0)
+ if(H5Sclose(sid) < 0)
+ ret_val = -1;
+ return ret_val;
+} /* end H5TB_common_append_records() */
/*-------------------------------------------------------------------------
* Function: H5TB_common_read_records
@@ -3671,60 +3521,53 @@ out:
*
* Comments: Called by H5TBread_records and H5PTread_records
*
-* Modifications:
-*
-*
*-------------------------------------------------------------------------
*/
-herr_t H5TB_common_read_records( hid_t dataset_id,
+herr_t H5TB_common_read_records(hid_t dataset_id,
hid_t mem_type_id,
hsize_t start,
size_t nrecords,
hsize_t table_size,
void *buf)
{
- hsize_t count[1];
- hsize_t offset[1];
hid_t sid = H5I_BADID;
hid_t m_sid = H5I_BADID;
+ hsize_t count[1];
+ hsize_t offset[1];
hsize_t mem_size[1];
+ herr_t ret_val = -1;
/* make sure the read request is in bounds */
- if (start + nrecords > table_size )
+ if(start + nrecords > table_size)
goto out;
/* get the dataspace handle */
- if ((sid = H5Dget_space( dataset_id )) < 0)
+ if((sid = H5Dget_space(dataset_id)) < 0)
goto out;
/* define a hyperslab in the dataset of the size of the records */
offset[0] = start;
count[0] = nrecords;
- if (H5Sselect_hyperslab( sid, H5S_SELECT_SET, offset, NULL, count, NULL) < 0)
+ if(H5Sselect_hyperslab(sid, H5S_SELECT_SET, offset, NULL, count, NULL) < 0)
goto out;
/* create a memory dataspace handle */
mem_size[0] = count[0];
- if ((m_sid = H5Screate_simple( 1, mem_size, NULL )) < 0)
- goto out;
- if ((H5Dread( dataset_id, mem_type_id, m_sid, sid, H5P_DEFAULT, buf)) < 0)
- goto out;
-
- /* close */
- if (H5Sclose( m_sid ) < 0)
+ if((m_sid = H5Screate_simple(1, mem_size, NULL)) < 0)
goto out;
- if (H5Sclose( sid ) < 0)
+ if((H5Dread(dataset_id, mem_type_id, m_sid, sid, H5P_DEFAULT, buf)) < 0)
goto out;
- return 0;
+ ret_val = 0;
out:
- H5E_BEGIN_TRY
- {
- H5Sclose(sid);
- H5Sclose(m_sid);
- }
- H5E_END_TRY;
- return -1;
-}
+ if(m_sid > 0)
+ if(H5Sclose(m_sid) < 0)
+ ret_val = -1;
+ if(sid > 0)
+ if(H5Sclose(sid) < 0)
+ ret_val = -1;
+
+ return ret_val;
+} /* end H5TB_common_read_records() */
diff --git a/hl/src/Makefile.am b/hl/src/Makefile.am
index 1e781a9..09c24dc 100644
--- a/hl/src/Makefile.am
+++ b/hl/src/Makefile.am
@@ -33,7 +33,7 @@ libhdf5_hl_la_LDFLAGS= -version-info $(LT_VERS_INTERFACE):$(LT_VERS_REVISION):$(
# List sources to include in the HDF5 HL Library.
libhdf5_hl_la_SOURCES=H5DO.c H5DS.c H5IM.c H5LT.c H5LTanalyze.c H5LTparse.c H5PT.c H5TB.c
-# HDF5 HL library depends on HDF5 Library.
+# HDF5 HL library depends on HDF5 Library.
libhdf5_hl_la_LIBADD=$(LIBHDF5)
# Public header files (to be installed)
diff --git a/hl/src/Makefile.in b/hl/src/Makefile.in
index 49ca65b..9e1af56 100644
--- a/hl/src/Makefile.in
+++ b/hl/src/Makefile.in
@@ -506,7 +506,6 @@ MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MPE = @MPE@
-MPI_GET_SIZE = @MPI_GET_SIZE@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
@@ -669,8 +668,10 @@ CHECK_CLEANFILES = *.chkexe *.chklog *.clog
# Add libtool shared library version numbers to the HDF5 library
# See libtool versioning documentation online.
-LT_VERS_INTERFACE = 8
-LT_VERS_REVISION = 2
+# After making changes, run bin/reconfigure to update other configure related
+# files like Makefile.in.
+LT_VERS_INTERFACE = 9
+LT_VERS_REVISION = 0
LT_VERS_AGE = 0
# This library is our main target.
@@ -682,7 +683,7 @@ libhdf5_hl_la_LDFLAGS = -version-info $(LT_VERS_INTERFACE):$(LT_VERS_REVISION):$
# List sources to include in the HDF5 HL Library.
libhdf5_hl_la_SOURCES = H5DO.c H5DS.c H5IM.c H5LT.c H5LTanalyze.c H5LTparse.c H5PT.c H5TB.c
-# HDF5 HL library depends on HDF5 Library.
+# HDF5 HL library depends on HDF5 Library.
libhdf5_hl_la_LIBADD = $(LIBHDF5)
# Public header files (to be installed)
diff --git a/hl/test/Makefile.in b/hl/test/Makefile.in
index 0bb4abe..a002482 100644
--- a/hl/test/Makefile.in
+++ b/hl/test/Makefile.in
@@ -543,7 +543,6 @@ MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MPE = @MPE@
-MPI_GET_SIZE = @MPI_GET_SIZE@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
diff --git a/hl/test/gen_test_ds.c b/hl/test/gen_test_ds.c
index a60a560..2fc8140 100644
--- a/hl/test/gen_test_ds.c
+++ b/hl/test/gen_test_ds.c
@@ -255,13 +255,13 @@ herr_t test_cmp_scalename(hid_t fid, hid_t did, const char *name, const char *sc
if((dsid = H5Dopen2(fid, name, H5P_DEFAULT)) >= 0) {
if(H5DSis_attached(did, dsid, idx) == 1) {
if((name_len=H5DSget_scale_name(dsid,NULL,(size_t)0)) > 0) {
- name_out = (char*)malloc((size_t)name_len * sizeof (char));
+ name_out = (char*)HDmalloc((size_t)name_len * sizeof (char));
if(name_out != NULL) {
if(H5DSget_scale_name(dsid, name_out, (size_t)name_len) >= 0) {
if(strcmp(scalename,name_out)==0) {
ret_value = SUCCEED;
}
- free(name_out);
+ HDfree(name_out);
name_out=NULL;
}
}
diff --git a/hl/test/test_ds.c b/hl/test/test_ds.c
index 2ea8801..d071fd5 100644
--- a/hl/test/test_ds.c
+++ b/hl/test/test_ds.c
@@ -29,8 +29,8 @@ static herr_t op_continue(hid_t did, unsigned dim, hid_t dsid, void *visitor_dat
static herr_t op_stop(hid_t did, unsigned dim, hid_t dsid, void *visitor_data);
/* prototypes */
-static int create_test_file(const char *fileext);
-static int open_test_file(const char *fileext);
+static hid_t create_test_file(const char *fileext);
+static hid_t open_test_file(const char *fileext);
herr_t create_char_dataset(hid_t fid, const char *dsidx, int fulldims);
herr_t create_short_dataset(hid_t fid, const char *dsidx, int fulldims);
herr_t create_int_dataset(hid_t fid, const char *dsidx, int fulldims);
@@ -1105,10 +1105,10 @@ herr_t test_cmp_scalename(hid_t fid, hid_t did, const char *name, const char *sc
if((dsid = H5Dopen2(fid, name, H5P_DEFAULT)) >= 0) {
if(H5DSis_attached(did, dsid, idx) == 1) {
if((name_len=H5DSget_scale_name(dsid,NULL,(size_t)0)) > 0) {
- name_out = (char*)HDmalloc(((size_t)name_len+1) * sizeof (char));
+ name_out = (char*)HDmalloc((name_len+1) * sizeof (char));
if(name_out != NULL) {
if(H5DSget_scale_name(dsid, name_out, (size_t)name_len+1) >= 0) {
- if(HDstrncmp(scalename, name_out, (size_t)name_len)==0) {
+ if(HDstrcmp(scalename,name_out)==0) {
ret_value = SUCCEED;
}
HDfree(name_out);
@@ -3126,7 +3126,7 @@ static int test_simple(void)
goto out;
/* allocate a buffer */
- name_out = (char*)HDmalloc(((size_t)name_len+1) * sizeof (char));
+ name_out = (char*)HDmalloc((name_len+1) * sizeof (char));
if(name_out == NULL)
goto out;
diff --git a/hl/test/test_dset_opt.c b/hl/test/test_dset_opt.c
index 9a0ffb0..bddd162 100644
--- a/hl/test/test_dset_opt.c
+++ b/hl/test/test_dset_opt.c
@@ -176,7 +176,7 @@ test_direct_chunk_write (hid_t file)
direct_buf[i][j] = n++;
/* Allocate output (compressed) buffer */
- outbuf = malloc(z_dst_nbytes);
+ outbuf = HDmalloc(z_dst_nbytes);
z_dst = (Bytef *)outbuf;
/* Perform compression from the source to the destination buffer */
@@ -206,7 +206,7 @@ test_direct_chunk_write (hid_t file)
}
if(outbuf)
- free(outbuf);
+ HDfree(outbuf);
if(H5Fflush(dataset, H5F_SCOPE_LOCAL) < 0)
goto error;
@@ -249,7 +249,7 @@ test_direct_chunk_write (hid_t file)
direct_buf[i][j] = i + j;
/* Allocate output (compressed) buffer */
- outbuf = malloc(z_dst_nbytes);
+ outbuf = HDmalloc(z_dst_nbytes);
z_dst = (Bytef *)outbuf;
/* Perform compression from the source to the destination buffer */
@@ -280,7 +280,7 @@ test_direct_chunk_write (hid_t file)
}
if(outbuf)
- free(outbuf);
+ HDfree(outbuf);
if(H5Fflush(dataset, H5F_SCOPE_LOCAL) < 0)
goto error;
@@ -329,7 +329,7 @@ error:
} H5E_END_TRY;
if(outbuf)
- free(outbuf);
+ HDfree(outbuf);
return 1;
}
@@ -1016,13 +1016,13 @@ test_invalid_parameters(hid_t file)
/* Check invalid dataset ID */
H5E_BEGIN_TRY {
- if((status = H5DOwrite_chunk(-1, dxpl, filter_mask, offset, buf_size, direct_buf)) != FAIL)
+ if((status = H5DOwrite_chunk((hid_t)-1, dxpl, filter_mask, offset, buf_size, direct_buf)) != FAIL)
goto error;
} H5E_END_TRY;
/* Check invalid DXPL ID */
H5E_BEGIN_TRY {
- if((status = H5DOwrite_chunk(dataset, -1, filter_mask, offset, buf_size, direct_buf)) != FAIL)
+ if((status = H5DOwrite_chunk(dataset, (hid_t)-1, filter_mask, offset, buf_size, direct_buf)) != FAIL)
goto error;
} H5E_END_TRY;
diff --git a/hl/test/test_file_image.c b/hl/test/test_file_image.c
index 9729421..831fa23 100644
--- a/hl/test/test_file_image.c
+++ b/hl/test/test_file_image.c
@@ -77,23 +77,23 @@ test_file_image(size_t open_images, size_t nflags, unsigned *flags)
FAIL_PUTS_ERROR("malloc() failed");
/* allocate array of pointers for each of the open images */
- if (NULL == (buf_ptr = (void **)malloc(sizeof(void *) * open_images)))
+ if (NULL == (buf_ptr = (void **)HDmalloc(sizeof(void *) * open_images)))
FAIL_PUTS_ERROR("malloc() failed");
/* allocate array to store the name of each of the open images */
- if (NULL == (filename = (char **)malloc(sizeof(char *) * open_images)))
+ if (NULL == (filename = (char **)HDmalloc(sizeof(char *) * open_images)))
FAIL_PUTS_ERROR("malloc() failed");
/* allocate array to store the size of each of the open images */
- if (NULL == (buf_size = (ssize_t *)malloc(sizeof(ssize_t) * open_images)))
+ if (NULL == (buf_size = (ssize_t *)HDmalloc(sizeof(ssize_t) * open_images)))
FAIL_PUTS_ERROR("malloc() failed");
/* allocate array for each of the file identifiers */
- if (NULL == (file_id = (hid_t *)malloc(sizeof(hid_t) * open_images)))
+ if (NULL == (file_id = (hid_t *)HDmalloc(sizeof(hid_t) * open_images)))
FAIL_PUTS_ERROR("malloc() failed");
/* allocate array for each of the dataset identifiers */
- if (NULL == (dset_id = (hid_t *)malloc(sizeof(hid_t) * open_images)))
+ if (NULL == (dset_id = (hid_t *)HDmalloc(sizeof(hid_t) * open_images)))
FAIL_PUTS_ERROR("malloc() failed");
TESTING("get file images");
diff --git a/hl/test/test_image.c b/hl/test/test_image.c
index 3109a36..5740d4b 100644
--- a/hl/test/test_image.c
+++ b/hl/test/test_image.c
@@ -783,9 +783,9 @@ out:
*-------------------------------------------------------------------------
*/
-static int read_data( const char* fname, /*IN*/
+static int read_data(const char* fname, /*IN*/
hsize_t *width, /*OUT*/
- hsize_t *height /*OUT*/ )
+ hsize_t *height /*OUT*/)
{
int i, n;
int color_planes;
diff --git a/hl/test/test_lite.c b/hl/test/test_lite.c
index a76f3d7..9a15957 100644
--- a/hl/test/test_lite.c
+++ b/hl/test/test_lite.c
@@ -1238,6 +1238,41 @@ static int test_strings(void)
}
HDfree(dt_str);
+ /* Length of the character buffer is larger then needed */
+ str_len = str_len + 10;
+ if(NULL==(dt_str = (char*)HDcalloc(str_len, sizeof(char))))
+ goto out;
+
+ if(H5LTdtype_to_text(dtype, dt_str, H5LT_DDL, &str_len)<0) {
+ HDfree(dt_str);
+ goto out;
+ }
+ if(HDstrncmp(dt_str, "H5T_STRING {\n STRSIZE H5T_VARIABLE;\n STRPAD H5T_STR_NULLPAD;\n CSET H5T_CSET_ASCII;\n CTYPE H5T_C_S1;\n }", str_len-1)) {
+ printf("dt=\n%s\n", dt_str);
+ HDfree(dt_str);
+ goto out;
+ }
+
+ /* Length of the character buffer is smaller then needed */
+ str_len = 21;
+ if(NULL==(dt_str = (char*)HDcalloc(str_len, sizeof(char))))
+ goto out;
+
+ if(H5LTdtype_to_text(dtype, dt_str, H5LT_DDL, &str_len)<0) {
+ HDfree(dt_str);
+ goto out;
+ }
+ /* check the truncated string */
+ if(strlen(dt_str) != str_len-1) goto out;
+ str_len = strlen(dt_str);
+ if(HDstrncmp(dt_str, "H5T_STRING {\n STRSIZE H5T_VARIABLE;\n STRPAD H5T_STR_NULLPAD;\n CSET H5T_CSET_ASCII;\n CTYPE H5T_C_S1;\n }", str_len)) {
+ printf("dt=\n%s\n", dt_str);
+ HDfree(dt_str);
+ goto out;
+ }
+
+ HDfree(dt_str);
+
if(H5Tclose(dtype)<0)
goto out;
@@ -1245,6 +1280,9 @@ static int test_strings(void)
return 0;
out:
+ if(dt_str)
+ HDfree(dt_str);
+
H5_FAILED();
return -1;
}
@@ -1820,7 +1858,6 @@ out:
static int test_valid_path(void)
{
hid_t file_id, group;
- FILE *fp = NULL;
htri_t path_valid;
const char *data_string_in = "test";
diff --git a/hl/test/test_table.c b/hl/test/test_table.c
index 4b62ac5..4eb5819 100644
--- a/hl/test/test_table.c
+++ b/hl/test/test_table.c
@@ -1195,14 +1195,19 @@ static int test_table(hid_t fid, int do_write)
goto out;
}
- /* read the "Pressure" field */
start = 0;
nrecords = NRECORDS;
+
+ /* read an invalid field, should fail */
+ if ( H5TBread_fields_name(fid,"table10","DoesNotExist",start,nrecords,
+ sizeof(float),0,field_sizes_pre,pressure_out) >=0)
+ goto out;
+
+ /* read the "Pressure" field */
if ( H5TBread_fields_name(fid,"table10","Pressure",start,nrecords,
sizeof(float),0,field_sizes_pre,pressure_out)<0)
goto out;
-
/* Compare the extracted table with the initial values */
for( i = 0; i < NRECORDS; i++ )
{
diff --git a/hl/tools/Makefile.in b/hl/tools/Makefile.in
index 5247b54..a34e225 100644
--- a/hl/tools/Makefile.in
+++ b/hl/tools/Makefile.in
@@ -505,7 +505,6 @@ MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MPE = @MPE@
-MPI_GET_SIZE = @MPI_GET_SIZE@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
diff --git a/hl/tools/gif2h5/Makefile.in b/hl/tools/gif2h5/Makefile.in
index 0652ddb..1c9be68 100644
--- a/hl/tools/gif2h5/Makefile.in
+++ b/hl/tools/gif2h5/Makefile.in
@@ -519,7 +519,6 @@ MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MPE = @MPE@
-MPI_GET_SIZE = @MPI_GET_SIZE@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
diff --git a/html/ADGuide.html b/html/ADGuide.html
index 3641156..ed51aac 100644
--- a/html/ADGuide.html
+++ b/html/ADGuide.html
@@ -28,235 +28,269 @@
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-->
<!-- #EndLibraryItem --><!-- #BeginLibraryItem "/ed_libs/NavBar_ADevG.lbi" -->
-<hr>
+<hr />
<center>
-<table border=0 width=98%>
-<tr><td valign=top align=left>
+<table border="0" width="98%">
+<tr><td valign="top" align="left">
<a href="index.html">HDF5 documents and links</a> <br>
<a href="H5.intro.html">Introduction to HDF5</a> <br>
<!--
<a href="Glossary.html">Glossary</a><br>
-->
</td>
-<td valign=top align=right>
+<td valign="top" align="right">
<a href="UG/index.html">HDF5 User's Guide</a> <br>
<a href="RM/RM_H5Front.html">HDF5 Reference Manual</a> <br>
<a href="ADGuide.html">HDF5 Application Developer's Guide</a> <br>
</td></tr>
</table>
</center>
-<hr>
+<hr />
<!-- #EndLibraryItem --><center>
<h1>HDF5 Application Developer's Guide</h1>
</center>
<center>
-<table border=0 width=80%>
+<table border="0" width="80%">
+
+<tr>
+<td width="35%"> </td>
+<td width="5%"> </td>
+<td width="60%"> </td>
+</tr>
- <tr><td valign=top colspan=3>
+
+ <tr><td valign="top" colspan="3">
These documents provide information of particular interest to
- developers of applications that employ the HDF5 library.
+ developers of applications that employ the HDF5 Library.
<p>
</td></tr>
- <tr><td colspan=3> </td></tr>
+ <tr><td colspan="3"> </td></tr>
<!--
- <tr><td valign=top><a href="XML_DTD.html">The XML DTD </a>
+ <tr><td valign="top"><a href="XML_DTD.html">The XML DTD </a>
<br> <a href="XML_DTD.html">for HDF5</a>
- </td><td></td><td valign=top>The standard HDF5 XML DTD and
+ </td><td></td><td valign="top">The standard HDF5 XML DTD and
design notes.
</td></tr>
- <tr><td colspan=3> </td></tr>
+ <tr><td colspan="3"> </td></tr>
-->
- <tr><td valign=top width=35%><a href="ADGuide/Changes.html">
- HDF5 Library Changes</a>
- <br>
- <a href="ADGuide/Changes.html">from Release to Release</a>
- </td><td></td><td valign=top>A summary of changes in the HDF5
- library
+ <tr><td colspan="3"> </td></tr>
+
+ <tr><td colspan="3">
+ <p style="font-size: x-large">Release Related</p>
+ </td></tr>
+
+ <tr><td colspan="3"> </td></tr>
+
+
+
+
+ <tr><td valign="top"><a href="ADGuide/Changes.html">
+ HDF5 Library Changes from Release to Release</a>
+ </td><td></td><td valign="top">A summary of changes in the HDF5
+ Library
</td></tr>
- <tr><td colspan=3> </td></tr>
+ <tr><td colspan="3"> </td></tr>
-<!--
- <tr><td valign=top width=35%><a href="http://www.hdfgroup.org/HDF5/doc_resource/Supported_Configs/SuppConfigFeats-R180.html" target="External">Supported Configuration</a>
- <br>
- <a href="http://www.hdfgroup.org/HDF5/doc_resource/Supported_Configs/SuppConfigFeats-R180.html" target="External">Features Summary</a>
- </td><td></td><td valign=top>A summary of configuration features
- supported in this release
-
- <em>(external link)</em>
+ <tr><td valign="top">
+ <a href="http://www.hdfgroup.org/ftp/HDF5/current/src/unpacked/release_docs/RELEASE.txt"
+ target="ExtWin">RELEASE.txt</a>
+ </td><td></td><td valign="top">
+ Technical notes regarding the current release of the HDF5 Library*
</td></tr>
- <tr><td colspan=3> </td></tr>
--->
+ <tr><td colspan="3"> </td></tr>
+ <tr><td valign="top">
+ <a href="http://www.hdfgroup.org/ftp/HDF5/current/src/unpacked/release_docs/HISTORY-1_8.txt"
+ target="ExtWin">HISTORY-1_8.txt</a>
+ </td><td></td><td valign="top">
+ Technical notes for previous 1.8 releases of the HDF5 Library by release*
+ </td></tr>
+ <tr><td colspan="3"> </td></tr>
- <tr><td valign=top width=35%>
- Moving from 1.6.x to 1.8.x:
- <ul>
- <li><a href="ADGuide/WhatsNew180.html">What’s New in
- <br>HDF5 Release 1.8.0</a>
- </ul>
- </td><td></td><td valign=top>
-
- <br>
- <br>
- A brief summary of new features in this HDF5 release
+ <tr><td valign="top">
+ <a href="http://www.hdfgroup.org/ftp/HDF5/current/src/unpacked/release_docs/HISTORY-1_0-1_8_0_rc3.txt"
+ target="ExtWin">HISTORY-1_0-1_8_0_rc3.txt</a>
+ </td><td></td><td valign="top">
+ Technical notes for releases prior to the 1.8.0 release of the
+ HDF5 Library by release*
</td></tr>
- <tr><td valign=top width=35%>
- <ul>
- <li><a href="ADGuide/CompatFormat180.html">Release 1.8.0 and Data
- <br>Format Compatibility</a>
- </ul>
- </td><td></td><td valign=top>“New Features in HDF5
- Release 1.8.0 and Format Compatibility Considerations”
- <br>
- A discussion of data format compatibility issues
- to consider in the transition to Release 1.8.0
+ <tr><td colspan="3"> </td></tr>
+
+ <tr><td valign="top">
+ </td><td></td><td valign="top">
+ <p style="font-size: small">
+ * RELEASE.txt, HISTORY-1_8.txt, and HISTORY-1_0-1_8_0_rc3.txt are
+ located at the top level of the HDF5 source code tree in the
+ release_docs directory of the distributed HDF5 source code.</p>
</td></tr>
- <tr><td valign=top width=35%>
- <ul>
- <li><a href="RM/APICompatMacros.html">API Compatibility Macros
- in HDF5</a>
- </ul>
- </td><td></td><td valign=top>
- Interface compatibility issues
+ <tr><td colspan="3"> </td></tr>
+ <tr><td colspan="3"> </td></tr>
+ <tr><td colspan="3"> </td></tr>
+
+
+ <tr><td colspan="3">
+ <p style="font-size: x-large">Moving from 1.6.x to 1.8.x</p>
</td></tr>
+ <tr><td colspan="3"> </td></tr>
+ <tr><td valign="top">
+ <a href="ADGuide/WhatsNew180.html">What’s New in HDF5 Release 1.8.0</a>
+ </td><td></td><td valign="top">
+ A brief summary of new features in the 1.8.0 HDF5 release
+ </td></tr>
+ <tr><td colspan="3"> </td></tr>
- <tr><td colspan=3> </td></tr>
+ <tr><td valign="top">
+ <a href="ADGuide/CompatFormat180.html">Release 1.8.0 and Data
+ Format Compatibility</a>
+ </td><td></td><td valign="top">“New Features in HDF5
+ Release 1.8.0 and Format Compatibility Considerations”:
+ A discussion of data format compatibility issues to consider in
+ the transition to Release 1.8.0
+ </td></tr>
+
+ <tr><td colspan="3"> </td></tr>
- <tr><td valign=top width=35%><a href="ADGuide/ImageSpec.html"
- target="External">HDF5 Image and</a>
+ <tr><td valign="top">
+ <a href="RM/APICompatMacros.html">API Compatibility Macros in HDF5</a>
+ </td><td></td><td valign="top">
+ Interface compatibility issues
+ </td></tr>
+<!--
+ <tr><td valign="top"><a href="http://www.hdfgroup.org/HDF5/doc_resource/Supported_Configs/SuppConfigFeats-R180.html" target="External">Supported Configuration</a>
<br>
- <a href="ADGuide/ImageSpec.html"
- target="External">Palette Specification</a>
- </td><td></td><td valign=top>A specification for the implementation
+ <a href="http://www.hdfgroup.org/HDF5/doc_resource/Supported_Configs/SuppConfigFeats-R180.html" target="External">Features Summary</a>
+ </td><td></td><td valign="top">A summary of configuration features
+ supported in this release
+
+ </td></tr>
+
+ <tr><td colspan="3"> </td></tr>
+-->
+
+
+
+ <tr><td colspan="3"> </td></tr>
+ <tr><td colspan="3"> </td></tr>
+ <tr><td colspan="3"> </td></tr>
+
+ <tr><td colspan="3">
+ <p style="font-size: x-large">General</p>
+ </td></tr>
+
+ <tr><td colspan="3"> </td></tr>
+
+ <tr><td valign="top"><a href="ADGuide/ImageSpec.html"
+ target="External">HDF5 Image and Palette Specification</a>
+ </td><td></td><td valign="top">A specification for the implementation
of images and palettes in HDF5 applications
</td></tr>
- <tr><td colspan=3> </td></tr>
+ <tr><td colspan="3"> </td></tr>
- <tr><td valign=top width=35%><a href="ADGuide/H4toH5Mapping.pdf">
- Mapping HDF4 Objects</a>
- <br>
- <a href="ADGuide/H4toH5Mapping.pdf">to HDF5 Objects</a>
- </td><td></td><td valign=top>Guidelines for translating
+ <tr><td valign="top"><a href="ADGuide/H4toH5Mapping.pdf">
+ Mapping HDF4 Objects to HDF5 Objects</a>
+ </td><td></td><td valign="top">Guidelines for translating
HDF4 file objects into valid HDF5 file objects
- <i>(PDF format only)</i>
+ <i>(PDF)</i>
</td></tr>
- <tr><td colspan=3> </td></tr>
+ <tr><td colspan="3"> </td></tr>
- <tr><td valign=top width=35%><a href="http://www.hdfgroup.org/HDF5/doc_resource/H5Fill_Values.html" target="External">
- Fill Value and Space</a>
- <br>
- <a href="http://www.hdfgroup.org/HDF5/doc_resource/H5Fill_Values.html" target="External">Allocation Issues</a>
- </td><td></td><td valign=top>A summary of HDF5 fill value and storage allocation issues
- <em>(external link)</em>
- </td></tr>
+ <tr><td valign="top">
+ <a href="http://www.hdfgroup.org/HDF5/doc_resource/H5Fill_Values.html"
+ target="External">
+ Fill Value and Space Allocation Issues</a>
+ </td><td></td><td valign="top">A summary of HDF5 fill value and
+ storage allocation issues
+ </td></tr>
- <tr><td valign=top width=35%><a href="http://www.hdfgroup.org/HDF5/doc_resource/H5Fill_Behavior.html" target="External">
- Fill Value and Space</a>
- <br>
- <a href="http://www.hdfgroup.org/HDF5/doc_resource/H5Fill_Behavior.html" target="External">Allocation Behavior</a>
- </td><td></td><td valign=top>A table summarizing of the behavioral interactions
- of HDF5 fill value and storage allocation settings
- <em>(external link)</em>
- </td></tr>
+ <tr><td colspan="3"> </td></tr>
- <tr><td colspan=3> </td></tr>
+ <tr><td valign="top">
+ <a href="http://www.hdfgroup.org/HDF5/doc_resource/H5Fill_Behavior.html"
+ target="External">
+ Fill Value and Space Allocation Behavior</a>
+ </td><td></td><td valign="top">A table summarizing of the
+ behavioral interactions of HDF5 fill value and storage allocation
+ settings
+ </td></tr>
- <tr><td valign=top width=35%><a href="http://www.hdfgroup.org/doc_resource/SZIP/index.html" target="External">
- SZIP Compression</a>
- <br>
- <a href="http://www.hdfgroup.org/doc_resource/SZIP/index.html" target="External">
- in HDF5</a>
- </td><td></td><td valign=top>A description of SZIP compression in HDF5,
- <code>H5Pset_szip</code>, terms of use and copyright notice,
- and references
- <em>(external link)</em>
- </td></tr>
- <tr><td colspan=3> </td></tr>
-
- <tr><td valign=top width=35%><a href="http://www.hdfgroup.org/HDF5/doc_resource/H5Shuffle_Perf.pdf" target="External">
- Shuffle Performance</a>
- </td><td></td><td valign=top>An analysis of bzip and gzip compression
- performance in HDF5 with and without the shuffle filter,
- <code>H5Pset_shuffle</code>
- <em>(external link)</em>
- </td></tr>
-
- <tr><td colspan=3> </td></tr>
-
- <tr><td valign=top width=35%><a href="http://www.hdfgroup.org/HDF5/doc_resource/H5Generic_Props.html" target="External">
- Generic Properties</a>
- </td><td></td><td valign=top>An overview of and the motivation for
- the implementation and use of generic properties in HDF5
- <em>(external link)</em>
- </td></tr>
+ <tr><td colspan="3"> </td></tr>
- <tr><td colspan=3> </td></tr>
+ <tr><td valign="top">
+ <a href="http://www.hdfgroup.org/doc_resource/SZIP/index.html"
+ target="External">
+ SZIP Compression in HDF5</a>
+ </td><td></td><td valign="top">A description of SZIP compression in
+ HDF5, <code>H5Pset_szip</code>, terms of use and copyright notice,
+ and references
+ </td></tr>
- <tr><td valign=top width=35%><a href="http://www.hdfgroup.org/HDF5/doc_resource/H5Checksum/ChecksumProposal.htm" target="External">
- Error-detecting Codes</a>
- <br>
- <a href="http://www.hdfgroup.org/HDF5/doc_resource/H5Checksum/ChecksumProposal.htm" target="External">
- for HDF5</a>
- </td><td></td><td valign=top>A discussion of error-detection codes,
- e.g., checksums, in HDF5
- <em>(external link)</em>
- </td></tr>
+ <tr><td colspan="3"> </td></tr>
+
+ <tr><td valign="top">
+ <a href="http://www.hdfgroup.org/HDF5/doc_resource/H5Shuffle_Perf.pdf"
+ target="External">
+ Shuffle Performance</a>
+ </td><td></td><td valign="top">An analysis of bzip and gzip compression
+ performance in HDF5 with and without the shuffle filter,
+ <code>H5Pset_shuffle</code>
- <tr><td valign=top width=35%><a href="http://www.hdfgroup.org/HDF5/doc_resource/H5Checksum/EDC_spec.htm" target="External">
- Fletcher32 Checksum</a>
- <br>
- <a href="http://www.hdfgroup.org/HDF5/doc_resource/H5Checksum/EDC_spec.htm" target="External">
- Design and Spec</a>
- </td><td></td><td valign=top>Design, API function specification, and test
- for the Fletcher32 checksum implementation in HDF5
- <em>(external link)</em>
- </td></tr>
-
- <tr><td colspan=3> </td></tr>
-
- <tr><td colspan=3>
- <hr>
- The HDF5 source code, as distributed to users and developers,
- contains two additional files that will be of interest to readers
- of this document. Both files are located at the top level of the
- HDF5 source code tree and are duplicated here for your reference:
</td></tr>
- <tr><td valign=top>
- <a href="ADGuide/RELEASE.txt" target="ExtWin">RELEASE.txt</a>
- </td><td></td><td valign=top>
- Technical notes regarding this release
- </td></tr>
+ <tr><td colspan="3"> </td></tr>
- <tr><td valign=top>
- <a href="ADGuide/HISTORY.txt" target="ExtWin">HISTORY.txt</a>
- </td><td></td><td valign=top>
- A release-by-release history of the HDF5 library
- </td></tr>
+ <tr><td valign="top">
+ <a href="http://www.hdfgroup.org/HDF5/doc_resource/H5Generic_Props.html"
+ target="External">
+ Generic Properties</a>
+ </td><td></td><td valign="top">An overview of and the motivation for
+ the implementation and use of generic properties in HDF5
+ </td></tr>
+
+ <tr><td colspan="3"> </td></tr>
+
+ <tr><td valign="top">
+ <a href="http://www.hdfgroup.org/HDF5/doc_resource/H5Checksum/ChecksumProposal.htm"
+ target="External">
+ Error-detecting Codes for HDF5</a>
+ </td><td></td><td valign="top">A discussion of error-detection codes,
+ for example, checksums, in HDF5
+ </td></tr>
+
+ <tr><td colspan="3"> </td></tr>
+
+ <tr><td valign="top">
+ <a href="http://www.hdfgroup.org/HDF5/doc_resource/H5Checksum/EDC_spec.htm"
+ target="External">
+ Fletcher32 Checksum Design and Spec</a>
+ </td><td></td><td valign="top">Design, API function specification, and test
+ for the Fletcher32 checksum implementation in HDF5
+ </td></tr>
+
+ <tr><td colspan="3"> </td></tr>
</td></tr>
<!--
- <tr><td valign=top><a href="xxx.html">xxx</a>
+ <tr><td valign="top"><a href="xxx.html">xxx</a>
<br> <a href="xxx.html">xxx</a>
- </td><td></td><td valign=top>xxx
+ </td><td></td><td valign="top">xxx
<br>
xxx
</td></tr>
@@ -266,55 +300,38 @@
</table>
</center>
-<br>
-<br>
+<br />
+<br />
<!-- #BeginLibraryItem "/ed_libs/NavBar_ADevG.lbi" -->
<hr>
<center>
-<table border=0 width=98%>
-<tr><td valign=top align=left>
+<table border="0" width="98%">
+<tr><td valign="top" align="left">
<a href="index.html">HDF5 documents and links</a> <br>
<a href="H5.intro.html">Introduction to HDF5</a> <br>
<!--
<a href="Glossary.html">Glossary</a><br>
-->
</td>
-<td valign=top align=right>
- <a href="UG/index.html">HDF5 User's Guide</a> <br>
- <a href="RM/RM_H5Front.html">HDF5 Reference Manual</a> <br>
- <a href="ADGuide.html">HDF5 Application Developer's Guide</a> <br>
+<td valign="top" align="right">
+ <a href="UG/index.html">HDF5 User's Guide</a> <br />
+ <a href="RM/RM_H5Front.html">HDF5 Reference Manual</a> <br />
+ <a href="ADGuide.html">HDF5 Application Developer's Guide</a> <br />
</td></tr>
</table>
</center>
<hr>
-<!-- #EndLibraryItem --><address>
-
-<!-- #BeginLibraryItem "/ed_libs/Footer.lbi" -->
-<address>
-<table width="100%" border="0">
- <tr valign="top">
- <td align="left">
- <address>
- The HDF Group Help Desk: <img src="Graphics/help.png" align=top height=16>
- <br>
- Describes HDF5 Release 1.8.13, May 2014.
- </address>
- </td><td width="5%"> </td>
- <td align="right">
- <a href="Copyright.html">Copyright</a> by
- <a href="http://www.hdfgroup.org">The HDF Group</a>
- <br>
- and the Board of Trustees of the University of Illinois
- </td>
- </tr>
-</table>
-</address>
<!-- #EndLibraryItem -->
+
+<?php include("./ed_libs/Footer.htm"); ?>
-Last modified: 15 May 2014
+Last modified: 13 November 2014
+<br />
+<br />
+<br />
</body>
</html>
diff --git a/html/ADGuide/Changes.html b/html/ADGuide/Changes.html
index fafae9c..6bbbd1e 100755
--- a/html/ADGuide/Changes.html
+++ b/html/ADGuide/Changes.html
@@ -24,28 +24,31 @@
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-->
<!-- #EndLibraryItem --><!-- #BeginLibraryItem "/ed_libs/NavBar_ADevG.lbi" -->
-<hr>
+<hr />
<center>
-<table border=0 width=98%>
-<tr><td valign=top align=left>
+<table border="0" width="98%">
+<tr><td valign="top" align="left">
<a href="../index.html">HDF5 documents and links</a> <br>
<a href="../H5.intro.html">Introduction to HDF5</a> <br>
<!--
<a href="Glossary.html">Glossary</a><br>
-->
</td>
-<td valign=top align=right>
+<td valign="top" align="right">
<a href="../UG/index.html">HDF5 User's Guide</a> <br>
<a href="../RM/RM_H5Front.html">HDF5 Reference Manual</a> <br>
<a href="../ADGuide.html">HDF5 Application Developer's Guide</a> <br>
</td></tr>
</table>
</center>
-<hr>
-<!-- #EndLibraryItem --><center>
+<hr />
+<!-- #EndLibraryItem -->
+
+<br />
+<center>
<h1>HDF5 Software Changes from Release to Release</h1>
</center>
-
+<br />
<!-- *********************************************************** -->
@@ -56,27 +59,100 @@
<!-- *********************************************************** -->
+<p>This document is designed to help developers maintain
+HDF5-based applications as they are used with successive releases
+of HDF5.
+To that end, this document lists the changes at each release that
+a maintenance developer needs to be aware of:
+<ul>
+ <li>New or changed features or tools
+ <li>Syntax and behavioral changes in the existing application
+ programming interface (the API)
+ <li>Certain types of changes in configuration or build processes
+</ul></p>
+
+<p>Bugfixes and performance enhancements in the C library
+are automatically picked up by the C++ and Fortran libraries.
+The Java library will pick up the same bugfixes and enhancements
+at its next subsequent release as it is always built with
+the latest released version of the C library.
+
+<p>The release notes also list changes made to the library, but these
+notes tend to be more at a more detail oriented level. The release
+notes may include new features, bugs fixed, supported configuration
+features, platforms on which the library has been tested, and known
+problems. The release note files are listed below and can be found
+at the top level of the HDF5 source code tree in the release_docs
+directory of the distributed HDF5 source code.</p>
+
+<dir>
+<table>
+
+<tr><td style="padding-right:10px">
+ <a href="http://www.hdfgroup.org/ftp/HDF5/current/src/unpacked/release_docs/RELEASE.txt"
+ target="ExtWin"><code>RELEASE.txt</code></a></td>
+ <td style="padding-right:10px">Technical notes regarding the current release
+ of the HDF5 Library
+ </td></tr>
+
+<tr><td style="padding-right:10px">
+ <a href="http://www.hdfgroup.org/ftp/HDF5/current/src/unpacked/release_docs/HISTORY-1_8.txt"
+ target="ExtWin"><code>HISTORY-1_8.txt</code></a></td>
+ <td style="padding-right:10px">Technical notes for previous 1.8
+ releases of the HDF5 Library by release
+ </td></tr>
+
+<tr valign="top"><td style="padding-right:10px">
+ <a href="http://www.hdfgroup.org/ftp/HDF5/current/src/unpacked/release_docs/HISTORY-1_0-1_8_0_rc3.txt"
+ target="ExtWin"><code>HISTORY-1_0-1_8_0_rc3.txt</code></a>
+ <br >
+ <code> </code></td>
+ <td style="padding-right:10px">Technical notes for releases prior
+ to the 1.8.0 release of the HDF5 Library by release
+ </td></tr>
-This document is provided to assist application developers who must keep
-an application synchronized with the HDF5 Library or related software.
+</table>
+</dir>
+<p><strong>Are you porting an existing application from
+HDF5 Release 1.6.x to HDF5 Release 1.8.x?</strong>
+<br />
+If you are porting an existing application
+from any HDF5 version in the Release 1.6.x series
+to any version in the Release 1.8.x series,
+refer to “<a href="../ADGuide/WhatsNew180.html">What's New in
+HDF5 1.8.0</a>”.
+This document, with the documents linked in its introduction,
+provide a guide to the changes introduced in the transition
+from the 1.6.x series to HDF5 Release 1.8.0
+and discussions of various compatibility issues.</p>
-<!-- ============= REVEAL THE FOLLOWING FOR RELEASE 1.8.14 =============
-<a name="1814">
-<h2>Release 1.8.14 of November 2014 (current release) versus Release 1.8.13</h2>
-</a>
-<dir>
+<br />
+
+
+<!-- TABLE TO REGULATE PRINTED PAGE WIDTH -->
+<!--
+<table><tr><td>
+<font color="white">
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+</font>
+</td></tr></table>
+-->
+<!-- END REGULATING TABLE -->
-This section lists interface-level changes and
-other user-visible changes in behavior
-in the transition from HDF5 Release 1.8.13 to Release 1.8.14.
+<!-- MATERIAL DELAYED FROM 18.14 TO 1.8.15
+<a name="1815">
+<h2>Release 1.8.15 of May 2015 (current release) versus Release 1.8.14</h2>
+</a>
+<dir>
<h3>New and Changed Functions, Classes, Subroutines, Wrappers,
and Macros</h3>
<dir>
<dl>
<dt><strong>In the C Interface (main library)</strong>
+ </dt>
<dt>The following new C functions have been added:
</dt>
@@ -89,194 +165,166 @@ in the transition from HDF5 Release 1.8.13 to Release 1.8.14.
<code>H5Dread_multi</code></a>
<li>Related struct: <code>H5D_rw_multi_t</code>
</ul>
- <br />
</dd>
-
-
- </dl>
+ </dl>
</dir>
-</dir>
-============= REVEAL THE ABOVE FOR RELEASE 1.8.14 ============= -->
+</dir>
+ -->
+
-<a name="1813">
-<h2>Release 1.8.13 of May 2014 (current release) versus Release 1.8.12</h2>
+<a name="1814">
+<h2>Release 1.8.14 of November 2014 (current release) versus Release 1.8.13</h2>
</a>
<dir>
This section lists interface-level changes and
other user-visible changes in behavior
-in the transition from HDF5 Release 1.8.12 to Release 1.8.13.
+in the transition from HDF5 Release 1.8.13 to Release 1.8.14.
<h3>New and Changed Functions, Classes, Subroutines, Wrappers,
and Macros</h3>
<dir>
<dl>
- <dt><strong>In the C Interface (main library)</strong>
+ <dt><strong>In the main library C Interface</strong>
+ </dt>
+ <dt>No new C functions have been added.
+ </dt>
<!--
- <dt>The following new high-level C functions have been added:
+ <dt>The following new C functions have been added:
</dt>
- <dd>
- <ul>
- <li><a href="../HL/RM_HDF5Optimized.html#H5DOwrite_chunk">
- <code>__</code></a>
- </ul>
- This function ..
- <p>
- See “<a
- href="../Advanced/DirectChunkWrite/index.html">__
- </a>” for additional information.
+ <dd>Names and descriptions.
</dd>
-->
<p>
- <dt>The following new C functions have been added:
+ <dt>The behavior of the following C function has been changed:
</dt>
- <dd>
- To free memory allocated by HDF5 function calls:
- <ul>
- <li><a href="../RM/RM_H5.html#Library-FreeMemory">
- <code>H5free_memory</code></a>
- <br>
- This function should be used to free memory that has
- been allocated by HDF5 API calls such as
- <code>H5Tget_member_name</code> and
- <code>H5Pget_class_name</code>.
- <p />
- The primary value for this call is on Windows systems,
- where it is common for application code and the
- HDF5 Library to be using different C run-time
- libraries (CRT). Using this new call ensures that the
- same CRT handles both the allocation and free.
- <p />
- This function can also be useful in any case where
- the library uses a different memory manager than the
- application, such as when a debug memory manager is
- in use or when the HDF5 Library is wrapped for use
- in a managed language like Python or Java.
- </ul>
-
- <dd>
- New configuration property for the <small>CORE</small> driver:
+ <dd>The function <code>H5Pset_core_write_tracking</code>
+ has been modified to enforce the limitation that the
+ value of the <code>page_size</code> parameter
+ cannot equal <code>0</code> (zero):
<ul>
<li><a href="../RM/RM_H5P.html#Property-SetCoreWriteTracking">
<code>H5Pset_core_write_tracking</code></a>
- <br>
- <a href="../RM/RM_H5P.html#Property-GetCoreWriteTracking">
- <code>H5Pget_core_write_tracking</code></a>
- <br>
- With this property, the <small>CORE</small> driver,
- <a href="../RM/RM_H5P.html#Property-SetFaplCore"><code>H5Pset_fapl_core</code></a>,
- can be configured to track dirty regions in the file and
- write out only the changed regions on flush or close
- operations.
- Additionally, a <i>page aggregation size</i>
- can be set that will aggregate small writes into
- larger writes. For example,
- setting a 1 mebibyte (1 MiB) page aggregation size
- will logically partition the the in-memory file
- into 1 MiB pages that will be written out
- in their entirety if even a single byte is dirtied.
-
</ul>
</dd>
<p>
- <dt>The following C functions have been modified:
+ <dt>The following performance optimization has been implemented
+ in the Parallel HDF5 library:
</dt>
+ <dd>The algoritm for writing chunk fill values for new datasets
+ has been optimized to write out all chunk fill values
+ collectively in a single MPI-IO call. This was previously
+ done independently by rank 0 (zero) one block at a time.
+ This optimization should produce a significant performance
+ improvement when creating chunked datasets in parallel,
+ most notably when chunk dimensions are relatively small.
+ This optimization will be evident in use of the following
+ function:
<ul>
- <li><a href="../RM/RM_H5R.html#Reference-GetName">
- <code>H5Rget_name</code></a>
- <br />
- If the <code>name</code> parameter is passed as
- <code>NULL</code>, then the <code>size</code>
- parameter is ignored and the function returns the size
- of the buffer required to read the name
- (not including the NULL terminator).
- <br>
- <li><a href="../RM/RM_H5Z.html#Compression-FilterAvail">
- <code>H5Zfilter_avail</code></a>
- <br>
- This function has been updated to correctly identify
- <a href="../Advanced/DynamicallyLoadedFilters/HDF5DynamicallyLoadedFilters.pdf">dynamically
- loaded filters</a>.
- If a filter is not found among registered filters,
- the function now checks for dynamically loaded filters.
+ <li><a href="../RM/RM_H5D.html#Dataset-Create">
+ <code>H5Dcreate</code></a>
</ul>
+ </dd>
+
+<!--
+<br>
+-->
<p>
- <dt><strong>In the C++ Interface</strong>
+ <dt><strong>In the high-level library C Interface</strong>
+ </dt>
- <dt>The following new features have been added:
+ <dt>High-level HDF5 interfaces now ensure that strings are
+ null-terminated and will not overflow a buffer.
+ </dt>
+ <dd>In several high-level functions, the type from the file
+ was previously re-used as the memory type and
+ no check is made to ensure that a string was actually
+ null-terminated.
+ <p>
+ All high-level functions now
+ check for <code>NULL</code> pointers;
+ verify that a received a string is null-terminated; and
+ verify that the string will not overflow the buffer.
+ The minimum length of the buffers is now used in
+ <code>strncmp</code> to avoid overflow.
+ </dd>
- <dd>Wrappers to the class <code>H5Object</code> to get
- an object’s name:
-<pre>
- ssize_t getObjName(char *obj_name, size_t buf_size = 0)
- ssize_t getObjName(H5std_string& obj_name, size_t len = 0)
- H5std_string getObjName()
-</pre>
- </dd>
- <dd>Wrappers to the class <code>H5CommonFG</code>
- to get a child object’s type from a group or file:
-<pre>
- H5O_type_t childObjType(const H5std_string& objname)
- H5O_type_t childObjType(const char* objname)
- H5O_type_t childObjType(hsize_t index,
- H5_index_t index_type=H5_INDEX_NAME,
- H5_iter_order_t order=H5_ITER_INC, const char* objname=".")
-</pre>
- </dd>
- <dd>Wrappers to the class <code>DSetMemXferPropList</code>
- for setting or getting a transform property list:
-<pre>
- DSetMemXferPropList(const char* expression);
- void setDataTransform(const char* expression)
- void setDataTransform(const H5std_string& expression)
- ssize_t getDataTransform(char* exp, size_t buf_size=0)
- H5std_string getDataTransform()
-</pre>
- </dd>
- <dd>Wrapper to <code>CompType</code> for setting the
- size of a compound datatype:
-<pre>
- void setSize(size_t size)
-</pre>
- </dd>
- <dd>Overloaded functions to provide prototypes that
- declare constant arguments <code>const</code>:
-<pre>
- DataSet::fillMemBuf
- DataSet::getVlenBufSize
- DataSpace::extentCopy
- DataType::commit
- FileAccPropList::setSplit
- H5File::getVFDHandle
-</pre>
- </dd>
- <dd>Additional overload to the class <code>H5Location</code>
- to get a comment as a <code>char*</code>:
-<pre>
- ssize_t getComment(const char* name, size_t buf_size, char* comment)
-</pre>
- </dd>
- <dd>Additional overloads to the
- class <code>Attribute</code>
- to get an attribute’s name for convenience:
-<pre>
- ssize_t getName(char* attr_name, size_t buf_size=0)
- ssize_t getName(H5std_string& attr_name, size_t buf_size=0)
-</pre>
- </dd>
+ <p>
+ <dt><strong>In the main library C++ Interface</strong>
+ </dt>
+
+ <dt>No new C++ methods have been added.
+ </dt>
+<!--
+ <dt>The following new features have been added
+ to the C++ interface:
+ </dt>
+
+ <dd>New methods:
+ <ul>
+ <li>None
+ </ul>
+ </dd>
+-->
+ <p>
+ <dt>The following changes have been made in the C++ interface:
+<!--
+ <dd>Changed methods
+ <ul>
+ <li><code>none</code> None
+ </ul>
+ </dd>
+ <p>
+-->
+ <dd>Changed defaults
+ <ul>
+ <li>Default value of class member <code>id</code>:
+ <br />
+ The data member <code>id</code> in several classes
+ that represent HDF5 objects are now initialized
+ to <code>H5I_INVALID_ID</code>.
+ <li>Default value of a <code>PropList</code>
+ member <code>id</code>:
+ <br />
+ The data member <code>id</code> in class
+ <code>PropList</code> is now initialized
+ to <code>H5P_DEFAULT</code>.
+ <li>In HDF5 Release 1.8.13 and earlier,
+ the above were initialized to <code>0</code> (zero).
+ </ul>
+ </dd>
+ <p>
+ <dd>Changed file access flags
+ <ul>
+ <li>The flag <code>H5F_ACC_CREAT</code>
+ has been removed from the C++ interface.
+ </ul>
+ </dd>
+<!--
+ <p>
+ <dd>Other changes
+ <ul>
+ <li><code>none</code> None
+ </ul>
+ </dd>
+-->
+ <p>
<p>
- <dt><strong>In the Fortran Interface</strong>
+ <dt><strong>In the main library Fortran Interface</strong>
+
+ <dt>No new Fortran subroutines have been added.
+ </dt>
- <dt>The following new Fortran subroutines have been added:
<!--
+ <dt>The following new Fortran subroutines have been added:
<dd>Fortran90 subroutines:
<table width="100%" border="0">
<tr><td align="left" valign="top" width="50%">
@@ -293,7 +341,6 @@ in the transition from HDF5 Release 1.8.12 to Release 1.8.13.
</table>
</dd>
--->
<dd>Fortran2003 subroutines:
<table width="100%" border="0">
@@ -310,10746 +357,158 @@ in the transition from HDF5 Release 1.8.12 to Release 1.8.13.
(Added in Release 1.8.11, but not documented at that time.)
</i>
</table>
+-->
</dd>
- <p />
- <dt>The following Fortran subroutine has been changed:
- <ul>
- <li><code>h5pset_chunk_cache_f</code>
- <br>
- The values of the constants
- <code>H5D_CHUNK_CACHE_NSLOTS_DFLT_F</code> and
- <code>H5D_CHUNK_CACHE_NBYTES_DFLT_F</code>
- have been changed to
- <code>INTEGER(KIND=size_t)</code>.
- </ul>
-
- </dl>
- </dir>
-
-
- <h3>Other New Features</h3>
- <dir>
- <dl>
- <dt>Parallel I/O support:</dt>
- <dd>Parallel I/O support has been enhanced to allow collective I/O
- on point selections.
- <p />
- <dt>Thread safety (Windows only)</dt>
- <dd>The thread-safe HDF5 library no longer leaks thread-local
- storage resources on Windows with Win32 threads.
- This cleanup can only be performed when the library
- is built as a shared library, so a
- thread-safe HDF5 static library with Win32 threads
- is no longer supported.
- <p />
- This change affects only Windows environments.
- <p />
- Also see “<a href="#BuildConfig_1.8.13">Build and
- Configuration</a>” below.
-
- </dir>
-
-
-<!--
- <h3>New Command-line Tool Options and Option Parameters</h3>
- <dir>
- <dl>
- <dt><a href="../RM/Tools.html#Tools-Dump">
- <code>h5dump</code></a>
- <dd><code>h5dump</code> has a new option for identifying
- objects by a full or partial path:
- <br>
- <code> -N<i>P</i></code>
- <br>
- <code> --any-path=<i>P</i></code>
- <br>
-
- <dd>The <code>h5dump</code> attributes-only option,
- <code>-A</code> or <code>--only-attr</code>,
- now accepts an optional parameter value
- of <code>0</code> (zero):
- <br>
- <code> -A 0</code>
- <br>
- <code> --only-attr=0</code>
- <br>
- Specifying this value has the effect of reversing
- the role of the option to display everything
- <i>except</i> attributes.
- <br>
-
- <dt><a href="../RM/Tools.html#Tools-Repack">
- <code>h5repack</code></a>
- <dd>The <code>h5repack</code> option
- <code>-f</code>, <code>--filter</code>
- has a new parameter, <code>UD</code>,
- to enable the use of user-defined filters:
- <br>
- <code> -f UD=<i><filter_parameters></i></code>
- <br>
- <code> --filter=UD=<i><filter_parameters></i></code>
- <br>
-
- <dt><a href="../RM/Tools.html#Tools-Stat">
- <code>h5stat</code></a>
- <dd><code>h5stat</code> has three new options for setting
- print thresholds:
- <br>
- <code> </code>For attributes:
- <br>
- <code> -a<i>N</i></code>
- <br>
- <code> --attribute=<i>N</i></code>
- <br>
-
- <br>
- <code> </code>For links in a group:
- <br>
- <code> -l<i>N</i></code>
- <br>
- <code> --links=<i>N</i></code>
- <br>
-
- <br>
- <code> </code>For dimension sizes:
- <br>
- <code> -m<i>N</i></code>
- <br>
- <code> --dims=<i>N</i></code>
-
- </dl>
- </dir>
--->
+ <p>
+ <dt>Changed Fortran <code>INTEGER</code> parameter types:
+ </dt>
+ <dd>Types of the following Fortran parameter constants
+ have been changed from <code>INTEGER</code> to
+ <code>INTEGER(HID_T)</code>:
+ <pre>
+ H5FD_CORE H5FD_MULTI
+ H5FD_FAMILY H5FD_SEC2
+ H5FD_LOG H5FD_STDIO
+ H5FD_MPIO </pre>
+ Other internal <code>int</code> types have been changed to
+ <code>hid_t</code>, but this change is expected to be
+ transparent to the user.
+ </dt>
- <h3>Command-line Tools with Changed Behavior</h3>
- <dir>
- <dl>
- <dt><a href="../RM/Tools.html#Tools-Repack">
- <code>h5repack</code></a>
- <dd><code>h5repack</code> has been updated to correctly handle
- <a href="../Advanced/DynamicallyLoadedFilters/HDF5DynamicallyLoadedFilters.pdf">dynamically
- loaded filters</a>.
- </dl>
+ </dl>
</dir>
-
-
- <a name="BuildConfig_1.8.13">
- <h3>Build and Configuration</h3>
- </a>
+ <h3>Compatibility Report and Comments</h3>
<dir>
<dl>
- <dt>Thread safety</dt>
- <dd>When configuring a thread-safe HDF5 Library with
- <code>--enable-threadsafe</code>,
- it is no longer necessary to specify <code>--with-pthreads</code>
- if the Pthreads library is in a standard location.
+ <dt><strong>Compatibility report for Release 1.8.14 versus
+ Release 1.8.13</strong>
+ </dt>
+ <dd>
+ <a href="Compatibility_Report/CR_1.8.14.html">API
+ compatibility report for the HDF5 Library
+ between 1.8.13 and 1.8.14 versions on
+ x86</a>
</dd>
-<!--
- <dt>CMake and Autotools configuration
- <dd>A new configuration option can be used to change the default
- <a href="../Advanced/DynamicallyLoadedFilters/HDF5DynamicallyLoadedFilters.pdf">plugin</a> path:
- <table>
- <tr><td><code> </code></td>
- <td>Autotools <code>configure</code> option</td>
- <td> </td>
- <td><code>--with-default-plugindir=location</code></td>
- </tr>
- <tr><td> </td>
- <td><code>cmake</code> option</td>
- <td> </td>
- <td><code>-DH5_DEFAULT_PLUGINDIR:PATH=location</code></td>
- </tr>
- </table>
- <p />
-
- <dt>CMake configuration
- <dd>CMake builds of HDF5 now create
- <code>*.so.{lt_version}</code>
- files with the same version as <code>configure</code>.
- <p />
-
- <dt>Autotools <code>configure</code> flag
- <dd>The <code>configure</code> flag
- <code>FFLAGS</code> has been renamed to <code>FCFLAGS</code>.
-
--->
+ <p>
+ <dt><strong>Changed shared library interface version
+ number (<code>soname</code>)</strong>
+ </dt>
+ <dd>To increase the maintainability of HDF5, an architectural
+ change has been made that required renaming several
+ public symbols in <code>H5Ppublic.h</code>.
+ <p>
+ Due to these changes, the shared library interface version
+ number (<code>soname</code>) has been increased.
+ For a full list of the changed symbols, see the
+ interface compatibility report linked immediately above.
+ </dd>
</dl>
</dir>
-
<!--
- <h3>Compile Scripts with Changed Behavior</h3>
+ <h3>[ Additional sections will be added as appropriate. ]</h3>
<dir>
<dl>
- <dt><a href="../RM/Tools.html#Tools-H5CC">
- <code>h5cc</code> and <code>h5pcc</code></a>
- <dt><a href="../RM/Tools.html#Tools-H5C++">
- <code>h5c++</code></a>
- <dt><a href="../RM/Tools.html#Tools-H5FC">
- <code>h5fc</code> and <code>h5pfc</code></a>
-
- <dd>These compile scripts have been modified
- to change the default behavior
- to link to shared libraries in environments where
- HDF5 has been configured with <code>--disable-static</code>.
- </dl>
+ </dl>
</dir>
-->
-<!--
- <h3>Deprecated Functions</h3>
- <dir>
+</dir>
+<br />
- <dl>
- <dt>The following C function has been deprecated:
- </dt>
- <dd>
- <li><a href="../RM/RM_H5P.html#Property-property">
- <code>H5Pproperty</code></a>
- </dd>
- <p>
- This function may be removed from the library
- in a future release.
- </dl>
- </dir>
+<!--
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
-->
- <h3>Removed Functions and Wrappers</h3>
- <dir>
- <dl>
- <dt>The <small>MPI-POSIX</small> driver has been removed.
- The following C functions and
- the corresponding Fortran subroutines and C++ wrappers
- therefore are no longer included in the HDF5 distribution:
- </dt>
- <dd>
- <ul>
- <li><code>H5Pset_fapl_mpiposix</code>
- <li><code>H5Pget_fapl_mpiposix</code>
- </ul>
- </dd>
- Applications performing parallel I/O should use the
- <small>MPI-IO</small> driver,
- <a href="../RM/RM_H5P.html#Property-SetFaplMpio">
- <code>H5Pset_fapl_mpio</code></a>.
- </dl>
- </dir>
+<a name="18x">
+<h2>Prior Releases in the 1.8.x Series</h2>
+</a>
-</dir>
+<dir>
+
+Change notes for HDF5 Release 1.8.0 to the release immediately
+preceding the current release are published in
+“<a href="Changes_1_8_x.html">HDF5 Software Changes from
+Release to Release for HDF5 Releases 1.8.x</a>”.
+</dir>
+<br />
-<a name="1812">
-<h2>Release 1.8.12 of November 2013 versus Release 1.8.11</h2>
+<a name="1610">
+<h2>Releases 1.6.x and 1.4.x</h2>
</a>
+
<dir>
-This section lists interface-level changes and
-other user-visible changes in behavior
-in the transition from HDF5 Release 1.8.11 to Release 1.8.12.
+Change notes for HDF5 Release 1.6.10 and earlier releases
+are published in
+“<a href="Changes_1_4-1_6.html">HDF5 Software Changes from
+Release to Release for HDF5 Releases 1.4.0 through 1.6.10</a>”.
+</dir>
+<br />
- <h3>New and Changed Functions, Classes, Subroutines, Wrappers,
- and Macros</h3>
- <dir>
- <dl>
- <dt><strong>In the C Interface (main library)</strong>
<!--
- <dt>The following new high-level C functions have been added:
- </dt>
- <dd>
- <ul>
- <li><a href="../HL/RM_HDF5Optimized.html#H5DOwrite_chunk">
- <code>__</code></a>
- </ul>
- This function ..
- <p>
- See “<a
- href="../Advanced/DirectChunkWrite/index.html">__
- </a>” for additional information.
- </dd>
-
- <p>
- <dt>The following new C functions have been added:
- </dt>
- <dd>
- <ul>
- <li><a href="../RM/RM_H5D.html#Dataset-Scatter">
- <code>__</code></a>
- <li><a href="../RM/RM_H5D.html#Dataset-Gather">
- <code>__</code></a>
- </ul>
-
- These functions ...
-
- </dd>
+<a name="RELEASE-HISTORY">
+<h2>This and Prior Releases: The RELEASE.txt and HISTORY.txt Files</h2>
+</a>
- <p>
+<dir>
+ The HDF5 source code, as distributed to users and developers,
+ contains two files that will be of interest to readers of this
+ document. Both files are located at the top level of the
+ source code tree and are duplicated here for your reference:
+ <p>
+ <dl>
+ <dt><a href="RELEASE.txt" target="ExtWin">RELEASE.txt</a>
+ <dd>Technical notes regarding the release, including
+ new features and the changes since the last release,
+ notes regarding new or revised utilities,
+ notes regarding alternative language APIs (Fortran90, C++),
+ bugs fixed since the last release,
+ platforms on which the release has been tested, and
+ known problems.
+ This is the file commonly known as "the release notes."
+ <p>
+ <dt><a href="HISTORY.txt" target="ExtWin">HISTORY.txt</a>
+ <dd>A release-by-release history of the HDF5 Library.
+ This file is a compiled set of the release notes
+ (i.e., the RELEASE.txt files) from prior releases.
+ <dl>
+</dir>
-->
- <dt>The following C functions have been modified:
- </dt>
- <ul>
- <li><a href="../RM/RM_H5Z.html#Compression-Unregister">
- <code>H5Zunregister</code></a>
- now checks for open objects using a filter
- before allowing the filter to be unregistered.
- <li><a href="../RM/RM_H5D.html#Dataset-Scatter">
- <code>H5Dscatter</code></a> and
- <a href="../RM/RM_H5D.html#Dataset-Gather">
- <code>H5Dgather</code></a>
- signatures have changed slightly.
- <br>
- The <code>src_buff</code> parameter type is now
- <code>'<em>const void *</em>'</code>
- (previously: <code>'<em>void *</em>'</code>).
- </ul>
-
- <p>
- <dt><strong>In the C++ Interface</strong>
-
- <dt>The following new C++ class has been added:
- <dd><dl>
- <dt><code>H5::H5Location</code>
- <dd>The class <code>H5::H5Location</code> has been added
- as a base class of <code>H5File</code> and
- <code>H5Object</code>. It represents the location
- concept in the C library, where an identifier of an
- HDF5 object or an HDF5 file being passed in as a
- <code>loc_id</code> parameter.
- </dl></dd>
- <p>
- <dt>The following member functions and their
- overloaded versions have been moved from
- various subclasses into the base class
- <code>H5Location</code>:
- <dd><table><tr align="left" valign="top"><td>
- <code>createAttribute()</code>
- <br>
- <code>openAttribute()</code>
- <br>
- <code>attrExists()</code>
- <br>
- <code>renameAttr()</code>
- <br>
- <code>removeAttr()</code>
- <br>
- <code>flush()</code>
- <br>
- <code>getFileName()</code>
- <br>
- <code>getNumAttrs()</code>
- </td><td><code> </code></td><td>
- <code>getObjType()</code>
- <br>
- <code>iterateAttrs()</code>
- <br>
- <code>setComment()</code>
- <br>
- <code>getComment()</code>
- <br>
- <code>removeComment()</code>
- <br>
- <code>reference()</code>
- <br>
- <code>dereference()</code>
- <br>
- <code>getRegion()</code>
- </td></tr></table>
- <p>
- <dt>The following wrappers for C functions have been added:
- <dd><dl>
- <dt><code>H5Location::getRefObjType</code>
- <dd>Corresponding C function: <code>H5Rget_obj_type2</code>
- <dd>Retrieves the type of the object that an
- object reference points to.
-
- <dt><code>H5Location::attrExists</code>
- <dd>Corresponding C function: <code>H5Aexist</code>
- <dd>Determines whether a given attribute exists.
-
- <dt><code>H5Location::setComment</code>
- <dd>Two overloaded versions of
- <code>H5Location::setComment</code> have been added
- to take "." in lieue of the name of the object.
- </dl>
- <p>
- <dt>In the classes <code>DataSet</code>,
- <code>DataType</code>, and <code>Group</code>,
- the following constructors have changed as follows:
- <dd><table border="0"><tr><td>
- <li>These constructors
- <br>
- <code> DataSet(H5Object& obj, const void* ref, H5R_type_t ref_type = H5R_OBJECT);
- <br>
- DataSet(H5File& h5file, const void* ref, H5R_type_t ref_type = H5R_OBJECT);
- <br>
- DataSet(Attribute& attr, const void* ref, H5R_type_t ref_type = H5R_OBJECT);</code>
- <br>
- have changed to
- <br>
- <code> DataSet(const H5Location& loc, const void* ref, H5R_type_t ref_type = H5R_OBJECT);
- <br>
- DataSet(const Attribute& attr, const void* ref, H5R_type_t ref_type = H5R_OBJECT);</code>
- <p />
-
- <li>These constructors
- <br>
- <code> DataType(H5Object& obj, const void* ref, H5R_type_t ref_type = H5R_OBJECT);
- <br>
- DataType(H5File& h5file, const void* ref, H5R_type_t ref_type = H5R_OBJECT);
- <br>
- DataType(Attribute& attr, const void* ref, H5R_type_t ref_type = H5R_OBJECT);</code>
- <br>
- have changed to
- <br>
- <code> DataType(const H5Location& loc, const void* ref, H5R_type_t ref_type = H5R_OBJECT);
- <br>
- DataType(const Attribute& attr, const void* ref, H5R_type_t ref_type = H5R_OBJECT);</code>
- <br>
- <code>   [...]
-
- <li>These constructors
- <br>
- <code> Group(H5Object& obj, const void* ref, H5R_type_t ref_type = H5R_OBJECT);
- <br>
- Group(H5File& h5file, const void* ref, H5R_type_t ref_type = H5R_OBJECT);
- <br>
- Group(Attribute& attr, const void* ref, H5R_type_t ref_type = H5R_OBJECT);</code>
- <br>
- have changed to
- <br>
- <code> Group(const H5Location& loc, const void* ref, H5R_type_t ref_type = H5R_OBJECT);
- <br>
- Group(const Attribute& attr, const void* ref, H5R_type_t ref_type = H5R_OBJECT);</code>
- </td></tr></table>
- <p />
-
-<!--
-
- <dd><pre>
- DataSet(H5Object& obj, const void* ref, H5R_type_t ref_type = H5R_OBJECT);
- DataSet(H5File& h5file, const void* ref, H5R_type_t ref_type = H5R_OBJECT);
- DataSet(Attribute& attr, const void* ref, H5R_type_t ref_type = H5R_OBJECT);
- have changed to
- DataSet(const H5Location& loc, const void* ref, H5R_type_t ref_type = H5R_OBJECT);
- DataSet(const Attribute& attr, const void* ref, H5R_type_t ref_type = H5R_OBJECT);
-
- DataType(H5Object& obj, const void* ref, H5R_type_t ref_type = H5R_OBJECT);
- DataType(H5File& h5file, const void* ref, H5R_type_t ref_type = H5R_OBJECT);
- DataType(Attribute& attr, const void* ref, H5R_type_t ref_type = H5R_OBJECT);
- have changed to
- DataType(const H5Location& loc, const void* ref, H5R_type_t ref_type = H5R_OBJECT);
- DataType(const Attribute& attr, const void* ref, H5R_type_t ref_type = H5R_OBJECT);
-
- Group(H5Object& obj, const void* ref, H5R_type_t ref_type = H5R_OBJECT);
- Group(H5File& h5file, const void* ref, H5R_type_t ref_type = H5R_OBJECT);
- Group(Attribute& attr, const void* ref, H5R_type_t ref_type = H5R_OBJECT);
- have changed to
- Group(const H5Location& loc, const void* ref, H5R_type_t ref_type = H5R_OBJECT);
- Group(const Attribute& attr, const void* ref, H5R_type_t ref_type = H5R_OBJECT);
- </pre>
-
-
-
- <dt>The following new C++ classes, wrappers, and functions
- have been added:
- </dt>
- <dd>
- <dl>
- <dt><code>H5::H5Location</code>
- <dd>Class added to represent the location concept
- in the C library, where it is most often
- represented as a <code>loc_id</code>
- return type or parameter
- <dt><code>H5Location::getRefObjType</code>
- <dd>Wrapper added for the C function
- <code> H5Rget_obj_type2</code>
- to retrieve the type of the object
- that an object reference points to.
- <dt><code>H5::H5Location::attrExists</code>
- <dd>Overloaded wrapper added for the C function
- <code>H5Aexist</code> to determine whether a
- given attribute exists.
- <dt><code>list_will_be_inserted_here</code>
- <dd>Overloaded functions added for convenience.
- </dl>
--->
-
-<!--
- <p>
- <dt><strong>In the Fortran Interface</strong>
-
- <dt>The following new Fortran subroutines have been added:
- <dd><i>These changes are not yet available.</i>
- <dd>Fortran90 subroutines:
- <table width="100%" border="0">
- <tr><td align="left" valign="top" width="50%">
- <ul>
- <li><code>__</code>
- </ul>
- </td><td align="left" valign="top" width="50%">
- <ul>
- <li><code>__</code>
- </ul>
- </td></tr>
- <td align="left" valign="top" colspan="2">
- </td></tr>
- </table>
- </dd>
-
-
- <dd>Fortran2003 subroutines:
- <table width="100%" border="0">
- <tr><td align="left" valign="top" width="50%">
- <ul>
- <li><code>__</code>
- </ul>
- </td><td align="left" valign="top" width="50%">
- <ul>
- <li><code>__</code>
- </ul>
- </td></tr>
- </table>
- </dd>
--->
- </dl>
- </dir>
-
-<!--
-
- <h3>New Feature: <feature_name></h3>
- <dir>
- <Description>
- <p>
- See “<a href="../Advanced/_dirs_/_file_">__</a>”
- for further information.
- </dir>
-
--->
-
- <h3>New Command-line Tool Options and Option Parameters</h3>
- <dir>
- <dl>
- <dt><a href="../RM/Tools.html#Tools-Dump">
- <code>h5dump</code></a>
- <dd><code>h5dump</code> has a new option for identifying
- objects by a full or partial path:
- <br>
- <code> -N<i>P</i></code>
- <br>
- <code> --any-path=<i>P</i></code>
- <br>
-
- <dd>The <code>h5dump</code> attributes-only option,
- <code>-A</code> or <code>--only-attr</code>,
- now accepts an optional parameter value
- of <code>0</code> (zero):
- <br>
- <code> -A 0</code>
- <br>
- <code> --only-attr=0</code>
- <br>
- Specifying this value has the effect of reversing
- the role of the option to display everything
- <i>except</i> attributes.
- <br>
-
- <dt><a href="../RM/Tools.html#Tools-Repack">
- <code>h5repack</code></a>
- <dd>The <code>h5repack</code> option
- <code>-f</code>, <code>--filter</code>
- has a new parameter, <code>UD</code>,
- to enable the use of user-defined filters:
- <br>
- <code> -f UD=<i><filter_parameters></i></code>
- <br>
- <code> --filter=UD=<i><filter_parameters></i></code>
- <br>
-
- <dt><a href="../RM/Tools.html#Tools-Stat">
- <code>h5stat</code></a>
- <dd><code>h5stat</code> has three new options for setting
- print thresholds:
- <br>
- <code> </code>For attributes:
- <br>
- <code> -a<i>N</i></code>
- <br>
- <code> --attribute=<i>N</i></code>
- <br>
-
- <br>
- <code> </code>For links in a group:
- <br>
- <code> -l<i>N</i></code>
- <br>
- <code> --links=<i>N</i></code>
- <br>
-
- <br>
- <code> </code>For dimension sizes:
- <br>
- <code> -m<i>N</i></code>
- <br>
- <code> --dims=<i>N</i></code>
-
- </dl>
- </dir>
-
-
- <h3>Build and Configuration</h3>
- <dir>
- <dl>
- <dt>CMake and Autotools configuration
- <dd>A new configuration option can be used to change the default
- <a href="../Advanced/DynamicallyLoadedFilters/HDF5DynamicallyLoadedFilters.pdf">plugin</a> path:
- <table>
- <tr><td><code> </code></td>
- <td>Autotools <code>configure</code> option</td>
- <td> </td>
- <td><code>--with-default-plugindir=location</code></td>
- </tr>
- <tr><td> </td>
- <td><code>cmake</code> option</td>
- <td> </td>
- <td><code>-DH5_DEFAULT_PLUGINDIR:PATH=location</code></td>
- </tr>
- </table>
- <p />
-
- <dt>CMake configuration
- <dd>CMake builds of HDF5 now create
- <code>*.so.{lt_version}</code>
- files with the same version as <code>configure</code>.
- <p />
-
- <dt>Autotools <code>configure</code> flag
- <dd>The <code>configure</code> flag
- <code>FFLAGS</code> has been renamed to <code>FCFLAGS</code>.
-
- </dl>
- </dir>
-
-
-
-<!--
- <h3>Functions, Subroutines, Wrappers, Macros,
- and Features with Changed Syntax or Behavior</h3>
- <dir>
- <dl>
- <dt>High-level C functions
- <dd>...
- <ul>
- <li><a href="../HL/RM_H5DS.html#H5DSget_scale_name">
- <code>H5DSget_scale_name</code></a>
- </ul>
- This function has been changed to <i>not</i>
- include the NULL terminator in the returned size of
- of the dimension scale name (bug fix).
- </dd>
-
- <p>
- <dt>
- Fortran subroutines
- </dt>
- <dd>...
- <ul>
- <li><code>h5pset_external_f</code> and
- <li><code>h5pget_external_f</code>
- </ul>
- the type of the <code>offset</code> parameter has changed to
- <code>INTEGER(KIND=OFF_T)</code> to support 8-byte integers,
- matching the C type definition of <code>off_t</code>.
- </dt>
- <dd>
-
- <dl>
- </dir>
--->
-
-
-<!--
- <h3>Deprecated Functions</h3>
- <dir>
-
- <dl>
- <dt>The following C function has been deprecated:
- </dt>
- <dd>
- <li><a href="../RM/RM_H5P.html#Property-property">
- <code>H5Pproperty</code></a>
- </dd>
- <p>
- This function may be removed from the library
- in a future release.
- </dl>
- </dir>
--->
-
-
- <h3>Compile Scripts with Changed Behavior</h3>
- <dir>
- <dl>
- <dt><a href="../RM/Tools.html#Tools-H5CC">
- <code>h5cc</code> and <code>h5pcc</code></a>
- <dt><a href="../RM/Tools.html#Tools-H5C++">
- <code>h5c++</code></a>
- <dt><a href="../RM/Tools.html#Tools-H5FC">
- <code>h5fc</code> and <code>h5pfc</code></a>
-
- <dd>These compile scripts have been modified
- to change the default behavior
- to link to shared libraries in environments where
- HDF5 has been configured with <code>--disable-static</code>.
- </dl>
- </dir>
-
-
- <h3>Command-line Tools with Changed Behavior</h3>
- <dir>
- <dl>
- <dt><a href="../RM/Tools.html#Tools-Dump">
- <code>h5dump</code></a>
- <dd><code>h5dump</code> output now displays
- <br>
- <code>USER_DEFINED_FILTER</code>
- <br>
- where it previously displayed <code>UNKNOWN_FILTER</code>.
- <br>
-
- <dd><code>h5dump</code> now correctly exports subsetted data
- to a file using the
- <code>-o</code>, <code>--output</code> option.
-
- </dl>
- </dir>
-
-
-<!--
- <h3>Removed Functions and Wrappers</h3>
- <dir>
- <dl>
- <dt>The following C functions and
- the corresponding C++ wrappers
- have been removed:
- </dt>
- <dd>
- <ul>
- <li><code>H5Pset_dxpl_multi</code>
- <li><code>H5Pget_dxpl_multi</code>
- <br>
- <li><code>H5::DSetMemXferPropList:setMulti</code>
- <li><code>H5::DSetMemXferPropList:getMulti</code>
- </ul>
- </dd>
- </dl>
- </dir>
--->
-
-</dir>
-
-
-<a name="1811">
-<h2>Release 1.8.11 of May 2013 versus Release 1.8.10</h2>
-</a>
-<dir>
-
-This section lists interface-level changes and
-other user-visible changes in behavior
-in the transition from HDF5 Release 1.8.10 to Release 1.8.11.
-
-
- <h3>New and Changed Functions and Subroutines <!--and Macros--></h3>
- <dir>
- <dl>
- <dt>The following new high-level C function has been added:
- </dt>
- <dd>
- <ul>
- <li><a href="../HL/RM_HDF5Optimized.html#H5DOwrite_chunk">
- <code>H5DOwrite_chunk</code></a>
- </ul>
- This function writes a data chunk directly into a file,
- bypassing hyperslab selection, data conversion, and
- the filter pipeline.
- The user must be careful with the function and
- clearly understand the I/O process of the library.
- See “<a
- href="../Advanced/DirectChunkWrite/index.html">Direct
- Chunk Write</a>” for additional information.
- <p>
- <code>H5DOwrite_chunk</code> is the first function in
- HDF5’s new high-level
- “<a href="../HL/RM_HDF5Optimized.html">HDF5
- Optimized Functions</a>” library.
- </dd>
-
- <p>
- <dt>The following new C functions have been added:
- </dt>
- <dd>
- <ul>
- <li><a href="../RM/RM_H5D.html#Dataset-Scatter">
- <code>H5Dscatter</code></a>
- <li><a href="../RM/RM_H5D.html#Dataset-Gather">
- <code>H5Dgather</code></a>
- </ul>
-
- These functions scatter data to and gather data from
- a selection within a memory buffer.
- </dd>
-
- <p>
- <dt>The following new Fortran subroutines have been added:
- </dt>
- <dd>Fortran90 subroutines:
- <table width="100%" border="0">
- <tr><td align="left" valign="top" width="50%">
- <ul>
- <li><code>h5odecr_refcount_f</code>
- <li><code>h5oexists_by_name_f</code>
- <li><code>h5oget_comment_f</code>
- <li><code>h5oget_comment_by_name_f</code>
- </ul>
- </td><td align="left" valign="top" width="50%">
- <ul>
- <li><code>h5oincr_refcount_f</code>
- <li><code>h5oopen_by_idx_f</code>
- <li><code>h5oset_comment_f</code>
- <li><code>h5oset_comment_by_name_f</code>
- </ul>
- </td></tr>
- <td align="left" valign="top" colspan="2">
- <br>
- <ul>
- <li><code>h5oclose_f</code> was introduced in
- HDF5 Release 1.8.8 but remained undocumented
- until this release.
- </ul>
- </td></tr>
- </table>
- </dd>
-
-
- <dd>Fortran2003 subroutines:
- <table width="100%" border="0">
- <tr><td align="left" valign="top" width="50%">
- <ul>
- <li><code>h5oget_info_f</code>
- <li><code>h5oget_info_by_idx_f</code>
- </ul>
- </td><td align="left" valign="top" width="50%">
- <ul>
- <li><code>h5ovisit_by_name_f</code>
- </ul>
- </td></tr>
- </table>
- </dd>
- </dl>
- </dir>
-
-
- <h3>New Feature: Dynamically Loaded Filters</h3>
- <dir>
- HDF5 now detects and dynamically loads external filters,
- reducing the need for an application to register custom filters
- or for a developer building on HDF5 to compile a custom filter
- into a customized HDF5 distribution.
- <p>
- See “<a href="../Advanced/DynamicallyLoadedFilters/HDF5DynamicallyLoadedFilters.pdf">HDF5
- Dynamically Loaded Filters</a>” (PDF only)
- for further information.
- </dir>
-
-
- <h3>New Command-line Tool Option</h3>
- <dir>
- <dl>
- <dt><a href="../RM/Tools.html#Tools-Dump">
- <code>h5dump</code></a> and
- <a href="../RM/Tools.html#Tools-Import">
- <code>h5import</code></a>
- <dd><code>h5dump</code> has a new option
- to output the DDL structure of a file or object:
- <br>
- <code> -O<i><file_name></i></code>
- <br>
- <code> --ddl=<i><file_name></i></code>
- <br>
- [‘<code>-O</code>’ above is
- ‘dash-uppercase-o’.]
-
- <p>
- <code>h5import</code> can now take the output of
- <br>
- <code> h5dump -O<i><ddl_file_name></i>
- -o<i><data_file_name></i>
- </code>
- <br>
- directly as input files.
- <br>
- See “<a
- href="../RM/Tools.html#Tools-Import-UsingDump">Using
- <code>h5dump</code> to create input for
- <code>h5import</code></a>” in the <code>h5import</code>
- reference manual entry.
- </dl>
- </dir>
-
-
- <h3>New Configuration and Build Tool</h3>
- <dir>
- <dl>
- <dt><code>cmakehdf5</code>
- <dd>This new build command script is similar to
- <code>buildhdf5</code>
- and is available in the <code>bin/</code>
- directory of the distributed source code.
- <p>
- For HDF5, the CMake minimum is now 2.8.10.
- </dl>
- </dir>
-
-
-
- <h3>Function<!--s-->, Subroutines, <!--Wrappers, Macros,-->
- and Feature<!--s--> with Changed Syntax or Behavior</h3>
- <dir>
- <dl>
- <dt>The return value of the following high-level C function
- has changed:
- </dt>
- <dd>
- <ul>
- <li><a href="../HL/RM_H5DS.html#H5DSget_scale_name">
- <code>H5DSget_scale_name</code></a>
- </ul>
- This function has been changed to <i>not</i>
- include the NULL terminator in the returned size of
- of the dimension scale name (bug fix).
- </dd>
-
- <p>
- <dt>
- In the Fortran subroutines
- </dt>
- <dd>
- <ul>
- <li><code>h5pset_external_f</code> and
- <li><code>h5pget_external_f</code>
- </ul>
- the type of the <code>offset</code> parameter has changed to
- <code>INTEGER(KIND=OFF_T)</code> to support 8-byte integers,
- matching the C type definition of <code>off_t</code>.
- </dt>
- <dd>
-
- <p>
- <dt>The HDF5 Library now supports data conversion from
- enumeration to integer and floating-point numeric datatypes.
- <!-- See Issue 8221. -->
- </dt>
-
- <dl>
- </dir>
-
-
-<!-- DEPRECATION OF H5Pset_fapl_multi IS ON HOLD PENDING FURTHER INVESTIGATION.
- <h3>Deprecated Function</h3>
- <dir>
- <dl>
- <dt>The following C function has been deprecated:
- </dt>
- <dd>
- <li><a href="../RM/RM_H5P.html#Property-SetFcplMulti">
- <code>H5Pset_fapl_multi</code></a>
- </dd>
- <p>
- This function may be removed from the library
- in a future release.
- </dl>
- </dir>
--->
-
-
- <h3><!--New andChanged -->Command-line Tools with Changed Behavior</h3>
- <dir>
- <dl>
- <dt><a href="../RM/Tools.html#Tools-Diff">
- <code>h5diff</code></a>
- <dd>When comparing two files or objects,
- <code>h5diff</code> now recognizes a unique extra attribute
- attached to an object as a difference and
- returns with an exit code of <code>1</code>.
- <p>
- Previously, <code>h5diff</code> did not recognize the
- extra attribute as a difference.
- </dt>
-
- <p>
- <dt><a href="../RM/Tools.html#Tools-Ls">
- <code>h5ls</code></a>
- <dd>The content of the <code>h5ls --help</code>
- output has been revised.
-
- <p>
- <dt><a href="../RM/Tools.html#Tools-Dump">
- <code>h5dump</code></a>
- <dd><code>h5dump</code> has been updated to display the
- compression ratio for user-defined filters.
- <dd>In <code>h5dump</code> output,
- <code>UNKNOWN_FILTER</code> has been changed to
- <code>USER_DEFINED_FILTER</code>.
- </dl>
- </dir>
-
-
- <h3>Removed Functions and Wrappers</h3>
- <dir>
- <dl>
- <dt>The following C functions and
- the corresponding C++ wrappers
- have been removed:
- </dt>
- <dd>
- <ul>
- <li><code>H5Pset_dxpl_multi</code>
- <li><code>H5Pget_dxpl_multi</code>
- <br>
- <li><code>H5::DSetMemXferPropList:setMulti</code>
- <li><code>H5::DSetMemXferPropList:getMulti</code>
- </ul>
- </dd>
- </dl>
- </dir>
-
-
-</dir>
-
-
-<a name="1810">
-<h2>Release 1.8.10 of November 2012 versus Release 1.8.9</h2>
-</a>
-<dir>
-
-This section lists interface-level changes and
-other user-visible changes in behavior
-in the transition from HDF5 Release 1.8.9 to Release 1.8.10.
-
-
- <h3>New and Changed Functions and Subroutines <!--and Macros--></h3>
- <dir>
- <dl>
- <dt>The following new C function has been added:
- </dt>
- <dd>
- <li><code>H5Pget_mpio_no_collective_cause</code>
- </dd>
-
- <p>
- <dt>The following new Fortran subroutine has been added:
- </dt>
- <dd>
- <li><code>h5pget_mpio_actual_io_mode_f</code>
- </dd>
-
- <p>
- <dt>The syntax of the following high-level C function has changed:
- </dt>
- <dd>
- <li><code>H5TBAget_fill</code>
- <br>
- This function’s return type has been changed to
- <code>h5tri_t</code>.
- A return value of
- <code>1</code> indicates that a fill value is present,
- <code>0</code> indicates that no fill value is present,
- and a negative value indicates an error.
- (The former return type was <code>herr_t</code>.)
- <p>
- Note that <code>H5TBAget_fill</code>
- and a companion function <code>H5TBAget_title</code>,
- both in the HDF5 Table (H5TB) high-level API,
- are undocumented.
- These functions will be added to the
- <cite>HDF5 Reference Manual</cite>
- shortly after HDF5 Release 1.8.10.
- </dd>
-
- </dl>
- </dir>
-
- <h3><!--New and -->Changed Command-line Tool<!--s--></h3>
- <dir>
- <dl>
- <dt><code>h5import</code> has been updated to
- accept an input file created by <code>h5dump</code>.
- </dt>
- </dl>
- </dir>
-
-</dir>
-
-
-<a name="189">
-<h2>Release 1.8.9 of May 2012 versus Release 1.8.8</h2>
-</a>
-<dir>
-
-This section lists interface-level changes and
-other user-visible changes in behavior
-in the transition from HDF5 Release 1.8.8 to Release 1.8.9.
-
-
- <h3>New and Changed Functions <!--and Macros--></h3>
-
- <dl>
- <dd>A new high level C function and Fortran subroutine were added
- to HDF5 Lite (<a href="../HL/RM_H5LT.html">H5LT</a>)
- to determine whether an HDF5 path is correct
- and resolves to a valid HDF5 object:
- <ul>
- <li><a href="../HL/RM_H5LT.html#H5LTpath_valid">
- <code>H5LTpath_valid</code></a>
- <li><a href="../HL/RM_H5LT.html#H5LTpath_valid">
- <code>h5ltpath_valid_f</code></a>
- </ul>
-
- <br>
- <p>
- <dd>The new file image operations feature consists of the
- following functions and their associated callbacks,
- struct, and <small>ENUM</small>.
- This feature enables an application to load a file
- into memory (as a file image) and to operate on that
- file image without the overhead of disk I/O.
- This feature provides the following functions:
- <table width="90%">
- <tr valign="top">
- <td width="46%">
- <ul>
- <li><a href="../HL/RM_H5LT.html#H5LTopen_file_image">
- <code>H5LTopen_file_image</code></a>
- <li><a href="../RM/RM_H5F.html#File-GetFileImage">
- <code>H5Fget_file_image</code></a>
- </ul>
- </td><td width="4%"> </td><td> </td>
- </tr><tr vilign="top">
- <td>
- <ul>
- <li><a href="../RM/RM_H5P.html#Property-SetFileImage">
- <code>H5Pset_file_image</code></a>
- <li><a href="../RM/RM_H5P.html#Property-GetFileImage">
- <code>H5Pget_file_image</code></a>
- <ul>
- </td><td width="4%"> </td><td width="46%">
- <ul>
- <li><a href="../RM/RM_H5P.html#Property-SetFileImageCallbacks">
- <code>H5Pset_file_image_callbacks</code></a>
- <li><a href="../RM/RM_H5P.html#Property-GetFileImageCallbacks">
- <code>H5Pget_file_image_callbacks</code></a>
- </ul>
- </table>
- <dd>For the callbacks, struct,
- and <small>ENUM</small>, see
- <a href="../RM/RM_H5P.html#Property-SetFileImageCallbacks">
- <code>H5Pset_file_image_callbacks</code></a>.
- <dd>Use of this feature is described in
- “<a href="../Advanced/FileImageOperations/HDF5FileImageOperations.pdf">HDF5
- File Image Operations</a>” (PDF).
-
- <br>
- <p>
- <dd>The following functions were modified or added to
- the HDF5 Library to allow an application to control
- the operation of copying committed datatypes with
- <a href="../RM/RM_H5O.html#Object-Copy">
- <code>H5Ocopy</code></a>:
- <dd><i>Function with changed interface:</i>
- <ul>
- <li><a href="../RM/RM_H5P.html#Property-SetCopyObject">
- <code>H5Pset_copy_object</code></a>
- </ul>
- <dd><i>New flag for use with <code>H5Pset_copy_object</code>:</i>
- <ul>
- <li><a href="../RM/RM_H5P.html#Property-SetCopyObject">
- <code>H5O_COPY_MERGE_COMMITTED_DTYPE_FLAG</code></a>
- </ul>
- <dd><i>Function with changed behavior:</i>
- <ul>
- <li><a href="../RM/RM_H5O.html#Object-Copy">
- <code>H5Ocopy</code></a>
- <br>
- This function’s behavior is changed,
- but only with the use of the new flag,
- <code>H5O_COPY_MERGE_COMMITTED_DTYPE_FLAG</code>.
- </ul>
-
- <dd><i>New functions and callback function:</i>
- <table width="90%">
- <tr valign="top">
- <td width="46%">
- <ul>
- <li><a href="../RM/RM_H5P.html#Property-SetMcdtSearchCb">
- <code>H5Pset_mcdt_search_cb</code></a>
- <li><a href="../RM/RM_H5P.html#Property-GetMcdtSearchCb">
- <code>H5Pget_mcdt_search_cb</code></a>
- <li><a href="../RM/RM_H5O.html#Object-McdtSearchCb_t">
- <code>H5O_mcdt_search_cb_t</code></a>
- </ul>
- </td><td width="4%"> </td><td width="46%">
- <ul>
- <li><a href="../RM/RM_H5P.html#Property-AddMergeCommittedDtypePath">
- <code>H5Padd_merge_committed_dtype_path</code></a>
- <li><a href="../RM/RM_H5P.html#Property-FreeMergeCommittedDtypePaths">
- <code>H5Pfree_merge_committed_dtype_paths</code></a>
- </ul>
- </td></tr>
- </table>
- <dd>Use of this capability is described in
- “<a href="../Advanced/CommittedDatatypeCopying/CopyingCommittedDatatypesWithH5Ocopy.pdf">Copying
- Committed Datatypes with
- <code>H5Ocopy</code></a>” (PDF).
-
- <br>
- <p>
- <!-- KEEP THE FOLLOWING ENTRY LAST IN THE 'NEW FUNCTIONS' SECTION. -->
- <dd>The following C functions and Fortran subroutines
- were added to provide a mechanism
- to ensure sequential consistency
- in parallel environments using MPI I/O:
- <table width="90%">
- <tr valign="top">
- <td width="46%">
- <ul>
- <li><a href="../RM/RM_H5F.html#File-SetMpiAtomicity">
- <code>H5Fset_mpi_atomicity</code></a>
- <li><a href="../RM/RM_H5F.html#File-GetMpiAtomicity">
- <code>H5Fget_mpi_atomicity</code></a>
- </ul>
- </td><td width="4%"> </td><td width="46%">
- <ul>
- <li><a href="../RM/RM_H5F.html#File-SetMpiAtomicity">
- <code>h5fset_mpi_atomicity_f</code></a>
- <li><a href="../RM/RM_H5F.html#File-GetMpiAtomicity">
- <code>h5fget_mpi_atomicity_f</code></a>
- </ul>
- </td></tr>
- </table>
- <dd>Use of this capability is described in
- “<a href="../Advanced/PHDF5FileConsistencySemantics/PHDF5FileConsistencySemantics.pdf">Enabling
- a Strict Consistency Semantics Model in
- Parallel HDF5</a>” (PDF).
-
- <br>
- <p>
- <dd>The following function was added at Release 1.8.5
- but was not documented at that time.
- It is mentioned here for those who may have missed its
- introduction:
- <ul>
- <li><a href="../RM/RM_H5O.html#Object-ExistsByName">
- <code>H5Oexists_by_name</code></a>
- </ul>
- </dl>
-</dir>
-
-
-<dir>
- <h3>New Fortran Subroutines</h3>
-
- <dl>
- <dd>The following Fortran subroutines have been added
- in this release:
- <ul>
- <li><a href="../HL/RM_H5LT.html#H5LTpath_valid">
- <code>h5ltpath_valid_f</code></a>
- <li><a href="../RM/RM_H5O.html#Object-Copy">
- <code>h5ocopy_f</code></a>
- <li><a href="../RM/RM_H5F.html#File-SetMpiAtomicity">
- <code>h5fset_mpi_atomicity_f</code></a>
- <li><a href="../RM/RM_H5F.html#File-GetMpiAtomicity">
- <code>h5fget_mpi_atomicity_f</code></a>
- </ul>
- Where a subroutine is part of a new HDF5 feature,
- that feature is described above.
- </dl>
-
-
- <h3>Fortran Subroutine with Changed Behavior</h3>
-
- <dl>
- <dd>The content of the buffer returned by the following
- Fortran subroutine has changed as noted:
- <ul>
- <li><a href="../HL/RM_H5LT.html#H5LTget_attribute_string">
- <code>h5ltget_attribute_string_f</code></a>
- <br>
- If the returned buffer requires padding,
- <code>h5ltget_attribute_string_f</code>
- now employs space padding;
- this buffer was previously returned with a
- C <small>NULL</small> terminator.
- </ul>
- </dl>
-
-
-</dir>
-
-
-<dir>
-<!--
- <h3>New Command-line Utility</h3>
-
- <dl>
- <dd>
- <font color="red"><i>Nothing recorded in RELEASE.txt.</i></font>
- </dd>
- </dl>
-
--->
-
-
- <h3>Command-line Utilities with New Options and/or Changed Behavior</h3>
-
- <dl>
- <dd>
- <dd><a href="../RM/Tools.html#Tools-Repack"><code>h5repack</code></a>
- has one new option and
- improved performance under certain circumstances:
- <ul>
- <li><code>‐M<em>n</em>,
- ‐‐metadata_block_size=<em>n</em></code>
- <br>
- Sets the metadata block size in the output file.
- <br> </li>
- <li>Performance is improved when repacking
- large chunked datasets
- (for example, when dataset size exceeds 128 MB).
- </ul>
-
- <br>
- <dd><a href="../RM/Tools.html#Tools-Stat"><code>h5stat</code></a>
- has one new option:
- <ul>
- <li><code>‐S,
- ‐‐summary</code>
- <br>
- Displays a summary of file space usage for a file.</li>
- </ul>
-
- <br>
- <dd><a href="../RM/Tools.html#Tools-Dump"><code>h5dump</code></a>
- has one new option, a new capability, and updated output:
- <ul>
- <li><code>‐‐no-compact-subset</code>
- <br>
- Disables compact subsetting to allow
- the left-hand square bracket character
- ( <font size="+1"><code>[</code></font> )
- in a dataset name.
- <br> </li>
- <li>The <code>files</code> parameter now accommodates
- wildcards. With this change, <code>h5dump</code>
- command-line options can be applied across multiple
- files without listing the files individually.
- <br> </li>
- <li><code>h5dump</code> output has been updated for
- this release to improve compliance with the
- HDF5 DDL <a href="../ddl.html">specification</a>
- and to improve readablilty.
- This output is now fully compliant with the
- HDF5 DDL specification, but these changes may affect
- some user scripts:
- <ul>
- <li>Whitespace has been modified.
- <li>Display errors, such as misplaced brackets,
- have been fixed.
- <li>When printing superblock content,
- user block content is now properly displayed within
- the superblock.
- </ul></li>
- </ul>
- </dl>
-
-</dir>
-
-
-
-
-<a name="188">
-<h2>Release 1.8.8 of November 2011 versus Release 1.8.7</h2>
-</a>
-<dir>
-
-This section lists interface-level changes and
-other user-visible changes in behavior
-in the transition from HDF5 Release 1.8.7 to Release 1.8.8.
-
-
- <h3>New C Functions <!--and Macros--></h3>
-
- <dl>
- <dd>Two new parallel I/O functions enable an application
- to query whether or how a collective I/O operation
- actually completed:
- <ul>
- <li><a href="../RM/RM_H5P.html#Property-GetMpioActualChunkOptMode">
- <code>H5Pget_mpio_actual_chunk_opt_mode</code></a>
- <li><a href="../RM/RM_H5P.html#Property-GetMpioActualIoMode">
- <code>H5Pget_mpio_actual_io_mode</code></a>
- </ul>
- </dl>
-
-<!--
- <dl>
- <dd>Two new functions enable an application to ...
- <ul>
- <li><a href="../RM/RM_H5P.html#Property-Get...">
- <code>H5Pget_...</code></a>
- </ul>
- </dl>
--->
-</dir>
-
-<dir>
- <h3>Updated Fortran Interface, including Fortran 2003 Features</h3>
- <dl>
- <dd>
-
- <p>
- The HDF5 Fortran interface has been extended and
- upgraded to Fortran 2003 for this release.
-
- <p>
- See “Configure and Build Changes” below
- for the configure options to use when building HDF5 with
- Fortran 2003 enabled.
-
- <p>
- Features enabled in this upgrade are described in
- <a href="../fortran/NewFeatures_F2003.pdf">
- <cite>New Features in the HDF5 Fortran Library:
- Adding Support for the Fortran 2003 Standard</cite></a>
- (PDF only).
- In general, the links below are to technical descriptions
- (reference manual entries, for example) of specific
- interfaces.
-
- <p>
- <b>Terminology:</b>
- If the Fortran compiler in use is Fortran 2003 compliant
- and the installed HDF5 Library was configured using both the
- <code>--enable-fortran</code> and
- <code>--enable-fortran2003</code> flags,
- the resulting HDF5 Fortran Library is referred to below as a
- <i>Fortran 2003 environment</i>.
- Without either of the Fortran 2003 compliant compiler
- or the <code>--enable-fortran2003</code> flag, the resulting
- HDF5 Fortran Library is referred to below as a
- <i>Fortran 90 environment</i>.
-
- <p>
- <b>New Fortran 2003-only subroutines</b>
- <br>
- New subroutines available only in Fortran 2003 environments:
- <ul>
- <li><a href="../RM/RM_H5D.html#Dataset-VLReclaim">
- <code>h5dvlen_reclaim_f</code></a>
- <li><a href="../RM/RM_H5E.html#Error-SetAuto">
- <code>h5eset_auto_f</code></a>
- <li><a href="../RM/RM_H5L.html#Link-IterateByName">
- <code>h5literate_by_name_f</code></a>
- <li><a href="../RM/RM_H5L.html#Link-Iterate">
- <code>h5literate_f</code></a>
- <li><a href="../RM/RM_H5O.html#Object-Visit">
- <code>h5ovisit_f</code></a>
- <li><a href="../RM/RM_H5O.html#Object-GetInfoByName">
- <code>h5oget_info_by_name_f</code></a>
- <li><a href="../RM/RM_H5T.html#Datatype-Convert">
- <code>h5tconvert_f</code></a>
- </ul>
-
- <p>
- <b>Subroutines with Fortran 90 versions and
- extended features in Fortran 2003 environments</b>
- <br>
- Subroutines in this section have extended support in
- Fortran 2003 environments, but are new or unchanged in
- Fortran 90 environments.
- <p>
- All existing Fortran 90 subroutines, including those
- not mentioned below, are available in both Fortran 90
- and Fortran 2003 environments.
-
- <p>
- Subroutines with support for the derived type
- <code>C_PTR</code> in Fortran 2003 environments:
- <ul>
- <li><a href="../RM/RM_H5P.html#Property-Get">
- <code>h5pget_f</code></a>
- <li><a href="../RM/RM_H5P.html#Property-GetFillValue">
- <code>h5pget_fill_value_f</code></a>
- <li><a href="../RM/RM_H5P.html#Property-Insert">
- <code>h5pinsert_f</code></a>
- <li><a href="../RM/RM_H5P.html#Property-Register">
- <code>h5pregister_f</code></a>
- <li><a href="../RM/RM_H5P.html#Property-Set">
- <code>h5pset_f</code></a>
- <li><a href="../RM/RM_H5P.html#Property-SetFillValue">
- <code>h5pset_fill_value_f</code></a>
- <li><a href="../RM/RM_H5R.html#Reference-Create">
- <code>h5rcreate_f</code></a>
- <li><a href="../RM/RM_H5R.html#Reference-Dereference">
- <code>h5rdereference_f</code></a>
- <li><a href="../RM/RM_H5R.html#Reference-GetName">
- <code>h5rget_name_f</code></a>
- <li><a href="../RM/RM_H5R.html#Reference-GetObjType">
- <code>h5rget_object_type_f</code></a>
- </ul>
-
- <p>
- Subroutines with support for the derived type
- <code>C_PTR</code> and a changed signature
- in Fortran 2003 environments:
- <ul>
- <li><a href="../RM/RM_H5A.html#Annot-Read">
- <code>h5aread_f</code></a>
- <li><a href="../RM/RM_H5A.html#Annot-Write">
- <code>h5awrite_f</code></a>
- <li><a href="../RM/RM_H5D.html#Dataset-Read">
- <code>h5dread_f</code></a>
- <li><a href="../RM/RM_H5D.html#Dataset-Write">
- <code>h5dwrite_f</code></a>
- </ul>
-
- <p>
- Subroutine with additional optional parameters in
- Fortran 2003 environments:
- <ul>
- <li><a href="../RM/RM_H5P.html#Property-CreateClass">
- <code>h5pcreate_class_f</code></a>
- </ul>
-
- <p>
- <b>New and updated Fortran 90 subroutines</b>
- <br>
- New Fortran 90 subroutines:
- <ul>
- <li><a href="../RM/RM_H5P.html#Property-SetNbit">
- <code>h5pset_nbit_f</code></a>
- <li><a href="../RM/RM_H5P.html#Property-SetScaleoffset">
- <code>h5pset_scaleoffset_f</code></a>
- </ul>
-
- <p>
- Updated Fortran 90 subroutines:
- <ul>
- <li><a href="../RM/RM_H5.html#Library-Open">
- <code>h5open_f</code></a>
- <li><a href="../RM/RM_H5.html#Library-Close">
- <code>h5close_f</code></a> *
- <li><a href="../RM/RM_H5.html#Library-VersCheck">
- <code>h5check_version_f</code></a>
- <li><a href="../RM/RM_H5.html#Library-Version">
- <code>h5get_libversion_f</code></a>
- <li><a href="../RM/RM_H5.html#Library-GarbageCollect">
- <code>h5garbage_collect_f</code></a>
- <li><a href="../RM/RM_H5.html#Library-DontAtExit">
- <code>h5dont_atexit_f</code></a>
- </ul>
- <p>
- <dir>
- * <code>h5close_f</code> has been modified in
- this release to close only the HDF5 Fortran Library
- interface; it no longer closes the underlying
- HDF5 Library.
- </dir>
-
- <p>
- <b>New Fortran utility functions and derived types</b>
- <br>
- New Fortran utility functions:
- <ul>
- <li><code><a href="../fortran/FortranFlags.html#Fortran-h5offsetof">h5offsetof</a>   </code>
- Available only in Fortran 2003 environments.
- <li><code><a href="../fortran/FortranFlags.html#Fortran-h5kind_to_type">h5kind_to_type</a> </code>
- Available in either Fortran environment.
- </ul>
-
- <p>
- New Fortran derived types in Fortran 2003 environments:
- <ul>
- <li><code>hvl_t </code>
-
- Described in <a href="../fortran/NewFeatures_F2003.pdf">
- <cite>New Features</cite></a>.
- <li><code>h5o_info_t </code>
-
- See <a href="../RM/RM_H5O.html#Object-Visit">
- <code>h5ovisit_f</code></a>.
-<!-- THIS STRUCT APPEARS TO HAVE NEVER EXISTED
- <li><code>h5l_info_t </code>
-
- See <a href="../RM/RM_H5L.html#Link-Iterate">
- <code>h5literate_f</code></a>.
--->
- </ul>
-
- <p>
- <b>New high level Fortran interface</b>
- <br>
- New Fortran subroutines in the
- <a href="../HL/RM_H5DS.html">HDF5 Dimension Scale</a>
- high-level interface,
- <a href="../HL/RM_H5DS.html">H5DS</a>:
- <ul>
- <li><code>h5dsset_scale_f</code>
- <li><code>h5dsattach_scale_f</code>
- <li><code>h5dsdetach_scale_f</code>
- <li><code>h5dsis_attached_f</code>
- <li><code>h5dsis_scale_f</code>
- <li><code>h5dsset_label_f</code>
- <li><code>h5dsget_label_f</code>
- <li><code>h5dsget_scale_name_f</code>
- <li><code>h5dsget_num_scales_f</code>
- </ul>
- <p>
- These subtroutines are available in both Fortran 90 and
- Fortran 2003 environments.
-
- </dl>
-
-
- <h3>C Functions with Changed Capability</h3>
-
- <dl>
- <dd><a href="../RM/RM_H5T.html#Datatype-Create">
- <code>H5Tcreate</code></a>
- now supports fixed-length and variable-length string types.
-
-<!--
- <p>
- <ul>
- <li>
- </ul>
--->
- </dl>
-</dir>
-
-<!--
-<dir>
-
- <h3>Fortran 90 Subroutines with Changed Capability</h3>
-
- <dl>
- <dd>
- <font color="red"><i>Nothing recorded in RELEASE.txt.</i></font>
- </dl>
--->
-
-<!--
- <dl>
- <dd>Several
- <a href="../HL/RM_H5LT.html"><code>h5ltmake_dataset*_f</code></a>
- and
- <a href="../HL/RM_H5LT.html"><code>h5ltread_dataset*_f</code></a>
- subroutines have been modified to allow them to
- create or read arrays of up to seven dimensions.
- They had previously been limited to three dimensions.
- <table border-1>
- <tr><td align=left valign=top>
- <code> </code>
- </td><td align=left valign=top>
- <li><code>h5ltmake_dataset_f</code></li>
- <li><code>h5ltmake_dataset_int_f</code></li>
- <li><code>h5ltmake_dataset_float_f</code></li>
- <li><code>h5ltmake_dataset_double_f</code></li>
- </td><td align=left valign=top>
- <code> </code>
- </td><td align=left valign=top>
- <li><code>h5ltread_dataset_f</code></li>
- <li><code>h5ltread_dataset_int_f</code></li>
- <li><code>h5ltread_dataset_float_f</code></li>
- <li><code>h5ltread_dataset_double_f</code></li>
- </td></tr>
- </table>
-
- <br>
- <a href="../HL/RM_H5TB.html#H5TBget_field_info">
- <code>h5tbget_field_info_f</code></a>
- has a new <code>maxlen_out</code> parameter.
- This parameter is optional.
- </dl>
--->
-</dir>
-
-<dir>
-
- <h3>Driver Changes on Windows Systems</h3>
-
- <dir>
-
- <dl>
- <dt>Changed behavior:</dt>
- <dd>HDF5’s
- <a href="../RM/RM_H5P.html#Property-SetFaplWindows">Windows
- driver</a>
- <!--
- (see
- <a href="../RM/RM_H5P.html#Property-SetFaplWindows">
- <code>H5Pset_fapl_windows</code></a>)
- -->
- has been modified in this release to be a wrapper of the
- <small>POSIX</small>-compliant
- <a href="../RM/RM_H5P.html#Property-SetFaplSec2">
- <small>SEC2</small> driver</a>.
- This change should be transparent to all user applications.
- </p>
- </dd>
-
- <dt>New default driver:</dt>
- <dd>As of this release, the <i>default</i> driver
- on Windows systems is changed to <small>SEC2</small>;
- it had previously been the Windows driver.
- <p>
- If you wish to use the Windows driver in an application,
- it remains fully available.
- In such cases, the driver must be set explicitly with a
- <a href="../RM/RM_H5P.html#Property-SetFaplWindows">
- <code>H5Pset_fapl_windows</code></a> call.
- </dd>
- </dl>
- </dir>
-
-</dir>
-
-
-
-
-<!--
-<dir>
- <h3>Command-line Utility with Changed Option Name</h3>
-
- <dl>
- <dd>
- <font color="red"><i>Nothing recorded in RELEASE.txt.</i></font>
- </dl>
-
- <dl>
- <dd><a href="../RM/Tools.html#Tools-Ls"><code>h5ls</code></a>
- has one changed option name:
- <ul>
- <li><code>--enable-error-stack</code>
- replaces <code>--error</code>.</li>
- </ul>
- The <code>--error</code> option is deprecated
- but remains available.</li>
- </dl>
-</dir>
--->
-
-
-<dir>
- <h3>Command-line Utilities with Changed Behavior</h3>
-
- <dir>
- <p>
- <a href="../RM/Tools.html#Tools-Jam"><code>h5jam</code></a>
- now checks the file that is to be inserted into the user block
- and does not allow the insertion if it is an HDF5 file.
- This is necessary because an HDF5 file in the user block
- will make the original HDF5 portion of the file inaccessable.
-
- <p>
- <a href="../RM/Tools.html#Tools-Diff"><code>h5diff</code></a>
- with the <code><i>--delta</i></code> option reports two NaN
- values as equal regardless of the type of NaN
- (as described in the reference manual entry).
-
- <p>
- <a href="../RM/Tools.html#Tools-Diff"><code>h5diff</code></a>,
- when comparing a file to itself, now reports no differences.
- </dir>
-
-<!--
- <dir>
- Attribute comparison with
- <a href="../RM/Tools.html#Tools-Diff"><code>h5diff</code></a>
- has been corrected to compare all attributes with common names
- when comparing objects.
- Previously, <code>h5diff</code> compared attributes correctly
- only when two objects had the same number of attributes
- and all attribute names were identical; if there was either a
- value or name difference between two attributes,
- subsequent attributes were not compared.
-
- <p>
- <a href="../RM/Tools.html#Tools-Diff"><code>h5diff
- --use-system-epsilon</code></a>
- now employs the formula
- <code>'|a - b|'</code> instead of
- <code>'|a - b| / b'</code>.
-
- <p>
- <a href="../RM/Tools.html#Tools-Copy"><code>h5copy</code></a>
- now accepts the same file as the source and target file;
- this enables object copying within a file.
-
- <p>
- <a href="../RM/Tools.html#Tools-Dump"><code>h5dump</code></a>
- now displays reference types as described in
- <a href="../ddl.html"><cite>DDL in BNF for HDF5</cite></a>:
- <table>
- <tr valign="top"><td>
- <code> </code>
- </td><td>
- <code>H5T_REFERENCE {H5T_STD_REF_OBJ}</code>
- </td><td>
- Object reference
- </td></tr>
- <tr valign="top"><td>
- <code> </code>
- </td><td>
- <code>H5T_REFERENCE {H5T_STD_REF_DSETREG} </code>
- </td><td>
- Dataset region reference
- </td></tr>
- </table>
- </dir>
--->
-</dir>
-
-<dir>
-
- <h3>Configure and Build Changes</h3>
-
- <dir>
- <code>configure</code> now uses the same flags and symbols
- in its tests as are used to build the library.
-
- <p>
- To build HDF5 with the Fortran 2003 interfaces requires the use of
- two configure options:
- <br>
- <code> --enable-fortran
- <font size="+1"> </font></code>
- <br>
- <code> --enable-fortran2003
- <font size="+1"> </font></code>
- <br>
- Note that building the Fortran 2003 interfaces requires
- a Fortran 2003-capable compiler and that
- <code>--enable-fortran2003</code> cannot be used alone.
-
- <p>
- The <code>--enable-h5dump-packed-bits</code> configure option
- has been removed. The code that this option enabled is now
- always compiled into <code>h5dump</code>.
-
- <p>
- When building on Linux systems, the HDF5 Library now links
- with the <code>bsd_compat</code> library.
-
- </dir>
-
- <h3>Parallel Library and Configuration Changes</h3>
-
- <dir>
-
- The parallel HDF5 library now always compiles code to
- take advantage of MPI functionalities that allow for the use
- of complex derived datatypes during IO and that allow for
- collective IO when one or more processes do not contribute
- to the operation.
- <p>
- This was previously conditionally compiled into the library
- and controlled by <code>configure</code> via the
- <code>hdf5_cv_mpi_special_collective_io_works</code> and
- <code>hdf5_cv_mpi_complex_derived_datatype_works</code>
- cache values.
- These values were preset in the <code>config/*</code>
- files based on the compiler and/or system or could be set
- on the configure line.
- Support for these cache values has been removed and
- they no longer have an effect on the compilation of the use
- of these MPI functionalities.
-
- </dir>
-
-</dir>
-
-<!--
-<dir>
-
- <h3>Parallel HDF5</h3>
-
- <dl>
- <dd>
- <font color="red"><i>Nothing recorded in RELEASE.txt.</i></font>
- </dl>
-
-</dir>
--->
-
-
-<br>
-<br>
-
-
-
-<a name="187">
-<h2>Release 1.8.7 of May 2011 versus Release 1.8.6</h2>
-</a>
-<dir>
-
-This section lists interface-level changes and
-other user-visible changes in behavior
-in the transition from HDF5 Release 1.8.6 to Release 1.8.7.
-
-
- <h3>New C Functions and Macros</h3>
-
- <dl>
- <dd>Three new functions enable the caching of files opened through
- external links. This cache can improve the performance of
- external links in heavy use cases:
- <ul>
- <li><a href="../RM/RM_H5P.html#Property-SetELinkFileCacheSize">
- <code>H5Pset_elink_file_cache_size</code></a></li>
- <li><a href="../RM/RM_H5P.html#Property-GetELinkFileCacheSize">
- <code>H5Pget_elink_file_cache_size</code></a></li>
- <li><a href="../RM/RM_H5F.html#File-ClearELinkFileCache">
- <code>H5Fclear_elink_file_cache</code></a></li>
- </ul>
-
- <br>
- Two new macros enable compile-time inclusion or exclusion
- of code depending on the version of the HDF5 Library
- against which an application is to be linked:
- <ul>
- <li><a href="../RM/RM_H5.html#Library-VersionGE">
- <code>H5_VERSION_GE</code></a></li>
- <li><a href="../RM/RM_H5.html#Library-VersionLE">
- <code>H5_VERSION_LE</code></a></li>
- </ul>
- </dl>
-
-
- <h3>C Functions with Changed Capability</h3>
-
- <dl>
- <dd>HDF5 now allows the size of any dataspace dimension to be
- <code>0</code> (zero). This was previously allowed
- only if the maximum size of the dimension was unlimited.
- Though their signatures have not changed, the range of valid
- parameter values is affected for the following functions:
- <ul>
- <li><a href="../RM/RM_H5S.html#Dataspace-CreateSimple">
- <code>H5Screate_simple</code></a></li>
- <li><a href="../RM/RM_H5S.html#Dataspace-SetExtentSimple">
- <code>H5Sset_extent_simple</code></a></li>
- <li><a href="../RM/RM_H5P.html#Property-SetExternal">
- <code>H5Pset_external</code></a></li>
- </ul>
- Note that no data can be written to a dataset in which
- the size of any dimension is set to zero.
-
- <br> <br>
- In the logging file driver,
- implementation of the following flags has been completed:
- <code>H5FD_LOG_TIME_OPEN</code>,
- <code>H5FD_LOG_TIME_READ</code>,
- <code>H5FD_LOG_TIME_WRITE</code>, and
- <code>H5FD_LOG_TIME_SEEK</code>
- <br>
- Two new flags have been added:
- <code>H5FD_LOG_NUM_TRUNCATE</code> and
- <code>H5FD_LOG_TIME_STAT</code>.
- <br>
- <ul>
- <li><a href="../RM/RM_H5P.html#Property-SetFaplLog">
- <code>H5Pset_fapl_log</code></a></li>
- </ul>
-
- <br>
- HDF5 now blocks committing a datatype that cannot hold
- any data. This currently includes
- compound datatypes with no fields and
- enumerated datatypes with no members.
- <ul>
- <li><a href="../RM/RM_H5T.html#Datatype-Commit1">
- <code>H5Tcommit1</code></a></li>
- <li><a href="../RM/RM_H5T.html#Datatype-Commit2">
- <code>H5Tcommit2</code></a></li>
- <li><a href="../RM/RM_H5T.html#Datatype-CommitAnon">
- <code>H5Tcommit_anon</code></a></li>
- </ul>
- HDF5 has long blocked creating a dataset or attribute
- with such a datatype.
- </dl>
-</dir>
-
-<dir>
- <h3>Fortran Subroutines with Changed Capability</h3>
-
- <dl>
- <dd>Several
- <a href="../HL/RM_H5LT.html"><code>h5ltmake_dataset*_f</code></a>
- and
- <a href="../HL/RM_H5LT.html"><code>h5ltread_dataset*_f</code></a>
- subroutines have been modified to allow them to
- create or read arrays of up to seven dimensions.
- They had previously been limited to three dimensions.
- <table border-1>
- <tr><td align=left valign=top>
- <code> </code>
- </td><td align=left valign=top>
- <li><code>h5ltmake_dataset_f</code></li>
- <li><code>h5ltmake_dataset_int_f</code></li>
- <li><code>h5ltmake_dataset_float_f</code></li>
- <li><code>h5ltmake_dataset_double_f</code></li>
- </td><td align=left valign=top>
- <code> </code>
- </td><td align=left valign=top>
- <li><code>h5ltread_dataset_f</code></li>
- <li><code>h5ltread_dataset_int_f</code></li>
- <li><code>h5ltread_dataset_float_f</code></li>
- <li><code>h5ltread_dataset_double_f</code></li>
- </td></tr>
- </table>
-
- <br>
- <a href="../HL/RM_H5TB.html#H5TBget_field_info">
- <code>h5tbget_field_info_f</code></a>
- has a new <code>maxlen_out</code> parameter.
- This parameter is optional.
- </dl>
-</dir>
-
-<dir>
- <h3>Command-line Utilities with New Options</h3>
-
- <dl>
- <dd><a href="../RM/Tools.html#Tools-Diff"><code>h5diff</code></a>
- has a new <i>verbose with levels</i> option to display
- additional attribute information:
- <ul>
- <li><code>-v<em>n</em>, --verbose=<em>n</em></code></li>
- </ul>
- <br>
- <a href="../RM/Tools.html#Tools-Dump"><code>h5dump</code></a>
- has one new option to enable reporting of the
- HDF5 Library’s error stack:
- <ul>
- <li><code>--enable-error-stack</code></li>
- </ul>
- </dl>
-</dir>
-
-
-
-
-
-<dir>
- <h3>Command-line Utility with Changed Option Name</h3>
-
- <dl>
- <dd><a href="../RM/Tools.html#Tools-Ls"><code>h5ls</code></a>
- has one changed option name:
- <ul>
- <li><code>--enable-error-stack</code>
- replaces <code>--error</code>.</li>
- </ul>
- The <code>--error</code> option is deprecated
- but remains available.</li>
- </dl>
-</dir>
-
-
-<dir>
- <h3>Command-line Utilities with Changed Behavior</h3>
-
- <dir>
- Attribute comparison with
- <a href="../RM/Tools.html#Tools-Diff"><code>h5diff</code></a>
- has been corrected to compare all attributes with common names
- when comparing objects.
- Previously, <code>h5diff</code> compared attributes correctly
- only when two objects had the same number of attributes
- and all attribute names were identical; if there was either a
- value or name difference between two attributes,
- subsequent attributes were not compared.
-
- <p>
- <a href="../RM/Tools.html#Tools-Diff"><code>h5diff
- --use-system-epsilon</code></a>
- now employs the formula
- <code>'|a - b|'</code> instead of
- <code>'|a - b| / b'</code>.
-
- <p>
- <a href="../RM/Tools.html#Tools-Copy"><code>h5copy</code></a>
- now accepts the same file as the source and target file;
- this enables object copying within a file.
-
- <p>
- <a href="../RM/Tools.html#Tools-Dump"><code>h5dump</code></a>
- now displays reference types as described in
- <a href="../ddl.html"><cite>DDL in BNF for HDF5</cite></a>:
- <table>
- <tr valign="top"><td>
- <code> </code>
- </td><td>
- <code>H5T_REFERENCE {H5T_STD_REF_OBJ}</code>
- </td><td>
- Object reference
- </td></tr>
- <tr valign="top"><td>
- <code> </code>
- </td><td>
- <code>H5T_REFERENCE {H5T_STD_REF_DSETREG} </code>
- </td><td>
- Dataset region reference
- </td></tr>
- </table>
- </dir>
-</dir>
-
-<dir>
- <h3>Configure and Build Changes</h3>
-
- <dir>
- Configure now generates Makefiles that build in
- <i>silent make mode</i> by default.
- In this mode, compile and link lines are significantly
- simplified for clarity. You can opt out of this default
- with either of the following approaches:
- <ul>
- <li>Use the <code>--disable-silent-rules</code> flag at
- configure time to override the default and view actual
- compile and link lines during the build.</li>
- <li>Use the <code>make</code> command with the <code>V=1</code>
- option to run a verbose make. </li>
- </ul>
-
- <p>
- The new configure option <code>--enable-unsupported</code>
- can be used to stop <code>configure</code> from preventing the
- use of unsupported configure option combinations.
- For example, use of this option enables building HDF5 with the
- <em>unsupported and untested</em> configurations of
- C++ in a parallel environment or
- Fortran with a threadsafe library.
-
- <ul>
- <li><i><b>WARNING:
- <br>
- Use
- </i><code>--enable-unsupported</code><i>
- at your own risk!</b></i>
- <br>
- This option may result in a library that does not compile
- or does not run as expected.</li>
- </ul>
-
- </dir>
-</dir>
-
-
-<dir>
- <h3>Parallel HDF5</h3>
-
- <dir>
- <code>mpicc</code> and <code>mpif90</code> are now the default
- C and Fortran compilers on Linux systems when
- <code>--enable-parallel</code> is specified but no
- <code>$CC</code> or <code>$FC</code> is defined.
- </dir>
-</dir>
-
-
-
-
-
-
-<a name="186">
-<h2>Release 1.8.6 versus Release 1.8.5,
- February 2011</h2>
-</a>
-<dir>
-
-This section lists interface-level changes and
-other user-visible changes in behavior
-in the transition from HDF5 Release 1.8.5 to Release 1.8.6.
-
-
- <h3>C Functions with Additional Capability</h3>
-
- <dl>
- <dd><a href="../RM/RM_H5T.html#Datatype-SetOrder">
- <code>H5Tset_order</code></a>
- and
- <a href="../RM/RM_H5T.html#Datatype-GetOrder">
- <code>H5Tget_order</code></a>
- can now be used with all datatypes.
- See the related note regarding
- <code>H5T_ORDER_MIXED</code> immediately below.
- </dl>
-
-
- <h3>ENUM with New Member</h3>
-
- <dl>
- <dd><code>H5T_order_t</code>, an ENUM used to set or indicate
- datatype endianness, includes a new member:
- <p>
- <code> </code>
- <code>H5T_ORDER_MIXED</code>
- <p>
- The function
- <a href="../RM/RM_H5T.html#Datatype-GetOrder">
- <code>H5Tget_order</code></a>
- returns this value when called on a compound datatype
- whose members are not all of the same endianness.
- </dl>
-</dir>
-
-<dir>
- <h3>Command-line Utilities with New Options</h3>
-
- <dl>
- <dd><a href="../RM/Tools.html#Tools-Diff"><code>h5diff</code></a>
- has one new option:
- <ul>
- <li><code>--exclude-path</code></li>
- <br>
- </ul>
- <dd><a href="../RM/Tools.html#Tools-Ls"><code>h5ls</code></a>
- and
- <a href="../RM/Tools.html#Tools-Diff"><code>h5diff</code></a>
- have two new options:
- <ul>
- <li><code>--follow-symlinks</code></li>
- <li><code>--no-dangling-links</code></li>
- </ul>
- </dl>
-</dir>
-
-<dir>
- <h3>Command-line Utilities with Changed Behavior</h3>
-
- <dir>
- <a href="../RM/Tools.html#Tools-Diff"><code>h5diff</code></a>
- now compares member objects and groups recursively when
- two files or groups are specified to be compared.
- <p>
- <a href="../RM/Tools.html#Tools-Ls"><code>h5ls</code></a>
- now displays object and attribute names exactly as stored in
- the file rather than interpreting them for output.
- For example, if an attribute is named <code>\ttemp</code>
- in the file, <code>h5ls</code> will output that name as
- <code>\ttemp</code> rather than converting the leading
- <code>\t</code> to a tab.
- <p>
- <a href="../RM/Tools.html#Tools-Repack"><code>h5repack</code></a>
- can now convert a dataset to compact layout.
- </dir>
-</dir>
-
-<dir>
- <h3>Compiler Script Arguments and Environment Variables</h3>
-
- <dir>
- <a href="../RM/Tools.html#Tools-H5CC"><code>h5cc</code></a>,
- <a href="../RM/Tools.html#Tools-H5FC"><code>h5fc</code></a>,
- <a href="../RM/Tools.html#Tools-H5C++"><code>h5c++</code></a>,
- <a href="../RM/Tools.html#Tools-H5CC"><code>h5pcc</code></a>,
- and
- <a href="../RM/Tools.html#Tools-H5FC"><code>h5pfc</code></a>
- arguments have been expanded
- to enable the user to add compiler and linker flags
- that will take precedence over the flags from the HDF5 build.
- <p>
- The arguments <code>CPPFLAGS</code>, <code>CFLAGS</code>,
- <code>LDFLAGS</code>, and <code>LIBS</code> have been
- duplicated with the prefix <code>H5BLD_</code>
- to put the flags and paths from the HDF5 build in the
- correct places and to allow the script user to add entries in
- <code>CPPFLAGS</code>, <code>CFLAGS</code>,
- <code>LDFLAGS</code>, and <code>LIBS</code> that will take
- precedence over those from the HDF5 build.
- Changes to these entries can be made
- persistent by editing <code>CFLAGSBASE</code>,
- <code>CPPFLAGSBASE</code>, <code>LDFLAGSBASE</code>, and
- <code>LIBSBASE</code> near the top of the script.
- If the change is to be temporary, the user can set
- <code>HDF5_CFLAGS</code>, <code>HDF5_CPPFLAGS</code>,
- <code>HDF5_LDFLAGS</code>, or <code>HDF5_LIBS</code>
- in the environment.
- <p>
- The new order of arguments for these scripts is as follows:
- <pre>
- $CLINKER
- $H5BLD_CPPFLAGS
- $CPPFLAGS
- $H5BLD_CFLAGS
- $CFLAGS
- $LDFLAGS
- $clibpath
- $link_objs
- $LIBS
- $link_args
- $shared_link
- </pre>
-
- </dir>
-</dir>
-
-<dir>
- <h3>Thread Safety on Windows</h3>
-
- <dir>
- This release adds support for thread safety on Windows
- using the Windows threads library.
- See the file <code>RELEASE.txt</code> in the distributed
- HDF5 source code (<code>hdf5/release_docs/RELEASE.txt</code>)
- for details.
- </dir>
-</dir>
-
-<dir>
- <h3>Parallel HDF5</h3>
-
- <dir>
- The Parallel HDF5 build process has changed to use
- <code>mpiexec</code> instead of <code>mpirun</code>.
- </dir>
-</dir>
-
-
-
-
-<a name="185">
-<h2>Release 1.8.5 versus Release 1.8.4,
- June 2010</h2>
-</a>
-<dir>
-
-This section lists interface-level changes and
-other user-visible changes in behavior
-in the transition from HDF5 Release 1.8.4 to Release 1.8.5.
-
- <h3>New C Function</h3>
-
- <dl>
- <dd>The following function was added to the HDF5 Library
- at this release, but was not documented at that time:
- <ul>
- <li><a href="../RM/RM_H5O.html#Object-ExistsByName">
- <code>H5Oexists_by_name</code></a>
- </ul>
- <i>(This note added in November 2011, shortly following
- Release 1.8.8.)</i>
- </dl>
-
- <h3>C Functions with Additional Capability</h3>
-
- <dl>
- <dd>The following functions have been modified to
- accommodate filters set on a group creation property list:
- <dir>
- <table>
- <tr align="left" valign="top">
- <td>
- <a href="../RM/RM_H5P.html#Property-AllFiltersAvail">
- <code>H5Pall_filters_avail</code></a>
- <br>
- <a href="../RM/RM_H5P.html#Property-GetFilter1">
- <code>H5Pget_filter1</code></a>
- <br>
- <a href="../RM/RM_H5P.html#Property-GetFilter2">
- <code>H5Pget_filter2</code></a>
- <br>
- <a href="../RM/RM_H5P.html#Property-GetFilterById1">
- <code>H5Pget_filter_by_id1</code></a>
- <br>
- <a href="../RM/RM_H5P.html#Property-GetFilterById2">
- <code>H5Pget_filter_by_id2</code></a>
- <br>
- <a href="../RM/RM_H5P.html#Property-GetNFilters">
- <code>H5Pget_nfilters</code></a>
- </td><td><code> </code></td><td>
- <a href="../RM/RM_H5P.html#Property-ModifyFilter">
- <code>H5Pmodify_filter</code></a>
- <br>
- <a href="../RM/RM_H5P.html#Property-RemoveFilter">
- <code>H5Premove_filter</code></a>
- <br>
- <a href="../RM/RM_H5P.html#Property-SetDeflate">
- <code>H5Pset_deflate</code></a>
- <br>
- <a href="../RM/RM_H5P.html#Property-SetFilter">
- <code>H5Pset_filter</code></a>
- <br>
- <a href="../RM/RM_H5P.html#Property-SetFletcher32">
- <code>H5Pset_fletcher32</code></a>
- </td></tr>
- </table>
- </dir>
- <p>
- Related to <a href="../RM/RM_H5Z.html#Compression-Register">
- <code>H5Zregister</code></a>, the calling protocol for
- the <code>can_apply</code> and <code>set_local</code>
- callback functions has been extended to accommodate the
- use of filters on group creation property lists.
- </dl>
-
- <h3>New C++ Member Function and Overloaded Member Functions</h3>
-
- <dl>
- <dd>The following C++ member function is new in this release:
- <dir>
- <table border=0>
- <tr><td valign=center align=left>
- <code>DataSet::getInMemDataSize</code>
- </td><td>
-
- </td><td valign=top align=left>
- To simplify getting a dataset’s data size
- in memory.
- </td></tr>
- </table>
- <br>
- </dir>
- <dd>The overloaded forms of the following C++ member functions
- are new in this release:
- <dir>
- <table border=0>
- <tr><td valign=center align=left>
- <code>CommonFG::getObjnameByIdx</code>
- </td><td>
-
- </td><td valign=top align=left>
- Overloaded to take <em>char*</em> for name.
- </td></tr>
- <tr><td valign=center align=left>
- <code>CommonFG::getObjTypeByIdx</code>
- </td><td>
-
- </td><td valign=top align=left>
- Overloaded to return type name as a <em>char*</em>.
- </td></tr>
- </table>
- </dir>
- </dl>
-
- <h3>Command-line Utility with New Options</h3>
-
- <dl>
- <dd><a href="../RM/Tools.html#Tools-Diff"><code>h5diff</code></a>
- has two new options:
- <ul>
- <li><code>--follow-links</code></li>
- <li><code>--no-dangling-links</code></li>
- <br>
- </ul>
- </dl>
-</dir>
-
-<dir>
- <h3>Fortran Subroutines with Changed Interface</h3>
-
- <dl>
- <dd>The link type parameter values associated with the
- following Fortran subroutines have changed in this release:
- <ul>
- <li><code>h5lget_info_f</code></li>
- <li><code>h5lget_info_by_idx_f</code></li>
- <br>
- Valid values for the parameter <code>link_type</code>
- have changed to the following:
- <br>
- <code>H5L_TYPE_HARD_F</code>
- <br>
- <code>H5L_TYPE_SOFT_F</code>
- <br>
- <code>H5L_TYPE_EXTERNAL_F</code>
- <br>
- <code>H5L_TYPE_ERROR_F</code>
- <br>
- These values previously began with the string
- '<code>H5L_LINK_</code>'.
- </ul>
- </dl>
-</dir>
-
-<dir>
- <h3>CMake</h3>
-
- <dl>
- <dd>This release includes an adaptation enabling HDF5 builds
- with CMake.
- This early-stage adaptation is distributed to provide an
- opportunity for early access and experimentation;
- the CMake-related files should not be viewed as final
- and may change before the next release.
- <p>
- While the initial development effort has been focussed on
- Microsoft Windows platforms, the HDF5 Library has been
- successfully built with CMake on Linux and Mac OS X.
- <p>
- See the file <code>CMake.txt</code> in the distributed
- HDF5 source code (<code>hdf5/release_docs/CMake.txt</code>)
- for details.
- </dir>
- </dl>
-</dir>
-
-<a name="184">
-<h2>Release 1.8.4 versus Release 1.8.3,
- November 2009</h2>
-</a>
-
-<dir>
-
-This section lists interface-level changes and
-other user-visible changes in behavior
-in the transition from HDF5 Release 1.8.3 to Release 1.8.4.
-
-
- <h3>Embedded HDF5 Library Settings Information</h3>
-
- <dl>
- <dd>Library settings are now embedded in an HDF5 executable
- so that an “orphaned” executable can be queried
- (via the Unix strings command, for example) to display the
- library settings used to build it.
- The embedded settings information is the same as that
- normally found in the <code>libhdf5.settings</code> file.
- <p>
- This capability may be disabled with the use of the
- <code>--disable-embedded-libinfo</code> flag during configure.
- </dl>
-
- <h3>New Fortran Subroutine and Constant</h3>
-
- <dl>
- <dd>The following Fortran subroutine is new in this release:
- <dir>
- <code>h5oopen_by_addr_f</code>
- </dir>
-
- <dd>The following Fortran constant, corresponding to
- the C constant <code>H5T_ORDER_NONE</code>, has been added
- in this release:
- <dir>
- <code>H5T_ORDER_NONE_F</code>
- </dir>
- </dl>
-
-</dir>
-<dir>
-
- <h3>New C++ Member Functions</h3>
-
- <dl>
- <dd>New C++ member functions are provided to
- determine a dataset’s or attribute’s
- data size in memory:
- <dir>
- <code>
- size_t DataSet::getInMemDataSize() const</code>
- <br>
- <code>
- size_t Attribute::getInMemDataSize() const</code>
- </dir>
- The size in each case is in bytes.
- </dl>
-
- <h3>Function with Changed Interface or Behavior</h3>
-
- <dl>
- <dd><a href="../RM/RM_H5.html#Library-VersCheck">
- <code>H5check_version</code></a> now displays
- embedded library information (see above)
- if a version mismatch is detected.
- <p>
- The function has also been changed to suppress the
- warning message entirely if
- <code>$HDF5_DISABLE_VERSION_CHECK</code> is set to
- <code>2</code> or higher.
- </dl>
-
-</dir>
-<dir>
-
- <h3>Fortran Subroutines with Changed Syntax</h3>
-
- <dl>
- <dd>The following Fortran subroutines have changed syntax
- in this release:
- <ul>
- <li><code>h5lget_info_f</code></li>
- <p>
- The type of the parameter <code>address</code> has changed
- from <code>INTEGER</code> to <code>INTEGER(HADDR_T)</code>.
- <br>
- <i>(This note added on 13 January 2010.)</i>
- <li><code>h5lget_info_by_idx_f</code></li>
- <dir>
- <code>
- h5lget_info_by_idx_f (loc_id, group_name, index_field, order, n, &
- <br>
-
- link_type, f_corder_valid, corder, cset, address, val_size, &
- <br>
-
- hdferr, lapl_id)
- </code>
- </dir>
- <p>
- The parameters <code>link_type</code>, <code>address</code>,
- and <code>val_size</code> have been added;
- the parameter <code>data_size</code> has been removed.
- </ul>
- </dl>
-
-</dir>
-<dir>
-
- <h3>Tools with Changed Interface or Behavior</h3>
-
- <dl>
- <dd><a href="../RM/Tools.html#Tools-Diff"><code>h5diff</code></a>
- has one new option:
- <dir>
- <code>--use-system-epsilon</code>
- <p>
- With this option, <code>h5diff</code> returns a difference
- if and only if the difference between two data values
- exceeds the system value for epsilon
- (that is, if <code>|a-b| > <i>epsilon</i></code>).
- <p>
- The tool’s default behavior has also changed;
- without this option, the tool now checks for strict equality.
- Prior default behavior was to use an epsilon internally
- defined in HDF5.
- <p>
- This option has no short form.
- </dir>
- <p>
- <dd><a href="../RM/Tools.html#Tools-Dump"><code>h5dump</code></a>
- has one new option and the behavior of another set of
- options has changed:
- <dir>
- <code>-R</code> or <code>--region</code>
- <p>
- With this option, <code>h5dump</code> prints
- the data pointed to by a region reference.
- Without this option, <code>h5dump</code> prints
- only the reference.
- <p>
- Usage of the subsetting parameters has changed.
- All of <code><em>START</em></code>,
- <code><em>STRIDE</em></code>, <code><em>COUNT</em></code>,
- and <code><em>BLOCK</em></code> now have default values.
- If those defaults are satisfactory,
- <code>h5dump</code> no longer requires that all four
- be specifiespecified when subsetting a dataset.
- </dir>
- <p>
- </dl>
-
- <h3>Changed Library Configuration</h3>
-
- <dl>
- <dd>The following configuration flag is new with this release:
- <dir>
- <code>--disable-embedded-libinfo</code>
- </dir>
- This flag disables the embedding of HDF5 Library settings
- in an HDF5 executable.
- </dl>
-
-</dir>
-
-
-<a name="183">
-<h2>Release 1.8.3 versus Release 1.8.2, May 2009</h2>
-</a>
-
-<dir>
-
-This section lists API-level changes and changes in behavior
-in the transition from HDF5 Release 1.8.2 to Release 1.8.3.
-
- <h3>New Functions</h3>
- <dl>
- <dt><u>C functions:</u>
- <dd>The following C functions are new for this release
- and are documented in the
- <a href="../RM/RM_H5Front.html"><cite>HDF5 Reference
- Manual</cite></a>.
-
- <table border="0">
-
- <tr>
- <td align="left" valign="top"> </td>
- <td align="left" valign="top"><code>H5Pset_elink_cb</code>
- </td>
- <td align="left" valign="top"> </td>
- <td align="left" valign="top">
- <em>herr_t</em> <code>H5Pset_elink_cb</code>(
- <em>hid_t</em> <code>lapl_id</code>,
- <em>H5L_elink_traverse_t</em> <code>func</code>,
- <em>void *</em><code>op_data</code>
- )
- <br>
- See <a href="../RM/RM_H5P.html#Property-SetELinkCb">entry</a>.
- </td>
- </tr><tr>
- <td align="left" valign="top"> </td>
- <td align="left" valign="top"><code>H5Pget_elink_cb</code>
- </td>
- <td align="left" valign="top"> </td>
- <td align="left" valign="top">
- <em>herr_t</em> <code>H5Pget_elink_cb</code>(
- <em>hid_t</em> <code>lapl_id</code>,
- <em>H5L_elink_traverse_t *</em><code>func</code>,
- <em>void **</em><code>op_data</code>
- )
- <br>
- See <a href="../RM/RM_H5P.html#Property-GetELinkCb">entry</a>.
- </td>
- </tr><tr>
- <td align="left" valign="top"> </td>
- <td align="left" valign="top"><code>H5Pset_elink_acc_flags</code>
- </td>
- <td align="left" valign="top"> </td>
- <td align="left" valign="top">
- <em>herr_t</em> <code>H5Pset_elink_acc_flags</code>(
- <em>hid_t</em> <code>lapl_id</code>,
- <em>unsigned</em> <code>flags</code>
- )
- <br>
- See <a href="../RM/RM_H5P.html#Property-SetELinkAccFlags">entry</a>.
- </td>
- </tr><tr>
- <td align="left" valign="top"> </td>
- <td align="left" valign="top"><code>H5Pget_elink_acc_flags</code>
- </td>
- <td align="left" valign="top"> </td>
- <td align="left" valign="top">
- <em>herr_t</em> <code>H5Pget_elink_acc_flags</code>(
- <em>hid_t</em> <code>lapl_id</code>,
- <em>unsigned *</em><code>flags</code>
- )
- <br>
- See <a href="../RM/RM_H5P.html#Property-GetELinkAccFlags">entry</a>.
- </td>
- </tr><tr>
- <td align="left" valign="top"> </td>
- <td align="left" valign="top"><code>H5Pset_chunk_cache</code>
- </td>
- <td align="left" valign="top"> </td>
- <td align="left" valign="top">
- <em>herr_t</em> <code>H5Pset_chunk_cache</code>(
- <em>hid_t</em> <code>dapl_id</code>,
- <em>size_t</em> <code>rdcc_nslots</code>,
- <em>size_t</em> <code>rdcc_nbytes</code>,
- <em>double</em> <code>rdcc_w0</code>
- )
- <br>
- See <a href="../RM/RM_H5P.html#Property-SetChunkCache">entry</a>.
- </td>
- </tr><tr>
- <td align="left" valign="top"> </td>
- <td align="left" valign="top"><code>H5Pget_chunk_cache</code>
- </td>
- <td align="left" valign="top"> </td>
- <td align="left" valign="top">
- <em>herr_t</em> <code>H5Pget_chunk_cache</code>(
- <em>hid_t</em> <code>dapl_id</code>,
- <em>size_t *</em><code>rdcc_nslots</code>,
- <em>size_t *</em><code>rdcc_nbytes</code>,
- <em>double *</em><code>rdcc_w0</code>
- )
- <br>
- See <a href="../RM/RM_H5P.html#Property-GetChunkCache">entry</a>.
- </td>
- </tr><tr>
- <td align="left" valign="top"> </td>
- <td align="left" valign="top"><code>H5Dget_access_plist</code>
- </td>
- <td align="left" valign="top"> </td>
- <td align="left" valign="top">
- <em>hid_t</em> <code>H5Dget_access_plist</code>(
- <em>hid_t</em> <code>dset_id</code>
- )
- <br>
- See <a href="../RM/RM_H5D.html#Dataset-GetAccessPlist">entry</a>.
- </td>
- </tr><tr>
- <td align="left" valign="top"> </td>
- <td align="left" valign="top"><code>H5Iis_valid</code>
- </td>
- <td align="left" valign="top"> </td>
- <td align="left" valign="top">
- <em>htri_t</em> <code>H5Iis_valid</code>(
- <em>hid_t</em> <code>id</code>
- )
- <br>
- See <a href="../RM/RM_H5I.html#Identify-IsValid">entry</a>.
- </td>
- </tr>
- </table>
- </dl>
-
- <p>
- <dl>
- <dt><u>Fortran Subroutines:</u>
-
- <dd>The following subroutines are new in this release:
- <dir>
- <code>h5dget_access_plist_f</code>
- <br>
- <code>h5iis_valid_f</code>
- <br>
- <code>h5pset_chunk_cache</code>
- <br>
- <code>h5pget_chunk_cache</code>
- </dir>
- </dl>
-
-
- <h3>Function with Changed Behavior</h3>
-
- <dl>
- <dt><a href="../RM/RM_H5.html#Library-SetFreeListLimits"><code>H5set_free_list_limits</code></a>
- <dd>The HDF5 Library now dynamically creates separate
- <i>factory free lists</i> to manage blocks of
- a fixed size; these blocks were previously
- managed within the <i>blockfree lists</i>.
- Factory free lists use the same settings as specified
- in <code>H5set_free_list_limits</code>
- for block free lists.
- <p>
- While the API has not changed, users may see both
- a performance boost and increased memory usage.
-
- </dl>
-
-</dir>
-<dir>
-
- <h3>Tools with Changed Interface or Behavior</h3>
-
- <dl>
- <dt><a href="../RM/Tools.html#Tools-Diff"><code>h5diff</code></a>
- <dd>The default behavior of <code>h5diff</code> is now
- to detect and compare NaNs.
- Use the <code>-N</code> or <code>--nan</code>
- option (below) to turn this behavior off and
- avoid the performance penalty that NaN detection
- and comparison entalis.
- (NaN detection and comparison became the default in
- in HDF5 Release 1.6.8.)
- <p>
- <dd>This tool has two new options:
- <p>
- <code>-c</code>, <code>--compare</code>
- <code> </code>
- Lists objects that are not comparable.
-
- <p>
- <code>-N</code>, <code>--nan</code>
- <code> </code>
- Avoids NaNs detection.
- <p>
-
- <dt><a href="../RM/Tools.html#Tools-Dump"><code>h5dump</code></a>
- <dd><code>h5dump</code> now correctly specifies an XML DTD
- or a schema URL.
- <p>
- <dd><code>h5dump</code> binary output now defaults to
- <code>NATIVE</code>.
- <p>
- <dd>The new <code>-b</code>, <code>--binary</code> option
- can be used to specify alternate binary formats.
- <p>
-
- <dt><a href="../RM/Tools.html#Tools-Repack"><code>h5repack</code></a>
- <dd>When a user does not specify a chunk size,
- <code>h5repack</code> now defines the default chunk size
- to be the same same as the size of the hyperslab used
- to read the chunks.
- <p>
- </dl>
-
-</dir>
-
-
-
-<a name="182">
-<h2>Release 1.8.2 versus Release 1.8.1,
- November 2008</h2>
-</a>
-
-<dir>
-
-This section lists API-level changes and changes in behavior
-in the transition from HDF5 Release 1.8.1 to Release 1.8.2.
-
- <h3>New Functions</h3>
- <dl>
- <dt><u>C functions:</u>
- <dd>The following C functions are new for this release
- and are documented in the
- <a href="../RM/RM_H5Front.html"><cite>HDF5 Reference
- Manual</cite></a>.
-
- <table border="0">
-
- <tr>
- <td align="left" valign="top"> </td>
- <td align="left" valign="top"><code>H5Pset_elink_fapl</code>
- </td>
- <td align="left" valign="top"> </td>
- <td align="left" valign="top">
- <em>herr_t</em> <code>H5Pset_elink_fapl</code>(
- <em>hid_t</em> <code>lapl_id</code>,
- <em>hid_t</em><code>fapl_id</code>
- )
- <br>
- See <a href="../RM/RM_H5P.html#Property-SetELinkFapl">entry</a>.
- </td>
- </tr><tr>
- <td align="left" valign="top"> </td>
- <td align="left" valign="top"><code>H5Pget_elink_fapl</code>
- </td>
- <td align="left" valign="top"> </td>
- <td align="left" valign="top">
- <em>hid_t</em> <code>H5Pget_elink_fapl</code>(
- <em>hid_t</em> <code>lapl_id</code>
- )
- <br>
- See <a href="../RM/RM_H5P.html#Property-GetELinkFapl">entry</a>.
- </td>
- </tr>
- </table>
- </dl>
-
-
- <p>
- <dl>
- <dt><u>Fortran Subroutine:</u>
-
- <dd>The following subroutine is new in this release:
- <br>
- <code>H5Tget_native_type_f</code>
- </dl>
-
-
- <h3>New C++ Wrappers</h3>
-
- <dl>
- <dt>The following functions were added as wrappers for the
- C function <code>H5Rdereference</code> to replace the
- incorrect <code>IdComponent::dereference()</code>:
- <pre>
- void H5Object::dereference(H5Object& obj, void* ref,
- H5R_type_t ref_type=H5R_OBJECT)
- void H5Object::dereference(H5File& h5file, void* ref,
- H5R_type_t ref_type=H5R_OBJECT)
- void H5Object::dereference(Attribute& obj, void* ref,
- H5R_type_t ref_type=H5R_OBJECT)
- </pre>
- <p>
- The following constructors were added to create the
- associated objects by way of dereference:
- <pre>
- DataSet(H5Object& obj, void* ref, H5R_type_t ref_type=H5R_OBJECT)
- DataSet(H5File& file, void* ref, H5R_type_t ref_type=H5R_OBJECT)
- DataSet(Attribute& attr, void* ref, H5R_type_t ref_type=H5R_OBJECT)
- Group(H5Object& obj, void* ref, H5R_type_t ref_type=H5R_OBJECT)
- Group(H5File& obj, void* ref, H5R_type_t ref_type=H5R_OBJECT)
- Group(Attribute& attr, void* ref, H5R_type_t ref_type=H5R_OBJECT)
- DataType(H5Object& obj, void* ref, H5R_type_t ref_type=H5R_OBJECT)
- DataType(H5File& file, void* ref, H5R_type_t ref_type=H5R_OBJECT)
- DataType(Attribute& attr, void* ref, H5R_type_t ref_type=H5R_OBJECT)
- </pre>
- <p>
- </dl>
- <p>
-
-
-
- <h3>Functions with Changed Syntax</h3>
-
- The following function syntaxes have changed;
- the affected return values and parameter are noted as
- <font color=red><u>underscored red text</u></font>.
- <p>
- <dl>
- <dt><u>C functions:</u>
- <dt><a href="../RM/RM_H5F.html#File-GetObjCount">
- <code>H5Fget_obj_count</code></a>
- <dd><code>
- <font color=red><u>
- ssize_t</u></font> H5Fget_obj_count(
- <em>hid_t </em><code>file_id</code>,
- <em>unsigned int</em> <code>types</code>
- )
- </code>
- <p>
- <dt><a href="../RM/RM_H5F.html#File-GetObjIDs">
- <code>H5Fget_obj_ids</code></a>
- <dd><code>
- <font color=red><u>
- ssize_t</u></font> H5Fget_obj_ids(
- <em>hid_t </em><code>file_id</code>,
- <em>unsigned int</em> <code>types</code>,
- <br>
-
- <font color=red><u>
- <em>size_t</em> <code>max_objs</code></u></font>,
- <em>hid_t *</em><code>obj_id_list</code>
- )
- </code>
- </dl>
- <p>
-
-</dir>
-<dir>
-
-
- <h3>Changed Fortran Subroutines</h3>
-
- <dl>
- <dt>The optional parameter <code>mounted</code> has been
- added to the following subroutines:
- <dd><pre>
-h5gget_info_f
-h5gget_info_by_idx_f
-h5gget_info_by_name_f </pre>
- </dl>
-
-
- <h3>Changed Data Structure</h3>
-
- <dl>
- <dt><code>H5G_info_t</code>
- <dd>A <code></i>mounted</i></code> filed has been added
- to the <code>H5G_info_t</code> struct.
- </dl>
- <p>
-
-
- <h3>Tools with Changed Interface or Behavior</h3>
-
- <dl>
-
- <dt><a href="../RM/Tools.html#Tools-Diff"><code>h5diff</code></a>
- <dd><code>h5diff</code> now returns <code>1</code>
- if the files differ in structure,
- i.e., if the file graphs differ by any object.
- <p>
- The tool’s error return code has been changed
- to <code>2</code>.
- <p>
-
- <dt><a href="../RM/Tools.html#Tools-Repack">
- <code>h5repack</code></a> and
- <a href="../RM/Tools.html#Tools-Diff"><code>h5diff</code></a>
- <dd>The standard command-line syntax of both tools
- has been changed to parallel that of <code>h5dump</code>.
- The new syntax of each is as follows:
- <p>
- <code>
- h5repack [<i>OPTIONS</i>] <i>file1 file2</i>
- </code>
- <p>
- <code>
- h5diff [<i>OPTIONS</i>] <i>file1 file2</i>
- [<i>object1</i> [<i>object2</i>]]
- </code>
- <p>
- In each case,
- the old syntax remains available (though undocumented)
- to avoid breaking existing scripts.
- <p>
-
- <dt><a href="../RM/Tools.html#Tools-Repack">
- <code>h5repack</code></a>
- <dd>The following new options control the addition of
- user block data to an existing HDF5 file:
- <dir>
- <table>
- <tr valign=top><td>
- <code>-u <em>U</em></code>
- <br>
- <code>--ublock=<em>U</em></code>
- </td><td> </td><td>
- Specifies the name of the file containing the
- user block data to be added.
- </td></tr>
- <tr valign=top><td>
- <br>
- <code>-b <em>B</em></code>
- <br>
- <code>--block=<em>B</em></code>
- </td><td> </td><td>
- <br>
- Specifies the size of the block to be added.
- </td></tr>
- </table>
- </dir>
- <p>
-
- <dd>The following new options set parameters
- governing the tool’s use of
- <code>H5Pset_alignment</code>:
- <dir>
- <table>
- <tr valign=top><td>
- <code>-t <em>T</em></code>
- <br>
- <code>--threshold=<em>T</em></code>
- </td><td> </td><td>
- Specifies the threshold value for
- <code>H5Pset_alignment</code>.
- </td></tr>
- <tr valign=top><td>
- <br>
- <code>-a <em>A</em></code>
- <br>
- <code>--alignment=<em>A</em></code>
- </td><td> </td><td>
- <br>
- Specifies the alignment value for
- <code>H5Pset_alignment</code>.
- </td></tr>
- </table>
- </dir>
- <p>
-
- <dd><code>h5repack</code> now supports multiple instances of
- the <code>'-f'</code> or <code>'--filter'</code> option,
- allowing the use of multiple I/O filters with an object.
- <p>
-
- <dd>With no change in the command-line syntax,
- <code>h5repack</code> now retains an existing userblock
- when repacking an HDF5 file.
- <p>
-
- <dt><a href="../RM/Tools.html#Tools-Import">
- <code>h5import</code></a>
- <dd>The floating point format flag <code>TEXTFPE</code>,
- for scientific notation, has been deprecated.
- The flag <code>TEXTFP</code>, which accepts
- scientific notation, should be used instead.
- <p>
-
- <dd><code>h5import</code> now imports string data
- with the <code>STR</code> keyword
- in the <code>INPUT-CLASS</code> configuration field.
- <p>
-
- <dt><a href="../RM/Tools.html#Tools-Dump"><code>h5dump</code></a>
- and <a href="../RM/Tools.html#Tools-Ls"><code>h5ls</code></a>
- <dd>These tools now traverse external links when performing
- recursive traversals.
- <p>
-
- <dt><a href="../RM/Tools.html#Tools-Dump"><code>h5dump</code></a>
- <dd>Binary output now defaults to <code>NATIVE</code>
- with the <code>'-b'</code> option, optionally
- accepting <code>NATIVE</code>, <code>FILE</code>,
- <code>BE</code>, and <code>LE</code>.
- <p>
-
- <dd>The new <code>'-m <i>T</i>'</code> or
- <code>'--format <i>T</i>'</code> option
- enables a user-defined formatting string
- for printing floating-point numbers.
- <p>
-
- <dd>With no change in the command-line syntax,
- <code>h5dump</code> now prints a compression ratio
- when compression filters are in use.
-
- </dl>
-
-</dir>
-<dir>
-
- <p>
- <h3>Deprecated Functions</h3>
-
- The following functions are deprecated as of this release:
- <pre> <a href="../RM/RM_H5P.html#Property-SetPreserve">H5Pset_preserve</a>
- <a href="../RM/RM_H5P.html#Property-GetPreserve">H5Pget_preserve</a> </pre>
- <p>
- The original role of these functions is now
- part of the core HDF5 Library functionality.
- <p>
-
-
- <h3>Changed File Installation</h3>
- The file <code>libhdf5_fortran.settings</code> is no longer
- installed with the HDF5 Library;
- the original content of that file is now included in
- <code>libhdf5.settings</code>.
- <p>
-
-
- <h3>Changed Library Configuration</h3>
- It is no longer necessary to manually set an SZIP library path in
- <code>LD_LIBRARY_PATH</code>
- when building HDF5 with shared SZIP libraries;
- <code>configure</code> will determine the correct path
- from the <code>--with-szlib</code> flag,
- prepending it to and exporting <code>LD_LIBRARY_PATH</code>.
- <p>
- Note that if an SZIP library path is set in a user-supplied
- <code>LD_LIBRARY_PATH</code>, in an existing script, for example,
- that does not necessarily need to be changed;
- <code>configure</code> will prepend the SZIP library path
- extracted from <code>--with-szlib</code>
- to the user-supplied <code>LD_LIBRARY_PATH</code>.
-
- <p>
-
-
-<br>
-
-</dir>
-
-
-
-<a name="181">
-<h2>Release 1.8.1 versus Release 1.8.0</h2>
-</a>
-
-<dir>
-
-HDF5 Release 1.8.1 is a minor release with several bugfixes and optimizations
-and limited new features.
-
-<p>
-The most significant new feature is an expanded set of Fortran90 APIs,
-enabling essentially all new C library features of Release 1.8.0.
-
- <h3>New Functions and Tools</h3>
- <dl>
-
- <dt>C functions:
- <dd>There are no new C functions for Release 1.8.1.</td>
-<!--
- <dd>The following C functions are new for Release 1.8.1
- and are documented in the
- <a href="../RM/RM_H5Front.html"><cite>HDF5 Reference
- Manual</cite></a>.
-
- <table border="0">
-
- <tr>
- <td align="left" valign="top"> </td>
- <td align="left" valign="top"><code>H5Nnew_function</code>
- </td>
- <td align="left" valign="top">syntax
- <font color=red>(see model in HTML source)</font>
- </td>
- <td align="left" valign="top"><em>herr_t</em> <code>H5Lvisit</code>(
- <em>hid_t</em> <code>group_id</code>,
- <em>H5_index_t</em> <code>index_type</code>,
- <em>H5_iter_order_t</em> <code>order</code>,
- <em>H5L_iterate_t</em> <code>op</code>,
- <em>void *</em><code>op_data</code>
- )
- <br>
- See <a href="../RM/RM_H5L.html#Link-Visit">entry</a>.
- </td>
- </tr>
- </table>
--->
-
- <p>
- <dt>Fortran subroutines:
-
- <dd>The following Fortran subroutines are new for Release 1.8.1
- and are documented in the
- <a href="../RM/RM_H5Front.html#F90andCPPlus"><cite>HDF5 Reference
- Manual</cite></a>.
-
- <dir>
- <p>
- <table border="0" width=80%>
- <tr>
- <td align="left" valign="top" width=50%>
- <u>H5A</u>
- <pre>
-<a href="../RM/RM_H5A.html#Annot-Create2">h5acreate_f</a>
-<a href="../RM/RM_H5A.html#Annot-CreateByName">h5acreate_by_name_f</a>
-<a href="../RM/RM_H5A.html#Annot-DeleteByIdx">h5adelete_by_idx_f</a>
-<a href="../RM/RM_H5A.html#Annot-DeleteByName">h5adelete_by_name_f</a>
-<a href="../RM/RM_H5A.html#Annot-Exists">h5aexists_f</a>
-<a href="../RM/RM_H5A.html#Annot-ExistsByName">h5aexists_by_name_f</a>
-<a href="../RM/RM_H5A.html#Annot-GetCreatePlist">h5aget_create_plist_f</a>
-<a href="../RM/RM_H5A.html#Annot-GetInfo">h5aget_info_f</a>
-<a href="../RM/RM_H5A.html#Annot-GetInfoByIdx">h5aget_info_by_idx_f</a>
- </pre>
- </td>
- <td align="left" valign="top" width=50%>
-
- <br>
- <pre>
-<a href="../RM/RM_H5A.html#Annot-GetInfoByName">h5aget_info_by_name_f</a>
-<a href="../RM/RM_H5A.html#Annot-GetNameByIdx">h5aget_name_by_idx_f</a>
-<a href="../RM/RM_H5A.html#Annot-GetStorageSize">h5aget_storage_size_f</a>
-<a href="../RM/RM_H5A.html#Annot-Open">h5aopen_f</a>
-<a href="../RM/RM_H5A.html#Annot-OpenByIdx">h5aopen_by_idx_f</a>
-<a href="../RM/RM_H5A.html#Annot-OpenByName">h5aopen_by_name_f</a>
-<a href="../RM/RM_H5A.html#Annot-Rename">h5arename_f</a>
-<a href="../RM/RM_H5A.html#Annot-RenameByName">h5arename_by_name_f</a>
- </pre>
- </td>
- </tr>
- <tr>
- <td align="left" valign="top" width=50%>
- <u>H5D</u>
- <pre>
-<a href="../RM/RM_H5D.html#Dataset-CreateAnon">h5dcreate_anon_f</a>
-<a href="../RM/RM_H5D.html#Dataset-Create2">h5dcreate_f</a>
- </pre>
- </td>
- <td align="left" valign="top" width=50%>
-
- <br>
- <pre>
-<a href="../RM/RM_H5D.html#Dataset-Open2">h5dopen_f</a>
-<a href="../RM/RM_H5D.html#Dataset-SetExtent">h5dset_extent_f</a>
- </pre>
- </td>
- </tr>
- <tr>
- <td align="left" valign="top" width=50%>
- <u>H5G</u>
- <pre>
-<a href="../RM/RM_H5G.html#Group-CreateAnon">h5gcreate_anon_f</a>
-<a href="../RM/RM_H5G.html#Group-Create2">h5gcreate_f</a>
-<a href="../RM/RM_H5G.html#Group-GetCreatePlist">h5gget_create_plist_f</a>
-<a href="../RM/RM_H5G.html#Group-GetInfo">h5gget_info_f</a>
- </pre>
- </td>
- <td align="left" valign="top" width=50%>
-
- <pre>
-<a href="../RM/RM_H5G.html#Group-GetInfoByIdx">h5gget_info_by_idx_f</a>
-<a href="../RM/RM_H5G.html#Group-GetInfoByName">h5gget_info_by_name_f</a>
-<a href="../RM/RM_H5G.html#Group-Open2">h5gopen_f</a>
- </pre>
- </td>
- </tr>
- <tr>
- <td align="left" valign="top" width=50%>
- <u>H5L</u>
- <pre>
-<a href="../RM/RM_H5L.html#Link-Copy">h5lcopy_f</a>
-<a href="../RM/RM_H5L.html#Link-CreateExternal">h5lcreate_external_f</a>
-<a href="../RM/RM_H5L.html#Link-CreateHard">h5lcreate_hard_f</a>
-<a href="../RM/RM_H5L.html#Link-CreateSoft">h5lcreate_soft_f</a>
-<a href="../RM/RM_H5L.html#Link-Delete">h5ldelete_f</a>
-<a href="../RM/RM_H5L.html#Link-DeleteByIdx">h5ldelete_by_idx_f</a>
- </pre>
- </td>
- <td align="left" valign="top" width=50%>
-
- <pre>
-<a href="../RM/RM_H5L.html#Link-Exists">h5lexists_f</a>
-<a href="../RM/RM_H5L.html#Link-GetInfo">h5lget_info_f</a>
-<a href="../RM/RM_H5L.html#Link-GetInfoByIdx">h5lget_info_by_idx_f</a>
-<a href="../RM/RM_H5L.html#Link-GetNameByIdx">h5lget_name_by_idx_f</a>
-<a href="../RM/RM_H5L.html#Link-Move">h5lmove_f</a>
- </pre>
- </td>
- </tr>
- <tr>
- <td align="left" valign="top" width=50%>
- <u>H5O</u>
- <pre>
-<a href="../RM/RM_H5O.html#Object-Link">h5olink_f</a>
- </pre>
- </td>
- <td align="left" valign="top" width=50%>
-
- <pre>
-<a href="../RM/RM_H5O.html#Object-Open">h5oopen_f</a>
- </pre>
- </td>
- </tr>
- <tr>
- <td align="left" valign="top" width=50%>
- <u>H5P</u>
- <pre>
-<a href="../RM/RM_H5P.html#Property-GetAttrCreationOrder">h5pget_attr_creation_order_f</a>
-<a href="../RM/RM_H5P.html#Property-GetAttrPhaseChange">h5pget_attr_phase_change_f</a>
-<a href="../RM/RM_H5P.html#Property-GetCharEncoding">h5pget_char_encoding_f</a>
-<a href="../RM/RM_H5P.html#Property-GetCopyObject">h5pget_copy_object_f</a>
-<a href="../RM/RM_H5P.html#Property-GetCreateIntermediateGroup">h5pget_create_inter_group_f</a>
-<a href="../RM/RM_H5P.html#Property-GetDataTransform">h5pget_data_transform_f</a>
-<a href="../RM/RM_H5P.html#Property-GetELinkPrefix">h5pget_elink_prefix_f</a>
-<a href="../RM/RM_H5P.html#Property-GetEstLinkInfo">h5pget_est_link_info_f</a>
-<a href="../RM/RM_H5P.html#Property-GetFaplDirect">h5pget_fapl_direct_f</a>
-<a href="../RM/RM_H5P.html#Property-GetLinkCreationOrder">h5pget_link_creation_order_f</a>
-<a href="../RM/RM_H5P.html#Property-GetLinkPhaseChange">h5pget_link_phase_change_f</a>
-<a href="../RM/RM_H5P.html#Property-GetLocalHeapSizeHint">h5pget_local_heap_size_hint_f</a>
-<a href="../RM/RM_H5P.html#Property-GetNLinks">h5pget_nlinks_f</a>
-<a href="../RM/RM_H5P.html#Property-GetObjTrackTimes">h5pget_obj_track_times_f</a>
-<a href="../RM/RM_H5P.html#Property-GetSharedMesgIndex">h5pget_shared_mesg_index_f</a>
-<a href="../RM/RM_H5P.html#Property-GetSharedMesgNIndexes">h5pget_shared_mesg_nindexes_f</a>
- </pre>
- </td>
- <td align="left" valign="top" width=50%>
-
- <pre>
-<a href="../RM/RM_H5P.html#Property-SetAttrCreationOrder">h5pset_attr_creation_order_f</a>
-<a href="../RM/RM_H5P.html#Property-SetAttrPhaseChange">h5pset_attr_phase_change_f</a>
-<a href="../RM/RM_H5P.html#Property-SetCharEncoding">h5pset_char_encoding_f</a>
-<a href="../RM/RM_H5P.html#Property-SetCopyObject">h5pset_copy_object_f</a>
-<a href="../RM/RM_H5P.html#Property-SetCreateIntermediateGroup">h5pset_create_inter_group_f</a>
-<a href="../RM/RM_H5P.html#Property-SetDataTransform">h5pset_data_transform_f</a>
-<a href="../RM/RM_H5P.html#Property-SetELinkPrefix">h5pset_elink_prefix_f</a>
-<a href="../RM/RM_H5P.html#Property-SetEstLinkInfo">h5pset_est_link_info_f</a>
-<a href="../RM/RM_H5P.html#Property-SetFaplDirect">h5pset_fapl_direct_f</a>
-<a href="../RM/RM_H5P.html#Property-SetLibverBounds">h5pset_libver_bounds_f</a>
-<a href="../RM/RM_H5P.html#Property-SetLinkCreationOrder">h5pset_link_creation_order_f</a>
-<a href="../RM/RM_H5P.html#Property-SetLinkPhaseChange">h5pset_link_phase_change_f</a>
-<a href="../RM/RM_H5P.html#Property-SetLocalHeapSizeHint">h5pset_local_heap_size_hint_f</a>
-<a href="../RM/RM_H5P.html#Property-SetObjTrackTimes">h5pset_obj_track_times_f</a>
-<a href="../RM/RM_H5P.html#Property-SetNbit">h5pset_nbit_f</a>
-<a href="../RM/RM_H5P.html#Property-SetNLinks">h5pset_nlinks_f</a>
-<a href="../RM/RM_H5P.html#Property-SetScaleoffset">h5pset_scaleoffset_f</a>
- </pre>
- </td>
- </tr>
- <tr>
- <td align="left" valign="top" width=50%>
- <u>H5R</u>
- <pre>
-<a href="../RM/RM_H5R.html#Reference-GetName">h5rget_name_f</a>
- </pre>
- </td>
- <td align="left" valign="top" width=50%>
-
- <pre>
- </pre>
- </td>
- </tr>
- <tr>
- <td align="left" valign="top" width=50%>
- <u>H5S</u>
- <pre>
-<a href="../RM/RM_H5S.html#Dataspace-Decode">h5sdecode_f</a>
-<a href="../RM/RM_H5S.html#Dataspace-Encode">h5sencode_f</a>
- </pre>
- </td>
- <td align="left" valign="top" width=50%>
-
- <pre>
-<a href="../RM/RM_H5S.html#Dataspace-ExtentEqual">h5sextent_equal_f</a>
- </pre>
- </td>
- </tr>
- <tr>
- <td align="left" valign="top" width=50%>
- <u>H5T</u>
- <pre>
-<a href="../RM/RM_H5T.html#Datatype-CommitAnon">h5tcommit_anon_f</a>
-<a href="../RM/RM_H5T.html#Datatype-Commit2">h5tcommit_f</a>
-<a href="../RM/RM_H5T.html#Datatype-Committed">h5tcommitted_f</a>
-<a href="../RM/RM_H5T.html#Datatype-CompilerConv">h5tcompiler_conv_f</a>
- </pre>
- </td>
- <td align="left" valign="top" width=50%>
-
- <pre>
-<a href="../RM/RM_H5T.html#Datatype-Decode">h5tdecode_f</a>
-<a href="../RM/RM_H5T.html#Datatype-Encode">h5tencode_f</a>
-<a href="../RM/RM_H5T.html#Datatype-GetCreatePlist">h5tget_create_plist_f</a>
-<a href="../RM/RM_H5T.html#Datatype-Open2">h5topen_f</a>
- </pre>
- </td>
- </tr>
- </table>
-
- </dir>
-
-
- <p>
- <dt>C++ wrappers:
- <dd>There are no new C++ wrappers for Release 1.8.1.
-
- <!--
- <dd>The following C++ wrappers are new for Release 1.8.1 and
- are documented in the
- <a href="../cpplus_RM/index.html">
- <cite>HDF5 C++ API Reference Manual</cite></a>.
-
- <dd><code>new_wrapper</code>
- <dd><code>new_wrapper</code>
- <dd><code>new_wrapper</code>
- -->
-
- </dl>
-
- <h3>Functions and Tools with Changed Syntax</h3>
- <dl>
-
- <dt>C functions with changed syntax:
- <dd>There are no C functions
- with changed syntax in Release 1.8.1.</td>
-
- <p>
- <dt>Fortran subroutines with changed syntax:
- <dd>In the following Fortran subroutines, <code>spos</code> is a
- new parameter indicating the position of the sign bit:</td>
- <br>
- <code><a href="../RM/RM_H5T.html#Datatype-SetFields">h5tset_fields_f</a>(type_id,
- <font color=red><i>spos</i>,</font>
- epos, esize, mpos, msize, hdferr)</code>
- <br>
- <code><a href="../RM/RM_H5T.html#Datatype-GetFields">h5tget_fields_f</a>(type_id,
- <font color=red><i>spos</i>,</font>
- epos, esize, mpos, msize, hdferr)</code>
-
- <p>
- <dt>Changed C++ wrappers:
- <ul>
- <li>The class <code>AbstractDS</code> was moved out of
- <code>H5Object</code>.
- <p>
- The class <code>Attribute</code> now multiply inherits from
- <code>IdComponent</code> and <code>AbstractDs</code>;
- the class <code>DataSet</code> now multiply inherits from
- <code>H5Object</code> and <code>AbstractDs</code>.
- <p>
- In addition, data member <code>IdComponent::id</code>
- was moved into subclasses:
- <code>Attribute</code>, <code>DataSet</code>,
- <code>DataSpace</code>, <code>DataType</code>, <code>H5File</code>,
- <code>Group</code>, and <code>PropList</code>.
- <p>
- <li><code>IdComponent::dereference</code> was incorrect;
- it was changed from:<code><br>
-
- void IdComponent::dereference(IdComponent& obj, void* ref)
- <br>
- </code>to:<code>
- <br>
-
- void H5Object::dereference(H5File& h5file, void* ref)
- <br>
-
- void H5Object::dereference(H5Object& obj, void* ref)
- </code>
- </ul>
-
- <p>
- <dt>Tools with changed syntax:
- <ul>
- <li>The command-line syntax of <code>h5repack</code> was changed in
- Release 1.8.0 to the following:
- <br>
- <a href="../RM/Tools.html#Tools-Repack"><code>h5repack</code></a> [<em>OPTIONS</em>]
- <em>in_file</em> <em>out_file</em>
- <p>
- Since this would be imcompatible with existing user scripts,
- the original syntax has be re-enabled in this release:
- <br>
- <code>h5repack </code>
- <code>-i</code> <em>in_file</em>
- <code>-o</code> <em>out_file</em>
- [<em>OPTIONS</em>]
- <p>
- <code>h5repack</code> now understands either syntax.
- <p>
- <li>An <a href="../RM/Tools.html#Tools-Repack"><code>h5repack</code></a>
- option to set the minimum number of links in indexed format
- was introduced in Release 1.8.0 as
- <code>'-d</code> <em>min_indexed_links</em><code>'</code>
- or <code>'--indexed=</code><em>min_indexed_links</em><code>'</code>.
- In Release 1.8.1, the <code>'-i'</code> form has been changed
- to <code>'-d'</code> as follows:
- <br>
- <code>-d</code> <em>min_indexed_links</em>
- <br>or
- <br>
- <code>--indexed=</code><em>min_indexed_links</em>
- <p>
- <li>The command-line syntax of <code>h5diff</code> was changed in
- Release 1.8.0 to the following:
- <br>
- <a href="../RM/Tools.html#Tools-Diff"><code>h5diff</code></a> [<em>OPTIONS</em>]
- <em>file1</em> <em>file2</em>
- [<em>object1</em> [<em>object2</em> ] ]
- </ul>
-
- <p>
- <dt>Tools with new options:
- <ul>
- <li><a href="../RM/Tools.html#Tools-Dump"><code>h5dump</code></a>
- <dir>
- <code>-m <em>T</em></code> or
- <code>--format <em>T</em> </code>
- Sets format of floating point output
- <br>
- </dir>
- </ul>
- </dl>
-
-
-
- <h3>Changed Behavior or Output</h3>
- <dl>
-
- <dt>Changed library behavior:
- <dd>A 4GB limit on the size of dataset chunks is now properly enforced
- when a dataset is created.
- <p>
- <dd>The HDF5 Library now works more effectively with external links.
- Some valid external links that previously failed will now be
- properly recognized.
- See <a href="../RM/RM_H5L.html#Link-CreateExternal"><code>H5Lcreate_external</code></a>.
-
- <p>
- <dt>C functions with changed behavior:
- <dd>The behavior of
- <a href="../RM/RM_H5L.html#Link-CreateExternal"><code>H5Lcreate_external</code></a>
- has changed as described immediately above.
-
- <p>
- <dt>Tools with changed behavior and changed output:
- <dd>The <code>h5dump -p</code> option now prints the
- compression ratio if a compression filter is associated with
- a dataset.
- <p>
- <dd><code>h5dump</code> now supports external links, displaying
- the target objects (datasets, groups, and named datatypes).
-
- <p>
- <dt>Tools with changed output:
- <dd>
-
- </dl>
-
- <h3>Changed Library Configuration</h3>
- <dl>
-
- <dt>The following configuration flag is new with this release:
- <dd><code>--disable-sharedlib-rpath</code>
-
- </dl>
-
- <h3>Removed Patch Requirement</h3>
- <dl>
-
- <dt>The patch that was required for Cygwin with HDF5 Release 1.8.0
- has been rolled into this release and no longer needs to be
- applied by the user.
-
- </dl>
-
-
-<br>
-
-</dir>
-
-<a name="180">
-<h2>Release 1.8.0 versus Release 1.6.x</h2>
-</a>
-
-<dir>
-
-HDF5 Release 1.8.0 is a major release with several new features
-and a variety of bugfixes, optimizations, and
-portability enhancements.
-<p>
-See the document
-“<a href="WhatsNew180.html">What’s New in HDF5 1.8.0</a>”
-for a high-level overview of the new functionality in this release.
-The following pages assume a familiarity with that overview.
-<p>
-
-This section provides details of the API-level changes that have been made
-in the transition to HDF5 Release 1.8.0 from the Release 1.6.<i>x</i> series.
-
-
- <h3>API Compatibility Macros with Associated Renamed and New Functions</h3>
- <dl>
- <dt>Release 1.8.0 introduces API compatibility macros
- designed to facilitate application migration.
- These macros are intended to facilitate developer management
- of a clean, step-by-step migration from an older HDF5 Library
- to the new release;
- they can also be used to enable older applications to use the
- new library without requiring that the application be rewritten.
- See <a href="../RM/APICompatMacros.html"><cite>API Compatibility
- Macros in HDF5</cite></a> for a full description.
-
- <p>
- Macros are identified in reference manual function indexes
- by an <i>italic</i> typeface.
- <p>
- The new macros and the new and old functions to which they
- may be mapped are as follows:
- <dd>
- <table border="0">
-
- <tr>
- <td align="left" valign="top"><code>H5Acreate</code>
- </td>
- <td align="left" valign="top">
- <code>H5Acreate1</code>
- <br>
- <code>H5Acreate2</code>
- </td>
- <td align="left" valign="top">
- Renamed from <code>H5Acreate</code>
- <br>
- New</td>
- </tr><tr>
- <td align="left" valign="top"><code>H5Aiterate</code>
- </td>
- <td align="left" valign="top">
- <code>H5Aiterate1</code>
- <br>
- <code>H5Aiterate2</code>
- </td>
- <td align="left" valign="top">
- Renamed from <code>H5Aiterate</code>
- <br>
- New</td>
- </tr><tr>
- <td align="left" valign="top"><code>H5Dcreate</code>
- </td>
- <td align="left" valign="top">
- <code>H5Dcreate1</code>
- <br>
- <code>H5Dcreate2</code>
- </td>
- <td align="left" valign="top">
- Renamed from <code>H5Dcreate</code>
- <br>
- New</td>
- </tr><tr>
- <td align="left" valign="top"><code>H5Dopen</code>
- </td>
- <td align="left" valign="top">
- <code>H5Dopen1</code>
- <br>
- <code>H5Dopen2</code>
- </td>
- <td align="left" valign="top">
- Renamed from <code>H5Dopen</code>
- <br>
- New</td>
- </tr><tr>
- <td align="left" valign="top"><code>H5Eclear</code>
- </td>
- <td align="left" valign="top">
- <code>H5Eclear1</code>
- <br>
- <code>H5Eclear2</code>
- </td>
- <td align="left" valign="top">
- Renamed from <code>H5Eclear</code>
- <br>
- New</td>
- </tr><tr>
- <td align="left" valign="top"><code>H5Eget_auto</code>
- </td>
- <td align="left" valign="top">
- <code>H5Eget_auto1</code>
- <br>
- <code>H5Eget_auto2</code>
- </td>
- <td align="left" valign="top">
- Renamed from <code>H5Eget_auto</code>
- <br>
- New</td>
- </tr><tr>
- <td align="left" valign="top"><code>H5Eprint</code>
- </td>
- <td align="left" valign="top">
- <code>H5Eprint1</code>
- <br>
- <code>H5Eprint2</code>
- </td>
- <td align="left" valign="top">
- Renamed from <code>H5Eprint</code>
- <br>
- New</td>
- </tr><tr>
- <td align="left" valign="top"><code>H5Epush</code>
- </td>
- <td align="left" valign="top">
- <code>H5Epush1</code>
- <br>
- <code>H5Epush2</code>
- </td>
- <td align="left" valign="top">
- Renamed from <code>H5Epush</code>
- <br>
- New</td>
- </tr><tr>
- <td align="left" valign="top"><code>H5Eset_auto</code>
- </td>
- <td align="left" valign="top">
- <code>H5Eset_auto1</code>
- <br>
- <code>H5Eset_auto2</code>
- </td>
- <td align="left" valign="top">
- Renamed from <code>H5Eset_auto</code>
- <br>
- New</td>
- </tr><tr>
- <td align="left" valign="top"><code>H5Ewalk</code>
- </td>
- <td align="left" valign="top">
- <code>H5Ewalk1</code>
- <br>
- <code>H5Ewalk2</code>
- </td>
- <td align="left" valign="top">
- Renamed from <code>H5Ewalk</code>
- <br>
- New</td>
- </tr><tr>
- <td align="left" valign="top"><code>H5Gcreate</code>
- </td>
- <td align="left" valign="top">
- <code>H5Gcreate1</code>
- <br>
- <code>H5Gcreate2</code>
- </td>
- <td align="left" valign="top">
- Renamed from <code>H5Gcreate</code>
- <br>
- New</td>
- </tr><tr>
- <td align="left" valign="top"><code>H5Gopen</code>
- </td>
- <td align="left" valign="top">
- <code>H5Gopen1</code>
- <br>
- <code>H5Gopen2</code>
- </td>
- <td align="left" valign="top">
- Renamed from <code>H5Gopen</code>
- <br>
- New</td>
- </tr><tr>
- <td align="left" valign="top"><code>H5Pget_filter</code>
- </td>
- <td align="left" valign="top">
- <code>H5Pget_filter1</code>
- <br>
- <code>H5Pget_filter2</code>
- </td>
- <td align="left" valign="top">
- Renamed from <code>H5Pget_filter</code>
- <br>
- New</td>
- </tr><tr>
- <td align="left" valign="top"><code>H5Pget_filter_by_id</code>
- </td>
- <td align="left" valign="top">
- <code>H5Pget_filter_by_id1</code>
- <br>
- <code>H5Pget_filter_by_id2</code>
- </td>
- <td align="left" valign="top">
- Renamed from <code>H5Pget_filter_by_id</code>
- <br>
- New</td>
- </tr><tr>
- <td align="left" valign="top"><code>H5Pinsert</code>
- </td>
- <td align="left" valign="top">
- <code>H5Pinsert1</code>
- <br>
- <code>H5Pinsert2</code>
- </td>
- <td align="left" valign="top">
- Renamed from <code>H5Pinsert</code>
- <br>
- New</td>
- </tr><tr>
- <td align="left" valign="top"><code>H5Pregister</code>
- </td>
- <td align="left" valign="top">
- <code>H5Pregister1</code>
- <br>
- <code>H5Pregister2</code>
- </td>
- <td align="left" valign="top">
- Renamed from <code>H5Pregister</code>
- <br>
- New</td>
- </tr><tr>
- <td align="left" valign="top"><code>H5Rget_obj_type</code>
- </td>
- <td align="left" valign="top">
- <code>H5Rget_obj_type1</code>
- <br>
- <code>H5Rget_obj_type2</code>
- </td>
- <td align="left" valign="top">
- Renamed from <code>H5Rget_obj_type</code>
- <br>
- New</td>
- </tr><tr>
- <td align="left" valign="top"><code>H5Tarray_create</code>
- </td>
- <td align="left" valign="top">
- <code>H5Tarray_create1</code>
- <br>
- <code>H5Tarray_create2</code>
- </td>
- <td align="left" valign="top">
- Renamed from <code>H5Tarray_create</code>
- <br>
- New</td>
- </tr><tr>
- <td align="left" valign="top"><code>H5Tcommit</code>
- </td>
- <td align="left" valign="top">
- <code>H5Tcommit1</code>
- <br>
- <code>H5Tcommit2</code>
- </td>
- <td align="left" valign="top">
- Renamed from <code>H5Tcommit</code>
- <br>
- New</td>
- </tr><tr>
- <td align="left" valign="top"><code>H5Tget_array_dims</code>
- </td>
- <td align="left" valign="top">
- <code>H5Tget_array_dims1</code>
- <br>
- <code>H5Tget_array_dims2</code>
- </td>
- <td align="left" valign="top">
- Renamed from <code>H5Tget_array_dims</code>
- <br>
- New</td>
- </tr><tr>
- <td align="left" valign="top"><code>H5Topen</code>
- </td>
- <td align="left" valign="top">
- <code>H5Topen1</code>
- <br>
- <code>H5Topen2</code>
- </td>
- <td align="left" valign="top">
- Renamed from <code>H5Topen</code>
- <br>
- New</td>
- </tr>
-
- </table>
- <br>
- <i>(<code>H5Dcreate</code> and <code>H5Dopen</code> added to
- the above list in November 2010, prior to Release 1.8.6.)</i>
-
-
- </dl>
-
- <h3>New Functions and Tools</h3>
- <dl>
-
- <!--
- <dt>HDF5 Release x.x.x is primarily a maintenance release,
- focusing on bugfixes, optimization and portability;
- there are no new C APIs or Fortran subroutines.
- -->
-
-
- <dt>C functions:
- <dd>The following C functions are new for Release 1.8.0 and,
- unless otherwise noted, are documented in the
- <a href="../RM/RM_H5Front.html"><cite>HDF5 Reference
- Manual</cite></a>.
-
- <table border="0">
-
- <tr>
- <td align="left" valign="top"><hr>Recursive iteration<hr></td>
- <td align="left" valign="top"> </td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Lvisit</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em> <code>H5Lvisit</code>(
- <em>hid_t</em> <code>group_id</code>,
- <em>H5_index_t</em> <code>index_type</code>,
- <em>H5_iter_order_t</em> <code>order</code>,
- <em>H5L_iterate_t</em> <code>op</code>,
- <em>void *</em><code>op_data</code>
- )
- <br>
- See <a href="../RM/RM_H5L.html#Link-Visit">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Lvisit_by_name</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em> <code>H5Lvisit_by_name</code>(
- <em>hid_t</em> <code>loc_id</code>,
- <em>const char *</em><code>group_name</code>,
- <em>H5_index_t</em> <code>index_type</code>,
- <em>H5_iter_order_t</em> <code>order</code>,
- <em>H5L_iterate_t</em> <code>op</code>,
- <em>void *</em><code>op_data</code>,
- <em>hid_t</em> <code>lapl_id</code>
- )
- <br>
- See <a href="../RM/RM_H5L.html#Link-VisitByName">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Ovisit</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em> <code>H5Ovisit</code>(
- <em>hid_t</em> <code>group_id</code>,
- <em>H5_index_t</em> <code>index_type</code>,
- <em>H5_iter_order_t</em> <code>order</code>,
- <em>H5O_iterate_t</em> <code>op</code>,
- <em>void *</em><code>op_data</code>
- )
- <br>
- See <a href="../RM/RM_H5O.html#Object-Visit">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Ovisit_by_name</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em> <code>H5Ovisit_by_name</code>(
- <em>hid_t</em> <code>loc_id</code>,
- <em>const char *</em><code>object_name</code>,
- <em>H5_index_t</em> <code>index_type</code>,
- <em>H5_iter_order_t</em> <code>order</code>,
- <em>H5O_iterate_t</em> <code>op</code>,
- <em>void *</em><code>op_data</code>,
- <em>hid_t</em> <code>lapl_id</code>
- )
- <br>
- See <a href="../RM/RM_H5O.html#Object-VisitByName">entry</a>.</td>
- </tr>
-
-
- <tr>
- <td align="left" valign="top"><hr>“Format bounds”
- property<br>Release-to-release format compatibility<hr></td>
- <td align="left" valign="top"> </td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Pset_libver_bounds</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em> <code>H5Pset_libver_bounds</code>(
- <em>hid_t</em> <code>fapl_id</code>,
- <em>H5F_libver_t </em><code>low</code>,
- <em>H5F_libver_t </em><code>high</code>
- )
- <br>
- See <a href="../RM/RM_H5P.html#Property-SetLibverBounds">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Pget_libver_bounds</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em> <code>H5Pget_libver_bounds</code>(
- <em>hid_t</em> <code>fapl_id</code>,
- <em>H5F_libver_t *</em><code>low</code>,
- <em>H5F_libver_t *</em><code>high</code>
- )
- <br>
- See <a href="../RM/RM_H5P.html#Property-GetLibverBounds">entry</a>.</td>
- </tr>
-
-
- <tr>
- <td align="left" valign="top"><hr>Configurable compact-or-indexed<br>groups (compact and large groups)<hr></td>
- <td align="left" valign="top"> </td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Pset_link_phase_change</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em> <code>H5Pset_link_phase_change</code>(
- <em>hid_t</em> <code>gcpl_id</code>,
- <em>unsigned</em> <code>max_compact</code>,
- <em>unsigned</em> <code>min_dense</code>
- )
- <br>
- See <a href="../RM/RM_H5P.html#Property-SetLinkPhaseChange">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Pget_link_phase_change</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em> <code>H5Pget_link_phase_change</code>(
- <em>hid_t</em> <code>gcpl_id</code>,
- <em>unsigned</em> *<code>max_compact</code>,
- <em>unsigned</em> *<code>min_dense</code>
- )
- <br>
- See <a href="../RM/RM_H5P.html#Property-GetLinkPhaseChange">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Pset_est_link_info</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em> <code>H5Pset_est_link_info</code>(
- <em>hid_t</em> <code>gcpl_id</code>,
- <em>unsigned</em> <code>est_num_entries</code>,
- <em>unsigned</em> <code>est_name_len</code>
- )
- <br>
- See <a href="../RM/RM_H5P.html#Property-SetEstLinkInfo">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Pget_est_link_info</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em> <code>H5Pget_est_link_info</code>(
- <em>hid_t</em> <code>gcpl_id</code>,
- <em>unsigned</em> *<code>est_num_entries</code>,
- <em>unsigned</em> *<code>est_name_len</code>
- )
- <br>
- See <a href="../RM/RM_H5P.html#Property-GetEstLinkInfo">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Pset_nlinks</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em> <code>H5Pset_nlinks</code>(
- <em>hid_t</em> <code>lapl_id</code>,
- <em>size_t</em> <code>nlinks</code>
- )
- <br>
- See <a href="../RM/RM_H5P.html#Property-SetNLinks">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Pget_nlinks</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em> <code>H5Pget_nlinks</code>(
- <em>hid_t</em> <code>lapl_id</code>,
- <em>size_t *</em><code>nlinks</code>
- )
- <br>
- See <a href="../RM/RM_H5P.html#Property-GetNLinks">entry</a>.</td>
- </tr>
-
-
- <tr>
- <td align="left" valign="top"><hr>User-defined links<hr></td>
- <td align="left" valign="top"> </td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Lcreate_ud</code>
- </td>
- <td align="left" valign="top"><em>herr_t </em><code>H5Lcreate_ud</code>(
- <em>hid_t</em> <code>link_loc_id</code>,
- <em>const char *</em><code>link_name</code>,
- <em>H5L_type_t</em> <code>link_type</code>,
- <em>const char *</em><code>udata</code>,
- <em>size_t</em> <code>udata_size</code>,
- <em>hid_t</em> <code>lcpl_id</code>,
- <em>hid_t</em> <code>lapl_id</code>
- )
- <br>
- See <a href="../RM/RM_H5L.html#Link-CreateUD">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Lregister</code>
- </td>
- <td align="left" valign="top"><em>herr_t </em><code>H5Lregister</code>(
- <em>const H5L_class_t *</em> <code>link_class</code>
- )
- <br>
- See <a href="../RM/RM_H5L.html#Link-Register">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Lunregister</code>
- </td>
- <td align="left" valign="top"><em>herr_t </em><code>H5Lunregister</code>(
- <em>H5L_type_t</em> <code>link_cls_id</code>
- )
- <br>
- See <a href="../RM/RM_H5L.html#Link-Unregister">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Oincr_refcount</code>
- </td>
- <td align="left" valign="top"><em>herr_t </em><code>H5Oincr_refcount</code>(
- <em>hid_t </em><code>object_id</code>
- )
- <br>
- See <a href="../RM/RM_H5O.html#Object-IncrRefCount">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Odecr_refcount</code>
- </td>
- <td align="left" valign="top"><em>herr_t </em><code>H5Odecr_refcount</code>(
- <em>hid_t </em><code>object_id</code>
- )
- <br>
- See <a href="../RM/RM_H5O.html#Object-DecrRefCount">entry</a>.</td>
- </tr>
-
-
- <tr>
- <td align="left" valign="top"><hr>External links<hr></td>
- <td align="left" valign="top"> </td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Lcreate_external</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em> <code>H5Lcreate_external</code>(
- <em>const char *</em><code>file_name</code>,
- <em>const char *</em><code>object_name</code>,
- <em>hid_t</em> <code>link_loc_id</code>,
- <em>const char *</em><code>link_name</code>,
- <em>hid_t</em> <code>lcpl_id</code>,
- <em>hid_t</em> <code>lapl_id</code>
- )
- <br>
- See <a href="../RM/RM_H5L.html#Link-CreateExternal">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Lunpack_elink_val</code>
- </td>
- <td align="left" valign="top"><em>herr_t </em><code>H5Lunpack_elink_val</code>(
- <em>char *</em><code>ext_linkval</code>,
- <em>size_t</em> <code>link_size</code>,
- <em>const char **</em><code>filename</code>,
- <em>const char **</em><code>obj_path</code>
- )
- <br>
- See <a href="../RM/RM_H5L.html#Link-UnpackELinkVal">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Pset_elink_prefix</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em> <code>H5Pset_elink_prefix</code>(
- <em>hid_t</em> <code>lapl_id</code>,
- <em>const char *</em><code>prefix</code>
- )
- <br>
- See <a href="../RM/RM_H5P.html#Property-SetELinkPrefix">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Pget_elink_prefix</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em> <code>H5Pget_elink_prefix</code>(
- <em>hid_t</em> <code>lapl_id</code>,
- <em>const char **</em><code>prefix</code>
- )
- <br>
- See <a href="../RM/RM_H5P.html#Property-GetELinkPrefix">entry</a>.</td>
- </tr>
-
-
- <tr>
- <td align="left" valign="top"><hr>Link creation order<br>tracking and indexing<hr></td>
- <td align="left" valign="top"> </td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Pset_link_creation_order</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em> <code>H5Pset_link_creation_order</code>(
- <em>hid_t</em> <code>ocpl_id</code>,
- <em>unsigned</em> *<code>crt_order_flags</code>
- )
- <br>
- See <a href="../RM/RM_H5P.html#Property-SetLinkCreationOrder">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Pget_link_creation_order</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em> <code>H5Pget_link_creation_order</code>(
- <em>hid_t</em> <code>ocpl_id</code>,
- <em>unsigned</em> *<code>crt_order_flags</code>
- )
- <br>
- See <a href="../RM/RM_H5P.html#Property-GetLinkCreationOrder">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Gget_create_plist</code>
- </td>
- <td align="left" valign="top"><em>hid_t</em> <code>H5Gget_create_plist</code>(
- <em>hid_t</em> <code>group_id</code>
- )
- <br>
- See <a href="../RM/RM_H5G.html#Group-GetCreatePlist">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Gget_info_by_idx</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em> <code>H5Gget_info_by_idx</code>(
- <em>hid_t</em> <code>loc_id</code>,
- <em>const char *</em><code>group_name</code>,
- <em>H5_index_t</em> <code>index_type</code>,
- <em>H5_iter_order_t</em> <code>order</code>,
- <em>hsize_t</em> <code>n</code>,
- <em>H5G_info_t</em> *<code>group_info</code>,
- <em>hid_t</em> <code>lapl_id</code>
- )
- <br>
- See <a href="../RM/RM_H5G.html#Group-GetInfoByIdx">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Tget_create_plist</code>
- </td>
- <td align="left" valign="top"><em>hid_t</em>
- <code>H5Tget_create_plist</code>(
- <em>hid_t</em> <code>dtype_id</code>
- )
- <br>
- See <a href="../RM/RM_H5T.html#Datatype-GetCreatePlist">entry</a>.</td>
- </tr>
-
-
- <tr>
- <td align="left" valign="top"><hr>Link API (H5L), an all-new interface<br>(includes user-defined and external links)<hr></td>
- <td align="left" valign="top"> </td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Lcopy</code>
- </td>
- <td align="left" valign="top"><em>herr_t </em><code>H5Lcopy</code>(
- <em>hid_t </em><code>src_loc_id</code>,
- <em>const char *</em><code>src_name</code>,
- <em>hid_t </em><code>dest_loc_id</code>,
- <em>const char *</em><code>dest_name</code>,
- <em>hid_t </em><code>lcpl_id</code>
- <em>hid_t </em><code>lapl_id</code>
- )
- <br>
- See <a href="../RM/RM_H5L.html#Link-Copy">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Lcreate_external</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em> <code>H5Lcreate_external</code>(
- <em>const char *</em><code>file_name</code>,
- <em>const char *</em><code>object_name</code>,
- <em>hid_t</em> <code>link_loc_id</code>,
- <em>const char *</em><code>link_name</code>,
- <em>hid_t</em> <code>lcpl_id</code>,
- <em>hid_t</em> <code>lapl_id</code>
- )
- <br>
- See <a href="../RM/RM_H5L.html#Link-CreateExternal">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Lcreate_hard</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em> <code>H5Lcreate_hard</code>(
- <em>hid_t</em> <code>obj_loc_id</code>,
- <em>const char *</em><code>obj_name</code>,
- <em>hid_t</em> <code>link_loc_id</code>,
- <em>const char *</em><code>link_name</code>,
- <em>hid_t</em> <code>lcpl_id</code>,
- <em>hid_t</em> <code>lapl_id</code>
- )
- <br>
- See <a href="../RM/RM_H5L.html#Link-CreateHard">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Lcreate_soft</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em> <code>H5Lcreate_soft</code>(
- <em>const char *</em><code>target_path</code>,
- <em>hid_t</em> <code>link_loc_id</code>,
- <em>const char *</em><code>link_name</code>,
- <em>hid_t</em> <code>lcpl_id</code>,
- <em>hid_t</em> <code>lapl_id</code>
- )
- <br>
- See <a href="../RM/RM_H5L.html#Link-CreateSoft">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Lcreate_ud</code>
- </td>
- <td align="left" valign="top"><em>herr_t </em><code>H5Lcreate_ud</code>(
- <em>hid_t</em> <code>link_loc_id</code>,
- <em>const char *</em><code>link_name</code>,
- <em>H5L_type_t</em> <code>link_type</code>,
- <em>const char *</em><code>udata</code>,
- <em>size_t</em> <code>udata_size</code>,
- <em>hid_t</em> <code>lcpl_id</code>,
- <em>hid_t</em> <code>lapl_id</code>
- )
- <br>
- See <a href="../RM/RM_H5L.html#Link-CreateUD">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Ldelete</code>
- </td>
- <td align="left" valign="top"><em>herr_t </em><code>H5Ldelete</code>(
- <em>hid_t</em> <code>loc_id</code>,
- <em>const char *</em><code>name</code>,
- <em>hid_t</em> <code>lapl_id</code>
- )
- <br>
- See <a href="../RM/RM_H5L.html#Link-Delete">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Ldelete_by_idx</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em> <code>H5Ldelete_by_idx</code>(
- <em>hid_t</em> <code>loc_id</code>,
- <em>const char *</em><code>group_name</code>,
- <em>H5_index_t</em> <code>index_field</code>,
- <em>H5_iter_order_t</em> <code>order</code>,
- <em>hsize_t</em> <code>n</code>,
- <em>hid_t</em> <code>lapl_id</code>
- )
- <br>
- See <a href="../RM/RM_H5L.html#Link-DeleteByIdx">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Lexists</code>
- </td>
- <td align="left" valign="top"><em>htri_t</em> <code>H5Lexists</code>(
- <em>hid_t</em> <code>loc_id</code>,
- <em>const char *</em><code>name</code>,
- <em>hid_t</em> <code>lapl_id</code>
- )
- <br>
- See <a href="../RM/RM_H5L.html#Link-Exists">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Lget_info</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em> <code>H5Lget_info</code>(
- <em>hid_t</em> <code>link_loc_id</code>,
- <em>const char *</em><code>link_name</code>,
- <em>H5L_info_t *</em><code>link_buff</code>,
- <em>hid_t</em> <code>lapl_id</code>
- )
- <br>
- See <a href="../RM/RM_H5L.html#Link-GetInfo">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Lget_info_by_idx</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em> <code>H5Lget_info_by_idx</code>(
- <em>hid_t</em> <code>loc_id</code>,
- <em>const char *</em><code>group_name</code>,
- <em>H5_index_t</em> <code>index_field</code>,
- <em>H5_iter_order_t</em> <code>order</code>,
- <em>hsize_t</em> <code>n</code>,
- <em>H5L_info_t</em> *<code>link_val</code>,
- <em>hid_t</em> <code>lapl_id</code>
- )
- <br>
- See <a href="../RM/RM_H5L.html#Link-GetInfoByIdx">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Lget_name_by_idx</code>
- </td>
- <td align="left" valign="top"><em>ssize_t</em> <code>H5Lget_name_by_idx</code>(
- <em>hid_t</em> <code>loc_id</code>,
- <em>const char *</em><code>group_name</code>,
- <em>H5_index_t</em> <code>index_field</code>,
- <em>H5_iter_order_t</em> <code>order</code>,
- <em>hsize_t</em> <code>n</code>,
- <em>char</em> *<code>name</code>,
- <em>size_t</em> <code>size</code>,
- <em>hid_t</em> <code>lapl_id</code>
- )
- <br>
- See <a href="../RM/RM_H5L.html#Link-GetNameByIdx">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Lget_val</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em> <code>H5Lget_val</code>(
- <em>hid_t</em> <code>link_loc_id</code>,
- <em>const char *</em><code>link_name</code>,
- <em>void *</em><code>linkval_buff</code>,
- <em>size_t</em> <code>size</code>,
- <em>hid_t</em> <code>lapl_id</code>
- )
- <br>
- See <a href="../RM/RM_H5L.html#Link-GetVal">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Lget_val_by_idx</code>
- </td>
- <td align="left" valign="top"><em>ssize_t</em> <code>H5Lget_val_by_idx</code>(
- <em>hid_t</em> <code>loc_id</code>,
- <em>const char *</em><code>group_name</code>,
- <em>H5_index_t</em> <code>index_field</code>,
- <em>H5_iter_order_t</em> <code>order</code>,
- <em>hsize_t</em> <code>n</code>,
- <em>char</em> *<code>value_buf</code>,
- <em>size_t</em> <code>size</code>,
- <em>hid_t</em> <code>lapl_id</code>
- )
- <br>
- See <a href="../RM/RM_H5L.html#Link-GetValByIdx">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Lis_registered</code>
- </td>
- <td align="left" valign="top"><em>htri_t </em><code>H5Lis_registered</code>(
- <em>H5L_type_t</em> <code>link_cls_id</code>
- )
- <br>
- See <a href="../RM/RM_H5L.html#Link-IsRegistered">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Literate</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em> <code>H5Literate</code>(
- <em>hid_t</em> <code>loc_id</code>,
- <em>H5_index_t</em> <code>index_type</code>,
- <em>H5_iter_order_t</em> <code>order</code>,
- <em>hsize_t</em> *<code>idx</code>,
- <em>H5L_iterate_t</em> <code>op</code>,
- <em>void</em> *<code>op_data</code>
- )
- <br>
- See <a href="../RM/RM_H5L.html#Link-Iterate">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Literate_by_name</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em> <code>H5Literate</code>(
- <em>hid_t</em> <code>loc_id</code>,
- <em>const char *</em><code>group_name</code>,
- <em>H5_index_t</em> <code>index_type</code>,
- <em>H5_iter_order_t</em> <code>order</code>,
- <em>hsize_t</em> *<code>idx</code>,
- <em>H5L_iterate_t</em> <code>op</code>,
- <em>void</em> *<code>op_data</code>,
- <em>hid_t</em> *<code>lapl_id</code>
- )
- <br>
- See <a href="../RM/RM_H5L.html#Link-IterateByName">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Lmove</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em> <code>H5Lmove</code>(
- <em>hid_t</em> <code>src_loc_id</code>,
- <em>const char *</em><code>src_name</code>,
- <em>hid_t</em> <code>dest_loc_id</code>,
- <em>const char *</em><code>dest_name</code>,
- <em>hid_t</em> <code>lcpl</code>,
- <em>hid_t</em> <code>lapl</code>
- )
- <br>
- See <a href="../RM/RM_H5L.html#Link-Move">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Lregister</code>
- </td>
- <td align="left" valign="top"><em>herr_t </em><code>H5Lregister</code>(
- <em>const H5L_class_t *</em> <code>link_class</code>
- )
- <br>
- See <a href="../RM/RM_H5L.html#Link-Register">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Lunpack_elink_val</code>
- </td>
- <td align="left" valign="top"><em>herr_t </em><code>H5Lunpack_elink_val</code>(
- <em>char *</em><code>ext_linkval</code>,
- <em>size_t</em> <code>link_size</code>,
- <em>const char **</em><code>filename</code>,
- <em>const char **</em><code>obj_path</code>
- )
- <br>
- See <a href="../RM/RM_H5L.html#Link-UnpackELinkVal">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Lunregister</code>
- </td>
- <td align="left" valign="top"><em>herr_t </em><code>H5Lunregister</code>(
- <em>H5L_type_t</em> <code>link_cls_id</code>
- )
- <br>
- See <a href="../RM/RM_H5L.html#Link-Unregister">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Lvisit</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em> <code>H5Lvisit</code>(
- <em>hid_t</em> <code>group_id</code>,
- <em>H5_index_t</em> <code>index_type</code>,
- <em>H5_iter_order_t</em> <code>order</code>,
- <em>H5L_iterate_t</em> <code>op</code>,
- <em>void *</em><code>op_data</code>
- )
- <br>
- See <a href="../RM/RM_H5L.html#Link-Visit">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Lvisit_by_name</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em> <code>H5Lvisit_by_name</code>(
- <em>hid_t</em> <code>loc_id</code>,
- <em>const char *</em><code>group_name</code>,
- <em>H5_index_t</em> <code>index_type</code>,
- <em>H5_iter_order_t</em> <code>order</code>,
- <em>H5L_iterate_t</em> <code>op</code>,
- <em>void *</em><code>op_data</code>,
- <em>hid_t</em> <code>lapl_id</code>
- )
- <br>
- See <a href="../RM/RM_H5L.html#Link-VisitByName">entry</a>.</td>
- </tr>
-
-
- <tr>
- <td align="left" valign="top"><hr>Enhanced attribute handling<hr></td>
- <td align="left" valign="top"> </td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Acreate2</code>
- </td>
- <td align="left" valign="top"><em>hid_t</em> <code>H5Acreate2</code>(
- <em>hid_t</em> <code>loc_id</code>,
- <em>const char *</em><code>obj_name</code>,
- <em>const char *</em><code>attr_name</code>,
- <em>hid_t</em> <code>type_id</code>,
- <em>hid_t</em> <code>space_id</code>,
- <em>hid_t</em> <code>acpl_id</code>,
- <em>hid_t</em> <code>aapl_id</code>,
- <em>hid_t</em> <code>lapl_id</code>
- )
- <br>
- See <a href="../RM/RM_H5A.html#Annot-Create2">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Adelete_by_idx</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em> <code>H5Adelete_by_idx</code>(
- <em>hid_t</em> <code>loc_id</code>,
- <em>const char *</em><code>obj_name</code>,
- <em>H5_index_t</em> <code>idx_type</code>,
- <em>H5_iter_order_t</em> <code>order</code>,
- <em>hsize_t</em> <code>n</code>,
- <em>hid_t</em> <code>lapl_id</code>
- )
- <br>
- See <a href="../RM/RM_H5A.html#Annot-DeleteByIdx">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Adelete_by_name</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em> <code>H5Adelete_by_name</code>(
- <em>hid_t</em> <code>loc_id</code>,
- <em>const char *</em><code>obj_name</code>,
- <em>const char *</em><code>attr_name</code>,
- <em>hid_t</em> <code>lapl_id</code>
- )
- <br>
- See <a href="../RM/RM_H5A.html#Annot-DeleteByName">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Aget_info</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em> <code>H5Aget_info</code>(
- <em>hid_t</em> <code>attr_id</code>,
- <em>H5A_info_t *</em><code>ainfo</code>
- )
- <br>
- See <a href="../RM/RM_H5A.html#Annot-GetInfo">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Aget_info_by_idx</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em> <code>H5Aget_info_by_idx</code>(
- <em>hid_t</em> <code>loc_id</code>,
- <em>const char *</em><code>obj_name</code>,
- <em>H5_index_t</em> <code>idx_type</code>,
- <em>H5_iter_order_t</em> <code>order</code>,
- <em>hsize_t</em> <code>n</code>,
- <em>H5A_info_t *</em><code>ainfo</code>,
- <em>hid_t</em> <code>lapl_id</code>
- )
- <br>
- See <a href="../RM/RM_H5A.html#Annot-GetInfoByIdx">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Aget_info_by_name</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em> <code>H5Aget_info_by_name</code>(
- <em>hid_t</em> <code>loc_id</code>,
- <em>const char *</em><code>obj_name</code>,
- <em>const char *</em><code>attr_name</code>,
- <em>H5A_info_t *</em><code>ainfo</code>,
- <em>hid_t</em> <code>lapl_id</code>
- )
- <br>
- See <a href="../RM/RM_H5A.html#Annot-GetInfoByName">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Aget_name_by_idx</code>
- </td>
- <td align="left" valign="top"><em>ssize_t</em> <code>H5Aget_name_by_idx</code>(
- <em>hid_t</em> <code>loc_id</code>,
- <em>const char *</em><code>obj_name</code>,
- <em>H5_index_t</em> <code>idx_type</code>,
- <em>H5_iter_order_t</em> <code>order</code>,
- <em>hsize_t</em> <code>n</code>,
- <em>char *</em><code>name</code>,
- <em>size_t</em> <code>size</code>,
- <em>hid_t</em> <code>lapl_id</code>
- )
- <br>
- See <a href="../RM/RM_H5A.html#Annot-GetNameByIdx">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Aget_storage_size</code>
- </td>
- <td align="left" valign="top"><em>hsize_t</em> <code>H5Aget_storage_size</code>(
- <em>hid_t</em> <code>attr_id</code>
- )
- <br>
- See <a href="../RM/RM_H5A.html#Annot-GetStorageSize">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Aiterate2</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em> <code>H5Aiterate2</code>(
- <em>hid_t</em> <code>obj_id</code>,
- <em>H5_index_t</em> <code>idx_type</code>,
- <em>H5_iter_order_t</em> <code>order</code>,
- <em>hsize_t *</em><code>n</code>,
- <em>H5A_operator2_t</em> <code>op</code>,
- <em>void *</em><code>op_data</code>
- )
- <br>
- See <a href="../RM/RM_H5A.html#Annot-Iterate2">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Aiterate_by_name</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em> <code>H5Aiterate_by_name</code>(
- <em>hid_t</em> <code>loc_id</code>,
- <em>const char *</em><code>obj_name</code>,
- <em>H5_index_t</em> <code>idx_type</code>,
- <em>H5_iter_order_t</em> <code>order</code>,
- <em>hsize_t *</em><code>n</code>,
- <em>H5A_operator2_t</em> <code>op</code>,
- <em>void *</em><code>op_data</code>,
- <em>hid_t</em> <code>lapd_id</code>
- )
- <br>
- See <a href="../RM/RM_H5A.html#Annot-IterateByName">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Aopen</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em> <code>H5Aopen</code>(
- <em>hid_t</em> <code>loc_id</code>,
- <em>const char *</em><code>obj_name</code>,
- <em>const char *</em><code>attr_name</code>,
- <em>hid_t</em> <code>aapl_id</code>,
- <em>hid_t</em> <code>lapl_id</code>
- )
- <br>
- See <a href="../RM/RM_H5A.html#Annot-Open">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Aopen_by_idx</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em> <code>H5Aopen_by_idx</code>(
- <em>hid_t</em> <code>loc_id</code>,
- <em>const char *</em><code>obj_name</code>,
- <em>H5_index_t</em> <code>idx_type</code>,
- <em>H5_iter_order_t</em> <code>order</code>,
- <em>hsize_t</em> <code>n</code>,
- <em>hid_t</em> <code>aapl_id</code>,
- <em>hid_t</em> <code>lapl_id</code>
- )
- <br>
- See <a href="../RM/RM_H5A.html#Annot-OpenByIdx">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Arename_by_name</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em> <code>H5Arename_by_name</code>(
- <em>hid_t</em> <code>loc_id</code>,
- <em>const char *</em><code>obj_name</code>,
- <em>const char *</em><code>old_attr_name</code>,
- <em>const char *</em><code>new_attr_name</code>,
- <em>hid_t</em> <code>lapl_id</code>
- )
- <br>
- See <a href="../RM/RM_H5A.html#Annot-RenameByName">entry</a>.</td>
- </tr>
-
-
- <tr>
- <td align="left" valign="top"><hr>Managing large numbers of attributes<hr></td>
- <td align="left" valign="top"> </td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Pset_attr_phase_change</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em> <code>H5Pset_attr_phase_change</code>(
- <em>hid_t</em> <code>ocpl_id</code>,
- <em>unsigned</em> <code>max_compact</code>,
- <em>unsigned</em> <code>min_dense</code>
- )
- <br>
- See <a href="../RM/RM_H5P.html#Property-SetAttrPhaseChange">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Pget_attr_phase_change</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em> <code>H5Pget_attr_phase_change</code>(
- <em>hid_t</em> <code>ocpl_id</code>,
- <em>unsigned</em> *<code>max_compact</code>,
- <em>unsigned</em> *<code>min_dense</code>
- )
- <br>
- See <a href="../RM/RM_H5P.html#Property-GetAttrPhaseChange">entry</a>.</td>
- </tr>
-
-
- <tr>
- <td align="left" valign="top"><hr>Attribute creation order<br>tracking and indexing<hr></td>
- <td align="left" valign="top"> </td>
- </tr>
-
-
- <tr>
- <td align="left" valign="top"><code>H5Pset_attr_creation_order</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em> <code>H5Pset_attr_creation_order</code>(
- <em>hid_t</em> <code>ocpl_id</code>,
- <em>unsigned</em> <code>crt_order_flags</code>
- )
- <br>
- See <a href="../RM/RM_H5P.html#Property-SetAttrCreationOrder">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Pget_attr_creation_order</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em> <code>H5Pget_attr_creation_order</code>(
- <em>hid_t</em> <code>ocpl_id</code>,
- <em>unsigned</em> *<code>crt_order_flags</code>
- )
- <br>
- See <a href="../RM/RM_H5P.html#Property-GetAttrCreationOrder">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Aget_create_plist</code>
- </td>
- <td align="left" valign="top"><em>hid_t</em>
- <code>H5Aget_create_plist</code>(
- <em>hid_t</em> <code>attr_id</code>
- )
- <br>
- See <a href="../RM/RM_H5A.html#Annot-GetCreatePlist">entry</a>. </td>
- </tr>
-
-
- <tr>
- <td align="left" valign="top"><hr>Shared object header messages (SOHM)<hr></td>
- <td align="left" valign="top"> </td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Pset_shared_mesg_index</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em> <code>H5Pset_shared_mesg_index</code>(
- <em>hid_t</em> <code>fcpl_id</code>,
- <em>unsigned</em> <code>index_num</code>,
- <em>unsigned</em> <code>mesg_type_flags</code>,
- <em>unsigned</em> <code>min_mesg_size</code>
- )
- <br>
- See <a href="../RM/RM_H5P.html#Property-SetSharedMesgIndex">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Pset_shared_mesg_nindexes</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em> <code>H5Pset_shared_mesg_nindexes</code>(
- <em>hid_t</em> <code>plist_id</code>,
- <em>unsigned</em> <code>nindexes</code>
- )
- <br>
- See <a href="../RM/RM_H5P.html#Property-SetSharedMesgNIndexes">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Pset_shared_mesg_phase_change</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em> <code>H5Pset_shared_mesg_phase_change</code>(
- <em>hid_t</em> <code>fcpl_id</code>,
- <em>unsigned</em> <code>max_list</code>,
- <em>unsigned</em> <code>min_btree</code>
- )
- <br>
- See <a href="../RM/RM_H5P.html#Property-SetSharedMesgPhaseChange">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Pget_shared_mesg_index</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em> <code>H5Pget_shared_mesg_index</code>(
- <em>hid_t</em> <code>fcpl_id</code>,
- <em>unsigned</em> <code>index_num</code>,
- <em>unsigned</em> *<code>mesg_type_flags</code>,
- <em>unsigned</em> *<code>min_mesg_size</code>
- )
- <br>
- See <a href="../RM/RM_H5P.html#Property-GetSharedMesgIndex">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Pget_shared_mesg_nindexes</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em> <code>H5Pget_shared_mesg_nindexes</code>(
- <em>hid_t</em> <code>fcpl_id</code>,
- <em>unsigned</em> *<code>nindexes</code>
- )
- <br>
- See <a href="../RM/RM_H5P.html#Property-GetSharedMesgNIndexes">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Pget_shared_mesg_phase_change</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em> <code>H5Pget_shared_mesg_phase_change</code>(
- <em>hid_t</em> <code>fcpl_id</code>,
- <em>unsigned</em> *<code>max_list</code>,
- <em>unsigned</em> *<code>min_btree</code>
- )
- <br>
- See <a href="../RM/RM_H5P.html#Property-GetSharedMesgPhaseChange">entry</a>.</td>
- </tr>
-
-
- <tr>
- <td align="left" valign="top"><hr>Enhanced local heap size<br>management (group meta data)<hr></td>
- <td align="left" valign="top"> </td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Pset_local_heap_size_hint</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em> <code>H5Pset_local_heap_size_hint</code>(
- <em>hid_t</em> <code>gcpl_id</code>,
- <em>size_t</em> *<code>size_hint</code>
- )
- <br>
- See <a href="../RM/RM_H5P.html#Property-SetLocalHeapSizeHint">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Pget_local_heap_size_hint</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em> <code>H5Pget_local_heap_size_hint</code>(
- <em>hid_t</em> <code>gcpl_id</code>,
- <em>size_t</em> <code>size_hint</code>
- )
- <br>
- See <a href="../RM/RM_H5P.html#Property-GetLocalHeapSizeHint">entry</a>.</td>
- </tr>
-
-
- <tr>
- <td align="left" valign="top"><hr>UNICODE support<hr></td>
- <td align="left" valign="top"> </td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Pset_char_encoding</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em>
- <code>H5Pset_char_encoding</code>(
- <em>hid_t </em><code>plist_id</code>,
- <em>H5T_cset_t</em> <code>encoding</code>
- )
- <br>
- See <a href="../RM/RM_H5P.html#Property-SetCharEncoding">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Pget_char_encoding</code>
- </td>
- <td align="left" valign="top"><em>herr_t </em><code>H5Pget_char_encoding</code>(
- <em>hid_t </em><code>plist_id</code>,
- <em>H5T_cset_t</em> <code>encoding</code>
- )
- <br>
- See <a href="../RM/RM_H5P.html#Property-GetCharEncoding">entry</a>.</td>
- </tr>
- </table>
-
-
- <table border="0">
- <tr>
- <td align="left" valign="top"><hr>Object API (H5O), all new<hr></td>
- <td align="left" valign="top"> </td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Oclose</code>
- </td>
- <td align="left" valign="top"><em>herr_t </em><code>H5Oclose</code>(
- <em>hid_t </em><code>object_id</code>
- )
- <br>
- See <a href="../RM/RM_H5O.html#Object-Close">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Ocopy</code>
- </td>
- <td align="left" valign="top"><em>herr_t </em><code>H5Ocopy</code>(
- <em>hid_t </em><code>src_loc_id</code>,
- <em>const char *</em><code>src_name</code>,
- <em>hid_t </em><code>dst_loc_id</code>,
- <em>const char *</em><code>dst_name</code>,
- <em>hid_t </em><code>ocp_plist_id</code>,
- <em>hid_t </em><code>lcpl_id</code>
- )
- <br>
- See <a href="../RM/RM_H5O.html#Object-Copy">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Odecr_refcount</code>
- </td>
- <td align="left" valign="top"><em>herr_t </em><code>H5Odecr_refcount</code>(
- <em>hid_t </em><code>object_id</code>
- )
- <br>
- See <a href="../RM/RM_H5O.html#Object-DecrRefCount">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Oget_comment</code>
- </td>
- <td align="left" valign="top"><em>ssize_t</em> <code>H5Oget_comment</code>(
- <em>hid_t</em> <code>object_id</code>,
- <em>char *</em><code>comment</code>,
- <em>size_t</em> <code>bufsize</code>
- )
- <br>
- See <a href="../RM/RM_H5O.html#Object-GetComment">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Oget_comment_by_name</code>
- </td>
- <td align="left" valign="top"><em>ssize_t</em> <code>H5Oget_comment_by_name</code>(
- <em>hid_t</em> <code>loc_id</code>,
- <em>const char *</em><code>name</code>,
- <em>char *</em><code>comment</code>,
- <em>size_t</em> <code>bufsize</code>,
- <em>hid_t</em> <code>lapl_id</code>
- )
- <br>
- See <a href="../RM/RM_H5O.html#Object-GetCommentByName">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Oget_info</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em> <code>H5Oget_info</code>(
- <em>hid_t</em> <code>object_id</code>,
- <em>H5O_info_t</em> *<code>obj_info</code>
- )
- <br>
- See <a href="../RM/RM_H5O.html#Object-GetInfo">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Oget_info_by_idx</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em> <code>H5Oget_info_by_idx</code>(
- <em>hid_t</em> <code>loc_id</code>,
- <em>const char *</em><code>group_name</code>,
- <em>H5_index_t</em> <code>index_field</code>,
- <em>H5_iter_order_t</em> <code>order</code>,
- <em>hsize_t</em> <code>n</code>,
- <em>H5O_info_t</em> *<code>obj_info</code>,
- <em>hid_t</em> <code>lapl_id</code>
- )
- <br>
- See <a href="../RM/RM_H5O.html#Object-GetInfoByIdx">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Oget_info_by_name</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em> <code>H5Oget_info_by_name</code>(
- <em>hid_t</em> <code>loc_id</code>,
- <em>const char *</em><code>object_name</code>,
- <em>H5O_info_t</em> *<code>object_info</code>,
- <em>hid_t</em> <code>lapl_id</code>
- )
- <br>
- See <a href="../RM/RM_H5O.html#Object-GetInfoByName">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Oincr_refcount</code>
- </td>
- <td align="left" valign="top"><em>herr_t </em><code>H5Oincr_refcount</code>(
- <em>hid_t </em><code>object_id</code>
- )
- <br>
- See <a href="../RM/RM_H5O.html#Object-IncrRefCount">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Olink</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em> <code>H5Olink</code>(
- <em>hid_t</em> <code>obj_id</code>,
- <em>hid_t</em> <code>new_loc_id</code>,
- <em>const char *</em><code>new_link_name</code>,
- <em>hid_t</em> <code>lcpl</code>,
- <em>hid_t</em> <code>lapl</code>
- )
- <br>
- See <a href="../RM/RM_H5O.html#Object-Link">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Oopen</code>
- </td>
- <td align="left" valign="top"><em>hid_t </em><code>H5Oopen</code>(
- <em>hid_t </em><code>loc_id</code>,
- <em>const char *</em><code>name</code>,
- <em>hid_t </em><code>lapl_id</code>
- )
- <br>
- See <a href="../RM/RM_H5O.html#Object-Open">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Oopen_by_addr</code>
- </td>
- <td align="left" valign="top"><em>hid_t </em><code>H5Oopen_by_addr</code>(
- <em>hid_t </em><code>loc_id</code>,
- <em>haddr_t </em><code>addr</code>
- )
- <br>
- See <a href="../RM/RM_H5O.html#Object-OpenByAddr">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Oopen_by_idx</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em> <code>H5Oopen_by_idx</code>(
- <em>hid_t</em> <code>loc_id</code>,
- <em>const char *</em><code>group_name</code>,
- <em>H5_index_t</em> <code>index_field</code>,
- <em>H5_iter_order_t</em> <code>order</code>,
- <em>hsize_t</em> <code>n</code>,
- <em>hid_t</em> <code>lapl_id</code>
- )
- <br>
- See <a href="../RM/RM_H5O.html#Object-OpenByIdx">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Oset_comment</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em> <code>H5Oset_comment</code>(
- <em>hid_t</em> <code>object_id</code>,
- <em>const char *</em><code>comment</code>
- )
- <br>
- See <a href="../RM/RM_H5O.html#Object-SetComment">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Oset_comment_by_name</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em> <code>H5Oset_comment_by_name</code>(
- <em>hid_t</em> <code>loc_id</code>,
- <em>const char *</em><code>name</code>,
- <em>const char *</em><code>comment</code>,
- <em>hid_t</em> <code>lapl_id</code>
- )
- <br>
- See <a href="../RM/RM_H5O.html#Object-SetCommentByName">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Ovisit</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em> <code>H5Ovisit</code>(
- <em>hid_t</em> <code>group_id</code>,
- <em>H5_index_t</em> <code>index_type</code>,
- <em>H5_iter_order_t</em> <code>order</code>,
- <em>H5O_iterate_t</em> <code>op</code>,
- <em>void *</em><code>op_data</code>
- )
- <br>
- See <a href="../RM/RM_H5O.html#Object-Visit">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Ovisit_by_name</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em> <code>H5Ovisit_by_name</code>(
- <em>hid_t</em> <code>loc_id</code>,
- <em>const char *</em><code>object_name</code>,
- <em>H5_index_t</em> <code>index_type</code>,
- <em>H5_iter_order_t</em> <code>order</code>,
- <em>H5O_iterate_t</em> <code>op</code>,
- <em>void *</em><code>op_data</code>,
- <em>hid_t</em> <code>lapl_id</code>
- )
- <br>
- See <a href="../RM/RM_H5O.html#Object-VisitByName">entry</a>.</td>
- </tr>
-
-
- <tr>
- <td align="left" valign="top"><hr>Object creation or copying with<br>“create intermediate groups” property<hr></td>
- <td align="left" valign="top"> </td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Pset_create_intermediate_group</code> </td>
- <td align="left" valign="top"><em>herr_t</em>
- <code>H5Pset_create_intermediate_group</code>(
- <em>hid_t </em><code>gcpl_id</code>,
- <em>unsigned </em><code>crt_intermed_group</code>
- )
- <br>
- See <a href="../RM/RM_H5P.html#Property-SetCreateIntermediateGroup">entry</a>. </td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Pget_create_intermediate_group</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em>
- <code>H5Pget_create_intermediate_group</code>(
- <em>hid_t </em><code>gcpl_id</code>,
- <em>unsigned *</em><code>crt_intermed_group</code>
- )
- <br>
- See <a href="../RM/RM_H5P.html#Property-GetCreateIntermediateGroup">entry</a>. </td>
- </tr>
-
-
- <tr>
- <td align="left" valign="top"><hr>Object copy properties<hr></td>
- <td align="left" valign="top"> </td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Ocopy</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em>
- <code>H5Ocopy</code>(
- <em>hid_t</em> <code>src_loc_id</code>,
- <em>const char *</em><code>src_name</code>,
- <em>hid_t</em> <code>dst_loc_id</code>,
- <em>const char *</em><code>dst_name</code>,
- <em>hid_t</em> <code>ocp_plist_id</code>,
- <em>hid_t</em> <code>lcpl_id</code>
- )
- <br>
- See <a href="../RM/RM_H5O.html#Object-Copy">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Pset_copy_object</code>
- </td>
- <td align="left" valign="top"><em>herr_t </em>
- <code>H5Pset_copy_object</code>(
- <em>hid_t </em><code>cplist_id</code>,
- <em>unsigned </em><code>copy_options</code>
- )
- <br>
- See <a href="../RM/RM_H5P.html#Property-SetCopyObject">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Pget_copy_object</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em>
- <code>H5Pget_copy_object</code>(
- <em>hid_t </em><code>cplist_id</code>,
- <em>unsigned *</em><code>copy_options</code>
- )
- <br>
- See <a href="../RM/RM_H5P.html#Property-GetCopyObject">entry</a>.</td>
- </tr>
-
-
- <tr>
- <td align="left" valign="top"><hr>Improved object and file<br>information retrieval<hr></td>
- <td align="left" valign="top"> </td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Aget_info</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em> <code>H5Aget_info</code>(
- <em>hid_t</em> <code>attr_id</code>,
- <em>H5A_info_t *</em><code>ainfo</code>
- )
- <br>
- See <a href="../RM/RM_H5A.html#Annot-GetInfo">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Aget_info_by_name</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em> <code>H5Aget_info_by_name</code>(
- <em>hid_t</em> <code>loc_id</code>,
- <em>const char *</em><code>obj_name</code>,
- <em>const char *</em><code>attr_name</code>,
- <em>H5A_info_t *</em><code>ainfo</code>,
- <em>hid_t</em> <code>lapl_id</code>
- )
- <br>
- See <a href="../RM/RM_H5A.html#Annot-GetInfoByName">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Aget_info_by_idx</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em> <code>H5Aget_info_by_idx</code>(
- <em>hid_t</em> <code>loc_id</code>,
- <em>const char *</em><code>obj_name</code>,
- <em>H5_index_t</em> <code>idx_type</code>,
- <em>H5_iter_order_t</em> <code>order</code>,
- <em>hsize_t</em> <code>n</code>,
- <em>H5A_info_t *</em><code>ainfo</code>,
- <em>hid_t</em> <code>lapl_id</code>
- )
- <br>
- See <a href="../RM/RM_H5A.html#Annot-GetInfoByIdx">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Fget_info</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em> <code>H5Fget_info</code>(
- <em>hid_t</em> <code>obj_id</code>,
- <em>H5F_info_t *</em><code>bh_info</code>
- )
- <br>
- See <a href="../RM/RM_H5F.html#File-GetInfo">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Gget_info</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em> <code>H5Gget_info</code>(
- <em>hid_t</em> <code>group_id</code>,
- <em>H5G_info_t</em> <code>group_info</code>
- )
- <br>
- See <a href="../RM/RM_H5G.html#Group-GetInfo">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Gget_info_by_name</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em> <code>H5Gget_info_by_name</code>(
- <em>hid_t</em> <code>loc_id</code>,
- <em>const char *</em><code>group_name</code>,
- <em>H5G_info_t</em> <code>group_info</code>,
- <em>hid_t</em> <code>lapl_id</code>
- )
- <br>
- See <a href="../RM/RM_H5G.html#Group-GetInfoByName">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Gget_info_by_idx</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em> <code>H5Gget_info_by_idx</code>(
- <em>hid_t</em> <code>loc_id</code>,
- <em>const char *</em><code>group_name</code>,
- <em>H5_index_t</em> <code>index_type</code>,
- <em>H5_iter_order_t</em> <code>order</code>,
- <em>hsize_t</em> <code>n</code>,
- <em>H5G_info_t</em> <code>group_info</code>,
- <em>hid_t</em> <code>lapl_id</code>
- )
- <br>
- See <a href="../RM/RM_H5G.html#Group-GetInfoByIdx">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Lget_info</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em> <code>H5Lget_info</code>(
- <em>hid_t</em> <code>link_loc_id</code>,
- <em>const char *</em><code>link_name</code>,
- <em>H5L_info_t *</em><code>link_buff</code>,
- <em>hid_t</em> <code>lapl_id</code>
- )
- <br>
- See <a href="../RM/RM_H5L.html#Link-GetInfo">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Lget_info_by_idx</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em> <code>H5Lget_info_by_idx</code>(
- <em>hid_t</em> <code>loc_id</code>,
- <em>const char *</em><code>group_name</code>,
- <em>H5_index_t</em> <code>index_field</code>,
- <em>H5_iter_order_t</em> <code>order</code>,
- <em>hsize_t</em> <code>n</code>,
- <em>H5L_info_t</em> *<code>link_val</code>,
- <em>hid_t</em> <code>lapl_id</code>
- )
- <br>
- See <a href="../RM/RM_H5L.html#Link-GetInfoByIdx">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Oget_info</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em> <code>H5Oget_info</code>(
- <em>hid_t</em> <code>object_id</code>,
- <em>H5O_info_t</em> *<code>obj_info</code>
- )
- <br>
- See <a href="../RM/RM_H5O.html#Object-GetInfo">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Oget_info_by_name</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em> <code>H5Oget_info_by_name</code>(
- <em>hid_t</em> <code>loc_id</code>,
- <em>const char *</em><code>object_name</code>,
- <em>H5O_info_t</em> *<code>object_info</code>,
- <em>hid_t</em> <code>lapl_id</code>
- )
- <br>
- See <a href="../RM/RM_H5O.html#Object-GetInfoByName">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Oget_info_by_idx</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em> <code>H5Oget_info_by_idx</code>(
- <em>hid_t</em> <code>loc_id</code>,
- <em>const char *</em><code>group_name</code>,
- <em>H5_index_t</em> <code>index_field</code>,
- <em>H5_iter_order_t</em> <code>order</code>,
- <em>hsize_t</em> <code>n</code>,
- <em>H5O_info_t</em> *<code>obj_info</code>,
- <em>hid_t</em> <code>lapl_id</code>
- )
- <br>
- See <a href="../RM/RM_H5O.html#Object-GetInfoByIdx">entry</a>.</td>
- </tr>
-
-
- <tr>
- <td align="left" valign="top"><hr>Name of referenced object<hr></td>
- <td align="left" valign="top"> </td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Rget_name</code>
- </td>
- <td align="left" valign="top"><em>ssize_t</em> <code>H5Rget_name</code>(
- <em>hid_t</em> <code>loc_id</code>,
- <em>H5R_type_t</em> <code>ref_type</code>,
- <em>void *</em><code>ref</code>,
- <em>char *</em><code>name</code>,
- <em>size_t</em> <code>size</code>
- )
- <br>
- See <a href="../RM/RM_H5R.html#Reference-GetName">entry</a>.</td>
- </tr>
-
-
- <tr>
- <td align="left" valign="top"><hr>Anonymous object creation<hr></td>
- <td align="left" valign="top"> </td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Dcreate_anon</code>
- </td>
- <td align="left" valign="top"><em>hid_t </em><code>H5Dcreate_anon</code>(
- <em>hid_t </em><code>loc_id</code>,
- <em>hid_t</em> <code>type_id</code>,
- <em>hid_t</em> <code>space_id</code>,
- <em>hid_t</em> <code>dcpl_id</code>,
- <em>hid_t</em> <code>dapl_id</code>
- )
- <br>
- See <a href="../RM/RM_H5D.html#Dataset-CreateAnon">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Gcreate_anon</code>
- </td>
- <td align="left" valign="top"><em>hid_t</em>
- <code>H5Gcreate_anon</code>(<em>hid_t</em> <code>loc_id</code>,
- <em>const char *</em> <code>name</code>,
- <em>hid_t</em> <code>gcpl_id</code>,
- <em>hid_t</em> <code>gapl_id</code>)<br>
- See <a href="../RM/RM_H5G.html#Group-CreateAnon">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Tcommit_anon</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em>
- <code>H5Tcommit_anon</code>(
- <em>hid_t</em> <code>loc_id</code>,
- <em>hid_t</em> <code>type_id</code>,
- <em>hid_t</em> <code>tcpl_id</code>,
- <em>hid_t</em> <code>tapl_id</code>
- )
- <br>
- See <a href="../RM/RM_H5T.html#Datatype-CommitAnon">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Lcreate_hard</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em> <code>H5Lcreate_hard</code>(
- <em>hid_t</em> <code>obj_loc_id</code>,
- <em>const char *</em><code>obj_name</code>,
- <em>hid_t</em> <code>link_loc_id</code>,
- <em>const char *</em><code>link_name</code>,
- <em>hid_t</em> <code>lcpl</code>,
- <em>hid_t</em> <code>lapl</code>
- )
- <br>
- See <a href="../RM/RM_H5L.html#Link-CreateHard">entry</a>.</td>
- </tr>
-
-
- <tr>
- <td align="left" valign="top"><hr>New-style object creation and open<br>functions (includes anonymous<br>object creation)<hr></td>
- <td align="left" valign="top"> </td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Dcreate_anon</code>
- </td>
- <td align="left" valign="top"><em>hid_t </em><code>H5Dcreate_anon</code>(
- <em>hid_t </em><code>loc_id</code>,
- <em>hid_t</em> <code>type_id</code>,
- <em>hid_t</em> <code>space_id</code>,
- <em>hid_t</em> <code>dcpl_id</code>,
- <em>hid_t</em> <code>dapl_id</code>
- )
- <br>
- See <a href="../RM/RM_H5D.html#Dataset-CreateAnon">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Dcreate2</code>
- </td>
- <td align="left" valign="top"><em>hid_t</em>
- <code>H5Dcreate2</code>(
- <em>hid_t</em> <code>loc_id</code>,
- <em>const char *</em><code>name</code>,
- <em>hid_t</em> <code>type_id</code>,
- <em>hid_t</em> <code>space_id</code>,
- <em>hid_t</em> <code>lcpl_id</code>,
- <em>hid_t</em> <code>dcpl_id</code>,
- <em>hid_t</em> <code>dapl_id</code>
- )
- <br>
- See <a href="../RM/RM_H5D.html#Dataset-Create2">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Dopen2</code>
- </td>
- <td align="left" valign="top"><em>hid_t</em>
- <code>H5Dopen2</code>(
- <em>hid_t</em> <code>loc_id</code>,
- <em>const char *</em><code>name</code>,
- <em>hid_t</em> <code>dapl_id</code>
- )
- <br>
- See <a href="../RM/RM_H5D.html#Dataset-Open2">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Gcreate_anon</code>
- </td>
- <td align="left" valign="top"><em>hid_t</em>
- <code>H5Gcreate_anon</code>(<em>hid_t</em> <code>loc_id</code>,
- <em>const char *</em> <code>name</code>,
- <em>hid_t</em> <code>gcpl_id</code>,
- <em>hid_t</em> <code>gapl_id</code>)<br>
- See <a href="../RM/RM_H5G.html#Group-CreateAnon">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Gcreate2</code>
- </td>
- <td align="left" valign="top"><em>hid_t</em>
- <code>H5Gcreate2</code>(
- <em>hid_t</em> <code>loc_id</code>,
- <em>const char *</em><code>name</code>,
- <em>hid_t</em> <code>lcpl_id</code>,
- <em>hid_t</em> <code>gcpl_id</code>,
- <em>hid_t</em> <code>gapl_id</code>
- )
- <br>
- See <a href="../RM/RM_H5G.html#Group-Create2">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Gopen2</code>
- </td>
- <td align="left" valign="top"><em>hid_t </em><code>H5Gopen2</code>(
- <em>hid_t </em><code>loc_id</code>,
- <em>const char * </em><code>name</code>,
- <em>hid_t </em><code>gapl_id</code>
- )
- <br>
- See <a href="../RM/RM_H5G.html#Group-Open2">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Tcommit_anon</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em>
- <code>H5Tcommit_anon</code>(
- <em>hid_t</em> <code>loc_id</code>,
- <em>hid_t</em> <code>type_id</code>,
- <em>hid_t</em> <code>tcpl_id</code>,
- <em>hid_t</em> <code>tapl_id</code>
- )
- <br>
- See <a href="../RM/RM_H5T.html#Datatype-CommitAnon">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Tcommit2</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em>
- <code>H5Tcommit2</code>(
- <em>hid_t</em> <code>loc_id</code>,
- <em>const char *</em><code>name</code>,
- <em>hid_t</em> <code>type_id</code>,
- <em>hid_t</em> <code>lcpl_id</code>,
- <em>hid_t</em> <code>tcpl_id</code>,
- <em>hid_t</em> <code>tapl_id</code>
- )
- <br>
- See <a href="../RM/RM_H5T.html#Datatype-Commit2">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Topen2</code>
- </td>
- <td align="left" valign="top"><em>hid_t</em>
- <code>H5Topen2</code>(
- <em>hid_t</em> <code>loc_id</code>,
- <em>const char *</em> <code>name</code>,
- <em>hid_t</em> <code>tapl_id</code>
- )
- <br>
- See <a href="../RM/RM_H5T.html#Datatype-Open2">entry</a>.</td>
- </tr>
-
-
- <tr>
- <td align="left" valign="top"><hr>User-defined identifiers<hr></td>
- <td align="left" valign="top"> </td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Iregister</code>
- </td>
- <td align="left" valign="top"><em>hid_t</em>
- <code>H5Iregister</code>(<em>H5I_type_t</em>
- <code>type</code>, <em>void *</em><code>object</code>)<br>
- See <a href="../RM/RM_H5I.html#Identify-Register">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Iregister_type</code>
- </td>
- <td align="left" valign="top"><em>H5I_type_t</em>
- <code>H5Iregister_type</code>(<em>size_t</em>
- <code>hash_size</code>, <em>unsigned</em>
- <code>reserved</code>, <em>H5I_free_t</em>
- <code>free_func</code>)<br>
- See <a href="../RM/RM_H5I.html#Identify-RegisterType">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Idestroy_type</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em>
- <code>H5Idestroy_type</code>(<em>H5I_type_t</em>
- <code>type</code>)<br>
- See <a href="../RM/RM_H5I.html#Identify-DestroyType">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Iinc_type_ref</code>
- </td>
- <td align="left" valign="top"><em>int</em>
- <code>H5Iinc_type_ref</code>(<em>H5I_type_t</em>
- <code>type</code>)<br>
- See <a href="../RM/RM_H5I.html#Identify-IncTypeRef">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Idec_type_ref</code>
- </td>
- <td align="left" valign="top"><em>int</em>
- <code>H5Idec_type_ref</code>(<em>H5I_type_t</em>
- <code>type</code>)<br>
- See <a href="../RM/RM_H5I.html#Identify-DecTypeRef">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Iget_type_ref</code>
- </td>
- <td align="left" valign="top"><em>int</em>
- <code>H5Iget_type_ref</code>(<em>H5I_type_t</em>
- <code>type</code>)<br>
- See <a href="../RM/RM_H5I.html#Identify-GetTypeRef">entry</a>.</td>
- </tr>
-
-
- <tr>
- <td align="left" valign="top"><hr>Other identifier API (H5I) enhancements<hr></td>
- <td align="left" valign="top"> </td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Iclear_type</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em>
- <code>H5Iclear_type</code>(<em>H5I_type_t</em>
- <code>type</code>, <em>hbool_t</em> <code>force</code>)<br>
- See <a href="../RM/RM_H5I.html#Identify-ClearType">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Inmembers</code>
- </td>
- <td align="left" valign="top"><em>int</em>
- <code>H5Inmembers</code>(<em>H5I_type_t</em>
- <code>type</code>, <em>hsize_t *</em><code>num_members</code>)<br>
- See <a href="../RM/RM_H5I.html#Identify-NMembers">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Iobject_verify</code>
- </td>
- <td align="left" valign="top"><em>void *</em>
- <code>H5Iobject_verify</code>(<em>hid_t</em> <code>id</code>,
- <em>H5I_type_t</em> <code>id_type</code>)<br>
- See <a href="../RM/RM_H5I.html#Identify-ObjectVerify">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Iremove_verify</code>
- </td>
- <td align="left" valign="top"><em>void *</em>
- <code>H5Iremove_verify</code>(<em>hid_t</em>
- <code>id</code>, <em>H5I_type_t</em>
- <code>id_type</code>)<br>
- See <a href="../RM/RM_H5I.html#Identify-RemoveVerify">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Isearch</code>
- </td>
- <td align="left" valign="top"><em>void *</em>
- <code>H5Isearch</code>(<em>H5I_type_t</em>
- <code>type</code>, <em>H5I_search_func_t</em>
- <code>func</code>, <em>void *</em><code>key</code>)<br>
- See <a href="../RM/RM_H5I.html#Identify-Search">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Itype_exists</code>
- </td>
- <td align="left" valign="top"><em>htri_t</em>
- <code>H5Itype_exists</code>(<em>H5I_type_t</em> <code>type</code>)<br>
- See <a href="../RM/RM_H5I.html#Identify-TypeExists">entry</a>.</td>
- </tr>
-
-
- <tr>
- <td align="left" valign="top"><hr>Compression filters: N-bit<br>and scale-offset<hr></td>
- <td align="left" valign="top"> </td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Pset_nbit</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em>
- <code>H5Pset_nbit</code>(
- <em>hid_t</em> <code>plist_id</code>
- )
- <br>
- See <a href="../RM/RM_H5P.html#Property-SetNbit">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Pset_scaleoffset</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em>
- <code>H5Pset_scaleoffset</code>(
- <em>hid_t</em> <code>plist_id</code>,
- <em>H5Z_SO_scale_type_t</em> <code>scale_type</code>,
- <em>int</em> <code>scale_factor</code>
- )
- <br>
- See <a href="../RM/RM_H5P.html#Property-SetScaleoffset">entry</a>.</td>
- </tr>
-
-
- <tr>
- <td align="left" valign="top"><hr>User-defined datatype conversion<br>callback functions<hr></td>
- <td align="left" valign="top"> </td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Pget_type_conv_cb</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em>
- <code>H5Pget_type_conv_cb</code>(
- <em>hid_t</em> <code>plist</code>,
- <em>H5T_conv_except_func_t *</em><code>func</code>,
- <em>void **</em><code>op_data</code>
- )
- <br>
- See <a href="../RM/RM_H5P.html#Property-GetTypeConvCb">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Pset_type_conv_cb</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em>
- <code>H5Pset_type_conv_cb</code>(
- <em>hid_t</em>
- <code>plist</code>,
- <em>H5T_conv_except_func_t</em>
- <code>func</code>,
- <em>void *</em><code>op_data</code>
- )
- <br>
- See <a href="../RM/RM_H5P.html#Property-SetTypeConvCb">entry</a>.</td>
- </tr>
-
-
- <tr>
- <td align="left" valign="top"><hr>Datatype compiler conversion check<hr></td>
- <td align="left" valign="top"> </td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Tcompiler_conv</code>
- </td>
- <td align="left" valign="top"><em>htri_t</em>
- <code>H5Tcompiler_conv</code>(
- <em>hid_t</em> <code>src_id</code>,
- <em>hid_t</em> <code>dst_id</code>
- )
- <br>
- See <a href="../RM/RM_H5T.html#Datatype-CompilerConv">entry</a>.</td>
- </tr>
-
-
- <tr>
- <td align="left" valign="top"><hr>Dataset array size reduction<hr></td>
- <td align="left" valign="top"> </td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Dset_extent</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em>
- <code>H5Dset_extent</code>(
- <em>hid_t</em> <code>dset_id</code>,
- <em>const hsize_t *</em><code>size</code>
- )
- <br>
- See <a href="../RM/RM_H5D.html#Dataset-SetExtent">entry</a>.</td>
- </tr>
-
-
- <tr>
- <td align="left" valign="top"><hr>Dataspace equivalence<hr></td>
- <td align="left" valign="top"> </td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Sextent_equal</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em>
- <code>H5Sextent_equal</code>(
- <em>hid_t</em> <code>sid1</code>,
- <em>hid_t</em> <code>sid2</code>
- )
- <br>
- See <a href="../RM/RM_H5S.html#Dataspace-ExtentEqual">entry</a>.</td>
- </tr>
-
-
- <tr>
- <td align="left" valign="top"><hr>Direct I/O, bypassing system cache<hr></td>
- <td align="left" valign="top"> </td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Pset_fapl_direct</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em> <code>H5Pset_fapl_direct</code>(
- <em>hid_t</em> <code>fapl_id</code>,
- <em>size_t</em> <code>alignment</code>,
- <em>size_t</em> <code>block_size</code>,
- <em>size_t</em> <code>cbuf_size</code>
- )
- <br>
- See <a href="../RM/RM_H5P.html#Property-SetFaplDirect">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Pget_fapl_direct</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em> <code>H5Pget_fapl_direct</code>(
- <em>hid_t</em> <code>fapl_id</code>,
- <em>size_t</em> *<code>alignment</code>,
- <em>size_t</em> *<code>block_size</code>,
- <em>size_t</em> *<code>cbuf_size</code>
- )
- <br>
- See <a href="../RM/RM_H5P.html#Property-GetFaplDirect">entry</a>.</td>
- </tr>
-
-
- <tr>
- <td align="left" valign="top"><hr>Parallel I/O optimization<br>(collective chunk I/O)<hr></td>
- <td align="left" valign="top"> </td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Pset_dxpl_mpio_chunk_opt</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em>
- <code>H5Pset_dxpl_mpio_chunk_opt</code>(<em>hid_t</em> <code>dxpl_id</code>,
- <em>H5FD_mpio_chunk_opt_t</em> <code>opt_mode</code>)<br>
- See <a href="../RM/RM_H5P.html#Property-SetDxplMpioChunkOpt">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Pset_dxpl_mpio_chunk_opt_num</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em>
- <code>H5Pset_dxpl_mpio_chunk_opt_num</code>(<em>hid_t</em> <code>dxpl_id</code>,
- <em>unsigned</em> <code>num_chunk_per_proc</code>)<br>
- See <a href="../RM/RM_H5P.html#Property-SetDxplMpioChunkOptNum">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Pset_dxpl_mpio_chunk_opt_ratio</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em>
- <code>H5Pset_dxpl_mpio_chunk_opt_ratio</code>(<em>hid_t</em> <code>dxpl_id</code>,
- <em>unsigned</em> <code>percent_num_proc_per_chunk</code>)<br>
- See <a href="../RM/RM_H5P.html#Property-SetDxplMpioChunkOptRatio">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Pset_dxpl_mpio_collective_opt</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em>
- <code>H5Pset_dxpl_mpio_collective_opt</code>(
- <em>hid_t</em> <code>dxpl_id</code>,
- <em>H5FD_mpio_collective_opt_t</em> <code>opt_mode</code>
- )
- <br>
- See <a href="../RM/RM_H5P.html#Property-SetDxplMpioCollectiveOpt">entry</a>.</td>
- </tr>
-
-
- <tr>
- <td align="left" valign="top"><hr>Enhanced error handling (H5E)<hr></td>
- <td align="left" valign="top"> </td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Eauto_is_v2</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em>
- <code>H5Eauto_is_v2</code>(
- <em>hid_t</em> <code>estack_id</code>,
- <em>unsigned</em> *<code>is_stack</code>
- )
- <br>
- See <a href="../RM/RM_H5E.html#Error-AutoIsV2">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Eclear2</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em>
- <code>H5Eclear2</code>(
- <em>hid_t</em> <code>estack_id</code>
- )
- <br>
- See <a href="../RM/RM_H5E.html#Error-Clear2">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Eclose_msg</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em> <code>H5Eclose_msg</code>
- (<em>hid_t</em> <code>mesg_id</code>)<br>
- See <a href="../RM/RM_H5E.html#Error-CloseMsg">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Eclose_stack</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em>
- <code>H5Eclose_stack</code>(<em>hid_t</em> <code>estack_id</code>)<br>
- See <a href="../RM/RM_H5E.html#Error-CloseStack">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Ecreate_msg</code>
- </td>
- <td align="left" valign="top"><em>hid_t</em>
- <code>H5Ecreate_msg</code>(<em>hid_t</em> <code>class</code>,
- <em>H5E_type_t</em> <code>msg_type</code>, <em>const char</em>*
- <code>mesg</code>)<br>
- See <a href="../RM/RM_H5E.html#Error-CreateMsg">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Eget_auto2</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em>
- <code>H5Eget_auto2</code>(<em>hid_t</em>
- <code>estack_id</code>, <em>H5E_auto2_t *</em>
- <code>func</code>, <em>void **</em><code>client_data</code>)<br>
- See <a href="../RM/RM_H5E.html#Error-GetAuto2">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Eget_class_name</code>
- </td>
- <td align="left" valign="top"><em>ssize_t</em>
- <code>H5Eget_class_name</code>(<em>hid_t</em>
- <code>class_id</code>, <em>char</em>* <code>name</code>,
- <em>size_t</em> <code>size</code>)<br>
- See <a href="../RM/RM_H5E.html#Error-GetClassName">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Eget_current_stack</code>
- </td>
- <td align="left" valign="top"><em>hid_t</em>
- <code>H5Eget_current_stack</code>(<em>void</em>)<br>
- See <a href="../RM/RM_H5E.html#Error-GetCurrentStack">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Eget_msg</code>
- </td>
- <td align="left" valign="top"><em>ssize_t</em>
- <code>H5Eget_msg</code>(<em>hid_t</em> <code>mesg_id</code>,
- <em>H5E_type_t</em>* <code>mesg_type</code>, <em>char</em>*
- <code>mesg</code>, <em>size_t</em> <code>size</code>)<br>
- See <a href="../RM/RM_H5E.html#Error-GetMsg">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Eget_num</code>
- </td>
- <td align="left" valign="top"><em>ssize_t</em>
- <code>H5Eget_num</code>(<em>hid_t</em> <code>estack_id</code>)<br>
- See <a href="../RM/RM_H5E.html#Error-GetNum">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Epop</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em>
- <code>H5Epop</code>(<em>hid_t</em> <code>estack_id</code>,
- <em>size_t</em> <code>count</code>)<br>
- See <a href="../RM/RM_H5E.html#Error-Pop">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Eprint2</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em>
- <code>H5Eprint2</code>(<em>hid_t</em> <code>estack_id</code>,
- <em>FILE *</em> <code>stream</code>)<br>
- See <a href="../RM/RM_H5E.html#Error-Print2">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Epush2</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em>
- <code>H5Epush2</code>(<em>hid_t </em><code>estack_id</code>,
- <em>const char *</em><code>file</code>,
- <em>const char *</em><code>func</code>,
- <em>unsigned</em> <code>line</code>,
- <em>hid_t </em><code>class_id</code>,
- <em>hid_t</em> <code>major_id</code>,
- <em>hid_t</em> <code>minor_id</code>,
- <em>const char *</em><code>msg</code>, ...)<br>
- See <a href="../RM/RM_H5E.html#Error-Push2">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Eregister_class</code>
- </td>
- <td align="left" valign="top"><em>hid_t</em>
- <code>H5Eregister_class</code>(<em>const char</em>*
- <code>cls_name</code>, <em>const char</em>*
- <code>lib_name</code>, <em>const char</em>*
- <code>version</code>)<br>
- See <a href="../RM/RM_H5E.html#Error-RegisterClass">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Eset_auto2</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em>
- <code>H5Eset_auto2</code>(<em>hid_t</em>
- <code>estack_id</code>, <em>H5E_auto2_t</em>
- <code>func</code>, <em>void *</em><code>client_data</code>)<br>
- See <a href="../RM/RM_H5E.html#Error-SetAuto2">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Eset_current_stack</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em>
- <code>H5Eset_current_stack</code>(<em>hid_t</em>
- <code>estack_id</code>)<br>
- See <a href="../RM/RM_H5E.html#Error-SetCurrentStack">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Eunregister_class</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em>
- <code>H5Eunregister_class</code>(<em>hid_t</em>
- <code>class_id</code>)<br>
- See <a href="../RM/RM_H5E.html#Error-UnregisterClass">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Ewalk2</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em>
- <code>H5Ewalk2</code>(<em>hid_t</em>
- <code>estack_id</code>, <em>H5E_direction_t</em>
- <code>direction</code>, <em>H5E_walk2_t</em>
- <code>func</code>, <em>void *</em>
- <code>client_data</code>)<br>
- See <a href="../RM/RM_H5E.html#Error-Walk2">entry</a>.</td>
- </tr>
-
-
- <tr>
- <td align="left" valign="top"><hr>Meta data cache management<hr></td>
- <td align="left" valign="top"> </td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Fget_mdc_config</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em>
- <code>H5Fget_mdc_config</code>(<em>hid_t</em>
- <code>file_id</code>, <em>H5AC_cache_config_t *</em><code>config_ptr</code>)<br>
- See <a href="../RM/RM_H5F.html#File-GetMdcConfig">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Fget_mdc_hit_rate</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em>
- <code>H5Fget_mdc_hit_rate</code>(<em>hid_t</em> <code>file_id</code>,
- <em>double *</em><code>hit_rate_ptr</code>)<br>
- See <a href="../RM/RM_H5F.html#File-GetMdcHitRate">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Fget_mdc_size</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em>
- <code>H5Fget_mdc_size</code>(<em>hid_t</em>
- <code>file_id</code>, <em>size_t *</em><code>max_size_ptr</code>,
- <em>size_t *</em><code>min_clean_size_ptr</code>,
- <em>size_t *</em><code>cur_size_ptr</code>,
- <em>int *</em><code>cur_num_entries_ptr</code>)<br>
- See <a href="../RM/RM_H5F.html#File-GetMdcSize">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Freset_mdc_hit_rate_stats</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em>
- <code>H5Freset_mdc_hit_rate_stats</code>(<em>hid_t</em>
- <code>file_id</code>)<br>
- See <a href="../RM/RM_H5F.html#File-ResetMdcHitRateStats">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Fset_mdc_config</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em>
- <code>H5Fset_mdc_config</code>(<em>hid_t</em>
- <code>file_id</code>, <em>H5AC_cache_config_t *</em><code>config_ptr</code>)<br>
- See <a href="../RM/RM_H5F.html#File-SetMdcConfig">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Pset_mdc_config</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em>
- <code>H5Pset_mdc_config</code>(<em>hid_t</em>
- <code>plist_id</code>, <em>H5AC_cache_config_t *</em>
- <code>config_ptr</code>)<br>
- See <a href="../RM/RM_H5P.html#Property-SetMdcConfig">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Pget_mdc_config</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em>
- <code>H5Pget_mdc_config</code>(<em>hid_t</em>
- <code>plist_id</code>, <em>H5AC_cache_config_t *</em>
- <code>config_ptr</code>)<br>
- See <a href="../RM/RM_H5P.html#Property-GetMdcConfig">entry</a>.</td>
- </tr>
-
-
- <tr>
- <td align="left" valign="top"><hr>File read/write status<hr></td>
- <td align="left" valign="top"> </td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Fget_intent</code>
- </td>
- <td align="left" valign="top"><em>herr_t </em><code>H5Fget_intent</code>(
- <em>hid_t</em> <code>file_id</code>,
- <em>unsigned *</em><code>intent</code>
- )
- <br>
- See <a href="../RM/RM_H5F.html#File-GetIntent">entry</a>.</td>
- </tr>
-
-
- <tr>
- <td align="left" valign="top"><hr>Arithmetic data transform on I/O<hr></td>
- <td align="left" valign="top"> </td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Pget_data_transform</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em>
- <code>H5Pget_data_transform</code>(
- <em>hid_t</em> <code>plist_id</code>,
- <em>char*</em> <code>expression</code>,
- <em>size_t</em> <code>size</code>)<br>
- See <a href="../RM/RM_H5P.html#Property-GetDataTransform">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Pset_data_transform</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em>
- <code>H5Pset_data_transform</code>(
- <em>hid_t</em> <code>plist</code>,
- <em>const char*</em> <code>expression</code>
- )<br>
- See <a href="../RM/RM_H5P.html#Property-SetDataTransform">entry</a>.</td>
- </tr>
-
-
- <tr>
- <td align="left" valign="top"><hr>Dataspace and datatype serial conversion<hr></td>
- <td align="left" valign="top"> </td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Sdecode</code>
- </td>
- <td align="left" valign="top"><em>hid_t</em>
- <code>H5Sdecode</code>(
- <em>const void</em> *<code>buf</code>
- )
- <br>
- See <a href="../RM/RM_H5S.html#Dataspace-Decode">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Sencode</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em>
- <code>H5Sencode</code>(
- <em>hid_t</em> <code>obj_id</code>,
- <em>void</em> *<code>buf</code>,
- <em>size_t</em> *<code>nalloc</code>
- )
- <br>
- See <a href="../RM/RM_H5S.html#Dataspace-Encode">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Tdecode</code>
- </td>
- <td align="left" valign="top"><em>hid_t</em>
- <code>H5Tdecode</code>(
- <em>const void</em> *<code>buf</code>
- )
- <br>
- See <a href="../RM/RM_H5T.html#Datatype-Decode">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Tencode</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em>
- <code>H5Tencode</code>(
- <em>hid_t</em> <code>obj_id</code>,
- <em>void</em> *<code>buf</code>,
- <em>size_t</em> *<code>nalloc</code>
- )
- <br>
- See <a href="../RM/RM_H5T.html#Datatype-Encode">entry</a>.</td>
- </tr>
-
-
- <tr>
- <td align="left" valign="top"><hr>Enhanced filter management<hr></td>
- <td align="left" valign="top"> </td>
- </tr>
- <tr>
- <td align="left" valign="top">
- <code>H5Pget_filter2</code></td>
- <td align="left" valign="top"><em>herr_t</em>
- <code>H5Pget_filter2</code>(
- <em>hid_t</em> <code>plist_id</code></code>,
- <em>unsigned</em> <code>idx</code>,
- <em>unsigned int *</em><code>flags</code>,
- <em>size_t *</em><code>cd_nelmts</code>,
- <em>unsigned</em> <code>cd_values[]</code>,
- <em>size_t</em> <code>namelen</code>,
- <em>char</em> <code>name[]</code>,
- <em>unsigned *</em><code>filter_config</code>)
- <br>
- See
- <a href="../RM/RM_H5P.html#Property-GetFilter2">entry</a>.
- </td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Pget_filter_by_id2</code>
- </td>
- <td align="left" valign="top"><em>hid_t</em>
- <code>H5Pget_filter_by_id2</code>(
- <em>hid_t</em> <code>plist_id</code>,
- <em>H5Z_filter_t</em> <code>filter_id</code>,
- <em>unsigned int *</em><code>flags</code>,
- <em>size_t *</em><code>cd_nelmts</code>,
- <em>unsigned int</em> <code>cd_values[]</code>,
- <em>size_t</em> <code>namelen</code>,
- <em>char </em><code>name[]</code>,
- <em>unsigned int *</em><code>filter_config</code>)
- <br>
- See
- <a href="../RM/RM_H5P.html#Property-GetFilterById2">entry</a>.
- </td>
- </tr>
-
-
- <tr>
- <td align="left" valign="top"><hr>Comparison of properties<hr></td>
- <td align="left" valign="top"> </td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Pinsert2</code>
- </td>
- <td align="left" valign="top"><em>hid_t</em>
- <code>H5Pinsert2</code>(
- <em>hid_t</em> <code>plid</code>,
- <em>const char *</em><code>name</code>,
- <em>size_t</em> <code>size</code>,
- <em>void *</em><code>value</code>,
- <em>H5P_prp_set_func_t</em> <code>set</code>,
- <em>H5P_prp_get_func_t</em> <code>get</code>,
- <em>H5P_prp_delete_func_t</em> <code>delete</code>,
- <em>H5P_prp_copy_func_t</em> <code>copy</code>,
- <em>H5P_prp_compare_func_t</em> <code>compare</code>,
- <em>H5P_prp_close_func_t</em> <code>close</code>)
- <br>
- See
- <a href="../RM/RM_H5P.html#Property-Insert2">entry</a>.
- </td>
- </tr>
- <tr>
- <td align="left" valign="top">
- <code>H5Pregister2</code></td>
- <td align="left" valign="top"><em>herr_t</em>
- <code>H5Pregister2</code>(
- <em>hid_t</em> <code>class</code>,
- <em>const char *</em> <code>name</code>,
- <em>size_t</em> <code>size</code>,
- <em>void *</em> <code>default</code>,
- <em>H5P_prp_create_func_t</em> <code>create</code>,
- <em>H5P_prp_set_func_t</em> <code>set</code>,
- <em>H5P_prp_get_func_t</em> <code>get</code>,
- <em>H5P_prp_delete_func_t</em> <code>delete</code>,
- <em>H5P_prp_copy_func_t</em> <code>copy</code>,
- <em>H5P_prp_compare_func_t</em> <code>compare</code>,
- <em>H5P_prp_close_func_t</em> <code>close</code>)
- <br>
- See
- <a href="../RM/RM_H5P.html#Property-Register2">entry</a>.
- </td>
- </tr>
-
-
- <tr>
- <td align="left" valign="top"><hr>Two-way conversion between datatype<br>and text description of datatype<hr></td>
- <td align="left" valign="top"> </td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5LTtext_to_dtype</code>
- </td>
- <td align="left" valign="top"><em>hid_t</em>
- <code>H5LTtext_to_datatype</code>(
- <em>const char *</em><code>text</code>,
- <em>H5LT_lang_t</em> <code>lang_type</code>)
- <br>
- See
- <a href="../HL/RM_H5LT.html#H5LTtext_to_dtype">entry</a>.
- </td>
- </tr>
- <tr>
- <td align="left" valign="top">
- <code>H5LTdtype_to_text</code></td>
- <td align="left" valign="top"><em>herr_t</em>
- <code>H5LTdtype_to_text</code>(
- <em>hid_t</em> <code>datatype</code>,
- <em>char *</em><code>str</code>,
- <em>H5LT_lang_t</em> <code>lang_type</code>,
- <em>size_t *</em><code>len</code>)
- <br>
- See
- <a href="../HL/RM_H5LT.html#H5LTdtype_to_text">entry</a>.
- </td>
- </tr>
- </table>
-
-
- <p>
- <dt>Fortran subroutines:
- <dd>New Fortran subroutines in the main library
- are not yet included for Release 1.8.0-beta.
- <p>
- See below for Fortran routines for High-Level HDF5 APIs.
-
- <!--
- <dd>The following Fortran subroutines are new for Release 1.8.0 and
- are documented in the
- <a href="../RM/RM_H5Front.html#F90andCPPlus"><cite>HDF5 Reference
- Manual</cite></a>.
-
- <table border="0">
- <tr>
- <td align="left" valign="top"><code>function</code>
- </td>
- <td align="left" valign="top">syntax<br>
- See <a href="../RM/RM_H5__.html#__">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>function</code>
- </td>
- <td align="left" valign="top">syntax<br>
- See <a href="../RM/RM_H5__.html#__">entry</a>.</td>
- </tr>
- </table>
- -->
-
-
-
- <p>
- <dt>C++ wrappers:
- <dd>There no new C++ wrappers for Release 1.8.0-beta.
-
- <!--
- <dd>The following C++ wrappers are new for Release 1.8.0 and
- are documented in the
- <a href="../cpplus_RM/index.html">
- <cite>HDF5 C++ API Reference Manual</cite></a>.
-
- <dd><code>new_wrapper</code>
- <dd><code>new_wrapper</code>
- <dd><code>new_wrapper</code>
- -->
-
-
-
- <p>
- <dt>High Level C APIs:
- </p>
- <dd>H5LT: The following functions have been added
- to the HDF5 Lite (H5LT) API:
- <table border="0">
- <tr>
- <td align="left" valign="top"><code>H5LTtext_to_dtype</code></td>
- <td align="left" valign="top"><em>hid_t</em> <code>H5LTtext_to_datatype</code>(
- <em>const char *</em><code>text</code>, <em>H5LT_lang_t</em> <code>lang_type</code>)
- <br>
- See <a href="../HL/RM_H5LT.html#H5LTtext_to_dtype">entry</a>.</td>
- </tr><tr>
- <td align="left" valign="top"><code>H5LTdtype_to_text</code></td>
- <td align="left" valign="top"><em>herr_t</em> <code>H5LTdtype_to_text</code>(
- <em>hid_t</em> <code>datatype</code>, <em>char *</em><code>str</code>,
- <em>H5LT_lang_t</em> <code>lang_type</code>, <em>size_t *</em><code>len</code>)
- <br>
- See <a href="../HL/RM_H5LT.html#H5LTdtype_to_text">entry</a>.</td>
- </tr><tr>
- <td align="left" valign="top"><code>H5LTset_attribute_long_long</code></td>
- <td align="left" valign="top"><em>herr_t</em> <code>H5LTset_attribute_long_long</code>(
- <em>hid_t</em> <code>loc_id</code>, <em>const char *</em><code>obj_name</code>,
- <em>const char *</em><code>attr_name</code>,
- <em>const long_long *</em><code>data</code>, <em>size_t *</em><code>size</code>)
- <br>
- See <a href="../HL/RM_H5LT.html#H5LTset_attribute_long_long">entry</a>.</td>
- </tr><tr>
- <td align="left" valign="top"><code>H5LTget_attribute_long_long</code> </td>
- <td align="left" valign="top"><em>herr_t</em> <code>H5LTget_attribute_long_long</code>(
- <em>hid_t</em> <code>loc_id</code>, <em>const char *</em><code>obj_name</code>,
- <em>const char *</em><code>attr_name</code>, <em>long_long *</em><code>data</code>)
- <br>
- See <a href="../HL/RM_H5LT.html#H5LTget_attribute_long_long">entry</a>.</td>
- </tr>
- </table>
- <p>
- <dd>Two high-level C APIs are distributed for the first time
- with this release:
- <br>
- <ul>
- <li>H5PT, the HDF5 Packet Table interface
- <li>H5DS, the HDF5 Dimension Scale interface
- </ul>
- <p>
- Full documentation for these interfaces can be accessed directly
- from the <a href="../HL/index.html">High Level APIs</a>
- overview page.
-
-<p>The new functions included in the <strong>packet table (H5PT)
- high-level APIs</strong> are as follows:
-
- <table border="0">
- <tr>
- <td align="left" valign="top"><code>H5PTcreate_fl</code></td>
- <td align="left" valign="top"><em>hid_t</em> <code>H5PTcreate_fl</code>(
- <em>hid_t</em> <code>loc_id</code>, <em>const char *</em> <code>dset_name</code>,
- <em>hid_t</em> <code>dtype_id</code>, <em>hsize_t</em> <code>chunk_size</code> )</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5PTcreate_vl</code></td>
- <td align="left" valign="top"><em>hid_t</em> <code>H5PTcreate_vl</code>(
- <em>hid_t</em> <code>loc_id</code>, <em>const char</em> *<code>dset_name</code>,
- <em>hsize_t</em> <code>chunk_size</code> )</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5PTopen</code></td>
- <td align="left" valign="top"><em>hid_t</em> <code>H5PTopen</code>( <em>hid_t</em>
- <code>loc_id</code>, <em>const char</em> *<code>dset_name</code> )</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5PTclose</code></td>
- <td align="left" valign="top"><em>herr_t</em> <code>H5PTclose</code>(
- <em>hid_t</em> <code>table_id</code> )</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5PTappend</code></td>
- <td align="left" valign="top"><em>herr_t</em> <code>H5PTappend</code>(
- <em>hid_t</em> <code>table_id</code>, <em>hsize_t</em> <code>nrecords</code>,
- <em>const void *</em><code>data</code>)</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5PTcreate_index</code></td>
- <td align="left" valign="top"><em>herr_t</em> <code>H5PTcreate_index</code>(
- <em>hid_t</em> <code>table_id</code>)</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5PTset_index</code></td>
- <td align="left" valign="top"><em>herr_t</em> <code>H5PTset_index</code>(
- <em>hid_t</em> <code>table_id</code>, <em>hsize_t</em> <code>pt_index</code>)</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5PTread_packets</code></td>
- <td align="left" valign="top"><em>herr_t</em> <code>H5PTread_packets</code>(
- <em>hid_t</em> <code>table_id</code>, <em>hsize_t</em> <code>start</code>, <em>hsize_t</em>
- <code>nrecords</code>, <em>void *</em><code>data</code>)</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5PTget_next</code></td>
- <td align="left" valign="top"><em>herr_t</em> <code>H5PTget_next</code>(
- <em>hid_t</em> <code>table_id</code>, <em>hsize_t</em> <code>nrecords</code>,
- <em>void *</em><code>data</code>)</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5PTget_num_packets</code></td>
- <td align="left" valign="top"><em>herr_t</em> <code>H5PTget_num_packets</code>(
- <em>hid_t</em> <code>table_id</code>, <em>hsize_t *</em> <code>nrecords</code>)</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5PTis_valid</code></td>
- <td align="left" valign="top"><em>herr_t</em> <code>H5PTis_valid</code>(
- <em>hid_t</em> <code>table_id</code>)</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5PTis_varlen</code></td>
- <td align="left" valign="top"><em>herr_t</em> <code>H5PTis_varlen</code>(
- <em>hid_t</em> <code>table_id</code>)</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5PTfree_vlen_readbuff</code> </td>
- <td align="left" valign="top"><em>herr_t</em> <code>H5PTfree_vlen_readbuff</code>(
- <em>hid_t</em> <code>table_id</code>, <em>hsize_t</em> <code>bufflen</code>,
- <em>void *</em> <code>buff</code>)</td>
- </tr>
-
- <tr>
- <td align="left" valign="top"> </td>
- </tr>
- </table>
-
-
-<p>The new functions included in the <strong>dimension scale (H5DS)
- high-level APIs</strong> are as follows:
-
- <table border="0">
- <tr>
- <td align="left" valign="top"><code>H5DSset_scale</code></td>
- <td align="left" valign="top"><em>herr_t</em>
- <code>H5DSmake_scale</code>(<em>hid_t</em> <code>dsid</code>, <em>char *</em><code>dimname</code>)</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5DSattach_scale</code></td>
- <td align="left" valign="top"><em>herr_t</em>
- <code>H5DSattach_scale</code>(<em>hid_t</em> <code>did</code>, <em>hid_t</em> <code>dsid</code>,
- <em>unsigned int</em> <code>idx</code>)</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5DSdetach_scale</code></td>
- <td align="left" valign="top"><em>herr_t</em>
- <code>H5DSdetach_scale</code>(<em>hid_t</em> <code>did</code>, <em>hid_t</em> <code>dsid</code>,
- <em>unsigned int</em> <code>idx</code>)</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5DSis_attached</code></td>
- <td align="left" valign="top"><em>htri_t</em>
- <code>H5DSis_attached</code>(<em>hid_t</em> <code>did</code>, <em>hid_t</em> <code>dsid</code>,
- <em>unsigned int</em> <code>idx</code>)</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5DSis_scale</code></td>
- <td align="left" valign="top"><em>htri_t</em>
- <code>H5DSis_scale</code>(<em>hid_t</em> <code>did</code>)</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5DSiterate_scales</code></td>
- <td align="left" valign="top"><em>herr_t</em>
- <code>H5DSiterate_scales</code>(<em>hid_t</em> <code>did</code>, <em>unsigned</em> <code>dim</code>,
- <em>int *</em><code>idx</code>, <em>H5DS_iterate_t</em> <code>visitor</code>,
- <em>void *</em><code>visitor_data</code>)</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5DSset_label</code></td>
- <td align="left" valign="top"><em>herr_t</em>
- <code>H5DSset_label</code>(<em>hid_t</em> <code>did</code>, <em>unsigned int</em> <code>idx</code>,
- <em>const char *</em><code>label</code>)</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5DSget_label</code></td>
- <td align="left" valign="top"><em>ssize_t</em>
- <code>H5DSget_label</code>(<em>hid_t</em> <code>did</code>, <em>unsigned int</em> <code>idx</code>,
- <em>char *</em><code>label</code>, <em>size_t</em> <code>size</code>)</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5DSget_scale_name</code> </td>
- <td align="left" valign="top"><em>hssize_t</em>
- <code>H5DSget_scale_name</code>(<em>hid_t</em> <code>did</code>, <em>char</em> <code>name</code>,
- <em>size_t *</em><code>size</code>)</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5DSget_num_scales</code></td>
- <td align="left" valign="top"><em>int</em> <code>H5DSget_num_scales</code>(<em>hid_t</em> <code>did</code>,
- <em>unsigned int</em> <code>idx</code>)</td>
- </tr>
- </table>
-
-
- <p>
- <dt>High Level Fortan90 APIs:
- <dd>Fortran90 subroutines are now available for
- the following high-level APIs:
- <br>
- <a href="../HL/RM_H5LT.html">H5LT: HDF5 Lite</a>
- <br>
- <a href="../HL/RM_H5IM.html">H5IM: HDF5 Image</a>
- <br>
- <a href="../HL/RM_H5TB.html">H5TB: HDF5 Table</a>
-
- <p>
- <dt>Tools:
- <dd><a href="../RM/Tools.html#Tools-Stat"><code>h5stat</code></a>
-
-<!--
- <dd>There are no new tools in this release.
- <dd>new_tool
- <dd>new_tool
- <dd>new_tool
--->
-
-
-
- </dl>
-
-
- <h3>Deprecated and Deleted Functions</h3>
-
- The following functions, subroutines and wrappers
- have been removed in this release:
-
-
- <!--
- None.
- -->
-
- <dl>
- <dt>C functions:
- <dd>
-
- <table>
- <tr><td valign=top>
- <code>H5Pset_fapl_gass</code>
- <br>
- <code>H5Pget_fapl_gass</code>
- <br>
- </td><td>
- <code> </code>
- </td><td valign=top>
- HDF5 no longer provides GASS support.
- </td></tr> <tr><td valign=top>
- <code>H5Pset_fapl_srb</code>
- <br>
- <code>H5Pget_fapl_srb</code>
- <br>
- <br>
- </td><td>
- <code> </code>
- </td><td valign=top>
- HDF5 no longer provides SRB support.
- <br>
- SRB functionality is now supported through the mechanism described
- in <a href="http://www.sdsc.edu/srb/index.php/Main_Page">SRB
- — The DICE Storage Resource Broker</a>
- (<code>http://www.sdsc.edu/srb/index.php/Main_Page<code>).
- </td></tr> <tr><td valign=top>
- <code>H5Pset_fapl_stream</code>
- <br>
- <code>H5Pget_fapl_stream</code>
- <br>
- </td><td>
- <code> </code>
- </td><td valign=top>
- The stream virtual file driver (<code>H5FD_STREAM</code>)
- has been removed from the HDF5 distribution.
- The functionality was last available from
- <code>http://hdf5-addons.origo.ethz.ch/</code>.
-<!--
-*** Original sentence:
-
- The functionality remains available from
- <a href="http://hdf5-addons.origo.ethz.ch/">
- <code>http://hdf5-addons.origo.ethz.ch/</code></a>.
-
-*** Upon routine link checking on 13 November 2012, this server appeared
-*** to have moved to http://www.ohloh.net/. I could find no evidence of
-*** the HDF5 stream VFD or of Thomas Radke on the new server. -- FMB
-
--->
- </td></tr> <tr><td valign=top>
- <code>H5Tset_overflow</code>
- <br>
- <code>H5Tget_overflow</code>
- </td><td>
- <code> </code>
- </td><td valign=top>
-
- <!--<code>H5Tget_overflow</code> and <code>H5Tset_overflow</code> have been -->
-
- These two functions are replaced by
- <a href="../RM/RM_H5P.html#Property-GetTypeConvCb">
- <code>H5Pget_type_conv_cb</code></a> and
- <a href="../RM/RM_H5P.html#Property-SetTypeConvCb">
- <code>H5Pset_type_conv_cb</code></a>.
- </td></tr>
- </table>
-
-
-
-<!--
- <p>
- <dt>Fortran90 subroutines:
- <dd><code>subroutine</code>
- <dd><code>subroutine</code>
--->
-
-
-
-
-<!--
- <p>
- <dt>C++ wrappers:
- <dd><code>wrapper</code>
- <dd><code>wrapper</code>
--->
-
-
-
- <p>
- <dt>Several functions, subroutines, and wrappers
- are deprecated in this HDF5 release
- and may eventually be removed from the HDF5 distribution
- and from the <cite>HDF5 Reference Manual</cite>.
- A Release 1.6.x compatibility mode is provided
- enabling these and other Release 1.6.x compatibility
- features, but is available only if the HDF5 Library is
- configured with the default settings or with the flag
- <code>--with-default-api-version=v16</code>.
- Release 1.8.0 also provides macros that can be mapped
- selectively to 1.6.x and 1.8.0 function versions
- according to the needs of a user application.
- The backward compatibility mode is enabled in the
- Release 1.8.0 binaries distributed by NCSA.
- See <href="../RM/APICompatMacros.html">API Compatibility
- Macros in HDF5</a> for full details.
-
- <dd>
- <br>Deprecated functions are marked in the function index
- at the beginning of each API section in the
- <a href="../RM/RM_H5Front.html"><cite>HDF5 Reference Manual</cite></a>.
- <!--
- No deprecated functions.
- -->
-
- </dl>
-
-<!--
-<pre>
-<code>function</code>
-</pre>
- </td><td width=10%>
-
- </td><td>
-<pre>
-<code>function</code width=40%>
-</pre>
- </td><td>
-
- </td><td>
-<pre>
-
-</pre>
- </td></tr>
- <tr valign="top" align="left">
- <td>
-
- </td><td>
-<pre>
-<code>function</code>
-</pre>
- </td><td>
-
- </td><td>
-<pre>
-<code>function</code>
-</pre>
- </td><td>
-
- </td><td>
-<pre>
-
-</pre>
- </td></tr>
- </table>
--->
-
-
-
-
- <h3>Virtual File Driver Removed</h3>
-
- The stream virtual file driver (<code>H5FD_STREAM</code>)
- have been removed in this release.
- This affects the functions <code>H5Pset_fapl_stream</code>
- and <code>H5Pget_fapl_stream</code> and
- the constant <code>H5FD_STREAM</code>.
- <p>
- This virtual file driver will remain available at
- <a href="http://hdf5-addons.origo.ethz.ch/">
- <code>http://hdf5-addons.origo.ethz.ch/</code></a>.
- Note that as of this writing, this transition is still
- in progress; the necessary integration tools may not be
- available when HDF5 Release 1.8.0 first comes out.
-
-
- <h3>Functions with New or Changed Symbols or Fixed Values</h3>
-
- Symbols and preset values associated with the following
- functions, subroutines or wrappers have changed as noted.
-
- <p>
- C functions:
- <dir>
- <dl>
- <dt><code>H5Tregister</code>
- <dd>Null is no longer a valid value for the
- parameter <code>func</code>.
- <br>
-
- <dt><code>H5Pget_filter_by_id</code>
- <dt><code>H5Pmodify_filter</code>
- <dt><code>H5Premove_filter</code>
- <dt><code>H5Pset_filter</code>
- <dt><code>H5Zfilter_avail</code>
- <dt><code>H5Zget_filter_info</code>
- <dd>Two new filter identifiers are available for the
- <code>filter</code> parameter:
- <br>
- <code>H5Z_FILTER_NBIT</code>
- <br>
- <code>H5Z_FILTER_SCALEOFFSET</code>
- <br>
-
- <dt><code>H5Pget_filter</code>
- <dd>Two new filter identifiers are available as the return value:
- <br>
- <code>H5Z_FILTER_NBIT</code>
- <br>
- <code>H5Z_FILTER_SCALEOFFSET</code>
- <br>
-
-<!--
- <dt><code>function_name?</code>
- <dd><code>SYMBOL_OR_VALUE</code> has been
- ...
--->
-
- </dl>
- </dir>
-
-
- <p>
- Fortran90 subroutines:
- <dir>
- <dl>
- <dt><code>h5pget_filter_f</code>
- <dt><code>h5pget_filter_by_id_f</code>
- <dt><code>h5pmodify_filter_f</code>
- <dt><code>h5premove_filter_f</code>
- <dt><code>h5pset_filter_f</code>
- <dt><code>h5zfilter_avail_f</code>
- <dt><code>h5zget_filter_info_f</code>
- <dd>Two new filter identifiers are available for the
- <code>filter</code> or <code>filter_id</code> parameters:
- <br>
- <code>H5Z_FILTER_NBIT_F</code>
- <br>
- <code>H5Z_FILTER_SCALEOFFSET_F</code>
- <br>
-
-
-<!--
- <dt><code>h5subroutine_f?</code>
- <dd>Change...
- <dt><code>h5subroutine_f?</code>
- <dd>Change...
- </dl>
--->
-
- </dir>
-
-
-
-<!--
- <p>
- C++ wrappers:
- <dir>
- <dl>
- <dt><code>C++_wrapper_name?</code>
- <dd>Change...
- <dt><code>C++_wrapper_name?</code>
- <dd>Change...
- </dl>
- </dir>
--->
-
-
-
- <h3>Functions with Changed Syntax</h3>
-
-
-<!--
- The following functions, subroutines and wrappers
- have changed as noted.
- Changed items are indicated in <font color="red">red</font>.
- <p>
--->
-
- <dl>
- <dt>Function syntax changes in this release are handled
- through the mechanism described in
- <href="../RM/APICompatMacros.html"><cite>API Compatibility
- Macros in HDF5</cite></a>.
-
- <p>
- <dt><u>Exceptions:</u>
- <ul>
- <li>The function <code>H5Eget_minor</code> is not governed by the
- above-mentioned macros and its return type has changed:
- <dir>
- <dt><code>H5Eget_minor</code>
- <dd><em><font color=red>char</font> *</em><code>H5Eget_minor</code>
- (<em>H5E_minor_t</em> <code>n</code>)
- <dd>See <a href="../RM/RM_H5E.html#Error-GetMinor">entry</a>.
- </dir>
- An application calling <code>H5Eget_minor</code> from an
- HDF5 Library of Release 1.8.0 or later will have to free the
- memory associated with the return value to prevent a memory leak.
- <br>
- <i>(This note added at Release 1.8.4, November 2009.)</i>
-
- <p />
- <li>In the function <code>H5Dextend</code>,
- the <code>size</code> parameter signature was changed.
- <dir>
- <dt><code>H5Dextend</code>
- <dd><em>herr_t *</em><code>H5Dextend</code>(
- <em>hid_t </em><code>dataset_id</code>,
- <font color=red><em>const hsize_t </em><code>size[]</code></font>
- )
- <dd>See <a href="../RM/RM_H5D.html#Dataset-Extend">entry</a>
- for current information; see the
- <a href="http://www.hdfgroup.org/HDF5/doc1.6/RM_H5D.html#Dataset-Extend">Release 1.6 entry</a>
- for the old signature.
-
- </dir>
- The new function signature is generally considered equivalent
- to the old signature, but some compilers require an exact match.
- <br>
- <i>(This note added in February 2010, following Release 1.8.4.)</i>
- </ul>
-
-<!--
- <dt><u>C functions:</u>
- <dt><code>H5Pget_filter</code>
- <dd><em>H5Z_filter_t</em> <code>H5Pget_filter</code>
- (<em>hid_t</em> <code>plist</code>,
- <em>unsigned int</em> <code>filter_number</code>,
- <em>unsigned int *</em><code>flags</code>,
- <em>size_t *</em><code>cd_nelmts</code>,
- <em>unsigned int *</em><code>cd_values</code>,
- <em>size_t</em> <code>namelen</code>,
- <em>char</em> <code>name[]</code>,
- <font color=red>
- <em>unsigned int *</em><code>filter_config_flags</code>
- </font>)
- <dd>See <a href="../RM/RM_H5P.html#Property-GetFilter">entry</a>.
- <dt><code>H5Pget_filter_by_id</code>
- <dd><em>herr_t</em> <code>H5Pget_filter_by_id</code>
- (<em>hid_t</em> <code>plist_id</code>,
- <em>H5Z_filter_t</em> <code>filter</code>,
- <em>unsigned int *</em><code>flags</code>,
- <em>size_t *</em><code>cd_nelmts</code>,
- <em>unsigned int</em> <code>cd_values[]</code>,
- <em>size_t</em> <code>namelen</code>,
- <em>char </em><code>name[]</code>,
- <font color=red>
- <em>unsigned int *</em><code>filter_config_flags</code>
- </font>)
- <dd>See <a href="../RM/RM_H5P.html#Property-GetFilterById">entry</a>.
- <dt><code>H5Pinsert</code>
- <dd><em>herr_t</em> <code>H5Pinsert</code>
- (<em>hid_t</em> <code>plid</code>,
- <em>const char *</em><code>name</code>,
- <em>size_t</em> <code>size</code>,
- <em>void *</em><code>value</code>,
- <em>H5P_prp_set_func_t</em> <code>set</code>,
- <em>H5P_prp_get_func_t</em> <code>get</code>,
- <em>H5P_prp_delete_func_t</em> <code>delete</code>,
- <em>H5P_prp_copy_func_t</em> <code>copy</code>,
- <font color=red>
- <em>H5P_prp_compare_func_t</em> <code>compare</code>,
- </font>
- <em>H5P_prp_close_func_t</em> <code>close</code>)<br>
- See <a href="../RM/RM_H5P.html#Property-Insert">entry</a>.
- <dt><code>H5Pregister</code>
- <dd><em>herr_t</em> <code>H5Pregister</code>
- (<em>hid_t</em> <code>class</code>,
- <em>const char *</em> <code>name</code>,
- <em>size_t</em> <code>size</code>,
- <em>void *</em> <code>default</code>,
- <em>H5P_prp_create_func_t</em> <code>create</code>,
- <em>H5P_prp_set_func_t</em> <code>set</code>,
- <em>H5P_prp_get_func_t</em> <code>get</code>,
- <em>H5P_prp_delete_func_t</em> <code>delete</code>,
- <em>H5P_prp_copy_func_t</em> <code>copy</code>,
- <font color=red>
- <em>H5P_prp_compare_func_t</em> <code>compare</code>,
- </font>
- <em>H5P_prp_close_func_t</em> <code>close</code>)<br>
- See <a href="../RM/RM_H5P.html#Property-Register">entry</a>.
--->
-
-<!-- Actually, no; that this is unchanged is a DOC BUG from Release 1.2.
- <dt><code>H5Tunregister</code>
- <dd><em>herr_t</em> <code>H5Tunregister</code>
- (<font color=red>
- <em>H5T_pers_t</em> <code>pers</code>,
- <em>const char *</em><code>name</code>,
- <em>hid_t</em> <code>src_id</code>,
- <em>hid_t</em> <code>dst_id</code>,
- </font>
- <em>H5T_conv_t</em> <code>func</code>)<br>
- <dd>
- See <a href="../RM/RM_H5T.html#Datatype-Unregister">entry</a>.</td>
--->
-<!--
- <dt><code>function</code>
- <dd><code>insert full_syntax (with change
- highlighted <font color=red>in red</font>)</code>
--->
-
-<!--
- <p>
- <dt><u>Fortran90 subroutines:</u>
- <dd><code>insert full_syntax (with change
- highlighted <font color=red>in red</font>)</code>
- <dd><code>insert full_syntax (with change
- highlighted <font color=red>in red</font>)</code>
--->
-
-<!--
- <p>
- <dt><u>C++ wrappers:</u>
- <dd><code>insert full_syntax (with change
- highlighted <font color=red>in red</font>)</code>
- <dd><code>insert full_syntax (with change
- highlighted <font color=red>in red</font>)</code>
--->
- </dl>
-
- <h3>Renamed Functions</h3>
-
- <p>
- <dt>The following C functions have been renamed.
- The original function names remain available under
- certain circumstances;
- see <href="../RM/APICompatMacros.html"><cite>API Compatibility
- Macros in HDF5</cite></a> for full details.
- <p>
-
- <dl>
- <dd>
- <table>
- <tr><th align=left>Original name
- </th><th align=left>New name
- </th></tr><tr><td><code>H5Acreate</code>
- </td><td><code>H5Acreate1</code>
- </td></tr><tr><td><code>H5Aiterate</code>
- <br>
- </td><td><code>H5Aiterate1</code>
- <br>
- </td></tr><tr><td><code>H5Eclear</code>
- </td><td><code>H5Eclear1</code>
- </td></tr><tr><td><code>H5Eget_auto</code>
- </td><td><code>H5Eget_auto1</code>
- </td></tr><tr><td><code>H5Eprint</code>
- </td><td><code>H5Eprint1</code>
- </td></tr><tr><td><code>H5Epush</code>
- </td><td><code>H5Epush1</code>
- </td></tr><tr><td><code>H5Eset_auto</code>
- </td><td><code>H5Eset_auto1</code>
- </td></tr><tr><td><code>H5Ewalk</code>
- <br>
- </td><td><code>H5Ewalk1</code>
- <br>
- </td></tr><tr><td><code>H5Gcreate</code>
- </td><td><code>H5Gcreate1</code>
- </td></tr><tr><td><code>H5Gopen</code>
- <br>
- </td><td><code>H5Gopen1</code>
- <br>
- </td></tr><tr><td><code>H5Pget_filter</code>
- </td><td><code>H5Pget_filter1</code>
- </td></tr><tr><td><code>H5Pget_filter_by_id</code>
- </td><td><code>H5Pget_filter_by_id1</code>
- </td></tr><tr><td><code>H5Pinsert</code>
- </td><td><code>H5Pinsert1</code>
- </td></tr><tr><td><code>H5Pregister</code>
- <br>
- </td><td><code>H5Pregister1</code>
- <br>
- </td></tr><tr><td><code>H5Rget_obj_type</code>
- <br>
- </td><td><code>H5Rget_obj_type1</code>
- <br>
- </td></tr><tr><td><code>H5Tarray_create</code>
- </td><td><code>H5Tarray_create1</code>
- </td></tr><tr><td><code>H5Tcommit</code>
- </td><td><code>H5Tcommit1</code>
- </td></tr><tr><td><code>H5Tget_array_ndims</code>
- </td><td><code>H5Tget_array_ndims1</code>
- </td></tr><tr><td><code>H5Topen</code>
- </td><td><code>H5Topen1</code>
- </td></tr>
- </table>
- </dl>
-
-
-<!--
- <h3>Deleted Constants</h3>
-
- The following constants have been removed from the HDF5 Library:
- <ul>
- <li>Any?
- <ul>
- <li><code>Specifics?</code>
- </ul>
- </ul>
--->
-
-
-<!--
- <h3>Constants with Changed Values</h3>
-
- The following constants have been changed in this release:
- <ul>
- <li>Any?
- <ul>
- <li><code>Specifics?</code>
- </ul>
- </ul>
--->
-
-
-
- <h3>Changed Library Structures</h3>
-
- The following library structures have changed as follows:
-
- <p>
- C API:
- <dir>
- <dl>
- <dt><code>H5FD_t</code>
- <dd>In this struct, the field <code>fileno[2]</code>
- has changed to <code>fileno</code>.
- <br>
- The struct is otherwise unchanged.
- <br>
- <dt><code>H5Z_class_t</code>
- <dd>This struct contains three new fields:
- <br>
- <code>version</code>
- <br>
- <code>encoder_present</code>
- <br>
- <code>decoder_present</code>
- <br>
- The struct is now defined as follows:
-<pre>
- typedef struct H5Z_class_t {
- int version;
- H5Z_filter_t filter_id;
- unsigned encoder_present
- unsigned decoder_present
- const char *comment;
- H5Z_can_apply_func_t can_apply_func;
- H5Z_set_local_func_t set_local_func;
- H5Z_func_t filter_func;
- } H5Z_class_t;
-</pre>
-
-
-
-<!--
- <dt><code>struct_name</code>
- <dd>new definition<br>
--->
-
- </dl>
- </dir>
-
-
- <h3>Changed <small>ENUM</small>s</h3>
-
- The following enumerated datatypes used by the library
- are discontinued in this release:
-
- <p>
- <dir>
- <dl>
- <dt><code>H5E_major_t</code>
- — Major error numbers
- <dt><code>H5E_minor_t</code>
- — Minor error numbers
- <dd>HDF5 error codes have changed from the <small>ENUM</small>
- format used in earlier releases to an identifier format.
- As <small>ENUM</small>s, error codes were constants
- defined at compile time; as identifiers, error codes
- are defined at runtime, in the same manner as HDF5
- object identifiers (file, dataset, group, etc.).
- <p>
- Under normal circumstances, this change should be transparent
- to user applications.
- </dl>
- </dir>
-
- The following enumerated datatypes used by the library
- have changed in the C and Fortran APIs as follows:
-
- <p>
- <dir>
- <dl>
- <dt><code>H5G_obj_t</code>
- — Object types
- <dd>This <small>ENUM</small> has reordered as follows:
- <br>
- <code>H5G_GROUP</code>
- <br>
- <code>H5G_DATASET</code>
- <br>
- <code>H5G_TYPE</code>
- <br>
- <code>H5G_LINK</code>
- <br>
-
- <dt><code>H5I_type_t</code>
- — Identifier types
- <dd>The following symbols have been added
- to this <small>ENUM</small>:
- <br>
- <code>H5I_UNINT</code>
- <br>
- <code>H5I_ERROR_CLASS</code>
- <br>
- <code>H5I_ERROR_MSG</code>
- <br>
- <code>H5I_ERROR_STACK</code>
- <br>
-
- <dd>Another new symbol
- <br>
- <code>H5I_NTYPES</code>
- <dd>replaces the old symbol
- <br>
- <code>H5I_NGROUPS</code>
- <br>
- While visible in the public API, <code>H5I_NTYPES</code>
- functions as a limit value for the HDF5 Library and
- is not generally used at the application level.
- The same was true of <code>H5I_NGROUPS</code>.
- <br>
-
- <dt><code>H5S_class_t</code>
- — Dataspace type identifiers
- <dd>The following symbol has been added:
- <br>
- <code>H5S_NULL</code>
- <br>
-
- <dt><code>H5T_cset_t</code>
- — Character set encoding identifiers
- <dd>The following symbol has been added:
- <br>
- <code>H5T_CSET_UTF8</code>
- <br>
-
- <dt><code>H5Z_filter_t</code>
- — Filters identifiers
- <dd>The following symbols have been added:
- <br>
- <code>H5Z_FILTER_NBIT</code>
- <br>
- <code>H5Z_FILTER_SCALEOFFSET</code>
- <br>
-
- </dl>
- </dir>
-
-
- <h3>New Datatypes</h3>
- <dl>
- <dt>The following OpenVMS-specific floating point datatypes
- are new with this release:
- <dd><code>H5T_VAX_F32</code>
- <dd><code>H5T_VAX_F64</code>
- </dl>
-
-
- <h3>New Property Lists</h3>
- <dl>
- <dt>The following property lists are new with this release:
- <dd><code>H5P_DATASET_ACCESS</code>
- <dd><code>H5P_GROUP_CREATE</code>
- <dd><code>H5P_GROUP_ACCESS</code>
- <dd><code>H5P_DATATYPE_CREATE</code>
- <dd><code>H5P_DATATYPE_ACCESS</code>
- <dd><code>H5P_ATTRIBUTE_CREATE</code>
- </dl>
-
-
- <h3>Changed Library Configuration</h3>
-
- <!-- --------------------------------------------- -->
- <!-- Based on DIFFed output of 'configure --help'. -->
- <!-- --------------------------------------------- -->
-
- The following configuration features have changed as follows.
- <ul>
- <li>New with this release:
- <br>
- <code> --disable-dependency-tracking</code>
- <br>
- <code> </code>
- <br>
-
- <!--
- ****** Thought not to be relevant to HDF5 situation. ******
- <code> --enable-dependency-tracking</code>
- <br>
- -->
-
- <code> --enable-hdf5v1_6</code>
- <br>
- <code> </code>
- <br>
- <code> --enable-dconv-exception</code>
- <br>
- <code> --disable-dconv-exception</code>
- <br>
- <code> --enable-dconv-accuracy</code>
- <br>
- <code> --disable-dconv-accuracy</code>
- <br>
- <code> </code>
- <br>
- <code> --program-prefix=PREFIX</code>
- <br>
- <code> --program-prefix=SUFFIX</code>
- <br>
- <code> --program-transform-name=PROGRAM</code>
- <br>
- <code> </code>
- <br>
- <code> --enable-maintainer-mode</code>
- <br>
- <code> </code>
- <br>
- <code> --disable-dependency-tracking</code>
- <br>
- <code> --enable-dependency-tracking</code>
- <br>
- <code> </code>
- <br>
- <code> --enable-codestack</code>
- <br>
- <code> </code>
- <br>
- <code> --enable-direct-vfd</code>
- <br>
- <code> </code>
- <br>
- <code> --with-tags[=TAGS]</code>
- <br>
- <code> </code>
- <li>New with this release, but expected to be useful only to those
- working inside the HDF5 Library or working very closely with
- HDF5 developers:
- <br>
- <code> --enable-build-all</code>
- <br>
- <code> --enable-metadata-trace-file</code>
- <br>
- <code> </code>
-<!--
- <li>New with this release, but will not be necessary
- in the final 1.8.0 release:
- <br>
- <code> --enable-group-revision</code>
- <br>
- <i>The above option is provided in this alpha release for
- experimental purposes only; it's use for any other
- purpose is strongly discouraged as it will result in files
- that may be unreadable with past or future releases
- of the HDF5 Library.</i>
- <br>
- <code> </code>
--->
- <li>New with this release, but not actively supported:
- <br>
- <code> --enable-fphdf5</code>
- <br>
- <code> </code>
- <li>Changed in this release:
- <br>
- <code> --enable-shared[=PKGS]</code>
- <br>
- <code> --enable-static[=PKGS]</code>
- <br>
- <code> --enable-fast-install[=PKGS]</code>
- <br>
- <code> </code>
- <li>Removed in this release:
- <br>
- <code> --enable-hdf5v1_4</code>
- <br>
- <code> --enable-funcstack</code>
- <br>
- <code> --with-ssl=LIB</code>
- <br>
- <code> --with-gass=DIR</code>
- <br>
- <code> --with-srb=DIR</code>
- </ul>
- <p>
- The environment variables
- <code>FC</code> and <code>FCFLAGS</code> replace
- <code>F9X</code> and <code>F9XFLAGS</code>, respectively,
- which are deprecated in this release.
- <p>
- Additional new “influential environment variables”
- in this release include the following:
- <br>
- <code> CXX</code>
- <br>
- <code> CXXFLAGS</code>
- <br>
- <code> CXXCPP</code>
- <br>
- <code> F77</code>
- <br>
- <code> FFLAGS</code>
-
-
-
-</dir>
-<p>
-
-
-
-<a name="1610">
-<h2>Release 1.6.10 versus Release 1.6.9,
- November 2009</h2>
-</a>
-
-<dir>
-
-This section lists interface-level changes and
-other user-visible changes in behavior
-in the transition from HDF5 Release 1.6.9 to Release 1.6.10.
-
-</dir>
-<dir>
-
- <h3>Embedded HDF5 Library Settings Information</h3>
-
- <dl>
- <dd>Library settings are now embedded in an HDF5 executable
- so that an “orphaned” executable can be queried
- (via the Unix strings command, for example) to display the
- library settings used to build it.
- The embedded settings information is the same as that
- normally found in the <code>libhdf5.settings</code> file.
- <p>
- This capability may be disabled with the use of the
- <code>--disable-embedded-libin</code> flag during configure.
- </dl>
-
- <h3>Function with Changed Interface or Behavior</h3>
-
- <dl>
- <dd><a href="../RM/RM_H5.html#Library-VersCheck">
- <code>H5check_version</code></a> now displays
- embedded library information (see above)
- if a version mismatch is detected.
- <p>
- The function has also been changed to suppress the
- warning message entirely if
- <code>$HDF5_DISABLE_VERSION_CHECK</code> is set to
- <code>2</code> or higher.
- </dl>
-
-</dir>
-<dir>
-
- <h3>New C++ Member Function</h3>
-
- <dl>
- <dd>New C++ member functions are provided to
- determine a dataset’s or attribute’s
- data size in memory:
- <p>
- <code>
-
- size_t DataSet::getInMemDataSize() const</code>
- <br>
- <code>
-
- size_t Attribute::getInMemDataSize() const</code>
- <p>
- The size in each case is in bytes.
- </dl>
-
-</dir>
-<dir>
-
- <h3>Tool with Changed Interface or Behavior</h3>
-
- <dl>
- <dd><a href="../RM/Tools.html#Tools-Diff"><code>h5diff</code></a>
- has one new option:
- <p>
- <code> --use-system-epsilon</code>
- <p>
- With this option, <code>h5diff</code> returns a difference
- if and only if the difference between two data values
- exceeds the system value for epsilon
- (that is, if <code>|a-b| > <i>epsilon</i></code>).
- <p>
- The tool’s default behavior has also changed;
- without this option, the tool now checks for strict equality.
- <p>
- This option has no short form.
- <p>
- </dl>
-
-</dir>
-
-
-
-<a name="169">
-<h2>Release 1.6.9 versus Release 1.6.8,
- May 2009</h2>
-</a>
-
-<dir>
-
-This section lists API-level changes and changes in behavior
-in the transition from HDF5 Release 1.6.8 to Release 1.6.9.
-
-
- <h3>API Compatibility Macros</h3>
-
- To facilitate writing applications that work with
- both the HDF5 Release 1.6 series and the 1.8 series,
- API compatibility macros analogous to those in 1.8
- have been defined. These macros map directly to the
- relevant functions and typedefs. Note that only the
- 1.6-style macros are supported in this branch.
- <p>
- Any program that is written using these macros
- exculsively will work with both the 1.6 and 1.8
- series HDF5 Libraries. The program will work without
- having to use any special flags or definitions, as
- long as the 1.8 library was compiled with support
- for deprecated symbols, which is the default.
- <p>
- Following is a list of macros and the
- symbols they alias:
- <p>
- <dl><dd><table width="90%">
- <tr>
- <td valign="top" align="left" width="20%">
- <strong>Macro</strong></td>
- <td valign="top" align="left">
- <strong>Symbol</strong></td>
- </tr>
- <tr>
- <td valign="top"><code>H5Acreate1</code></td>
- <td valign="top"><code>H5Acreate</code></td>
- </tr>
- <tr>
- <td valign="top"><code>H5Aiterate1</code></td>
- <td valign="top"><code>H5Aiterate</code></td>
- </tr>
- <tr>
- <td valign="top"><code>H5A_operator1_t</code></td>
- <td valign="top"><code>H5A_operator_t</code></td>
- </tr>
- <tr>
- <td valign="top"><code>H5Dcreate1</code></td>
- <td valign="top"><code>H5Dcreate</code></td>
- </tr>
- <tr>
- <td valign="top"><code>H5Dopen1</code></td>
- <td valign="top"><code>H5Dopen</code></td>
- </tr>
- <tr>
- <td valign="top"><code>H5Eclear1</code></td>
- <td valign="top"><code>H5Eclear</code></td>
- </tr>
- <tr>
- <td valign="top"><code>H5Eget_auto1</code></td>
- <td valign="top"><code>H5Eget_auto</code></td>
- </tr>
- <tr>
- <td valign="top"><code>H5Eprint1</code></td>
- <td valign="top"><code>H5Eprint</code></td>
- </tr>
- <tr>
- <td valign="top"><code>H5Epush1</code></td>
- <td valign="top"><code>H5Epush</code></td>
- </tr>
- <tr>
- <td valign="top"><code>H5Eset_auto1</code></td>
- <td valign="top"><code>H5Eset_auto</code></td>
- </tr>
- <tr>
- <td valign="top"><code>H5Ewalk1</code></td>
- <td valign="top"><code>H5Ewalk</code></td>
- </tr>
- <tr>
- <td valign="top"><code>H5E_walk1_t</code></td>
- <td valign="top"><code>H5E_walk_t</code></td>
- </tr>
- <tr>
- <td valign="top"><code>H5E_error1_t</code></td>
- <td valign="top"><code>H5E_error_t</code></td>
- </tr>
- <tr>
- <td valign="top"><code>H5Gcreate1</code></td>
- <td valign="top"><code>H5Gcreate</code></td>
- </tr>
- <tr>
- <td valign="top"><code>H5Gopen1</code></td>
- <td valign="top"><code>H5Gopen</code></td>
- </tr>
- <tr>
- <td valign="top"><code>H5Pget_filter1</code></td>
- <td valign="top"><code>H5Pget_filter</code></td>
- </tr>
- <tr>
- <td valign="top"><code>H5Pget_filter_by_id1</code></td>
- <td valign="top"><code>H5Pget_filter_by_id</code></td>
- </tr>
- <tr>
- <td valign="top"><code>H5Pinsert1</code></td>
- <td valign="top"><code>H5Pinsert</code></td>
- </tr>
- <tr>
- <td valign="top"><code>H5Pregister1</code></td>
- <td valign="top"><code>H5Pregister</code></td>
- </tr>
- <tr>
- <td valign="top"><code>H5Rget_obj_type1</code></td>
- <td valign="top"><code>H5Rget_obj_type</code></td>
- </tr>
- <tr>
- <td valign="top"><code>H5Tarray_create1</code></td>
- <td valign="top"><code>H5Tarray_create</code></td>
- </tr>
- <tr>
- <td valign="top"><code>H5Tcommit1</code></td>
- <td valign="top"><code>H5Tcommit</code></td>
- </tr>
- <tr>
- <td valign="top"><code>H5Tget_array_dims1</code></td>
- <td valign="top"><code>H5Tget_array_dims</code></td>
- </tr>
- <tr>
- <td valign="top"><code>H5Topen1</code></td>
- <td valign="top"><code>H5Topen</code></td>
- </tr>
- <tr>
- <td valign="top"><code>H5E_auto1_t</code></td>
- <td valign="top"><code>H5E_auto_t</code></td>
- </tr>
- <tr>
- <td valign="top"><code>H5Z_class1_t</code></td>
- <td valign="top"><code>H5Z_class_t</code></td>
- </tr>
- </code>
- </table></dl>
- <p>
- Note that for the 1.6 series, the numbered symbols are macros,
- while in the 1.8 series, the non-numbered symbols are
- macros. This was done because there is no need to
- switch between different API versions in the 1.6 series.
- <p>
- <code>H5Z_class1_t</code> was introduced in Release 1.6.9 while all the
- others were introduced in Release 1.6.8. For more information see
- <cite><a href="http://www.hdfgroup.org/HDF5/doc/RM/APICompatMacros.html">API
- Compatibility Macros</a></cite>, an HDF5 Release 1.8-series document.
- <p>
-
-
-</dir>
-<dir>
-
- <h3>Tools with Changed Interface or Behavior</h3>
-
- <dl>
- <dt><a href="../RM/Tools.html#Tools-Diff"><code>h5diff</code></a>
- <dd>The default behavior of <code>h5diff</code> is now
- to detect and compare NaNs.
- Use the <code>-N</code> or <code>--nan</code>
- option (below) to turn this behavior off and
- avoid the performance penalty that NaN detection
- and comparison entalis.
- (NaN detection and comparison became the default in
- in HDF5 Release 1.6.8.)
- <p>
- <dd>This tool has two new options:
- <p>
- <code>-c</code>, <code>--compare</code>
- <code> </code>
- Lists objects that are not comparable.
-
- <p>
- <code>-N</code>, <code>--nan</code>
- <code> </code>
- Avoids NaNs detection.
- <p>
-
- <dt><a href="../RM/Tools.html#Tools-Dump"><code>h5dump</code></a>
- <dd><code>h5dump</code> now correctly specifies an XML DTD
- or a schema URL.
- <p>
- <dd><code>h5dump</code> binary output now defaults to
- <code>NATIVE</code>.
- <p>
- <dd>The new <code>-b</code>, <code>--binary</code> option
- can be used to specify alternate binary formats.
- <p>
-
- <dt><a href="../RM/Tools.html#Tools-Repack"><code>h5repack</code></a>
- <dd>When a user does not specify a chunk size,
- <code>h5repack</code> now defines the default chunk size
- to be the same same as the size of the hyperslab used
- to read the chunks.
- <p>
- </dl>
-
-</dir>
-
-<!--
-<dir>
-
-
- <h3>Deprecated Functions</h3>
-
- The following functions are deprecated as of this release:
- <pre> <a href="../RM/RM_H5P.html#Property-SetPreserve">H5Pset_preserve</a>
- <a href="../RM/RM_H5P.html#Property-GetPreserve">H5Pget_preserve</a> </pre>
- <p>
- The original role of these functions is now
- part of the core HDF5 Library functionality.
- <p>
-
-
- <h3>Changed File Installation</h3>
- The file <code>libhdf5_fortran.settings</code> is no longer
- installed with the HDF5 Library;
- the original content of that file is now included in
- <code>libhdf5.settings</code>.
-
-</dir>
--->
-
-
-
-<a name="168">
-<h2>Release 1.6.8 versus Release 1.6.7,
- November 2008</h2>
-</a>
-
-<dir>
-
-This section lists API-level changes and changes in behavior
-in the transition from HDF5 Release 1.6.7 to Release 1.6.8.
-
-
- <h3>Functions with Changed Syntax</h3>
-
- The following function syntaxes have changed;
- the affected return values and parameter are noted as
- <font color=red><u>underscored red text</u></font>.
- <p>
- <dl>
- <dt><u>C function:</u>
- <dt><a href="../RM/RM_H5F.html#File-GetObjCount">
- <code>H5Fget_obj_count</code></a>
- <dd><code>
- <font color=red><u>
- ssize_t</u></font> H5Fget_obj_count(
- <em>hid_t </em><code>file_id</code>,
- <em>unsigned int</em> <code>types</code>
- )
- </code>
- <p>
- <dt><a href="../RM/RM_H5F.html#File-GetObjIDs">
- <code>H5Fget_obj_ids</code></a>
- <dd><code>
- <font color=red><u>
- ssize_t</u></font> H5Fget_obj_ids(
- <em>hid_t </em><code>file_id</code>,
- <em>unsigned int</em> <code>types</code>,
- <br>
-
- <font color=red><u>
- <em>size_t</em> <code>max_objs</code></u></font>,
- <em>hid_t *</em><code>obj_id_list</code>
- )
- </code>
- </dl>
- <p>
-
-</dir>
-<dir>
-
- <h3>Tools with Changed Interface or Behavior</h3>
-
- <dl>
- <dt><a href="../RM/Tools.html#Tools-Repack"><code>h5repack</code></a>
- and <a href="../RM/Tools.html#Tools-Diff"><code>h5diff</code></a>
- <dd>The standard command-line syntax of both tools
- has been changed to parallel that of <code>h5dump</code>.
- The new syntax of each is as follows:
- <p>
- <code>
- h5repack [<i>OPTIONS</i>] <i>file1 file2</i>
- </code>
- <p>
- <code>
- h5diff [<i>OPTIONS</i>] <i>file1 file2</i>
- [<i>object1</i> [<i>object2</i>]]
- </code>
- <p>
- In each case,
- the old syntax remains available (though undocumented)
- to avoid breaking existing scripts.
- <p>
- </dl>
-
-</dir>
-<dir>
-
- <dl>
- <dt><a href="../RM/Tools.html#Tools-Diff"><code>h5diff</code></a>
- <dd><code>h5diff</code> now returns <code>1</code>
- if the files differ in structure,
- i.e., if the file graphs differ by any object.
- <p>
- The tool’s error return code has been changed
- to <code>2</code>.
- <p>
-
- <dt><a href="../RM/Tools.html#Tools-Repack"><code>h5repack</code></a>
- <dd>The following new options control the addition of
- user block data to an existing HDF5 file:
- <dir>
- <table>
- <tr valign=top><td>
- <code>-u <em>U</em></code>
- <br>
- <code>--ublock=<em>U</em></code>
- </td><td> </td><td>
- Specifies the name of the file containing the
- user block data to be added.
- </td></tr>
- <tr valign=top><td>
- <br>
- <code>-b <em>B</em></code>
- <br>
- <code>--block=<em>B</em></code>
- </td><td> </td><td>
- <br>
- Specifies the size of the block to be added.
- </td></tr>
- </table>
- </dir>
- <p>
-
- <dd>The following new options set parameters
- governing the tool’s use of
- <code>H5Pset_alignment</code>:
- <dir>
- <table>
- <tr valign=top><td>
- <code>-t <em>T</em></code>
- <br>
- <code>--threshold=<em>T</em></code>
- </td><td> </td><td>
- Specifies the threshold value for
- <code>H5Pset_alignment</code>.
- </td></tr>
- <tr valign=top><td>
- <br>
- <code>-a <em>A</em></code>
- <br>
- <code>--alignment=<em>A</em></code>
- </td><td> </td><td>
- <br>
- Specifies the alignment value for
- <code>H5Pset_alignment</code>.
- </td></tr>
- </table>
- </dir>
- <p>
-
- <dd><code>h5repack</code> now supports multiple instances of
- the <code>'-f'</code> or <code>'--filter'</code> option,
- allowing the use of multiple I/O filters with an object.
- <p>
- <dd>With no change in the command-line syntax,
- <code>h5repack</code> now retains an existing userblock
- when repacking an HDF5 file.
- <p>
-
- <dt><a href="../RM/Tools.html#Tools-Import"><code>h5import</code></a>
- <dd>The floating point format flag <code>TEXTFPE</code>,
- for scientific notation, has been deprecated.
- The flag <code>TEXTFP</code>, which accepts
- scientific notation, should be used instead.
- <p>
-
- <dd><code>h5import</code> now imports string data
- with the <code>STR</code> keyword
- in the <code>INPUT-CLASS</code> configuration field.
- <p>
-
- <dt><a href="../RM/Tools.html#Tools-Dump"><code>h5dump</code></a>
- <dd>The new <code>'-m <i>T</i>'</code> or
- <code>'--format <i>T</i>'</code> option
- enables a user-defined formatting string
- for printing floating-point numbers.
- <p>
- <dd>With no change in the command-line syntax,
- <code>h5dump</code> now prints a compression ratio
- when compression filters are in use.
-
- </dl>
-
-</dir>
-<dir>
-
-
- <h3>Deprecated Functions</h3>
-
- The following functions are deprecated as of this release:
- <pre> <a href="../RM/RM_H5P.html#Property-SetPreserve">H5Pset_preserve</a>
- <a href="../RM/RM_H5P.html#Property-GetPreserve">H5Pget_preserve</a> </pre>
- <p>
- The original role of these functions is now
- part of the core HDF5 Library functionality.
- <p>
-
-
- <h3>Changed File Installation</h3>
- The file <code>libhdf5_fortran.settings</code> is no longer
- installed with the HDF5 Library;
- the original content of that file is now included in
- <code>libhdf5.settings</code>.
-
-
-
-</dir>
-
-
-<a name="167">
-<h2>Release 1.6.7 versus Release 1.6.6</h2>
-</a>
-
-<dir>
-
-This section lists the API-level changes that have been made in the
-transition from the HDF5 Release 1.6.6 to Release 1.6.7.
-As this is primarily a bug-fix release,
-the only interface changes are one changed function signature and
-the changes related to the removal of the
-stream I/O driver, as outlined below.
-
-
- <h3>Function with Changed Syntax</h3>
-
- The following function syntax has changed;
- the affected parameter is noted in <font color=red>red</font>.
- <p>
- <dl>
- <dt><u>C function:</u>
- <dt><code>H5Sselect_elements</code>
- <dd><code>
- herr_t H5Sselect_elements(
- <em>hid_t </em><code>space_id</code>,
- <em>H5S_seloper_t</em> <code>op</code>,
- <br>
-
- <em>size_t</em> <code>num_elements</code>,
- <font color=red>
- <em>const hsize_t *</em><code>coord</code>
- </font>
- )
- </code>
- </dl>
- <p>
- <cite>(This syntax change was listed on 10 September 2008,
- several months after Release 1.6.7.)</cite>
-
-
- <h3>Stream I/O Driver Removed</h3>
-
- The stream I/O driver, <code>H5FD_STREAM</code>, has been
- removd from and is no longer distributed with the HDF5 Library.
- The following APIs have therefore been removed from this release.
- <br>
- <code>H5Pset_fapl_stream</code>
- <br>
- <code>H5Pget_fapl_stream</code>
- <br>
- The stream driver <small>ENUM</small> value <code>H5FD_STREAM</code>
- has also been removed.
-
- <p>
- While the stream driver is no longer distributed by The HDF Group,
- it will be made available as a source code distribution from
- <a href="http://hdf5-addons.origo.ethz.ch/">
- <code>http://hdf5-addons.origo.ethz.ch/</code></a>.
- An integration mechanism will be developed and
- instructions for using the driver with HDF5
- will be posted on that site.
-
-</dir>
-
-<a name="166">
-<h2>Release 1.6.6 versus Release 1.6.5</h2>
-</a>
-
-<dir>
-
-This section lists the API-level changes that have been made in the
-transition from the HDF5 Release 1.6.5 to Release 1.6.6.
-<p>
-
-Release 1.6.6 is primarily a bug-fix release and includes
-no changes in the syntax or intended behavior of
-the library’s public interfaces.
-
-There are, however, two changes in tool interfaces.
-
-<!--
- <h3>New Functions and Tools</h3>
- <dl>
- <dt>C functions:
- <dd>None.
- <dd>The following C functions are new for Release 1.6.6 and
- are documented in the
- <a href="../RM/RM_H5Front.html"><cite>HDF5 Reference Manual</cite></a>.
-
- <table border="0">
- <tr>
- <td align="left" valign="top"><code>FUNCTION NAME</code>
- </td>
- <td align="left" valign="top"><em>FUNCTION</em> <code>SYNTAX</code>
- <br>
- See <a href="../RM/RM_H5[FUNCTION ENTRY URL]">entry</a>.</td>
- </tr>
- </table>
-
-
- <dd>
- <dt>Fortran subroutines:
- <dd>None.
-
- <dd>The following Fortran90 subroutines are new for Release 1.6.6
- and are documented in the
- <a href="../RM/RM_H5Front.html"><cite>HDF5 Reference Manual</cite></a>.
- <table border="0">
- <tr>
- <td align="left" valign="top">Corresponding to the
- new C functions listed above:<br>
- <code>FORTRAN_SUBROUTINE_NAME_f</code><br>
- </td>
- <td align="left" valign="top">
- </td>
- </tr>
- </table>
-
-
- <dd>
- <dt>Tools:
- <dd>None.
-
- <dd>The following tools are new for Release 1.6.6 and are
- documented on the <a href="../RM/Tools.html">Tools page</a> of the
- <a href="../RM/RM_H5Front.html"><cite>HDF5 Reference Manual</cite></a>.
- <dd><code>h5repack</code> description...
-
- <dd><code>h5repack</code> description...
-
- </dl>
-
-
- <h3>Deleted Functions</h3>
-
- None.
-
- The following functions are deprecated in HDF5 Release X.X.x.
- A backward compatibility mode is provided in this release,
- enabling these functions and other Release 1.4.x compatibility
- features, but is available only when the HDF5 Library is
- configured with the flag <code>H5_WANT_H5_V1_4_COMPAT</code>.
- The backward compatibility mode is not enabled in the
- binaries distributed by NCSA.
-
- <dir>
- <table border=0>
- <tr valign="top" align="left"><td>
-
- </td><td>
-<pre>
-<code>function</code>
-</pre>
- </td><td>
-
- </td><td>
-<pre>
-<code>function</code>
-</pre>
- </td><td>
-
- </td><td>
-<pre>
-
-</pre>
- </td></tr>
- </table>
- </dir>
- <p>
- The above functions will eventually be removed from the HDF5
- distribution and from the <cite>HDF5 Reference Manual</cite>.
-
-
- <h3>Functions with Changed Syntax</h3>
-
- None.
-
-
- The following functions have changed as noted.
-
- <dl>
- <dt>C functions:
- <dt><code>H5function?</code>
- <dd>Change....
-
- <dd>
- <dt>Fortran90 subroutines:
- <dt><code>h5subroutine_f?</code>
- <dd>Change...
- </dl>
-
-
- <h3>Constants with Changed Values</h3>
-
- None.
--->
-
-
- <h3>Tools with Changed Options and/or Behavior</h3>
-
-
- <dl>
- <dt>The following tools have changed in this release;
- these changes are documented on the
- <a href="../RM/Tools.html">Tools page</a> of the
- <a href="../RM/RM_H5Front.html"><cite>HDF5 Reference Manual</cite></a>.
- <br>
- <dd><code>h5repack</code>:
- <br>
- A new <code>-n</code> option allows the user to specify
- that a new file created by <code>h5repack</code> will use
- native datatypes.
- The default behavior is to use the original file datatypes.
- <table>
- <tr valign=top>
- <td> </td>
- <td><code>-n</code> </td>
- <td>Use native HDF5 datatypes when repacking.
- <br>
- (Default behavior is to use the original
- file datatypes.)
- </td></tr>
- </table>
- <em>Note that the default behavior of this tool
- has changed;
- prior to Release 1.6.6, </em><code>h5repack</code>
- <em> generated files only with native datatypes.</em>
-
-
- <p>
- <dd><code>h5dump</code>:
- <br>
- This tool includes a new <code>-b</code> option
- for binary output.
- <table>
- <tr valign=top>
- <td> </td>
- <td><code>-b <em>B</em></code> or
- <br>
- <code>--binary=<em>B</em> </code></td>
- <td valign="top">Output dataset to a binary file
- using the datatype specified by
- <code><em>B</em></code>.
- <br>
- <code><em>B</em></code> must have one of the
- following values:
- <br>
-
- <code>LE </code>
- Little-endian
- <br>
-
- <code>BE </code>
- Big-endian
- <br>
-
- <code>MEMORY </code>
- Memory datatype
- <br>
-
- <code>FILE </code>
- File datatype
- <br>
- Recommended usage is with the <code>-d</code> and
- <code>-o</code> options.
- </td>
- </tr>
- </table>
-
-
- </dl>
- </dl>
- </dir>
-<p>
-
-
-
-
-<a name="165">
-<h2>Release 1.6.5 versus Release 1.6.4</h2>
-</a>
-
-<dir>
-
-This section lists the API-level changes that have been made in the
-transition from the HDF5 Release 1.6.4 to Release 1.6.5.
-
-
- <h3>New Functions and Tools</h3>
- <dl>
-
- <dt>C functions and
- <dt>Fortran subroutines:
- <dd>HDF5 Release 1.6.5 is primarily a maintenance release,
- focusing on bugfixes, optimization and portability;
- there are no new C APIs or Fortran subroutines.
-
-
-<!--
- <dd>
- <dd>The following C functions are new for Release 1.6.4 and
- are documented in the
- <a href="../RM/RM_H5Front.html"><cite>HDF5 Reference Manual</cite></a>.
-
- <table border="0">
- <tr>
- <td align="left" valign="top"><code>function</code>
- </td>
- <td align="left" valign="top">syntax<br>
- See <a href="../RM/RM_H5__.html#__">entry</a>.</td>
- </tr>
-
- </table>
--->
-
- <dd>
- <dt>High Level C APIs:
- <dd>The High Level C APIs (HL), including the HDF5 Image,
- HDF5 Table, and HDF5 Lite interfaces
- (H5IM, H5TB, and H5LT, respectively),
- have been distributed with the main HDF5 source code distribution
- since Release 1.6.4 and are documented in
- <a href="http://www.hdfgroup.org/HDF5/hdf5_hl/doc/index.html">
- <cite>HDF5: High Level APIs</cite></a>.
- (<i>Note:</i> In release 1.8 and later, the HL APIs are
- documented in the <cite>HDF5 Reference Manual</cite>.)
-
-
- <dd>
- <dt>C++ wrappers:
- <dd><code>void PropList::copyProp(PropList& dest, const char* name) const</code>
- <dd><code>void PropList::copyProp(PropList& dest, const string& name) const</code>
- <dd><code>string CommonFG::getComment(const string& name) const</code>
- <dd><code>void CommonFG::removeComment(const char* name) const</code>
- <dd><code>void CommonFG::removeComment(const string& name) const</code>
- <dd><code>hsize_t Attribute::getStorageSize() const</code>
- <dd><code>void Attribute::close()</code>
- <dd><code>void DataSet::close()</code>
- <dd><code>void DataSpace::close()</code>
- <dd><code>void DataType::close()</code>
- <dd><code>void H5File::close()</code>
- <dd><code>void Group::close()</code>
- <dd><code>void PropList::close()</code>
- <dd><code>H5T_order_t AtomType::getOrder() const</code>
- <dd><code>void H5Object::renameAttr(const char* oldname, const char* newname) const</code>
- <dd><code>void H5Object::renameAttr(const string& oldname, const string& newname) const</code>
- <dd><code>string CommonFG::getObjnameByIdx(hsize_t idx) const</code>
- <dd><code>ArrayType AbstractDs::getArrayType() const</code>
- <dd><code>VarLenType AbstractDs::getVarLenType() const</code>
- <dd><code>ArrayType CommonFG::openArrayType(const char* name) const</code>
- <dd><code>ArrayType CommonFG::openArrayType(const string& name) const</code>
- <dd><code>VarLenType CommonFG::openVarLenType(const char* name) const</code>
- <dd><code>VarLenType CommonFG::openVarLenType(const string& name) const</code>
- <dd><code>ArrayType CompType::getMemberArrayType(unsigned member_num) const</code>
- <dd><code>VarLenType CompType::getMemberVarLenType(unsigned member_num) const</code>
-
-
- <dd>
-<!--
- <dt>Tools:
- <dd>Any?
--->
-
-
- </dl>
-
-
-<!--
- <h3>Deprecated and Deleted Functions</h3>
-
- The following functions have been removed in this release.
-
--->
- <!--
- None.
- -->
-<!--
- <dl>
- <dt><u>C functions:</u>
- <dt><code>H5function_name?</code>
-
-
- <p>
- <dt><u>Fortran90 subroutines:</u>
- <dt><code>h5subroutine_f?</code>
-
-
- <p>
- <dt><u>C++ wrappers:</u>
- <dt><code>C++_wrapper_name?</code>
-
-
- </dl>
--->
-
-
-<!--
- The following functions are deprecated in this HDF5 release.
- A backward compatibility mode is provided
- enabling these functions and other Release 1.4.x compatibility
- features, but is available only when the HDF5 Library is
- configured with the flag <code>H5_WANT_H5_V1_4_COMPAT</code>.
- The backward compatibility mode is not enabled in the
- binaries distributed by NCSA.
-
- <dir>
- <table border=0>
- <tr valign="top" align="left"><td>
-
- </td><td>
-<pre>
-<code>function</code>
-</pre>
- </td><td>
-
- </td><td>
-<pre>
-<code>function</code>
-</pre>
- </td><td>
-
- </td><td>
-<pre>
-
-</pre>
- </td></tr>
- </table>
- </dir>
- <p>
- The above functions will eventually be removed from the HDF5
- distribution and from the <cite>HDF5 Reference Manual</cite>.
--->
-
-
-
- <h3>Functions with New or Changed Symbols or Fixed Values</h3>
-
- Symbols and preset values associated with the following functions
- have changed as noted.
- <p>
-
- <dl>
- <dt><u>C functions:</u>
- <dt><code>H5Fget_obj_count</code>
- <dd><code>H5F_OBJ_LOCAL</code> has been
- added as a qualifier on the types of objects to be counted.
- <code>H5F_OBJ_LOCAL</code> restricts the search
- to objects opened through current file identifier.
-
- <dt><code>H5Tset_tag</code>
- <dd>The <code>H5T_OPAQUE_TAG_MAX</code>
- macro constant,
- specifying the maximum size of an opaque datatype tag,
- was added in <code>H5Tpublic.h</code>.
-
-
-<!--
- <dt><code>H5function_name?</code>
- <dd>Change...
--->
-
-
-<!--
- <p>
- <dt><u>Fortran90 subroutines:</u>
- <dt><code>h5subroutine_f?</code>
- <dd>Change...
-
-
- <p>
- <dt><u>C++ wrappers:</u>
- <dt><code>C++_wrapper_name?</code>
- <dd>Change...
--->
-
-
- </dl>
-
-
- <h3>Functions with Changed Syntax</h3>
-
- The following functions have changed as noted.
- Changed items are indicated in <font color="red">red</font>.
- <p>
-
-<!--
- <dl>
- <dt><u>C functions:</u>
- <dt><code>H5function_name?</code>
- <dd>Change...
-
-
- <p>
- <dt><u>Fortran90 subroutines:</u>
- <dt><code>h5subroutine_f?</code>
- <dd>Change...
--->
-
-
- <p>
- <dt><u>C++ wrappers:</u>
- <!--
- <dt><code>C++_wrapper_name?</code>
- <dd>Change....
- -->
- <dt>In all cases below, a parameter datatype has changed from
- <code>int</code> to <code>unsigned</code>.
-
- <dd><code>string CompType::getMemberName(
- <font color=red>unsigned</font> member_num ) const</code>
- <dd><code>size_t CompType::getMemberOffset(
- <font color=red>unsigned</font> member_num ) const</code>
- <dd><code>int CompType::getMemberDims(
- <font color=red>unsigned</font> member_num, size_t* dims,
- int* perm ) const</code>
- <dd><code>H5T_class_t CompType::getMemberClass(
- <font color=red>unsigned</font> member_num ) const</code>
- <dd><code>hid_t CompType::p_get_member_type(
- <font color=red>unsigned</font> member_num) const</code>
- <dd><code>DataType CompType::getMemberDataType(
- <font color=red>unsigned</font> member_num ) const</code>
- <dd><code>ArrayType CompType::getMemberArrayType(
- <font color=red>unsigned</font> member_num ) const</code>
- <dd><code>CompType CompType::getMemberCompType(
- <font color=red>unsigned</font> member_num ) const</code>
- <dd><code>EnumType CompType::getMemberEnumType(
- <font color=red>unsigned</font> member_num ) const</code>
- <dd><code>IntType CompType::getMemberIntType(
- <font color=red>unsigned</font> member_num ) const</code>
- <dd><code>FloatType CompType::getMemberFloatType(
- <font color=red>unsigned</font> member_num ) const</code>
- <dd><code>StrType CompType::getMemberStrType(
- <font color=red>unsigned</font> member_num ) const</code>
- <dd><code>VarLenType CompType::getMemberVarLenType(
- <font color=red>unsigned</font> member_num ) const</code>
-
- </dl>
-
-
-<!--
- <h3>Deleted Constants</h3>
-
- The following constants have been removed from the HDF5 Library:
- <ul>
- <li>Any?
- <ul>
- <li><code>Specifics?</code>
- </ul>
- </ul>
-
-
- <h3>Constants with Changed Values</h3>
-
- The following constants have been changed in this release:
- <ul>
- <li>Any?
- <ul>
- <li><code>Specifics?</code>
- </ul>
- </ul>
-
-
- <h3>Changed Library Sturctures</h3>
-
- The following library structures have changed and are now
- defined as follows:
-
- <p>
- <dl>
- <dt>C API:
- <dt><code>struct_name</code>
-
- <ul>
- <li>new definition<br>
- </ul>
- <p>
--->
-
-
- <h3>Changed Library Configuration</h3>
- <ul>
- <li>The path to the tr utility used by configure can be specififed
- by setting the TR variable.
- <li>The pdb2hdf tool has been deleted and PDB is no longer detected
- by configure.
- </ul>
-
-
- </dir>
-<p>
-
-
-
-<a name="164">
-<h2>Release 1.6.4 versus Release 1.6.3</h2>
-</a>
-
-<dir>
-
-This section lists the API-level changes that have been made in the
-transition from the HDF5 Release 1.6.3 to Release 1.6.4.
-
-
- <h3>New Functions and Tools</h3>
- <dl>
-
-<!--
- <dt>C functions:
--->
- <dt>C functions and
- <dt>Fortran subroutines:
- <dd>HDF5 Release 1.6.4 "Bugfix Release";
- there are no new C APIs or Fortran subroutines.
-<!--
- <dd>The following C functions are new for Release 1.6.4 and
- are documented in the
- <a href="../RM/RM_H5Front.html"><cite>HDF5 Reference Manual</cite></a>.
-
- <table border="0">
- <tr>
- <td align="left" valign="top"><code>function</code>
- </td>
- <td align="left" valign="top">syntax<br>
- See <a href="../RM/RM_H5__.html#__">entry</a>.</td>
- </tr>
-
- </table>
--->
-
- <dd>
- <dt>High Level C APIs:
- <dd>The High Level C APIs (HL), including the HDF5 Image,
- HDF5 Table, and HDF5 Lite interfaces
- (H5IM, H5TB, and H5LT, respectively) ,
- have been brought into the main HDF5 source code distribution.
- A link to the HL documentation appears on the opening
- page of the HDF5 document set or can be accessed directly at
- <a href="http://www.hdfgroup.org/HDF5/hdf5_hl/doc/RM_hdf5hl.html">
- <code>http://www.hdfgroup.org/HDF5/hdf5_hl/doc/RM_hdf5hl.html</code></a>
-
- <br><br>
- The HL library, <code>libhdf5_hl.a(so)</code>,
- is built and installed by default but can be disabled with
- the <code>--disable-hl</code> configure flag.
-
-<!--
- <dd>
- <dt>Fortran subroutines:
- <dd>The following Fortran90 subroutines are new for Release 1.6.3
- and are documented in the
- <a href="../RM/RM_H5Front.html"><cite>HDF5 Reference
- Manual</cite></a>.
- <table border="0">
- <tr>
- <td align="left" valign="top" colspan="2">New Fortran90
- subroutines corresponding to the new C functions
- listed above:<br>
- </td>
- </tr><tr>
- <td align="left" valign="top">
- <code>function</code><br>
- <code>function</code>
- </td>
- <td align="left" valign="top">
- <code>function</code>
- </td>
- </tr>
- </table>
-
- <table border="0">
- <tr>
- <td align="left" valign="top">New Fortran90 subroutines
- corresponding to C functions from prior releases:<br>
- None<br>
---><!--
- <code>new_fortran_here</code><br>
- <code>last_new_fortran_here</code>
---><!--
- </td>
- <td align="left" valign="top">
- </td>
- </tr>
- </table>
--->
-
-<!--
- <dd>
- <dt>C++ wrappers:
- <dd>
--->
-
- <dd>
- <dt>Tools:
- <dd>A new pair of tools, <code>h5jam</code> and <code>h5unjam</code>,
- is available to manage user blocks in HDF5 files.
- See <a href="../RM/Tools.html#Tools-Jam">their entry</a>
- in the <cite>HDF5 Reference Manual</cite>.
-
-
- </dl>
-
-
- <h3>Deleted Functions</h3>
-
- The following functions have been removed in this release.
-
- <dl>
- <dd>
- <dt>C++ wrappers:
- <dd> The C++ wrappers now rely on the C library's reference
- counting in place of the class <code>RefCounter</code>,
- which existed before the C mechanism was available.
- <code>RefCounter</code> has therefore been removed.
- </dl>
-
- <!--
- None.
- -->
-
- <!--
- The following functions are deprecated in HDF5 Release X.X.x.
- A backward compatibility mode is provided in this release,
- enabling these functions and other Release 1.4.x compatibility
- features, but is available only when the HDF5 Library is
- configured with the flag <code>H5_WANT_H5_V1_4_COMPAT</code>.
- The backward compatibility mode is not enabled in the
- binaries distributed by NCSA.
-
- <dir>
- <table border=0>
- <tr valign="top" align="left"><td>
-
- </td><td>
-<pre>
-<code>function</code>
-</pre>
- </td><td>
-
- </td><td>
-<pre>
-<code>function</code>
-</pre>
- </td><td>
-
- </td><td>
-<pre>
-
-</pre>
- </td></tr>
- </table>
- </dir>
- <p>
- The above functions will eventually be removed from the HDF5
- distribution and from the <cite>HDF5 Reference Manual</cite>.
- -->
-
-<!--
- The following functions have been removed in this release.
-
- <dl>
- <dd>
- <dt>Category
- <dd><code>function_name</code>
- </dl>
--->
-
-
- <h3>Functions with Changed Syntax</h3>
-
- The following functions have changed as noted.
- In general, one or more parameters or the return value has
- changed from a signed to an unsigned datatype.
- Changed items are indicated in
- <font color="red">red</font>.
- <p>
-
- <dl>
- <dt><u>C functions:</u>
- <dt><code>H5Pget_version</code>
- <dd><code>
- herr_t H5Pget_version(hid_t plist_id,
- <font color="red">unsigned *boot/*out*/</font>,
- <br>
- <font color="red">unsigned *freelist/*out*/</font>,
- <font color="red">unsigned *stab/*out*/</font>,
- <font color="red">unsigned *shhdr/*out*/</font>)
- </code>
-
- <dt><code>H5Pset_sym_k</code>
- <dd><code>
- H5Pset_sym_k(hid_t plist_id,
- <font color="red">unsigned ik</font>, unsigned lk)
- </code>
-
- <dt><code>H5Pget_sym_k</code>
- <dd><code>
- H5Pget_sym_k(hid_t plist_id,
- <font color="red">unsigned *ik/*out*/</font>,
- unsigned *lk/*out*/)
- </code>
-
- <dt><code>H5Pset_istore_k</code>
- <dd><code>
- herr_t H5Pset_istore_k(hid_t plist_id,
- <font color="red">unsigned ik</font>)
- </code>
-
- <dt><code>H5Pget_istore_k</code>
- <dd><code>
- herr_t H5Pget_istore_k(hid_t plist_id,
- <font color="red">unsigned *ik/*out*/</font>)
- </code>
-
- <dt><code>H5Pget_external</code>
- <dd><code>
- herr_t H5Pget_external(hid_t plist_id,
- <font color="red">unsigned idx</font>, size_t name_size,
- <br>
- char *name/*out*/, off_t *offset/*out*/,
- hsize_t *size/*out*/)
- </code>
-
- <dt><code>H5Pget_filter</code>
- <dd><code>
- H5Z_filter_t H5Pget_filter(hid_t plist_id,
- <font color="red">unsigned filter</font>,
- <br>
- unsigned int *flags/*out*/, size_t *cd_nelmts/*out*/,
- <br>
- unsigned cd_values[]/*out*/, unsigned int *flags/*out*/,
- <br>
- size_t namelen, char name[])
- </code>
-
- <dt><code>H5Sselect_hyperslab</code>
- <dd><code>
- herr_t H5Sselect_hyperslab(hid_t space_id, H5S_seloper_t op,
- <br>
- <font color="red">const hsize_t start[]</font>,
- const hsize_t _stride[], const hsize_t count[],
- <br>
- const hsize_t _block[])
- </code>
-
- <dt><code>H5Sselect_elements</code>
- <dd><code>
- herr_t H5Sselect_elements(hid_t space_id, H5S_seloper_t op,
- <br>
- size_t num_elemn, <font color="red">const hsize_t **coord</font>)
- </code>
-
- <dt><code>H5Tget_member_name</code>
- <dd><code>
- char *H5Tget_member_name(hid_t type_id,
- <font color="red">unsigned membno</font>)
- </code>
-
- <dt><code>H5Tget_member_offset</code>
- <dd><code>
- size_t H5Tget_member_offset(hid_t type_id,
- <font color="red">unsigned membno</font>)
- </code>
-
- <dt><code>H5Tget_member_class</code>
- <dd><code>
- H5T_class_t H5Tget_member_class(hid_t type_id,
- <font color="red">unsigned membno</font>)
- </code>
-
- <dt><code>H5Tget_member_type</code>
- <dd><code>
- hid_t H5Tget_member_type(hid_t type_id,
- <font color="red">unsigned membno</font>)
- </code>
-
- <dt><code>H5Tget_member_value</code>
- <dd><code>
- herr_t H5Tget_member_value(hid_t type_id,
- <font color="red">unsigned membno</font>,
- <br>
- void *value/*out*/)
- </code>
-
- <p>
- <dt><code>H5Diterate</code> is affected by a similar change
- in the syntax of <code>H5D_operator_t</code>.
- <dd><code>
- herr_t (*H5D_operator_t)(void *elem, hid_t type_id,
- <font color="red">unsigned ndim</font>,
- <br>
- <font color="red">const hsize_t *point</font>,
- void *operator_data)
- </code>
-
-
- <p>
- <dt><u>Fortran subroutines:</u>
- <dt><code>h5sselect_hyperslab_f</code>
- <dd><code>
- SUBROUTINE h5sselect_hyperslab_f(space_id, operator,
- <font color="red">start</font>, count, &
- <br>
- hdferr, stride, block)
- </code>
-
- <dt><code>h5sselect_elements_f</code>
- <dd><code>
- SUBROUTINE h5sselect_elements_f(space_id, operator, rank, &
- <br>
- num_elements, <font color="red">coord</font>, hdferr)
- </code>
-
-
- <p>
- <dt><u>C++ wrappers:</u>
- <dt><code>FileCreatPropList::getVersion</code>
- <dd><code>
- void FileCreatPropList::getVersion(
- <font color="red">unsigned& super</font>,
- <font color="red">unsigned& freelist</font>,
- <br>
- <font color="red">unsigned& stab</font>,
- <font color="red">unsigned& shhdr</font>) const
- </code>
-
-<!--
- <dt><code>FileCreatPropList::setSymk</code>
- <dd><code>
- void FileCreatPropList::setSymk( int ik, int lk ) const
- </code>
--->
-
- <dt><code>FileCreatPropList::setSymk</code>
- <dd><code>
- void FileCreatPropList::setSymk(
- <font color="red">unsigned ik</font>, unsigned lk ) const
- </code>
-
-<!--
- <dt><code>FileCreatPropList::getSymk</code>
- <dd><code>
- void FileCreatPropList::getSymk( int& ik, int& lk ) const
- </code>
--->
-
- <dt><code>FileCreatPropList::getSymk</code>
- <dd><code>
- void FileCreatPropList::getSymk(
- <font color="red">unsigned& ik</font>, unsigned& lk ) const
- </code>
-
- <dt><code>FileCreatPropList::setIstorek</code>
- <dd><code>
- void FileCreatPropList::setIstorek(
- <font color="red">unsigned ik</font> ) const
- </code>
-
- <dt><code>FileCreatPropList::getIstorek</code>
- <dd><code>
- <font color="red">unsigned</font>
- FileCreatPropList::getIstorek() const
- </code>
-
- <dt><code>DSetCreatPropList::getExternal</code>
- <dd><code>
- void DSetCreatPropList::getExternal(
- <font color="red">unsigned idx</font>,
- size_t name_size,
- <br>
- char* name, off_t& offset, hsize_t& size ) const
- </code>
-
- <dt><code>DSetCreatPropList::getFilter</code>
- <dd><code>
- H5Z_filter_t DSetCreatPropList::getFilter(
- <font color="red">ine filter_number</font>,
- <br>
- unsigned int &flags, size_t &cd_nelmts, unsigned int* cd_values,
- <br>
- size_t namelen, char name[] ) const
- </code>
-
- <dt><code>DataSpace::selectHyperslab</code>
- <dd><code>
- void DataSpace::selectHyperslab( H5S_seloper_t op,
- const hsize_t *count,
- <br>
- <font color="red">const hsize_t *start</font>,
- const hsize_t *stride, const hsize_t *block ) const
- </code>
-
- <dt><code>DataSpace::selectElements</code>
- <dd><code>
- void DataSpace::selectElements( H5S_seloper_t op,
- <br>
- const size_t num_elements,
- <font color="red">const hsize_t *coord[ ]</font> ) const
- </code>
-
- <dt><code>CompType::getMemberName</code>
- <dd><code>
- string CompType::getMemberName(
- <font color="red">unsigned member_num</font> ) const
- </code>
-
- <dt><code>CompType::getMemberOffset</code>
- <dd><code>
- size_t CompType::getMemberOffset(
- <font color="red">unsigned member_num</font> ) const
- </code>
-
- <dt><code>CompType::getMemberClass</code>
- <dd><code>
- H5T_class_t CompType::getMemberClass(
- <font color="red">unsigned member_num</font> ) const
- </code>
-
- <dt><code>EnumType::getMemberValue</code>
- <dd><code>
- void EnumType::getMemberValue(
- <font color="red">unsigned member_no</font>, void *value ) const
- </code>
-
-
-<!--
- <dd>The prototype for this function was changed from:
- <ul>
- <li>old sytax<br>
- </ul>
-
- to:
-
- <ul>
- <li>new syntax<br>
- </ul>
- <p>
-
-
-
-
- <dd>
- <dt>C++ wrappers:
- <dt><code>C++_wrapper_name</code>
- <dd>Change...
-
-
- <dd>
- <dt>Fortran90 subroutines:
- <dt><code>h5subroutine_f?</code>
- <dd>Change...
-
--->
- </dl>
- <p>
- <cite>(These lists of syntax changes were added
- on 31 March and 5 April 2005, shortly after Release 1.6.4.)</cite>
-
-
- <h3>Deleted Constants</h3>
-
- The following constants have been removed from the HDF5 Library:
- <ul>
- <li>Error codes
- <ul>
- <li><code>H5E_CANTALLOC</code>
- <li><code>H5E_CANTCHANGE</code>
- <li><code>H5E_CANTRECV</code>
- <li><code>H5E_CANTSENDMDATA</code>
- <li><code>H5E_FPHDF5</code>
- </ul>
- <li>An internal identifier category
- <ul>
- <li><code>H5I_TEMPBUF</code>
- </ul>
- </ul>
- <cite>(This list of deleted constants was added on 21 March 2005,
- shortly after Release 1.6.4.)</cite>
-
-
-<!--
- <h3>Constants with Changed Values</h3>
-
- The following library structures have changed as noted.
- <p>
- <dl>
- <dt>C API:
- <dt><code>struct_name</code>
- <dd>This function pointer typedef's definition has been changed from:
-
- <ul>
- <li>old definition<br>
- </ul>
-
- to:
-
- <ul>
- <li>new definition<br>
- </ul>
- <p>
--->
-
-
- <h3>Changed Library Configuration</h3>
- <dl>
- <dt>HDF5 Library configuration has been upgraded from
- GNU autoconf 2.53 to autoconf 2.59.
- </dl>
-
-
-
- </dir>
-<p>
-
-
-
-<a name="163">
-<h2>Release 1.6.3 versus Release 1.6.2</h2>
-</a>
-
-<dir>
-
-This section lists the API-level changes that have been made in the
-transition from the HDF5 Release 1.6.2 to Release 1.6.3.
-
-
- <h3>New Functions and Tools</h3>
- <dl>
- <dt>C functions:
- <dd>The following C functions are new for Release 1.6.3 and
- are documented in the
- <a href="../RM/RM_H5Front.html"><cite>HDF5 Reference Manual</cite></a>.
-
- <table border="0">
- <tr>
- <td align="left" valign="top"><code>H5Fget_name</code>
- </td>
- <td align="left" valign="top"><em>ssize_t</em> <code>H5Fget_name</code>
- (<em>hid_t</em> <code>obj_id</code>,
- <em>char *</em><code>name</code>,
- <em>size_t</em> <code>size</code>)<br>
- See <a href="../RM/RM_H5F.html#File-GetName">entry</a>.</td>
- </tr>
-
- <tr>
- <td align="left" valign="top"><code>H5Fget_filesize</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em> <code>H5Fget_filesize</code>
- (<em>hid_t</em> <code>file_id</code>,
- <em>hsize_t *</em> <code>size</code>)<br>
- See <a href="../RM/RM_H5F.html#File-GetFilesize">entry</a>.</td>
- </tr>
-
- <tr>
- <td align="left" valign="top"><code>H5Iget_file_id</code>
- </td>
- <td align="left" valign="top"><em>hid_t</em> <code>H5Iget_file_id</code>
- (<em>hid_t</em> <code>obj_id</code>)<br>
- See <a href="../RM/RM_H5I.html#Identify-GetFileId">entry</a>.</td>
- </tr>
-
- <tr>
- <td align="left" valign="top"><code>H5Premove_filter</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em> <code>H5Premove_filter</code>
- (<em>hid_t</em> <code>obj_id</code>,
- <em>H5Z_filter_t</em> <code>filter</code>)<br>
- See <a href="../RM/RM_H5P.html#Property-RemoveFilter">entry</a>.</td>
- </tr>
-
- <tr>
- <td align="left" valign="top"><code>H5Zget_filter_info</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em> <code>H5Zget_filter_info</code>
- (<em>H5Z_filter_t</em> <code>filter</code>,
- <em>unsigned int *</em> <code>flags</code>)<br>
- See <a href="../RM/RM_H5Z.html#Compression-GetFilterInfo">entry</a>.</td>
- </tr>
- </table>
-
- <dd>
- <dt>Fortran subroutines:
- <dd>The following Fortran90 subroutines are new for Release 1.6.3
- and are documented in the
- <a href="../RM/RM_H5Front.html"><cite>HDF5 Reference
- Manual</cite></a>.
- <table border="0">
- <tr>
- <td align="left" valign="top" colspan="2">New Fortran90
- subroutines corresponding to the new C functions
- listed above:<br>
- </td>
- </tr><tr>
- <td align="left" valign="top">
- <code>h5fget_name_f</code><br>
- <code>h5fget_filesize_f</code>
- </td>
- <td align="left" valign="top">
- <code>h5iget_file_id_f</code><br>
- <code>h5premove_filter_f</code><br>
- <code>h5zget_filter_info_f</code>
- </td>
- </tr>
- </table>
-
- <table border="0">
- <tr>
- <td align="left" valign="top">New Fortran90 subroutines
- corresponding to C functions from prior releases:<br>
- None<br>
-<!--
- <code>new_fortran_here</code><br>
- <code>last_new_fortran_here</code>
--->
- </td>
- <td align="left" valign="top">
- </td>
- </tr>
- </table>
-
- <dd>
- <dt>C++ wrappers:
- <dd>C++ wrappers have been brought in sync with the C library,
- rendering the C++ API significantly more complete.
- Most of the new wrappers are for H5P and H5T APIs.
- <p>
- All available C++ elements are now documented in the
- <a href="../cpplus_RM/index.html" target="CppExternal">
- <cite>HDF5 C++ API Reference Manual</cite></a>.
- (The <cite>HDF5 C++ API Reference Manual</cite> is also a
- new addition in this release.)
-
- <dd>
- <dt>Tools:
- <dd>The following tools are new for Release 1.6.3 and are
- documented on the <a href="../RM/Tools.html">Tools page</a> of the
- <a href="../RM/RM_H5Front.html"><cite>HDF5 Reference Manual</cite></a>.
- <dd><code>h5new_tool</code> is designed to do whatever this sentence says.
- (Clearly, this is a placeholder entry that should be removed before release.)
- <dd>
- <dd>The following tool was in Release 1.6.2 but was not included in formal documentation.
- A full description is now included on the
- <a href="../RM/Tools.html">Tools page</a> of the
- <a href="../RM/RM_H5Front.html"><cite>HDF5 Reference Manual</cite></a>.
- <dd><code>h5repack</code> is designed to copy an HDF5 file
- to a new file with or without compression and/or chunking.
- </dl>
-
-
- <h3>Deleted Functions</h3>
-
- <!--
- None.
- -->
-
- <!--
- The following functions are deprecated in HDF5 Release X.X.x.
- A backward compatibility mode is provided in this release,
- enabling these functions and other Release 1.4.x compatibility
- features, but is available only when the HDF5 Library is
- configured with the flag <code>H5_WANT_H5_V1_4_COMPAT</code>.
- The backward compatibility mode is not enabled in the
- binaries distributed by NCSA.
-
- <dir>
- <table border=0>
- <tr valign="top" align="left"><td>
-
- </td><td>
-<pre>
-<code>function</code>
-</pre>
- </td><td>
-
- </td><td>
-<pre>
-<code>function</code>
-</pre>
- </td><td>
-
- </td><td>
-<pre>
-
-</pre>
- </td></tr>
- </table>
- </dir>
- <p>
- The above functions will eventually be removed from the HDF5
- distribution and from the <cite>HDF5 Reference Manual</cite>.
- -->
-
-
- The following function has been removed in this release.
-
- <dl>
- <dd>
- <dt>C++ wrapper:
- <dd><code>CompType::getMemberDims</code>
- </dl>
-
-
- <h3>Functions with Changed Syntax</h3>
-
- The following functions have changed as noted.
- <p>
- <dl>
- <dt>C functions:
- <dt><code>H5Pset_fapl_multi</code>
- <dd>The prototype for this function was changed from:
- <ul>
- <li><em>herr_t</em> <code>H5Pset_fapl_multi</code>
- (<em>hid_t</em> <code>fapl_id</code>,
- <em>const H5FD_mem_t *</em> <code>memb_map</code>,
- <em>const hid_t *</em> <code>memb_fapl</code>,
- <em>const char **</em> <code>memb_name</code>,
- <em>const haddr_t *</em> <code>memb_addr</code>,
- <em>hbool_t</em> <code>relax</code>)<br>
- </ul>
-
- to:
-
- <ul>
- <li><em>herr_t</em> <code>H5Pset_fapl_multi</code>
- (<em>hid_t</em> <code>fapl_id</code>,
- <em>const H5FD_mem_t *</em> <code>memb_map</code>,
- <em>const hid_t *</em> <code>memb_fapl</code>,
- <em>const char * const *</em> <code>memb_name</code>,
- <em>const haddr_t *</em> <code>memb_addr</code>,
- <em>hbool_t</em> <code>relax</code>)<br>
- </ul>
- <p>
- This change should not appreciably affect application programs.
-
- <dt><code>H5Tconvert</code>
- <dd>The prototype for this function was changed from:
- <ul>
- <li><em>herr_t</em> <code>H5Tconvert</code>
- (<em>hid_t</em> <code>src_id</code>,
- <em>hid_t</em> <code>dst_id</code>,
- <em>hsize_t</em> <code>nelmts</code>,
- <em>void *</em> <code>buf</code>,
- <em>void *</em> <code>background</code>,
- <em>hid_t</em> <code>plist_id</code>)<br>
- </ul>
-
- to:
-
- <ul>
- <li><em>herr_t</em> <code>H5Tconvert</code>
- (<em>hid_t</em> <code>src_id</code>,
- <em>hid_t</em> <code>dst_id</code>,
- <em>size_t</em> <code>nelmts</code>,
- <em>void *</em> <code>buf</code>,
- <em>void *</em> <code>background</code>,
- <em>hid_t</em> <code>plist_id</code>)<br>
- </ul>
- <p>
- This was changed to prevent overflows when <code>hsize_t</code> and
- <code>size_t</code> types are different sizes. Application code
- may need to be modified to take this into account. Application
- code using this function may also be affected by the changes to
- <code>H5Tregister</code> and <code>H5Tunregister</code> described
- below.
-
- <dt><code>H5Tregister</code> and <code>H5Tunregister</code>
- <dd>These two routines are affected by the change to the
- <code>H5T_conv_t</code> typedef (described below) and may
- require application registered datatype conversion routines
- to be modified to conform to the changed typedef.
-
-
-
- <dd>
- <dt>C++ wrappers:
- <dt><code>H5::Exception</code> and its subclasses
- <dd>Constructors used by <code>H5::Exception</code> and its
- subclasses that were previously overloaded to take char pointers
- have been removed.
- Constructors that passed in a reference of <code>string</code>
- have been changed to pass by value.
- In addition, the default value of the detailed
- message has been changed from <code>0/NULL</code> to
- <code>DEFAULT_MSG</code>
- (meaning "No detailed information provided").
-
- <dd>
- <dt><code>DSetCreatPropList::setLayout</code>
- <dd>The prototype for <code>DSetCreatPropList::setLayout</code>
- has been changed: the first parameter has been removed.
-
- <!--
- <dd>
- <dt>Fortran90 subroutines:
- <dt><code>h5subroutine_f?</code>
- <dd>Change...
- -->
-
- </dl>
-
-
- <h3>Constants with Changed Values</h3>
-
- The following library structures have changed as noted.
- <p>
- <dl>
- <dt>C API:
- <dt><code>H5T_conv_t</code>
- <dd>This function pointer typedef's definition has been changed from:
-
- <ul>
- <li><em>typedef herr_t</em> <code>(*H5T_conv_t)</code>
- (<em>hid_t</em> <code>src_id</code>,
- <em>hid_t</em> <code>dst_id</code>,
- <em>H5T_cdata_t *</em> <code>cdata</code>,
- <em>hsize_t</em> <code>nelmts</code>,
- <em>size_t</em> <code>buf_stride</code>,
- <em>size_t</em> <code>bkg_stride</code>,
- <em>void *</em> <code>buf</code>,
- <em>void *</em> <code>bkg</code>,
- <em>hid_t</em> <code>plist_id</code>)<br>
- </ul>
-
- to:
-
- <ul>
- <li><em>typedef herr_t</em> <code>(*H5T_conv_t)</code>
- (<em>hid_t</em> <code>src_id</code>,
- <em>hid_t</em> <code>dst_id</code>,
- <em>H5T_cdata_t *</em> <code>cdata</code>,
- <em>size_t</em> <code>nelmts</code>,
- <em>size_t</em> <code>buf_stride</code>,
- <em>size_t</em> <code>bkg_stride</code>,
- <em>void *</em> <code>buf</code>,
- <em>void *</em> <code>bkg</code>,
- <em>hid_t</em> <code>plist_id</code>)<br>
- </ul>
- <p>
- This was changed to prevent overflows when <code>hsize_t</code> and
- <code>size_t</code> types are different sizes. Application code
- may need to be modified to take this into account.
-
-
- </dir>
-<p>
-
-
-
-
-
-
-
-
-
-
-
-<a name="162">
-<h2>Release 1.6.2 versus Release 1.6.1</h2>
-</a>
-
-<dir>
-
-This section lists the API-level changes that have been made in the
-transition from the HDF5 Release 1.6.1 to Release 1.6.2.
-
-
- <h3>New Functions and Tools</h3>
- <dl>
- <dt>C functions:
- <dd>The following C functions are new for Release 1.6.2 and
- are documented in the
- <a href="../RM/RM_H5Front.html"><cite>HDF5 Reference Manual</cite></a>.
-
- <table border="0">
- <tr>
- <td align="left" valign="top"><code>H5Iget_ref</code>
- </td>
- <td align="left" valign="top"><em>int</em> <code>H5Iget_ref</code>
- (<em>hid_t </em><code>obj_id</code>)<br>
- See <a href="../RM/RM_H5I.html#Identify-GetRef">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Iinc_ref</code>
- </td>
- <td align="left" valign="top"><em>int</em> <code>H5Iinc_ref</code>
- (<em>hid_t </em><code>obj_id</code>)<br>
- See <a href="../RM/RM_H5I.html#Identify-IncRef">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Idec_ref</code>
- </td>
- <td align="left" valign="top"><em>int</em> <code>H5Idec_ref</code>
- (<em>hid_t </em><code>obj_id</code>)<br>
- See <a href="../RM/RM_H5I.html#Identify-DecRef">entry</a>.</td>
- </tr>
- </table>
-
- <dd>
- <dt>Fortran subroutines:
- <dd>The following Fortran90 subroutines are new for Release 1.6.2
- and are documented in the
- <a href="../RM/RM_H5Front.html"><cite>HDF5 Reference Manual</cite></a>.
- <table border="0">
- <tr>
- <td align="left" valign="top">Corresponding to the
- new C functions listed above:<br>
- <code>h5iget_ref_f</code><br>
- <code>h5iinc_ref_f</code><br>
- <code>h5idec_ref_f</code>
- </td>
- <td align="left" valign="top">
- </td>
- </tr>
- </table>
-
- <dd>
- <dt>Tools:
- <dd>The following tools are new for Release 1.6.2 and are
- documented on the <a href="../RM/Tools.html">Tools page</a> of the
- <a href="../RM/RM_H5Front.html"><cite>HDF5 Reference Manual</cite></a>.
- <dd><code>h5pcc</code> is designed to aid in the compilation
- of C applications that employ the HDF5 Library.
- <dd><code>h5pfc</code> is designed to aid in the compilation
- of Fortran90 applications that employ the HDF5 Library.
- </dl>
-
-
- <h3>Deleted Functions</h3>
-
- None.
-
- <!--
- The following functions are deprecated in HDF5 Release X.X.x.
- A backward compatibility mode is provided in this release,
- enabling these functions and other Release 1.4.x compatibility
- features, but is available only when the HDF5 Library is
- configured with the flag <code>H5_WANT_H5_V1_4_COMPAT</code>.
- The backward compatibility mode is not enabled in the
- binaries distributed by NCSA.
-
- <dir>
- <table border=0>
- <tr valign="top" align="left"><td>
-
- </td><td>
-<pre>
-<code>function</code>
-</pre>
- </td><td>
-
- </td><td>
-<pre>
-<code>function</code>
-</pre>
- </td><td>
-
- </td><td>
-<pre>
-
-</pre>
- </td></tr>
- </table>
- </dir>
- <p>
- The above functions will eventually be removed from the HDF5
- distribution and from the <cite>HDF5 Reference Manual</cite>.
- -->
-
-
- <h3>Functions with Changed Syntax</h3>
-
- None.
-
- <!--
- The following functions have changed as noted.
-
- <dl>
- <dt>C functions:
- <dt><code>H5function?</code>
- <dd>Change....
-
- <dd>
- <dt>Fortran90 subroutines:
- <dt><code>h5subroutine_f?</code>
- <dd>Change...
- </dl>
- -->
-
-
- <h3>Constants with Changed Values</h3>
-
- None.
-
-
- </dir>
-<p>
-
-
-
-
-
-
-
-
-
-
-<a name="161">
-<h2>Release 1.6.1 versus Release 1.6.0</h2>
-</a>
-
-<dir>
-
-This section lists the API-level changes that have been made in the
-transition from the HDF5 Release 1.6.0 to Release 1.6.1.
-
-
- <h3>New Functions and Tools</h3>
- <dl>
- <dt>C functions:
- <dd>The following C function is new for Release 1.6.1 and is documented in the
- <a href="../RM/RM_H5Front.html"><cite>HDF5 Reference Manual</cite></a>.
-
- <table border="0">
- <tr>
- <td align="left" valign="top"><code>H5Fget_freespace</code>
- </td>
- <td align="left" valign="top"><em>hssize_t</em> <code>H5Fget_freespace</code>
- (<em>hid_t </em><code>file_id</code>)<br>
- See <a href="../RM/RM_H5F.html#File-GetFreespace">entry</a>.</td>
- </tr>
- </table>
-
- <dd>
- <dt>Fortran subroutines
- <dd>The following Fortran90 subroutines were new for Release 1.6.0
- but were not documented. They are now included in the
- <a href="../RM/RM_H5Front.html"><cite>HDF5 Reference Manual</cite></a>.
- <table border="0">
- <tr>
- <td align="left" valign="top"><code>h5get_fapl_mpiposix_f</code>
- </td>
- <td align="left" valign="top">
- <code>h5pget_fapl_mpiposix_f(prp_id, comm, use_gpfs, hdferr)</code><br>
- See <a href="../RM/RM_H5P.html#Property-GetFaplMpiPosix">entry</a>.</td>
- </tr><tr>
- <td align="left" valign="top"><code>h5set_fapl_mpiposix_f</code>
- </td>
- <td align="left" valign="top">
- <code>h5pset_fapl_mpiposix_f(prp_id, comm, use_gpfs, hdferr)</code><br>
- See <a href="../RM/RM_H5P.html#Property-SetFaplMpiPosix">entry</a>.</td>
- </tr>
- </table>
-
- <dd>
- <dt>Tools:
- <dd>Release 1.6.1 contains no new tools.
- <!--
- <dd>The following tools are new for Release X.X.x and are included in the
- <a href="../RM/RM_H5Front.html"><cite>HDF5 Reference Manual</cite></a>.
- <dd><code>new tool</code>
- -->
- </dl>
-
-
- <h3>Deleted Functions</h3>
- None.
- <!--
- The following functions are deprecated in HDF5 Release X.X.x.
- A backward compatibility mode is provided in this release,
- enabling these functions and other Release 1.4.x compatibility
- features, but is available only when the HDF5 Library is
- configured with the flag <code>H5_WANT_H5_V1_4_COMPAT</code>.
- The backward compatibility mode is not enabled in the
- binaries distributed by NCSA.
-
- <dir>
- <table border=0>
- <tr valign="top" align="left"><td>
-
- </td><td>
-<pre>
-<code>function</code>
-</pre>
- </td><td>
-
- </td><td>
-<pre>
-<code>function</code>
-</pre>
- </td><td>
-
- </td><td>
-<pre>
-
-</pre>
- </td></tr>
- </table>
- </dir>
- <p>
- The above functions will eventually be removed from the HDF5
- distribution and from the <cite>HDF5 Reference Manual</cite>.
- -->
-
-
- <h3>Functions with Changed Syntax</h3>
- The following functions have changed as noted.
-
- <dl>
- <dt>C functions:
- <dt><code>H5Gget_obj_info</code>
- <dd>The <code>H5G_stat_t</code> struct contains two new fields.<br>
- This change will be transparent to existing applications,
- though those calling <code>H5Gget_obj_info</code> will have
- to be recompiled before linking with the updated library.
-
- <dd>
- <dt>Fortran90 subroutines:
- <dt><code>h5pset_cache_f</code>
- <dd>The <code>rdcc_nbytes</code> parameter has changed from
- <code><em>INTEGER</em></code> to <code><em>INTEGER(SIZE_T)</em></code>
- to better match the C API and the <code>h5pget_cache_f</code>
- subroutine.
- </dl>
-
-
- <h3>Constants with Changed Values</h3>
-
- None.
-
-
- </dir>
-<p>
-
-
-
-
-
-
-
-
-<a name="160">
-<h2>Release 1.6.0 versus Release 1.4.5</h2>
-</a>
-
-<dir>
-
-This section lists the API-level changes that have been made in the
-transition from the HDF5 Release 1.4.<i>x</i> series to Release 1.6.0.
-
-
- <h3>New Functions and Tools</h3>
- <dl>
- <dt>The following functions are new for Release 1.6.0 and are included in the
- <a href="../RM/RM_H5Front.html"><cite>HDF5 Reference Manual</cite></a>.
-
-<dd>
-<table border="0">
- <tr>
- <td align="left" valign="top"><code>H5set_free_list_limits</code></td>
- <td align="left" valign="top">
- <em>herr_t</em> <code>H5set_free_list_limits</code> (<em>int</em> <code>reg_global_lim</code>,
- <em>int</em> <code>reg_list_lim</code>, <em>int</em> <code>arr_global_lim</code>,
- <em>int</em> <code>arr_list_lim</code>, <em>int</em> <code>blk_global_lim</code>,
- <em>int</em> <code>blk_list_lim</code>)
- </td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Dget_offset</code></td>
- <td align="left" valign="top"><em>hsize_t</em> <code>H5Dget_offset</code> (<em>hid_t </em><code>dset_id</code>)</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Dget_space_status</code></td>
- <td align="left" valign="top"><em>hid_t</em> <code>H5Dget_space_status</code> (<em>hid_t</em>
- <code>dset_id</code>, <em>H5D_space_status_t *</em><code>status</code>)
- </td>
-
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Fget_obj_ids</code></td>
- <td align="left" valign="top">
- <em>int </em><code>H5Fget_obj_ids</code> (<em>hid_t</em> <code>file_id</code>,
- <em>unsigned int</em> <code>types</code>,
- <em>int</em> <code>max_objs</code>, <em>hid_t *</em><code>obj_id_list</code>)
- </td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Fget_vfd_handle</code></td>
- <td align="left" valign="top">
- <em>herr_t </em><code>H5Fget_vfd_handle</code> (<em>hid_t</em> <code>file_id</code>,
- <em>hid_t</em> <code>fapl_id</code>, <em>void *</em><code>file_handle</code>)
- </td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Gget_num_objs</code></td>
- <td align="left" valign="top">
- <em>herr_t</em> <code>H5Gget_num_objs</code> (<em>hid_t</em> <code>loc_id</code>,
- <em>hsize_t* </em> <code>num_obj</code>)
- </td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Gget_objname_by_idx</code></td>
- <td align="left" valign="top">
- <em>ssize_t</em> <code>H5Gget_objname_by_idx</code> (<em>hid_t</em> <code>group_id</code>,
- <em>hsize_t</em> <code>idx</code>, <em>char *</em><code>name</code>,
- <em>size_t*</em> <code>size</code>)
- </td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Gget_objtype_by_idx</code></td>
- <td align="left" valign="top">
- <em>int</em> <code>H5Gget_objtype_by_idx</code> (<em>hid_t</em> <code>group_id</code>,
- <em>hsize_t</em> <code>idx</code>)
- </td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Iget_name</code></td>
- <td align="left" valign="top">
- <em>ssize_t</em> <code>H5Iget_name</code> (<em>hid_t</em> <code>obj_id</code>,
- <em>char *</em><code>name</code>, <em>size_t</em> <code>size</code>)
- </td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Pall_filters_avail</code></td>
- <td align="left" valign="top">
- <em>htri_t</em> <code>H5Pall_filters_avail</code> (<em>hid_t</em> <code>dcpl_id</code>)
- </td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Pfill_value_defined</code></td>
- <td align="left" valign="top">
- <em>herr_t </em><code>H5Pfill_value_defined</code> (<em>hid_t</em> <code>plist_id</code>,
- <em>H5D_fill_value_t *</em><code>status</code>)
- </td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Pget_alloc_time</code></td>
- <td align="left" valign="top">
- <em>herr_t </em><code>H5Pget_alloc_time</code> (<em>hid_t</em> <code>plist_id</code>,
- <em>H5D_alloc_time_t *</em><code>alloc_time</code>)
- </td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Pget_edc_check</code></td>
- <td align="left" valign="top">
- <em>H5Z_EDC_t</em> <code>H5Pget_edc_check</code> (<em>hid_t</em>
- <code>plist</code>)
- </td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Pget_family_offset</code></td>
- <td align="left" valign="top">
- <em>herr_t</em> <code>H5Pget_family_offset</code> (<em>hid_t</em> <code>fapl_id</code>,
- <em>hsize_t *</em><code>offset</code>)
- </td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Pget_fapl_mpiposix</code></td>
- <td align="left" valign="top">
- <em>herr_t</em> <code>H5Pget_fapl_mpiposix</code> (<em>hid_t</em> <code>fapl_id</code>,
- <em>MPI_Comm *</em><code>comm</code>)
- </td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Pget_fclose_degree</code></td>
- <td align="left" valign="top">
- <em>herr_t</em> <code>H5Pget_fclose_degree</code>(<em>hid_t</em> <code>fapl_id</code>,
- <em>H5F_close_degree_t *</em><code>fc_degree</code>)
- <br>
- <i>(This item corrected 14 September 2004.)</i>
- </td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Pget_fill_time</code></td>
- <td align="left" valign="top">
- <em>herr_t </em><code>H5Pget_fill_time</code> (<em>hid_t</em> <code>plist_id</code>,
- <em>H5D_fill_time_t *</em><code>fill_time</code>)
- </td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Pget_filter_by_id</code></td>
- <td align="left" valign="top">
- <em>herr_t</em> <code>H5Pget_filter_by_id</code> (<em>hid_t</em> <code>plist_id</code>,
- <em>H5Z_filter_t</em> <code>filter</code>, <em>unsigned int *</em><code>flags</code>,
- <em>size_t *</em><code>cd_nelmts</code>, <em>unsigned int</em> <code>cd_values[]</code>,
- <em>size_t</em> <code>namelen</code>, <em>char *</em><code>name[]</code>)
- </td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Pget_hyper_vector_size</code></td>
- <td align="left" valign="top">
- <em>herr_t</em> <code>H5Pget_hyper_vector_size</code> (<em>hid_t</em> <code>dxpl_id</code>,
- <em>size_t *</em><code>vector_size</code>)
- </td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Pget_multi_type</code></td>
- <td align="left" valign="top">
- <em>herr_t</em> <code>H5Pget_multi_type</code> (<em>hid_t</em> <code>fapl_id</code>,
- <em>H5FD_mem_t *</em><code>type</code>)
- </td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Pmodify_filter</code></td>
- <td align="left" valign="top">
- <em>herr_t</em> <code>H5Pmodify_filter</code> (<em>hid_t</em> <code>plist</code>,
- <em>H5Z_filter_t</em> <code>filter</code>, <em>unsigned int</em> <code>flags</code>,
- <em>size_t</em> <code>cd_nelmts</code>, <em>const unsigned int</em> <code>cd_values[]</code>)
- </td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Pset_alloc_time</code></td>
- <td align="left" valign="top">
- <em>herr_t </em><code>H5Pset_alloc_time</code> (<em>hid_t</em>
- <code>plist_id</code>, <em>H5D_alloc_time_t</em> <code>alloc_time</code>)
- </td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Pset_edc_check</code></td>
- <td align="left" valign="top">
- <em>herr_t</em> <code>H5Pset_edc_check</code> (<em>hid_t</em>
- <code>plist</code>, <em>H5Z_EDC_t</em> <code>check</code>)
- </td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Pset_family_offset</code></td>
- <td align="left" valign="top">
- <em>herr_t</em> <code>H5Pset_family_offset</code> (<em>hid_t</em> <code>fapl_id</code>,
- <em>hsize_t</em> <code>offset</code>)
- </td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Pset_fapl_mpiposix</code></td>
- <td align="left" valign="top">
- <em>herr_t</em> <code>H5Pset_fapl_mpiposix</code> (<em>hid_t</em> <code>fapl_id</code>,
- <em>MPI_Comm</em> <code>comm</code>)
- </td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Pset_fclose_degree</code></td>
- <td align="left" valign="top">
- <em>herr_t</em> <code>H5Pset_fclose_degree</code>(<em>hid_t</em> <code>fapl_id</code>,
- <em>H5F_close_degree_t</em> <code>fc_degree</code>)
- <br>
- <i>(This item corrected 14 September 2004.)</i>
- </td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Pset_fill_time</code></td>
- <td align="left" valign="top">
- <em>herr_t </em><code>H5Pset_fill_time</code> (<em>hid_t</em> <code>plist_id</code>,
- <em>H5D_fill_time_t</em> <code>fill_time</code>)
- </td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Pset_filter</code></td>
- <td align="left" valign="top">
- <em>herr_t</em> <code>H5Pset_filter</code>
- (<em>hid_t</em> <code>plist</code>, <em>H5Z_filter_t</em> <code>filter</code>,
- <em>unsigned int</em> <code>flags</code>, <em>size_t</em> <code>cd_nelmts</code>,
- <em>const unsigned int</em> <code>cd_values[])</code>
- </td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Pset_filter_callback</code></td>
- <td align="left" valign="top">
- <em>herr_t</em> <code>H5Pset_filter_callback</code> (<em>hid_t</em>
- <code>plist</code>, <em>H5Z_filter_func_t</em> <code>func</code>,
- <em>void *</em><code>op_data</code>)
- </td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Pset_fletcher32</code></td>
- <td align="left" valign="top">
- <em>herr_t</em> <code>H5Pset_fletcher32</code> (<em>hid_t</em>
- <code>plist</code>)
- </td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Pset_hyper_vector_size</code> </td>
- <td align="left" valign="top">
- <em>herr_t</em> <code>H5Pset_hyper_vector_size</code> (<em>hid_t</em> <code>dxpl_id</code>,
- <em>size_t</em> <code>vector_size</code>)
- </td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Pset_multi_type</code></td>
- <td align="left" valign="top">
- <em>herr_t</em> <code>H5Pset_multi_type</code> (<em>hid_t</em> <code>fapl_id</code>,
- <em>H5FD_mem_t</em> <code>type</code>)
- </td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Pset_shuffle</code></td>
- <td align="left" valign="top">
- <em>herr_t</em> <code>H5Pset_shuffle</code> (<em>hid_t</em> <code>plist_id</code>)
- </td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Pset_szip</code></td>
- <td align="left" valign="top">
- <em>herr_t</em> <code>H5Pset_szip</code> (<em>hid_t</em> <code>plist</code>,
- <em>unsigned int</em> <code>options_mask</code>, <em>unsigned int</em>
- <code>pixels_per_block</code>)
- </td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Rget_object_type</code></td>
- <td align="left" valign="top">
- <em>int</em> <code>H5Rget_object_type</code> (<em>hid_t</em> <code>id</code>,
- <em>void *</em><code>ref</code>)
- </td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Sget_select_type</code></td>
- <td align="left" valign="top">
- <em>H5S_sel_type</em> <code>H5Sget_select_type</code> (<em>hid_t</em> <code>space_id</code>)
- </td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Tdetect_class</code></td>
- <td align="left" valign="top">
- <em>htri_t </em><code>H5Tdetect_class</code> (<em>hid_t</em> <code>dtype_id</code>,
- <em>H5T_class_t</em> <code>dtype_class</code>)
- </td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Tget_native_type</code></td>
- <td align="left" valign="top">
- <em>hid_t</em> <code>H5Tget_native_type</code> (<em>hid_t</em> <code>type_id</code>,
- <em>H5T_direction_t</em> <code>direction</code>)
- </td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Tis_variable_str</code></td>
- <td align="left" valign="top">
- <em>htri_t </em><code>H5Tis_variable_str</code> (<em>hid_t </em><code>dtype_id</code>)
- </td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Zfilter_avail</code></td>
- <td align="left" valign="top">
- <em>herr_t</em> <code>H5Zfilter_avail</code> (<em>H5Z_filter_t</em> <code>filter</code>)
- </td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Zunregister</code></td>
- <td align="left" valign="top">
- <em>herr_t</em> <code>H5Zunregister</code> (<em>H5Z_filter_t</em> <code>filter</code>)
- </td>
- </tr>
-</table>
- </dd>
- <dd> </dd>
-
-
- <dt>The following tools are new for Release 1.6.0 and are included in the
- <a href="../RM/RM_H5Front.html"><cite>HDF5 Reference Manual</cite></a>.
- <dd><code>h5diff</code>
- <dd><code>h5import</code>
- <dd><code>h5fc</code>
- <dd><code>h5c++</code>
- <dd><code>h5perf</code>
- <dd><code>h5redeploy</code>
-
-</dl>
-
-
- <h3>Deleted Functions</h3>
- The following functions are deprecated in HDF5 Release 1.6.0.
- A backward compatibility mode is provided in this release,
- enabling these functions and other Release 1.4.x compatibility
- features, but is available only when the HDF5 Library is
- configured with the flag <code>H5_WANT_H5_V1_4_COMPAT</code>.
- The backward compatibility mode is not enabled in the
- binaries distributed by NCSA.
-
- <dir>
- <table border=0>
- <tr valign="top" align="left"><td>
-
- </td><td>
-<pre>
-<code>H5Pset_hyper_cache</code>
-<code>H5Pget_hyper_cache</code>
-</pre>
- </td><td>
-
- </td><td>
-<pre>
-<code>H5Rget_object_type</code>
-</pre>
- </td><td>
-
- </td><td>
-<pre>
-
-</pre>
- </td></tr>
- </table>
- </dir>
- <p>
- The above functions will eventually be removed from the HDF5
- distribution and from the <cite>HDF5 Reference Manual</cite>.
-
-
- <h3>Functions with Changed Syntax</h3>
- The following functions have changed as noted.
- <dir>
- <dl>
- <dt>C functions:
- <dt><code>H5FDflush and VFL "flush" callbacks</code>
- <dd>An extra parameter <code>closing</code> has been added to
- these functions,
- to allow the library to indicate that the file will be closed
- following the call to "flush". Actions in the "flush" call
- that are duplicated in the VFL "close" call may be omitted by
- the VFL driver.
- <dt>* <code>H5Gget_objtype_by_idx</code>
- <dd>The function return type has changed from
- <code><em>int</em></code> to
- the enumerated type <code><em>H5G_obj_t</em></code>.
- <dt>* <code>H5Pset(get)_buffer</code>
- <dd>The <code>size</code> parameter for <code>H5Pset_buffer</code>
- has changed from type <code><em>hsize_t</em></code> to
- <code><em>size_t</em></code>.
- <dd>The <code>H5Pget_buffer</code> return type has similarly
- changed from <code><em>hsize_t</em></code> to
- <code><em>size_t</em></code>.
- <dt>* <code>H5Pset(get)_cache</code>
- <dd>The <code>rdcc_nbytes</code> parameter has changed from type
- <code><em>int</em></code> to
- <code><em>size_t</em></code>.
- <br>
- <i>(This item corrected 3 March 2004.)</i>
- <dt>* <code>H5Pset_fapl_log</code>
- <dd>The <code>verbosity</code> parameter has been removed.
- <dd>Two new parameters have been added:
- <code>flags</code> of type <code><em>unsigned</em></code> and
- <code>buf_size</code> of type <code><em>size_t</em></code>.
- <dt>* <code>H5Pset(get)_fapl_mpiposix</code>
- <dd>A <code>use_gpfs</code> parameter of type
- <code><em>hbool_t</em></code> has been added.
- <dt>* <code>H5Pset(get)_sieve_buf_size</code>
- <dd>The <code>size</code> parameter has changed from type
- <code><em>hsize_t</em></code> to
- <code><em>size_t</em></code>.
- <dt>* <code>H5Pset(get)_sym_k</code>
- <dd>The <code>lk</code> parameter has changed from type
- <code><em>int</em></code> to
- <code><em>unsigned</em></code>.
- <dt>* <code>H5Sget_select_bounds</code>
- <dd>The <code>start</code> and <code>end</code> parameters have
- changed from type <code><em>hsize_t *</em></code>
- to <code><em>hssize_t *</em></code> to better match the
- rest of the dataspace API.
- <dt>* <code>H5Zregister</code>
- <dd>This function is substantially revised in Release 1.6.0 with
- a new <code>H5Z_class_t</code> struct and
- new <i>set local</i> and <i>can apply</i> callback functions.
- <dt>
- <dt>Fortran90 functions:
- <dt><code>h5pset(get)_fapl_core_f</code>
- <dd>The <code>backing_store</code> parameter has changed from
- <code><em>INTEGER</em></code> to <code><em>LOGICAL</em></code>
- to better match the C API.
- <dt><code>h5pset(get)_preserve_f</code>
- <dd>The <code>flag</code> parameter has changed from
- <code><em>INTEGER</em></code> to <code><em>LOGICAL</em></code>
- to better match the C API.
- </dl>
- </dir>
-
- <p>
- Backward compatibility with the Release 1.4.x syntax is available
- for the functions indicated above with a leading asterisk (*).
- The backward compatibility features are available only when the
- HDF5 Library is configured with the flag
- <code>H5_WANT_H5_V1_4_COMPAT</code>,
- is not enabled in the binaries distributed by NCSA, and
- will eventually be removed from the HDF5 distribution.
-
-
- <h3>Constants with Changed Values</h3>
-
-
-</dir>
-<p>
-
-
-
-
-
-
-<a name="145">
-<h2>Release 1.4.5 versus Release 1.4.4</h2>
-</a>
-<dir>
- <h3>C Library</h3>
- <dir>
-
- <b>Added functions:</b>
- <dir>
- <table border=0>
- <tr valign=top align=left><td>
-<pre>
-herr_t H5Pset_fapl_mpiposix(hid_t fapl_id, MPI_Comm comm);
-herr_t H5Pget_fapl_mpiposix(hid_t fapl_id, MPI_Comm *comm/*out*/);
-</pre>
- </td></tr>
- </table>
- </dir>
-
- <b>Changed functions:</b>
- <dir>
- The following functions have changed behavior.
- <p>
- <table border=0>
- <tr valign=top align=left><td>
- <code>H5Pset_fapl_mpio </code><br>
- <code>H5Pget_fapl_mpio</code><br>
- <code>H5Fcreate</code><br>
- <code>H5Fopen</code><br>
- <code>H5Fclose</code>
- </td><td>
- Previously, the Communicator and Info object arguments supplied
- to <code>H5Pset_fapl_mpio</code> were stored in the property with
- its handle values.
- This meant changes to the communicator or the Info object
- after calling <code>H5Pset_fapl_mpio</code> would affect the how
- the property list functioned.
- This was also the case when <code>H5Fopen/create</code> operated.
- They just stored the handle value. This is not according to the
- MPI-2 defined behavior of how Info objects should be handled.
- (MPI-2 defines Info objects must be parsed when called.)<br>
- <code>H5Pset_fapl_mpio</code> now stores a duplicate of each of
- the communicator and Info object.<br>
- <code>H5Pget_fapl_mpio</code> now returns a duplicate of its
- stored communicator and Info object.
- It is now the responsibility of the applications to free
- those objects when done.<p>
- <code>H5Fcreate</code> and <code>H5Fopen</code> also store
- a duplicate of the communicator and Info
- object supplied by the file access property List.
- <code>H5Fclose</code> frees the duplicates.<p>
- Advice to users: User applications should release the communicator and
- Info object returned by <code>H5Pget_fapl_mpio</code> when they are
- no longer needed.
- </td></tr>
- </table>
- </dir>
-
-
-
- <b>Removed functions:</b>
- <dir>
- <table border=0>
- <tr valign=top align=left><td>
-None
-<!--
-<pre>
-List deleted function(s) here. Remove forced spaces.
-</pre>
--->
- </td><td>
-
- </td><td>
-<pre>
-<!-- List deleted function(s) here. Remove forced spaces. -->
-</pre>
- </td></tr>
- </table>
- </dir>
-
- There were no other public API changes in the C library for this release.
-
- </dir>
- <h3>Fortran90 Library</h3>
- <dir>
-
-
- The following missing Fortran functions were added:
-<br>
-<br>
- <code> h5get_libversion_f, h5check_version_f, h5garbage_collect_f, h5dont_atexit_f </code>
-<br>
- <code> h5tget_member_index_f, h5tvlen_create_f </code>
-<br>
- <code> h5dget_storage_size_f, h5dvlen_get_max_len_f , h5dwrite_vl_f, h5dread_vl_f</code>
-<br>
-<br>
- Only <code>integer, real</code> and
- <code>character</code> types are supported for VL datatypes.
-
- </dir>
-</dir>
-
-
-<!-- Document API CHANGES ONLY in this file. -->
-
-<a name="144">
-<h2>Release 1.4.4 versus Release 1.4.3</h2>
-</a>
-<dir>
- <h3>C Library</h3>
- <dir>
-
- <b>Added functions:</b>
- <dir>
- <table border=0>
- <tr valign=top align=left><td>
-<pre>
-H5Pget_small_data_block_size
-H5Pset_small_data_block_size
-H5Tget_member_index
-</pre>
- </td><td>
-
- </td><td>
-<pre>
-<!-- List added function(s) here. Remove forced spaces. -->
-</pre>
- </td></tr>
- </table>
- </dir>
-
- <b>Changed functions:</b>
- <dir>
- <table border=0>
- <tr valign=top align=left><td>
-None
-<!--
-<pre>
-List deleted function(s) here. Remove forced spaces.
-</pre>
--->
- </td><td>
-
- </td><td>
-<pre>
-<!-- List deleted function(s) here. Remove forced spaces. -->
-</pre>
- </td></tr>
- </table>
- </dir>
-
- <b>Removed functions:</b>
- <dir>
- <table border=0>
- <tr valign=top align=left><td>
-None
-<!--
-<pre>
-List deleted function(s) here. Remove forced spaces.
-</pre>
--->
- </td><td>
-
- </td><td>
-<pre>
-<!-- List deleted function(s) here. Remove forced spaces. -->
-</pre>
- </td></tr>
- </table>
- </dir>
-
- There were no other public API changes in the C library for this release.
-
- </dir>
- <h3>Fortran90 Library</h3>
- <dir>
-
- <code>h5dwrite_f, h5dread_f, h5awrite_f, h5aread_f </code>were overloaded
- with <code>dims</code> argument to be assumed size array of type <code>INTEGER(HSIZE_T).</code>
- We recommend to use the subroutines with the new type. Module subroutines
- that accept <code>dims</code> as <code>INTEGER</code> array of size <code>7</code> will be deprecated in the 1.6.0 release.
-
- </dir>
-</dir>
-
-<a name="143">
-<h2>Release 1.4.3 versus Release 1.4.2</h2>
-</a>
-<dir>
- <h3>C Library</h3>
- <dir>
-
- <b>Removed function:</b>
- <dir>
- <table border=0>
- <tr valign=top align=left><td>
-<pre>
-H5Pset_fapl_dpss </pre>
- </td><td>
-
- </td><td>
-<pre>
-<!-- new deleted functions here. Remove forced spaces. -->
-</pre>
- </td><td>
-
- </td><td>
-<pre>
-<!-- new deleted functions here. Remove forced spaces. -->
-</pre>
- </td></tr>
- </table>
- </dir>
-
- There were no other public API changes in the C library for this release.
-
- </dir>
- <h3>Fortran90 Library</h3>
- <dir>
-
- There were no changes to the public Fortran90 APIs for this release.
-
- </dir>
-</dir>
-
-<a name="142">
-<h2>Release 1.4.2 versus Release 1.4.1</h2>
-</a>
-<dir>
- <h3>C Library</h3>
- The HDF5 Release 1.4.2 C library is a "Bugfix Release";
- there are no API changes in the underlying HDF5 Library.
-
- <h3>Fortran90 Library</h3>
- The following functions in the HDF5 Release 1.4.2 Fortran90 library
- have an additional parameter, <code>dims</code>, that was not present
- in Release 1.4.1:
-
-<dir>
-<pre>
-<font color=red>h5aread_f</font>(attr_id, memtype_id, buf, dims, hdferr)
-<font color=red>h5awrite_f</font>(attr_id, memtype_id, buf, dims, hdferr)
-<font color=red>h5dread_f</font>(dset_id, mem_type_id, buf, dims, hdferr, mem_space_id, &
- file_space_id, xfer_prp)
-<font color=red>h5dwrite_f</font>(dset_id, mem_type_id, buf, dims, hdferr, mem_space_id, &
- file_space_id, xfer_prp)
-</pre>
-</dir>
-
- The <code>dims</code> parameter enables library portability
- between the UNIX and Microsoft Windows platforms.
-
-</dir>
-
-
-<a name="141">
-<h2>Release 1.4.1 versus Release 1.4.0</h2>
-</a>
-<dir>
- Release 1.4.1 is a "Tools Release"; there are no API changes in the
- underlying HDF5 Library.
-</dir>
-
-
-<a name="140">
-<h2>Release 1.4.0 versus Release 1.2.2</h2>
-</a>
-
-<dir>
-
- Several functions were added to or removed from the HDF5 Library
- in the development of Release 1.4.0.
- A few functions have been modified in minor ways.
-
- <h3>New Functions</h3>
- The following functions are new for Release 1.4.0 and are included in the
- <a href="../RM/RM_H5Front.html"><cite>HDF5 Reference Manual</cite></a>.
-
-<dir>
-<pre>
-herr_t <font color=red>H5Dvlen_get_buf_size</font> (hid_t dataset_id, hid_t type_id,
- hid_t space_id, hsize_t *size);
-herr_t <font color=red>H5Epush</font> (const char *file, const char *func,
- unsigned line, H5E_major_t maj, H5E_minor_t min,
- const char *str);
-hid_t <font color=red>H5Pget_driver</font> (hid_t plist_id);
-void *<font color=red>H5Pget_driver_info</font> (hid_t plist_id);
-herr_t <font color=red>H5Pget_dxpl_mpio</font> (hid_t dxpl_id,
- H5FD_mpio_xfer_t *xfer_mode/*out*/);
-herr_t <font color=red>H5Pget_dxpl_multi</font> (hid_t dxpl_id,
- hid_t *memb_dxpl/*out*/);
-herr_t <font color=red>H5Pget_fapl_core</font> (hid_t fapl_id, size_t *increment/*out*/,
- hbool_t *backing_store/*out*/)
-herr_t <font color=red>H5Pget_fapl_family</font> (hid_t fapl_id,
- hsize_t *memb_size/*out*/, hid_t *memb_fapl_id/*out*/);
-herr_t <font color=red>H5Pget_fapl_mpio</font> (hid_t fapl_id, MPI_Comm *comm/*out*/,
- MPI_Info *info/*out*/);
-herr_t <font color=red>H5Pget_fapl_multi</font> (hid_t fapl_id,
- H5FD_mem_t *memb_map/*out*/, hid_t *memb_fapl/*out*/,
- char **memb_name/*out*/, haddr_t *memb_addr/*out*/,
- hbool_t *relax/*out*/);
-herr_t <font color=red>H5Pget_fapl_stream</font> (hid_t fapl_id,
- H5FD_stream_fapl_t *fapl /*out*/ );
-herr_t <font color=red>H5Pget_meta_block_size</font> (hid_t fapl_id,
- hsize_t *size/*out*/);
-herr_t <font color=red>H5Pget_sieve_buf_size</font> (hid_t fapl_id,
- hsize_t *size/*out*/);
-herr_t <font color=red>H5Pset_driver</font> (hid_t plist_id, hid_t driver_id,
- const void *driver_info);
-herr_t <font color=red>H5Pset_dxpl_mpio</font> (hid_t dxpl_id,
- H5FD_mpio_xfer_t xfer_mode);
-herr_t <font color=red>H5Pset_dxpl_multi</font> (hid_t dxpl_id,
- const hid_t *memb_dxpl);
-herr_t <font color=red>H5Pset_fapl_core</font> (hid_t fapl_id, size_t increment,
- hbool_t backing_store)
-herr_t <font color=red>H5Pset_fapl_family</font> (hid_t fapl_id, hsize_t memb_size,
- hid_t memb_fapl_id);
-herr_t <font color=red>H5Pset_fapl_log</font> (hid_t fapl_id, char *logfile,
- int verbosity);
-herr_t <font color=red>H5Pset_fapl_mpio</font> (hid_t fapl_id, MPI_Comm comm,
- MPI_Info info);
-herr_t <font color=red>H5Pset_fapl_multi</font> (hid_t fapl_id,
- const H5FD_mem_t *memb_map, const hid_t *memb_fapl,
- const char **memb_name, const haddr_t *memb_addr,
- hbool_t relax);
-herr_t <font color=red>H5Pset_fapl_sec2</font> (hid_t fapl_id);
-herr_t <font color=red>H5Pset_fapl_split</font> (hid_t fapl, const char *meta_ext,
- hid_t meta_plist_id, const char *raw_ext,
- hid_t raw_plist_id);
-herr_t <font color=red>H5Pset_fapl_stdio</font> (hid_t fapl_id);
-herr_t <font color=red>H5Pset_fapl_stream</font> (hid_t fapl_id,
- H5FD_stream_fapl_t *fapl);
-herr_t <font color=red>H5Pset_meta_block_size</font>(hid_t fapl_id, hsize_t size);
-herr_t <font color=red>H5Pset_sieve_buf_size</font>(hid_t fapl_id, hsize_t size);
-hid_t <font color=red>H5Tarray_create</font> (hid_t base, int rank, const hsize_t dims[],
- const int perm[])
-int <font color=red>H5Tget_array_dims</font> (hid_t adtype_id, hsize_t *dims[], int *perm[])
-int <font color=red>H5Tget_array_ndims</font> (hid_t adtype_id)
-</pre>
-</dir>
-
-
- <p>
- The following functions are new for Release 1.4.0, but
- are intended only for use in specialized environments.
- These are also included in the
- <a href="../RM/RM_H5Front.html"><cite>HDF5 Reference Manual</cite></a>.
-
-<dir>
-<pre>
-herr_t <font color=red>H5Pget_fapl_dpss</font> (hid_t fapl_id);
-herr_t <font color=red>H5Pget_fapl_gass</font> (hid_t fapl_id, GASS_Info *info/*out*/);
-herr_t <font color=red>H5Pget_fapl_srb</font> (hid_t fapl_id, SRB_Info *info);
-herr_t <font color=red>H5Pset_fapl_dpss</font> (hid_t fapl_id);
-herr_t <font color=red>H5Pset_fapl_gass</font> (hid_t fapl_id, GASS_Info info);
-herr_t <font color=red>H5Pset_fapl_srb</font> (hid_t fapl_id, SRB_Info info);
-</pre>
-</dir>
-
-
- <p>
- The following functions are new for Release 1.4.0 but are intended
- only for driver development work, not for general use.
- They are listed in the
- <a href="../TechNotes/VFLfunc.html"><cite>List of VFL Functions</cite></a>
- document in the
- <a href="../TechNotes.html"><cite>HDF5 Technical Notes</cite></a>.
- They are described in detail only in the source code and
- do not appear in the <cite>HDF5 Reference Manual</cite>.
-
-<dir>
-<pre>
-haddr_t <font color=red>H5FDalloc</font> (H5FD_t *file, H5FD_mem_t type,
- hsize_t size);
-herr_t <font color=red>H5FDclose</font> (H5FD_t *file);
-int <font color=red>H5FDcmp</font> (const H5FD_t *f1, const H5FD_t *f2);
-herr_t <font color=red>H5FDflush</font> (H5FD_t *file);
-herr_t <font color=red>H5FDfree</font> (H5FD_t *file, H5FD_mem_t type,
- haddr_t addr, hsize_t size);
-haddr_t <font color=red>H5FDget_eoa</font> (H5FD_t *file);
-haddr_t <font color=red>H5FDget_eof</font> (H5FD_t *file);
-H5FD_t *<font color=red>H5FDopen</font> (const char *name, unsigned flags,
- hid_t fapl_id, haddr_t maxaddr);
-int <font color=red>H5FDquery</font> (const H5FD_t *f, unsigned long *flags);
-herr_t <font color=red>H5FDread</font> (H5FD_t *file, hid_t dxpl_id, haddr_t addr,
- hsize_t size, void *buf/*out*/);
-haddr_t <font color=red>H5FDrealloc</font> (H5FD_t *file, H5FD_mem_t type,
- haddr_t addr, hsize_t old_size, hsize_t new_size);
-hid_t <font color=red>H5FDregister</font> (const H5FD_class_t *cls);
-herr_t <font color=red>H5FDset_eoa</font> (H5FD_t *file, haddr_t eof);
-herr_t <font color=red>H5FDunregister</font> (hid_t driver_id);
-herr_t <font color=red>H5FDwrite</font> (H5FD_t *file, H5FD_mem_t type,
- hid_t dxpl_id, haddr_t addr, hsize_t size,
- const void *buf);
-</pre>
-</dir>
-
-
- <h3>Deleted Functions</h3>
- The following functions have been removed from the HDF5 Library
- and from the <cite>HDF5 Reference Manual</cite>.
- <dir>
- <table>
- <tr valign=top align=left><td>
-<pre>
-H5Pget_core
-H5Pget_driver
-H5Pget_family
-H5Pget_mpi
-H5Pget_sec2
-H5Pget_split
-H5Pget_stdio
-H5Pget_xfer
-</pre>
- </td><td>
-
- </td><td>
-<pre>
-H5Pset_core
-H5Pset_family
-H5Pset_mpi
-H5Pset_sec2
-H5Pset_split
-H5Pset_stdio
-H5Pset_xfer
-</pre>
- </td><td>
-
- </td><td>
-<pre>
-H5RAclose
-H5RAcreate
-H5RAopen
-H5RAread
-H5RAwrite
-H5Tget_member_dims
-H5Tinsert_array
-</pre>
- </td></tr>
- </table>
- </dir>
- Note that the entire H5RA interface, an experimental interface for
- ragged arrays, has been removed from the library.
-
-
- <h3>Functions with Changed Syntax</h3>
- The following functions have changed slightly.
- <dir>
- <dl>
- <dt><code>H5Pget_buffer</code>
- <dd>Return type has changed to <em>hsize_t</em>.
- <dt><code>H5Pset_buffer</code>
- <dd>The type of the <code>size</code> parameter has changed
- to <em>hsize_t</em>.
- <dt><code>H5Tconvert</code>
- <dd>The type of the <code>nelmts</code> parameter has changed
- to <em>hsize_t</em>.
- </dl>
- </dir>
-
- <h3>Constants with Changed Values</h3>
- The values of the constants <code>H5P_DEFAULT</code> and
- <code>H5S_ALL</code> have been changed from <code>-2</code>
- to <code>0</code>.
- These default values had to be special-cased in situations where
- they could be returned to distinguish them from error values.
-
-</dir>
-<p>
-
-<a name="14">
-<h2>Migration from Release 1.2.2 to Release 1.4.<em>x</em></h2>
-</a>
-
-<dir>
- <h3>H5Tinsert_array</h3>
- The functionality of <code>H5Tinsert_array</code> has been replaced by
- <code>H5Tarray_create</code>.
- Here is an example of changing code from <code>H5Tinsert_array</code>
- to <code>H5Tarray_create</code>.
-<pre>
-V1.2.2
-{
- struct tmp_struct {
- int a;
- float f[3];
- double d[2][4];
- };
- size_t f_dims[1]={3};
- size_t d_dims[2]={2,4};
- hid_t compound_type;
-
- compound_type=H5Tcreate(H5T_COMPOUND,sizeof(struct tmp_struct));
- H5Tinsert(compound_type,"a",HOFFSET(struct tmp_struct,a),H5T_NATIVE_INT);
- H5Tinsert_array(compound_type,"f",HOFFSET(struct tmp_struct,f),1,f_dims,NULL,H5T_NATIVE_FLOAT);
- H5Tinsert_array(compound_type,"d",HOFFSET(struct tmp_struct,d),2,d_dims,NULL,H5T_NATIVE_DOUBLE);
-}
-
-V1.4.0
-{
- struct tmp_struct {
- int a;
- float f[3];
- double d[2][4];
- };
- hsize_t f_dims[1]={3};
- hsize_t d_dims[2]={2,4};
- hid_t compound_type;
- hid_t array_type;
-
- compound_type=H5Tcreate(H5T_COMPOUND,sizeof(struct tmp_struct));
- H5Tinsert(compound_type,"a",HOFFSET(struct tmp_struct,a),H5T_NATIVE_INT);
- array_type=H5Tarray_create(H5T_NATIVE_FLOAT,1,f_dims,NULL);
- H5Tinsert(compound_type,"f",HOFFSET(struct tmp_struct,f),array_type);
- H5Tclose(array_type);
- array_type=H5Tarray_create(H5T_NATIVE_DOUBLE,2,d_dims,NULL);
- H5Tinsert(compound_type,"d",HOFFSET(struct tmp_struct,d),array_type);
- H5Tclose(array_type);
-}
-
-</pre>
-</dir>
-
-
-<a name="RELEASE-HISTORY">
-<h2>This and Prior Releases: The RELEASE.txt and HISTORY.txt Files</h2>
-</a>
-
-<dir>
- The HDF5 source code, as distributed to users and developers,
- contains two files that will be of interest to readers of this
- document. Both files are located at the top level of the
- source code tree and are duplicated here for your reference:
- <p>
- <dl>
- <dt><a href="RELEASE.txt" target="ExtWin">RELEASE.txt</a>
- <dd>Technical notes regarding the release, including
- new features and the changes since the last release,
- notes regarding new or revised utilities,
- notes regarding alternative language APIs (Fortran90, C++),
- bugs fixed since the last release,
- platforms on which the release has been tested, and
- known problems.
- This is the file commonly known as "the release notes."
- <p>
- <dt><a href="HISTORY.txt" target="ExtWin">HISTORY.txt</a>
- <dd>A release-by-release history of the HDF5 Library.
- This file is a compiled set of the release notes
- (i.e., the RELEASE.txt files) from prior releases.
- <dl>
-</dir>
<!-- #BeginLibraryItem "/ed_libs/NavBar_ADevG.lbi" -->
-<hr>
+<hr />
<center>
-<table border=0 width=98%>
-<tr><td valign=top align=left>
+<table border="0" width="98%">
+<tr><td valign="top" align="left">
<a href="../index.html">HDF5 documents and links</a> <br>
<a href="../H5.intro.html">Introduction to HDF5</a> <br>
<!--
<a href="Glossary.html">Glossary</a><br>
-->
</td>
-<td valign=top align=right>
+<td valign="top" align="right">
<a href="../UG/index.html">HDF5 User's Guide</a> <br>
<a href="../RM/RM_H5Front.html">HDF5 Reference Manual</a> <br>
<a href="../ADGuide.html">HDF5 Application Developer's Guide</a> <br>
@@ -11057,30 +516,19 @@ V1.4.0
</table>
</center>
<hr>
-<!-- #EndLibraryItem --><!-- #BeginLibraryItem "/ed_libs/Footer.lbi" -->
-<address>
-<table width="100%" border="0">
- <tr valign="top">
- <td align="left">
- <address>
- The HDF Group Help Desk: <img src="../Graphics/help.png" align=top height=16>
- <br>
- Describes HDF5 Release 1.8.13, May 2014.
- </address>
- </td><td width="5%"> </td>
- <td align="right">
- <a href="../Copyright.html">Copyright</a> by
- <a href="http://www.hdfgroup.org">The HDF Group</a>
- <br>
- and the Board of Trustees of the University of Illinois
- </td>
- </tr>
-</table>
-</address>
-<!-- #EndLibraryItem --><!-- Created: Spring 1999 -->
+<!-- #EndLibraryItem -->
+
+
+<?php include("../ed_libs/Footer2.htm"); ?>
+
+<!-- Created: Spring 1999 -->
<!-- hhmts start -->
-Last modified: 12 May 2014
+<hr />
+Last modified: 17 November 2014
<!-- hhmts end -->
+<br />
+<br />
+<br />
</body>
</html>
diff --git a/html/ADGuide/Changes_1_4-1_6.html b/html/ADGuide/Changes_1_4-1_6.html
new file mode 100755
index 0000000..7d0fd3e
--- /dev/null
+++ b/html/ADGuide/Changes_1_4-1_6.html
@@ -0,0 +1,3401 @@
+<html>
+<head>
+ <title>HDF5 Software Changes, pre-1.8.0</title>
+<link href="../ed_styles/GenElect.css" rel="stylesheet" type="text/css">
+</head>
+
+<body bgcolor="#FFFFFF">
+
+<!-- #BeginLibraryItem "/ed_libs/styles_Gen.lbi" -->
+<!--
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group. *
+ * Copyright by the Board of Trustees of the University of Illinois. *
+ * All rights reserved. *
+ * *
+ * This file is part of HDF5. The full HDF5 copyright notice, including *
+ * terms governing use, modification, and redistribution, is contained in *
+ * the files COPYING and Copyright.html. COPYING can be found at the root *
+ * of the source code distribution tree; Copyright.html can be found at the *
+ * root level of an installed copy of the electronic HDF5 document set and *
+ * is linked from the top-level documents page. It can also be found at *
+ * http://www.hdfgroup.org/HDF5/doc/Copyright.html. If you do not have *
+ * access to either file, you may request a copy from help at hdfgroup.org. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+<!-- #EndLibraryItem --><!-- #BeginLibraryItem "/ed_libs/NavBar_ADevG.lbi" -->
+<hr />
+<center>
+<table border="0" width="98%">
+<tr><td valign="top" align="left">
+ <a href="../index.html">HDF5 documents and links</a> <br>
+ <a href="../H5.intro.html">Introduction to HDF5</a> <br>
+ <!--
+ <a href="Glossary.html">Glossary</a><br>
+ -->
+</td>
+<td valign="top" align="right">
+ <a href="../UG/index.html">HDF5 User's Guide</a> <br>
+ <a href="../RM/RM_H5Front.html">HDF5 Reference Manual</a> <br>
+ <a href="../ADGuide.html">HDF5 Application Developer's Guide</a> <br>
+</td></tr>
+</table>
+</center>
+<hr />
+<!-- #EndLibraryItem -->
+
+<br />
+<center>
+<h1>HDF5 Software Changes from Release to Release
+<br />
+for HDF5 Releases 1.4.0 through 1.6.10</h1>
+</center>
+<br />
+
+
+<!-- *********************************************************** -->
+<!-- THIS FILE DOCUMENTS CHANGES IN HDF5 RELEASES PRIOR TO -->
+<!-- RELEASE HDF5 1.8.0. CHANGES IN RELEASES 1.8.0 AND LATER -->
+<!-- DOCUMENTED IN ADGuide/Changes.html. -->
+<!-- -->
+<!-- SOMETIME AFTER HDF5 RELEASE 1.10.0, WE SHOULD MOVE CHANGES -->
+<!-- FROM ALL 1.8.x RELEASES INTO ADGuide/_Changes_2-1_8_x.html -->
+<!-- AND RETAIN ONLY 1.10.X CHANGES IN ADGuide/Changes.html. -->
+<!-- *********************************************************** -->
+
+
+<p>This document covers HDF5 releases in the HDF5 Release 1.4.x
+and 1.6.x series.
+For each release, we list new features and changes in
+the existing HDF5 feature set,
+the HDF5 application programming interface (API), and
+the command-line tools distributed with the HDF5 Library.
+The intent is to note changes that application developers must be
+aware of when maintaining applications or libraries
+that must work with progressively newer versions of HDF5.
+<p>
+See “<a href="Changes.html">HDF5 Software Changes from Release
+to Release</a>” for:
+ <ul>
+ <li>Changes in the current release in the HDF5 Release 1.8 series</li>
+ <li>Further description of this document and links to related
+ documents</li>
+ </ul>
+<p>
+See “<a href="Changes_1_8_x.html">HDF5 Software Changes from Release
+to Release for HDF5 Releases 1.8.x</a>” for:
+ <ul>
+ <li>Changes in HDF5 Releases 1.4.x and 1.6.x series</li>
+ </ul>
+<p>
+
+<br />
+
+
+
+
+
+<a name="1610">
+<h2>Release 1.6.10 versus Release 1.6.9,
+ November 2009</h2>
+</a>
+
+<dir>
+
+This section lists interface-level changes and
+other user-visible changes in behavior
+in the transition from HDF5 Release 1.6.9 to Release 1.6.10.
+
+</dir>
+<dir>
+
+ <h3>Embedded HDF5 Library Settings Information</h3>
+
+ <dl>
+ <dd>Library settings are now embedded in an HDF5 executable
+ so that an “orphaned” executable can be queried
+ (via the Unix strings command, for example) to display the
+ library settings used to build it.
+ The embedded settings information is the same as that
+ normally found in the <code>libhdf5.settings</code> file.
+ <p>
+ This capability may be disabled with the use of the
+ <code>--disable-embedded-libin</code> flag during configure.
+ </dl>
+
+ <h3>Function with Changed Interface or Behavior</h3>
+
+ <dl>
+ <dd><a href="../RM/RM_H5.html#Library-VersCheck">
+ <code>H5check_version</code></a> now displays
+ embedded library information (see above)
+ if a version mismatch is detected.
+ <p>
+ The function has also been changed to suppress the
+ warning message entirely if
+ <code>$HDF5_DISABLE_VERSION_CHECK</code> is set to
+ <code>2</code> or higher.
+ </dl>
+
+</dir>
+<dir>
+
+ <h3>New C++ Member Function</h3>
+
+ <dl>
+ <dd>New C++ member functions are provided to
+ determine a dataset’s or attribute’s
+ data size in memory:
+ <p>
+ <code>
+
+ size_t DataSet::getInMemDataSize() const</code>
+ <br>
+ <code>
+
+ size_t Attribute::getInMemDataSize() const</code>
+ <p>
+ The size in each case is in bytes.
+ </dl>
+
+</dir>
+<dir>
+
+ <h3>Tool with Changed Interface or Behavior</h3>
+
+ <dl>
+ <dd><a href="../RM/Tools.html#Tools-Diff"><code>h5diff</code></a>
+ has one new option:
+ <p>
+ <code> --use-system-epsilon</code>
+ <p>
+ With this option, <code>h5diff</code> returns a difference
+ if and only if the difference between two data values
+ exceeds the system value for epsilon
+ (that is, if <code>|a-b| > <i>epsilon</i></code>).
+ <p>
+ The tool’s default behavior has also changed;
+ without this option, the tool now checks for strict equality.
+ <p>
+ This option has no short form.
+ <p>
+ </dl>
+
+</dir>
+
+
+
+<a name="169">
+<h2>Release 1.6.9 versus Release 1.6.8,
+ May 2009</h2>
+</a>
+
+<dir>
+
+This section lists API-level changes and changes in behavior
+in the transition from HDF5 Release 1.6.8 to Release 1.6.9.
+
+
+ <h3>API Compatibility Macros</h3>
+
+ To facilitate writing applications that work with
+ both the HDF5 Release 1.6 series and the 1.8 series,
+ API compatibility macros analogous to those in 1.8
+ have been defined. These macros map directly to the
+ relevant functions and typedefs. Note that only the
+ 1.6-style macros are supported in this branch.
+ <p>
+ Any program that is written using these macros
+ exculsively will work with both the 1.6 and 1.8
+ series HDF5 Libraries. The program will work without
+ having to use any special flags or definitions, as
+ long as the 1.8 library was compiled with support
+ for deprecated symbols, which is the default.
+ <p>
+ Following is a list of macros and the
+ symbols they alias:
+ <p>
+ <dl><dd><table width="90%">
+ <tr>
+ <td valign="top" align="left" width="20%">
+ <strong>Macro</strong></td>
+ <td valign="top" align="left">
+ <strong>Symbol</strong></td>
+ </tr>
+ <tr>
+ <td valign="top"><code>H5Acreate1</code></td>
+ <td valign="top"><code>H5Acreate</code></td>
+ </tr>
+ <tr>
+ <td valign="top"><code>H5Aiterate1</code></td>
+ <td valign="top"><code>H5Aiterate</code></td>
+ </tr>
+ <tr>
+ <td valign="top"><code>H5A_operator1_t</code></td>
+ <td valign="top"><code>H5A_operator_t</code></td>
+ </tr>
+ <tr>
+ <td valign="top"><code>H5Dcreate1</code></td>
+ <td valign="top"><code>H5Dcreate</code></td>
+ </tr>
+ <tr>
+ <td valign="top"><code>H5Dopen1</code></td>
+ <td valign="top"><code>H5Dopen</code></td>
+ </tr>
+ <tr>
+ <td valign="top"><code>H5Eclear1</code></td>
+ <td valign="top"><code>H5Eclear</code></td>
+ </tr>
+ <tr>
+ <td valign="top"><code>H5Eget_auto1</code></td>
+ <td valign="top"><code>H5Eget_auto</code></td>
+ </tr>
+ <tr>
+ <td valign="top"><code>H5Eprint1</code></td>
+ <td valign="top"><code>H5Eprint</code></td>
+ </tr>
+ <tr>
+ <td valign="top"><code>H5Epush1</code></td>
+ <td valign="top"><code>H5Epush</code></td>
+ </tr>
+ <tr>
+ <td valign="top"><code>H5Eset_auto1</code></td>
+ <td valign="top"><code>H5Eset_auto</code></td>
+ </tr>
+ <tr>
+ <td valign="top"><code>H5Ewalk1</code></td>
+ <td valign="top"><code>H5Ewalk</code></td>
+ </tr>
+ <tr>
+ <td valign="top"><code>H5E_walk1_t</code></td>
+ <td valign="top"><code>H5E_walk_t</code></td>
+ </tr>
+ <tr>
+ <td valign="top"><code>H5E_error1_t</code></td>
+ <td valign="top"><code>H5E_error_t</code></td>
+ </tr>
+ <tr>
+ <td valign="top"><code>H5Gcreate1</code></td>
+ <td valign="top"><code>H5Gcreate</code></td>
+ </tr>
+ <tr>
+ <td valign="top"><code>H5Gopen1</code></td>
+ <td valign="top"><code>H5Gopen</code></td>
+ </tr>
+ <tr>
+ <td valign="top"><code>H5Pget_filter1</code></td>
+ <td valign="top"><code>H5Pget_filter</code></td>
+ </tr>
+ <tr>
+ <td valign="top"><code>H5Pget_filter_by_id1</code></td>
+ <td valign="top"><code>H5Pget_filter_by_id</code></td>
+ </tr>
+ <tr>
+ <td valign="top"><code>H5Pinsert1</code></td>
+ <td valign="top"><code>H5Pinsert</code></td>
+ </tr>
+ <tr>
+ <td valign="top"><code>H5Pregister1</code></td>
+ <td valign="top"><code>H5Pregister</code></td>
+ </tr>
+ <tr>
+ <td valign="top"><code>H5Rget_obj_type1</code></td>
+ <td valign="top"><code>H5Rget_obj_type</code></td>
+ </tr>
+ <tr>
+ <td valign="top"><code>H5Tarray_create1</code></td>
+ <td valign="top"><code>H5Tarray_create</code></td>
+ </tr>
+ <tr>
+ <td valign="top"><code>H5Tcommit1</code></td>
+ <td valign="top"><code>H5Tcommit</code></td>
+ </tr>
+ <tr>
+ <td valign="top"><code>H5Tget_array_dims1</code></td>
+ <td valign="top"><code>H5Tget_array_dims</code></td>
+ </tr>
+ <tr>
+ <td valign="top"><code>H5Topen1</code></td>
+ <td valign="top"><code>H5Topen</code></td>
+ </tr>
+ <tr>
+ <td valign="top"><code>H5E_auto1_t</code></td>
+ <td valign="top"><code>H5E_auto_t</code></td>
+ </tr>
+ <tr>
+ <td valign="top"><code>H5Z_class1_t</code></td>
+ <td valign="top"><code>H5Z_class_t</code></td>
+ </tr>
+ </code>
+ </table></dl>
+ <p>
+ Note that for the 1.6 series, the numbered symbols are macros,
+ while in the 1.8 series, the non-numbered symbols are
+ macros. This was done because there is no need to
+ switch between different API versions in the 1.6 series.
+ <p>
+ <code>H5Z_class1_t</code> was introduced in Release 1.6.9 while all the
+ others were introduced in Release 1.6.8. For more information see
+ <cite><a href="http://www.hdfgroup.org/HDF5/doc/RM/APICompatMacros.html">API
+ Compatibility Macros</a></cite>, an HDF5 Release 1.8-series document.
+ <p>
+
+
+</dir>
+<dir>
+
+ <h3>Tools with Changed Interface or Behavior</h3>
+
+ <dl>
+ <dt><a href="../RM/Tools.html#Tools-Diff"><code>h5diff</code></a>
+ <dd>The default behavior of <code>h5diff</code> is now
+ to detect and compare NaNs.
+ Use the <code>-N</code> or <code>--nan</code>
+ option (below) to turn this behavior off and
+ avoid the performance penalty that NaN detection
+ and comparison entalis.
+ (NaN detection and comparison became the default in
+ in HDF5 Release 1.6.8.)
+ <p>
+ <dd>This tool has two new options:
+ <p>
+ <code>-c</code>, <code>--compare</code>
+ <code> </code>
+ Lists objects that are not comparable.
+
+ <p>
+ <code>-N</code>, <code>--nan</code>
+ <code> </code>
+ Avoids NaNs detection.
+ <p>
+
+ <dt><a href="../RM/Tools.html#Tools-Dump"><code>h5dump</code></a>
+ <dd><code>h5dump</code> now correctly specifies an XML DTD
+ or a schema URL.
+ <p>
+ <dd><code>h5dump</code> binary output now defaults to
+ <code>NATIVE</code>.
+ <p>
+ <dd>The new <code>-b</code>, <code>--binary</code> option
+ can be used to specify alternate binary formats.
+ <p>
+
+ <dt><a href="../RM/Tools.html#Tools-Repack"><code>h5repack</code></a>
+ <dd>When a user does not specify a chunk size,
+ <code>h5repack</code> now defines the default chunk size
+ to be the same same as the size of the hyperslab used
+ to read the chunks.
+ <p>
+ </dl>
+
+</dir>
+
+<!--
+<dir>
+
+
+ <h3>Deprecated Functions</h3>
+
+ The following functions are deprecated as of this release:
+ <pre> <a href="../RM/RM_H5P.html#Property-SetPreserve">H5Pset_preserve</a>
+ <a href="../RM/RM_H5P.html#Property-GetPreserve">H5Pget_preserve</a> </pre>
+ <p>
+ The original role of these functions is now
+ part of the core HDF5 Library functionality.
+ <p>
+
+
+ <h3>Changed File Installation</h3>
+ The file <code>libhdf5_fortran.settings</code> is no longer
+ installed with the HDF5 Library;
+ the original content of that file is now included in
+ <code>libhdf5.settings</code>.
+
+</dir>
+-->
+
+
+
+<a name="168">
+<h2>Release 1.6.8 versus Release 1.6.7,
+ November 2008</h2>
+</a>
+
+<dir>
+
+This section lists API-level changes and changes in behavior
+in the transition from HDF5 Release 1.6.7 to Release 1.6.8.
+
+
+ <h3>Functions with Changed Syntax</h3>
+
+ The following function syntaxes have changed;
+ the affected return values and parameter are noted as
+ <font color=red><u>underscored red text</u></font>.
+ <p>
+ <dl>
+ <dt><u>C function:</u>
+ <dt><a href="../RM/RM_H5F.html#File-GetObjCount">
+ <code>H5Fget_obj_count</code></a>
+ <dd><code>
+ <font color=red><u>
+ ssize_t</u></font> H5Fget_obj_count(
+ <em>hid_t </em><code>file_id</code>,
+ <em>unsigned int</em> <code>types</code>
+ )
+ </code>
+ <p>
+ <dt><a href="../RM/RM_H5F.html#File-GetObjIDs">
+ <code>H5Fget_obj_ids</code></a>
+ <dd><code>
+ <font color=red><u>
+ ssize_t</u></font> H5Fget_obj_ids(
+ <em>hid_t </em><code>file_id</code>,
+ <em>unsigned int</em> <code>types</code>,
+ <br>
+
+ <font color=red><u>
+ <em>size_t</em> <code>max_objs</code></u></font>,
+ <em>hid_t *</em><code>obj_id_list</code>
+ )
+ </code>
+ </dl>
+ <p>
+
+</dir>
+<dir>
+
+ <h3>Tools with Changed Interface or Behavior</h3>
+
+ <dl>
+ <dt><a href="../RM/Tools.html#Tools-Repack"><code>h5repack</code></a>
+ and <a href="../RM/Tools.html#Tools-Diff"><code>h5diff</code></a>
+ <dd>The standard command-line syntax of both tools
+ has been changed to parallel that of <code>h5dump</code>.
+ The new syntax of each is as follows:
+ <p>
+ <code>
+ h5repack [<i>OPTIONS</i>] <i>file1 file2</i>
+ </code>
+ <p>
+ <code>
+ h5diff [<i>OPTIONS</i>] <i>file1 file2</i>
+ [<i>object1</i> [<i>object2</i>]]
+ </code>
+ <p>
+ In each case,
+ the old syntax remains available (though undocumented)
+ to avoid breaking existing scripts.
+ <p>
+ </dl>
+
+</dir>
+<dir>
+
+ <dl>
+ <dt><a href="../RM/Tools.html#Tools-Diff"><code>h5diff</code></a>
+ <dd><code>h5diff</code> now returns <code>1</code>
+ if the files differ in structure,
+ i.e., if the file graphs differ by any object.
+ <p>
+ The tool’s error return code has been changed
+ to <code>2</code>.
+ <p>
+
+ <dt><a href="../RM/Tools.html#Tools-Repack"><code>h5repack</code></a>
+ <dd>The following new options control the addition of
+ user block data to an existing HDF5 file:
+ <dir>
+ <table>
+ <tr valign=top><td>
+ <code>-u <em>U</em></code>
+ <br>
+ <code>--ublock=<em>U</em></code>
+ </td><td> </td><td>
+ Specifies the name of the file containing the
+ user block data to be added.
+ </td></tr>
+ <tr valign=top><td>
+ <br>
+ <code>-b <em>B</em></code>
+ <br>
+ <code>--block=<em>B</em></code>
+ </td><td> </td><td>
+ <br>
+ Specifies the size of the block to be added.
+ </td></tr>
+ </table>
+ </dir>
+ <p>
+
+ <dd>The following new options set parameters
+ governing the tool’s use of
+ <code>H5Pset_alignment</code>:
+ <dir>
+ <table>
+ <tr valign=top><td>
+ <code>-t <em>T</em></code>
+ <br>
+ <code>--threshold=<em>T</em></code>
+ </td><td> </td><td>
+ Specifies the threshold value for
+ <code>H5Pset_alignment</code>.
+ </td></tr>
+ <tr valign=top><td>
+ <br>
+ <code>-a <em>A</em></code>
+ <br>
+ <code>--alignment=<em>A</em></code>
+ </td><td> </td><td>
+ <br>
+ Specifies the alignment value for
+ <code>H5Pset_alignment</code>.
+ </td></tr>
+ </table>
+ </dir>
+ <p>
+
+ <dd><code>h5repack</code> now supports multiple instances of
+ the <code>'-f'</code> or <code>'--filter'</code> option,
+ allowing the use of multiple I/O filters with an object.
+ <p>
+ <dd>With no change in the command-line syntax,
+ <code>h5repack</code> now retains an existing userblock
+ when repacking an HDF5 file.
+ <p>
+
+ <dt><a href="../RM/Tools.html#Tools-Import"><code>h5import</code></a>
+ <dd>The floating point format flag <code>TEXTFPE</code>,
+ for scientific notation, has been deprecated.
+ The flag <code>TEXTFP</code>, which accepts
+ scientific notation, should be used instead.
+ <p>
+
+ <dd><code>h5import</code> now imports string data
+ with the <code>STR</code> keyword
+ in the <code>INPUT-CLASS</code> configuration field.
+ <p>
+
+ <dt><a href="../RM/Tools.html#Tools-Dump"><code>h5dump</code></a>
+ <dd>The new <code>'-m <i>T</i>'</code> or
+ <code>'--format <i>T</i>'</code> option
+ enables a user-defined formatting string
+ for printing floating-point numbers.
+ <p>
+ <dd>With no change in the command-line syntax,
+ <code>h5dump</code> now prints a compression ratio
+ when compression filters are in use.
+
+ </dl>
+
+</dir>
+<dir>
+
+
+ <h3>Deprecated Functions</h3>
+
+ The following functions are deprecated as of this release:
+ <pre> <a href="../RM/RM_H5P.html#Property-SetPreserve">H5Pset_preserve</a>
+ <a href="../RM/RM_H5P.html#Property-GetPreserve">H5Pget_preserve</a> </pre>
+ <p>
+ The original role of these functions is now
+ part of the core HDF5 Library functionality.
+ <p>
+
+
+ <h3>Changed File Installation</h3>
+ The file <code>libhdf5_fortran.settings</code> is no longer
+ installed with the HDF5 Library;
+ the original content of that file is now included in
+ <code>libhdf5.settings</code>.
+
+
+
+</dir>
+
+
+<a name="167">
+<h2>Release 1.6.7 versus Release 1.6.6</h2>
+</a>
+
+<dir>
+
+This section lists the API-level changes that have been made in the
+transition from the HDF5 Release 1.6.6 to Release 1.6.7.
+As this is primarily a bug-fix release,
+the only interface changes are one changed function signature and
+the changes related to the removal of the
+stream I/O driver, as outlined below.
+
+
+ <h3>Function with Changed Syntax</h3>
+
+ The following function syntax has changed;
+ the affected parameter is noted in <font color=red>red</font>.
+ <p>
+ <dl>
+ <dt><u>C function:</u>
+ <dt><code>H5Sselect_elements</code>
+ <dd><code>
+ herr_t H5Sselect_elements(
+ <em>hid_t </em><code>space_id</code>,
+ <em>H5S_seloper_t</em> <code>op</code>,
+ <br>
+
+ <em>size_t</em> <code>num_elements</code>,
+ <font color=red>
+ <em>const hsize_t *</em><code>coord</code>
+ </font>
+ )
+ </code>
+ </dl>
+ <p>
+ <cite>(This syntax change was listed on 10 September 2008,
+ several months after Release 1.6.7.)</cite>
+
+
+ <h3>Stream I/O Driver Removed</h3>
+
+ The stream I/O driver, <code>H5FD_STREAM</code>, has been
+ removd from and is no longer distributed with the HDF5 Library.
+ The following APIs have therefore been removed from this release.
+ <br>
+ <code>H5Pset_fapl_stream</code>
+ <br>
+ <code>H5Pget_fapl_stream</code>
+ <br>
+ The stream driver <small>ENUM</small> value <code>H5FD_STREAM</code>
+ has also been removed.
+
+ <p>
+ While the stream driver is no longer distributed by The HDF Group,
+ it will be made available as a source code distribution from
+ <a href="http://hdf5-addons.origo.ethz.ch/">
+ <code>http://hdf5-addons.origo.ethz.ch/</code></a>.
+ An integration mechanism will be developed and
+ instructions for using the driver with HDF5
+ will be posted on that site.
+
+</dir>
+
+<a name="166">
+<h2>Release 1.6.6 versus Release 1.6.5</h2>
+</a>
+
+<dir>
+
+This section lists the API-level changes that have been made in the
+transition from the HDF5 Release 1.6.5 to Release 1.6.6.
+<p>
+
+Release 1.6.6 is primarily a bug-fix release and includes
+no changes in the syntax or intended behavior of
+the library’s public interfaces.
+
+There are, however, two changes in tool interfaces.
+
+<!--
+ <h3>New Functions and Tools</h3>
+ <dl>
+ <dt>C functions:
+ <dd>None.
+ <dd>The following C functions are new for Release 1.6.6 and
+ are documented in the
+ <a href="../RM/RM_H5Front.html"><cite>HDF5 Reference Manual</cite></a>.
+
+ <table border="0">
+ <tr>
+ <td align="left" valign="top"><code>FUNCTION NAME</code>
+ </td>
+ <td align="left" valign="top"><em>FUNCTION</em> <code>SYNTAX</code>
+ <br>
+ See <a href="../RM/RM_H5[FUNCTION ENTRY URL]">entry</a>.</td>
+ </tr>
+ </table>
+
+
+ <dd>
+ <dt>Fortran subroutines:
+ <dd>None.
+
+ <dd>The following Fortran90 subroutines are new for Release 1.6.6
+ and are documented in the
+ <a href="../RM/RM_H5Front.html"><cite>HDF5 Reference Manual</cite></a>.
+ <table border="0">
+ <tr>
+ <td align="left" valign="top">Corresponding to the
+ new C functions listed above:<br>
+ <code>FORTRAN_SUBROUTINE_NAME_f</code><br>
+ </td>
+ <td align="left" valign="top">
+ </td>
+ </tr>
+ </table>
+
+
+ <dd>
+ <dt>Tools:
+ <dd>None.
+
+ <dd>The following tools are new for Release 1.6.6 and are
+ documented on the <a href="../RM/Tools.html">Tools page</a> of the
+ <a href="../RM/RM_H5Front.html"><cite>HDF5 Reference Manual</cite></a>.
+ <dd><code>h5repack</code> description...
+
+ <dd><code>h5repack</code> description...
+
+ </dl>
+
+
+ <h3>Deleted Functions</h3>
+
+ None.
+
+ The following functions are deprecated in HDF5 Release X.X.x.
+ A backward compatibility mode is provided in this release,
+ enabling these functions and other Release 1.4.x compatibility
+ features, but is available only when the HDF5 Library is
+ configured with the flag <code>H5_WANT_H5_V1_4_COMPAT</code>.
+ The backward compatibility mode is not enabled in the
+ binaries distributed by NCSA.
+
+ <dir>
+ <table border=0>
+ <tr valign="top" align="left"><td>
+
+ </td><td>
+<pre>
+<code>function</code>
+</pre>
+ </td><td>
+
+ </td><td>
+<pre>
+<code>function</code>
+</pre>
+ </td><td>
+
+ </td><td>
+<pre>
+
+</pre>
+ </td></tr>
+ </table>
+ </dir>
+ <p>
+ The above functions will eventually be removed from the HDF5
+ distribution and from the <cite>HDF5 Reference Manual</cite>.
+
+
+ <h3>Functions with Changed Syntax</h3>
+
+ None.
+
+
+ The following functions have changed as noted.
+
+ <dl>
+ <dt>C functions:
+ <dt><code>H5function?</code>
+ <dd>Change....
+
+ <dd>
+ <dt>Fortran90 subroutines:
+ <dt><code>h5subroutine_f?</code>
+ <dd>Change...
+ </dl>
+
+
+ <h3>Constants with Changed Values</h3>
+
+ None.
+-->
+
+
+ <h3>Tools with Changed Options and/or Behavior</h3>
+
+
+ <dl>
+ <dt>The following tools have changed in this release;
+ these changes are documented on the
+ <a href="../RM/Tools.html">Tools page</a> of the
+ <a href="../RM/RM_H5Front.html"><cite>HDF5 Reference Manual</cite></a>.
+ <br>
+ <dd><code>h5repack</code>:
+ <br>
+ A new <code>-n</code> option allows the user to specify
+ that a new file created by <code>h5repack</code> will use
+ native datatypes.
+ The default behavior is to use the original file datatypes.
+ <table>
+ <tr valign=top>
+ <td> </td>
+ <td><code>-n</code> </td>
+ <td>Use native HDF5 datatypes when repacking.
+ <br>
+ (Default behavior is to use the original
+ file datatypes.)
+ </td></tr>
+ </table>
+ <em>Note that the default behavior of this tool
+ has changed;
+ prior to Release 1.6.6, </em><code>h5repack</code>
+ <em> generated files only with native datatypes.</em>
+
+
+ <p>
+ <dd><code>h5dump</code>:
+ <br>
+ This tool includes a new <code>-b</code> option
+ for binary output.
+ <table>
+ <tr valign=top>
+ <td> </td>
+ <td><code>-b <em>B</em></code> or
+ <br>
+ <code>--binary=<em>B</em> </code></td>
+ <td valign="top">Output dataset to a binary file
+ using the datatype specified by
+ <code><em>B</em></code>.
+ <br>
+ <code><em>B</em></code> must have one of the
+ following values:
+ <br>
+
+ <code>LE </code>
+ Little-endian
+ <br>
+
+ <code>BE </code>
+ Big-endian
+ <br>
+
+ <code>MEMORY </code>
+ Memory datatype
+ <br>
+
+ <code>FILE </code>
+ File datatype
+ <br>
+ Recommended usage is with the <code>-d</code> and
+ <code>-o</code> options.
+ </td>
+ </tr>
+ </table>
+
+
+ </dl>
+ </dl>
+ </dir>
+<p>
+
+
+
+
+<a name="165">
+<h2>Release 1.6.5 versus Release 1.6.4</h2>
+</a>
+
+<dir>
+
+This section lists the API-level changes that have been made in the
+transition from the HDF5 Release 1.6.4 to Release 1.6.5.
+
+
+ <h3>New Functions and Tools</h3>
+ <dl>
+
+ <dt>C functions and
+ <dt>Fortran subroutines:
+ <dd>HDF5 Release 1.6.5 is primarily a maintenance release,
+ focusing on bugfixes, optimization and portability;
+ there are no new C APIs or Fortran subroutines.
+
+
+<!--
+ <dd>
+ <dd>The following C functions are new for Release 1.6.4 and
+ are documented in the
+ <a href="../RM/RM_H5Front.html"><cite>HDF5 Reference Manual</cite></a>.
+
+ <table border="0">
+ <tr>
+ <td align="left" valign="top"><code>function</code>
+ </td>
+ <td align="left" valign="top">syntax<br>
+ See <a href="../RM/RM_H5__.html#__">entry</a>.</td>
+ </tr>
+
+ </table>
+-->
+
+ <dd>
+ <dt>High Level C APIs:
+ <dd>The High Level C APIs (HL), including the HDF5 Image,
+ HDF5 Table, and HDF5 Lite interfaces
+ (H5IM, H5TB, and H5LT, respectively),
+ have been distributed with the main HDF5 source code distribution
+ since Release 1.6.4 and are documented in
+ <a href="http://www.hdfgroup.org/HDF5/hdf5_hl/doc/index.html">
+ <cite>HDF5: High Level APIs</cite></a>.
+ (<i>Note:</i> In release 1.8 and later, the HL APIs are
+ documented in the <cite>HDF5 Reference Manual</cite>.)
+
+
+ <dd>
+ <dt>C++ wrappers:
+ <dd><code>void PropList::copyProp(PropList& dest, const char* name) const</code>
+ <dd><code>void PropList::copyProp(PropList& dest, const string& name) const</code>
+ <dd><code>string CommonFG::getComment(const string& name) const</code>
+ <dd><code>void CommonFG::removeComment(const char* name) const</code>
+ <dd><code>void CommonFG::removeComment(const string& name) const</code>
+ <dd><code>hsize_t Attribute::getStorageSize() const</code>
+ <dd><code>void Attribute::close()</code>
+ <dd><code>void DataSet::close()</code>
+ <dd><code>void DataSpace::close()</code>
+ <dd><code>void DataType::close()</code>
+ <dd><code>void H5File::close()</code>
+ <dd><code>void Group::close()</code>
+ <dd><code>void PropList::close()</code>
+ <dd><code>H5T_order_t AtomType::getOrder() const</code>
+ <dd><code>void H5Object::renameAttr(const char* oldname, const char* newname) const</code>
+ <dd><code>void H5Object::renameAttr(const string& oldname, const string& newname) const</code>
+ <dd><code>string CommonFG::getObjnameByIdx(hsize_t idx) const</code>
+ <dd><code>ArrayType AbstractDs::getArrayType() const</code>
+ <dd><code>VarLenType AbstractDs::getVarLenType() const</code>
+ <dd><code>ArrayType CommonFG::openArrayType(const char* name) const</code>
+ <dd><code>ArrayType CommonFG::openArrayType(const string& name) const</code>
+ <dd><code>VarLenType CommonFG::openVarLenType(const char* name) const</code>
+ <dd><code>VarLenType CommonFG::openVarLenType(const string& name) const</code>
+ <dd><code>ArrayType CompType::getMemberArrayType(unsigned member_num) const</code>
+ <dd><code>VarLenType CompType::getMemberVarLenType(unsigned member_num) const</code>
+
+
+ <dd>
+<!--
+ <dt>Tools:
+ <dd>Any?
+-->
+
+
+ </dl>
+
+
+<!--
+ <h3>Deprecated and Deleted Functions</h3>
+
+ The following functions have been removed in this release.
+
+-->
+ <!--
+ None.
+ -->
+<!--
+ <dl>
+ <dt><u>C functions:</u>
+ <dt><code>H5function_name?</code>
+
+
+ <p>
+ <dt><u>Fortran90 subroutines:</u>
+ <dt><code>h5subroutine_f?</code>
+
+
+ <p>
+ <dt><u>C++ wrappers:</u>
+ <dt><code>C++_wrapper_name?</code>
+
+
+ </dl>
+-->
+
+
+<!--
+ The following functions are deprecated in this HDF5 release.
+ A backward compatibility mode is provided
+ enabling these functions and other Release 1.4.x compatibility
+ features, but is available only when the HDF5 Library is
+ configured with the flag <code>H5_WANT_H5_V1_4_COMPAT</code>.
+ The backward compatibility mode is not enabled in the
+ binaries distributed by NCSA.
+
+ <dir>
+ <table border=0>
+ <tr valign="top" align="left"><td>
+
+ </td><td>
+<pre>
+<code>function</code>
+</pre>
+ </td><td>
+
+ </td><td>
+<pre>
+<code>function</code>
+</pre>
+ </td><td>
+
+ </td><td>
+<pre>
+
+</pre>
+ </td></tr>
+ </table>
+ </dir>
+ <p>
+ The above functions will eventually be removed from the HDF5
+ distribution and from the <cite>HDF5 Reference Manual</cite>.
+-->
+
+
+
+ <h3>Functions with New or Changed Symbols or Fixed Values</h3>
+
+ Symbols and preset values associated with the following functions
+ have changed as noted.
+ <p>
+
+ <dl>
+ <dt><u>C functions:</u>
+ <dt><code>H5Fget_obj_count</code>
+ <dd><code>H5F_OBJ_LOCAL</code> has been
+ added as a qualifier on the types of objects to be counted.
+ <code>H5F_OBJ_LOCAL</code> restricts the search
+ to objects opened through current file identifier.
+
+ <dt><code>H5Tset_tag</code>
+ <dd>The <code>H5T_OPAQUE_TAG_MAX</code>
+ macro constant,
+ specifying the maximum size of an opaque datatype tag,
+ was added in <code>H5Tpublic.h</code>.
+
+
+<!--
+ <dt><code>H5function_name?</code>
+ <dd>Change...
+-->
+
+
+<!--
+ <p>
+ <dt><u>Fortran90 subroutines:</u>
+ <dt><code>h5subroutine_f?</code>
+ <dd>Change...
+
+
+ <p>
+ <dt><u>C++ wrappers:</u>
+ <dt><code>C++_wrapper_name?</code>
+ <dd>Change...
+-->
+
+
+ </dl>
+
+
+ <h3>Functions with Changed Syntax</h3>
+
+ The following functions have changed as noted.
+ Changed items are indicated in <font color="red">red</font>.
+ <p>
+
+<!--
+ <dl>
+ <dt><u>C functions:</u>
+ <dt><code>H5function_name?</code>
+ <dd>Change...
+
+
+ <p>
+ <dt><u>Fortran90 subroutines:</u>
+ <dt><code>h5subroutine_f?</code>
+ <dd>Change...
+-->
+
+
+ <p>
+ <dt><u>C++ wrappers:</u>
+ <!--
+ <dt><code>C++_wrapper_name?</code>
+ <dd>Change....
+ -->
+ <dt>In all cases below, a parameter datatype has changed from
+ <code>int</code> to <code>unsigned</code>.
+
+ <dd><code>string CompType::getMemberName(
+ <font color=red>unsigned</font> member_num ) const</code>
+ <dd><code>size_t CompType::getMemberOffset(
+ <font color=red>unsigned</font> member_num ) const</code>
+ <dd><code>int CompType::getMemberDims(
+ <font color=red>unsigned</font> member_num, size_t* dims,
+ int* perm ) const</code>
+ <dd><code>H5T_class_t CompType::getMemberClass(
+ <font color=red>unsigned</font> member_num ) const</code>
+ <dd><code>hid_t CompType::p_get_member_type(
+ <font color=red>unsigned</font> member_num) const</code>
+ <dd><code>DataType CompType::getMemberDataType(
+ <font color=red>unsigned</font> member_num ) const</code>
+ <dd><code>ArrayType CompType::getMemberArrayType(
+ <font color=red>unsigned</font> member_num ) const</code>
+ <dd><code>CompType CompType::getMemberCompType(
+ <font color=red>unsigned</font> member_num ) const</code>
+ <dd><code>EnumType CompType::getMemberEnumType(
+ <font color=red>unsigned</font> member_num ) const</code>
+ <dd><code>IntType CompType::getMemberIntType(
+ <font color=red>unsigned</font> member_num ) const</code>
+ <dd><code>FloatType CompType::getMemberFloatType(
+ <font color=red>unsigned</font> member_num ) const</code>
+ <dd><code>StrType CompType::getMemberStrType(
+ <font color=red>unsigned</font> member_num ) const</code>
+ <dd><code>VarLenType CompType::getMemberVarLenType(
+ <font color=red>unsigned</font> member_num ) const</code>
+
+ </dl>
+
+
+<!--
+ <h3>Deleted Constants</h3>
+
+ The following constants have been removed from the HDF5 Library:
+ <ul>
+ <li>Any?
+ <ul>
+ <li><code>Specifics?</code>
+ </ul>
+ </ul>
+
+
+ <h3>Constants with Changed Values</h3>
+
+ The following constants have been changed in this release:
+ <ul>
+ <li>Any?
+ <ul>
+ <li><code>Specifics?</code>
+ </ul>
+ </ul>
+
+
+ <h3>Changed Library Sturctures</h3>
+
+ The following library structures have changed and are now
+ defined as follows:
+
+ <p>
+ <dl>
+ <dt>C API:
+ <dt><code>struct_name</code>
+
+ <ul>
+ <li>new definition<br>
+ </ul>
+ <p>
+-->
+
+
+ <h3>Changed Library Configuration</h3>
+ <ul>
+ <li>The path to the tr utility used by configure can be specififed
+ by setting the TR variable.
+ <li>The pdb2hdf tool has been deleted and PDB is no longer detected
+ by configure.
+ </ul>
+
+
+ </dir>
+<p>
+
+
+
+<a name="164">
+<h2>Release 1.6.4 versus Release 1.6.3</h2>
+</a>
+
+<dir>
+
+This section lists the API-level changes that have been made in the
+transition from the HDF5 Release 1.6.3 to Release 1.6.4.
+
+
+ <h3>New Functions and Tools</h3>
+ <dl>
+
+<!--
+ <dt>C functions:
+-->
+ <dt>C functions and
+ <dt>Fortran subroutines:
+ <dd>HDF5 Release 1.6.4 "Bugfix Release";
+ there are no new C APIs or Fortran subroutines.
+<!--
+ <dd>The following C functions are new for Release 1.6.4 and
+ are documented in the
+ <a href="../RM/RM_H5Front.html"><cite>HDF5 Reference Manual</cite></a>.
+
+ <table border="0">
+ <tr>
+ <td align="left" valign="top"><code>function</code>
+ </td>
+ <td align="left" valign="top">syntax<br>
+ See <a href="../RM/RM_H5__.html#__">entry</a>.</td>
+ </tr>
+
+ </table>
+-->
+
+ <dd>
+ <dt>High Level C APIs:
+ <dd>The High Level C APIs (HL), including the HDF5 Image,
+ HDF5 Table, and HDF5 Lite interfaces
+ (H5IM, H5TB, and H5LT, respectively) ,
+ have been brought into the main HDF5 source code distribution.
+ A link to the HL documentation appears on the opening
+ page of the HDF5 document set or can be accessed directly at
+ <a href="http://www.hdfgroup.org/HDF5/hdf5_hl/doc/RM_hdf5hl.html">
+ <code>http://www.hdfgroup.org/HDF5/hdf5_hl/doc/RM_hdf5hl.html</code></a>
+
+ <br><br>
+ The HL library, <code>libhdf5_hl.a(so)</code>,
+ is built and installed by default but can be disabled with
+ the <code>--disable-hl</code> configure flag.
+
+<!--
+ <dd>
+ <dt>Fortran subroutines:
+ <dd>The following Fortran90 subroutines are new for Release 1.6.3
+ and are documented in the
+ <a href="../RM/RM_H5Front.html"><cite>HDF5 Reference
+ Manual</cite></a>.
+ <table border="0">
+ <tr>
+ <td align="left" valign="top" colspan="2">New Fortran90
+ subroutines corresponding to the new C functions
+ listed above:<br>
+ </td>
+ </tr><tr>
+ <td align="left" valign="top">
+ <code>function</code><br>
+ <code>function</code>
+ </td>
+ <td align="left" valign="top">
+ <code>function</code>
+ </td>
+ </tr>
+ </table>
+
+ <table border="0">
+ <tr>
+ <td align="left" valign="top">New Fortran90 subroutines
+ corresponding to C functions from prior releases:<br>
+ None<br>
+--><!--
+ <code>new_fortran_here</code><br>
+ <code>last_new_fortran_here</code>
+--><!--
+ </td>
+ <td align="left" valign="top">
+ </td>
+ </tr>
+ </table>
+-->
+
+<!--
+ <dd>
+ <dt>C++ wrappers:
+ <dd>
+-->
+
+ <dd>
+ <dt>Tools:
+ <dd>A new pair of tools, <code>h5jam</code> and <code>h5unjam</code>,
+ is available to manage user blocks in HDF5 files.
+ See <a href="../RM/Tools.html#Tools-Jam">their entry</a>
+ in the <cite>HDF5 Reference Manual</cite>.
+
+
+ </dl>
+
+
+ <h3>Deleted Functions</h3>
+
+ The following functions have been removed in this release.
+
+ <dl>
+ <dd>
+ <dt>C++ wrappers:
+ <dd> The C++ wrappers now rely on the C library's reference
+ counting in place of the class <code>RefCounter</code>,
+ which existed before the C mechanism was available.
+ <code>RefCounter</code> has therefore been removed.
+ </dl>
+
+ <!--
+ None.
+ -->
+
+ <!--
+ The following functions are deprecated in HDF5 Release X.X.x.
+ A backward compatibility mode is provided in this release,
+ enabling these functions and other Release 1.4.x compatibility
+ features, but is available only when the HDF5 Library is
+ configured with the flag <code>H5_WANT_H5_V1_4_COMPAT</code>.
+ The backward compatibility mode is not enabled in the
+ binaries distributed by NCSA.
+
+ <dir>
+ <table border=0>
+ <tr valign="top" align="left"><td>
+
+ </td><td>
+<pre>
+<code>function</code>
+</pre>
+ </td><td>
+
+ </td><td>
+<pre>
+<code>function</code>
+</pre>
+ </td><td>
+
+ </td><td>
+<pre>
+
+</pre>
+ </td></tr>
+ </table>
+ </dir>
+ <p>
+ The above functions will eventually be removed from the HDF5
+ distribution and from the <cite>HDF5 Reference Manual</cite>.
+ -->
+
+<!--
+ The following functions have been removed in this release.
+
+ <dl>
+ <dd>
+ <dt>Category
+ <dd><code>function_name</code>
+ </dl>
+-->
+
+
+ <h3>Functions with Changed Syntax</h3>
+
+ The following functions have changed as noted.
+ In general, one or more parameters or the return value has
+ changed from a signed to an unsigned datatype.
+ Changed items are indicated in
+ <font color="red">red</font>.
+ <p>
+
+ <dl>
+ <dt><u>C functions:</u>
+ <dt><code>H5Pget_version</code>
+ <dd><code>
+ herr_t H5Pget_version(hid_t plist_id,
+ <font color="red">unsigned *boot/*out*/</font>,
+ <br>
+ <font color="red">unsigned *freelist/*out*/</font>,
+ <font color="red">unsigned *stab/*out*/</font>,
+ <font color="red">unsigned *shhdr/*out*/</font>)
+ </code>
+
+ <dt><code>H5Pset_sym_k</code>
+ <dd><code>
+ H5Pset_sym_k(hid_t plist_id,
+ <font color="red">unsigned ik</font>, unsigned lk)
+ </code>
+
+ <dt><code>H5Pget_sym_k</code>
+ <dd><code>
+ H5Pget_sym_k(hid_t plist_id,
+ <font color="red">unsigned *ik/*out*/</font>,
+ unsigned *lk/*out*/)
+ </code>
+
+ <dt><code>H5Pset_istore_k</code>
+ <dd><code>
+ herr_t H5Pset_istore_k(hid_t plist_id,
+ <font color="red">unsigned ik</font>)
+ </code>
+
+ <dt><code>H5Pget_istore_k</code>
+ <dd><code>
+ herr_t H5Pget_istore_k(hid_t plist_id,
+ <font color="red">unsigned *ik/*out*/</font>)
+ </code>
+
+ <dt><code>H5Pget_external</code>
+ <dd><code>
+ herr_t H5Pget_external(hid_t plist_id,
+ <font color="red">unsigned idx</font>, size_t name_size,
+ <br>
+ char *name/*out*/, off_t *offset/*out*/,
+ hsize_t *size/*out*/)
+ </code>
+
+ <dt><code>H5Pget_filter</code>
+ <dd><code>
+ H5Z_filter_t H5Pget_filter(hid_t plist_id,
+ <font color="red">unsigned filter</font>,
+ <br>
+ unsigned int *flags/*out*/, size_t *cd_nelmts/*out*/,
+ <br>
+ unsigned cd_values[]/*out*/, unsigned int *flags/*out*/,
+ <br>
+ size_t namelen, char name[])
+ </code>
+
+ <dt><code>H5Sselect_hyperslab</code>
+ <dd><code>
+ herr_t H5Sselect_hyperslab(hid_t space_id, H5S_seloper_t op,
+ <br>
+ <font color="red">const hsize_t start[]</font>,
+ const hsize_t _stride[], const hsize_t count[],
+ <br>
+ const hsize_t _block[])
+ </code>
+
+ <dt><code>H5Sselect_elements</code>
+ <dd><code>
+ herr_t H5Sselect_elements(hid_t space_id, H5S_seloper_t op,
+ <br>
+ size_t num_elemn, <font color="red">const hsize_t **coord</font>)
+ </code>
+
+ <dt><code>H5Tget_member_name</code>
+ <dd><code>
+ char *H5Tget_member_name(hid_t type_id,
+ <font color="red">unsigned membno</font>)
+ </code>
+
+ <dt><code>H5Tget_member_offset</code>
+ <dd><code>
+ size_t H5Tget_member_offset(hid_t type_id,
+ <font color="red">unsigned membno</font>)
+ </code>
+
+ <dt><code>H5Tget_member_class</code>
+ <dd><code>
+ H5T_class_t H5Tget_member_class(hid_t type_id,
+ <font color="red">unsigned membno</font>)
+ </code>
+
+ <dt><code>H5Tget_member_type</code>
+ <dd><code>
+ hid_t H5Tget_member_type(hid_t type_id,
+ <font color="red">unsigned membno</font>)
+ </code>
+
+ <dt><code>H5Tget_member_value</code>
+ <dd><code>
+ herr_t H5Tget_member_value(hid_t type_id,
+ <font color="red">unsigned membno</font>,
+ <br>
+ void *value/*out*/)
+ </code>
+
+ <p>
+ <dt><code>H5Diterate</code> is affected by a similar change
+ in the syntax of <code>H5D_operator_t</code>.
+ <dd><code>
+ herr_t (*H5D_operator_t)(void *elem, hid_t type_id,
+ <font color="red">unsigned ndim</font>,
+ <br>
+ <font color="red">const hsize_t *point</font>,
+ void *operator_data)
+ </code>
+
+
+ <p>
+ <dt><u>Fortran subroutines:</u>
+ <dt><code>h5sselect_hyperslab_f</code>
+ <dd><code>
+ SUBROUTINE h5sselect_hyperslab_f(space_id, operator,
+ <font color="red">start</font>, count, &
+ <br>
+ hdferr, stride, block)
+ </code>
+
+ <dt><code>h5sselect_elements_f</code>
+ <dd><code>
+ SUBROUTINE h5sselect_elements_f(space_id, operator, rank, &
+ <br>
+ num_elements, <font color="red">coord</font>, hdferr)
+ </code>
+
+
+ <p>
+ <dt><u>C++ wrappers:</u>
+ <dt><code>FileCreatPropList::getVersion</code>
+ <dd><code>
+ void FileCreatPropList::getVersion(
+ <font color="red">unsigned& super</font>,
+ <font color="red">unsigned& freelist</font>,
+ <br>
+ <font color="red">unsigned& stab</font>,
+ <font color="red">unsigned& shhdr</font>) const
+ </code>
+
+<!--
+ <dt><code>FileCreatPropList::setSymk</code>
+ <dd><code>
+ void FileCreatPropList::setSymk( int ik, int lk ) const
+ </code>
+-->
+
+ <dt><code>FileCreatPropList::setSymk</code>
+ <dd><code>
+ void FileCreatPropList::setSymk(
+ <font color="red">unsigned ik</font>, unsigned lk ) const
+ </code>
+
+<!--
+ <dt><code>FileCreatPropList::getSymk</code>
+ <dd><code>
+ void FileCreatPropList::getSymk( int& ik, int& lk ) const
+ </code>
+-->
+
+ <dt><code>FileCreatPropList::getSymk</code>
+ <dd><code>
+ void FileCreatPropList::getSymk(
+ <font color="red">unsigned& ik</font>, unsigned& lk ) const
+ </code>
+
+ <dt><code>FileCreatPropList::setIstorek</code>
+ <dd><code>
+ void FileCreatPropList::setIstorek(
+ <font color="red">unsigned ik</font> ) const
+ </code>
+
+ <dt><code>FileCreatPropList::getIstorek</code>
+ <dd><code>
+ <font color="red">unsigned</font>
+ FileCreatPropList::getIstorek() const
+ </code>
+
+ <dt><code>DSetCreatPropList::getExternal</code>
+ <dd><code>
+ void DSetCreatPropList::getExternal(
+ <font color="red">unsigned idx</font>,
+ size_t name_size,
+ <br>
+ char* name, off_t& offset, hsize_t& size ) const
+ </code>
+
+ <dt><code>DSetCreatPropList::getFilter</code>
+ <dd><code>
+ H5Z_filter_t DSetCreatPropList::getFilter(
+ <font color="red">ine filter_number</font>,
+ <br>
+ unsigned int &flags, size_t &cd_nelmts, unsigned int* cd_values,
+ <br>
+ size_t namelen, char name[] ) const
+ </code>
+
+ <dt><code>DataSpace::selectHyperslab</code>
+ <dd><code>
+ void DataSpace::selectHyperslab( H5S_seloper_t op,
+ const hsize_t *count,
+ <br>
+ <font color="red">const hsize_t *start</font>,
+ const hsize_t *stride, const hsize_t *block ) const
+ </code>
+
+ <dt><code>DataSpace::selectElements</code>
+ <dd><code>
+ void DataSpace::selectElements( H5S_seloper_t op,
+ <br>
+ const size_t num_elements,
+ <font color="red">const hsize_t *coord[ ]</font> ) const
+ </code>
+
+ <dt><code>CompType::getMemberName</code>
+ <dd><code>
+ string CompType::getMemberName(
+ <font color="red">unsigned member_num</font> ) const
+ </code>
+
+ <dt><code>CompType::getMemberOffset</code>
+ <dd><code>
+ size_t CompType::getMemberOffset(
+ <font color="red">unsigned member_num</font> ) const
+ </code>
+
+ <dt><code>CompType::getMemberClass</code>
+ <dd><code>
+ H5T_class_t CompType::getMemberClass(
+ <font color="red">unsigned member_num</font> ) const
+ </code>
+
+ <dt><code>EnumType::getMemberValue</code>
+ <dd><code>
+ void EnumType::getMemberValue(
+ <font color="red">unsigned member_no</font>, void *value ) const
+ </code>
+
+
+<!--
+ <dd>The prototype for this function was changed from:
+ <ul>
+ <li>old sytax<br>
+ </ul>
+
+ to:
+
+ <ul>
+ <li>new syntax<br>
+ </ul>
+ <p>
+
+
+
+
+ <dd>
+ <dt>C++ wrappers:
+ <dt><code>C++_wrapper_name</code>
+ <dd>Change...
+
+
+ <dd>
+ <dt>Fortran90 subroutines:
+ <dt><code>h5subroutine_f?</code>
+ <dd>Change...
+
+-->
+ </dl>
+ <p>
+ <cite>(These lists of syntax changes were added
+ on 31 March and 5 April 2005, shortly after Release 1.6.4.)</cite>
+
+
+ <h3>Deleted Constants</h3>
+
+ The following constants have been removed from the HDF5 Library:
+ <ul>
+ <li>Error codes
+ <ul>
+ <li><code>H5E_CANTALLOC</code>
+ <li><code>H5E_CANTCHANGE</code>
+ <li><code>H5E_CANTRECV</code>
+ <li><code>H5E_CANTSENDMDATA</code>
+ <li><code>H5E_FPHDF5</code>
+ </ul>
+ <li>An internal identifier category
+ <ul>
+ <li><code>H5I_TEMPBUF</code>
+ </ul>
+ </ul>
+ <cite>(This list of deleted constants was added on 21 March 2005,
+ shortly after Release 1.6.4.)</cite>
+
+
+<!--
+ <h3>Constants with Changed Values</h3>
+
+ The following library structures have changed as noted.
+ <p>
+ <dl>
+ <dt>C API:
+ <dt><code>struct_name</code>
+ <dd>This function pointer typedef's definition has been changed from:
+
+ <ul>
+ <li>old definition<br>
+ </ul>
+
+ to:
+
+ <ul>
+ <li>new definition<br>
+ </ul>
+ <p>
+-->
+
+
+ <h3>Changed Library Configuration</h3>
+ <dl>
+ <dt>HDF5 Library configuration has been upgraded from
+ GNU autoconf 2.53 to autoconf 2.59.
+ </dl>
+
+
+
+ </dir>
+<p>
+
+
+
+<a name="163">
+<h2>Release 1.6.3 versus Release 1.6.2</h2>
+</a>
+
+<dir>
+
+This section lists the API-level changes that have been made in the
+transition from the HDF5 Release 1.6.2 to Release 1.6.3.
+
+
+ <h3>New Functions and Tools</h3>
+ <dl>
+ <dt>C functions:
+ <dd>The following C functions are new for Release 1.6.3 and
+ are documented in the
+ <a href="../RM/RM_H5Front.html"><cite>HDF5 Reference Manual</cite></a>.
+
+ <table border="0">
+ <tr>
+ <td align="left" valign="top"><code>H5Fget_name</code>
+ </td>
+ <td align="left" valign="top"><em>ssize_t</em> <code>H5Fget_name</code>
+ (<em>hid_t</em> <code>obj_id</code>,
+ <em>char *</em><code>name</code>,
+ <em>size_t</em> <code>size</code>)<br>
+ See <a href="../RM/RM_H5F.html#File-GetName">entry</a>.</td>
+ </tr>
+
+ <tr>
+ <td align="left" valign="top"><code>H5Fget_filesize</code>
+ </td>
+ <td align="left" valign="top"><em>herr_t</em> <code>H5Fget_filesize</code>
+ (<em>hid_t</em> <code>file_id</code>,
+ <em>hsize_t *</em> <code>size</code>)<br>
+ See <a href="../RM/RM_H5F.html#File-GetFilesize">entry</a>.</td>
+ </tr>
+
+ <tr>
+ <td align="left" valign="top"><code>H5Iget_file_id</code>
+ </td>
+ <td align="left" valign="top"><em>hid_t</em> <code>H5Iget_file_id</code>
+ (<em>hid_t</em> <code>obj_id</code>)<br>
+ See <a href="../RM/RM_H5I.html#Identify-GetFileId">entry</a>.</td>
+ </tr>
+
+ <tr>
+ <td align="left" valign="top"><code>H5Premove_filter</code>
+ </td>
+ <td align="left" valign="top"><em>herr_t</em> <code>H5Premove_filter</code>
+ (<em>hid_t</em> <code>obj_id</code>,
+ <em>H5Z_filter_t</em> <code>filter</code>)<br>
+ See <a href="../RM/RM_H5P.html#Property-RemoveFilter">entry</a>.</td>
+ </tr>
+
+ <tr>
+ <td align="left" valign="top"><code>H5Zget_filter_info</code>
+ </td>
+ <td align="left" valign="top"><em>herr_t</em> <code>H5Zget_filter_info</code>
+ (<em>H5Z_filter_t</em> <code>filter</code>,
+ <em>unsigned int *</em> <code>flags</code>)<br>
+ See <a href="../RM/RM_H5Z.html#Compression-GetFilterInfo">entry</a>.</td>
+ </tr>
+ </table>
+
+ <dd>
+ <dt>Fortran subroutines:
+ <dd>The following Fortran90 subroutines are new for Release 1.6.3
+ and are documented in the
+ <a href="../RM/RM_H5Front.html"><cite>HDF5 Reference
+ Manual</cite></a>.
+ <table border="0">
+ <tr>
+ <td align="left" valign="top" colspan="2">New Fortran90
+ subroutines corresponding to the new C functions
+ listed above:<br>
+ </td>
+ </tr><tr>
+ <td align="left" valign="top">
+ <code>h5fget_name_f</code><br>
+ <code>h5fget_filesize_f</code>
+ </td>
+ <td align="left" valign="top">
+ <code>h5iget_file_id_f</code><br>
+ <code>h5premove_filter_f</code><br>
+ <code>h5zget_filter_info_f</code>
+ </td>
+ </tr>
+ </table>
+
+ <table border="0">
+ <tr>
+ <td align="left" valign="top">New Fortran90 subroutines
+ corresponding to C functions from prior releases:<br>
+ None<br>
+<!--
+ <code>new_fortran_here</code><br>
+ <code>last_new_fortran_here</code>
+-->
+ </td>
+ <td align="left" valign="top">
+ </td>
+ </tr>
+ </table>
+
+ <dd>
+ <dt>C++ wrappers:
+ <dd>C++ wrappers have been brought in sync with the C library,
+ rendering the C++ API significantly more complete.
+ Most of the new wrappers are for H5P and H5T APIs.
+ <p>
+ All available C++ elements are now documented in the
+ <a href="../cpplus_RM/index.html" target="CppExternal">
+ <cite>HDF5 C++ API Reference Manual</cite></a>.
+ (The <cite>HDF5 C++ API Reference Manual</cite> is also a
+ new addition in this release.)
+
+ <dd>
+ <dt>Tools:
+ <dd>The following tools are new for Release 1.6.3 and are
+ documented on the <a href="../RM/Tools.html">Tools page</a> of the
+ <a href="../RM/RM_H5Front.html"><cite>HDF5 Reference Manual</cite></a>.
+ <dd><code>h5new_tool</code> is designed to do whatever this sentence says.
+ (Clearly, this is a placeholder entry that should be removed before release.)
+ <dd>
+ <dd>The following tool was in Release 1.6.2 but was not included in formal documentation.
+ A full description is now included on the
+ <a href="../RM/Tools.html">Tools page</a> of the
+ <a href="../RM/RM_H5Front.html"><cite>HDF5 Reference Manual</cite></a>.
+ <dd><code>h5repack</code> is designed to copy an HDF5 file
+ to a new file with or without compression and/or chunking.
+ </dl>
+
+
+ <h3>Deleted Functions</h3>
+
+ <!--
+ None.
+ -->
+
+ <!--
+ The following functions are deprecated in HDF5 Release X.X.x.
+ A backward compatibility mode is provided in this release,
+ enabling these functions and other Release 1.4.x compatibility
+ features, but is available only when the HDF5 Library is
+ configured with the flag <code>H5_WANT_H5_V1_4_COMPAT</code>.
+ The backward compatibility mode is not enabled in the
+ binaries distributed by NCSA.
+
+ <dir>
+ <table border=0>
+ <tr valign="top" align="left"><td>
+
+ </td><td>
+<pre>
+<code>function</code>
+</pre>
+ </td><td>
+
+ </td><td>
+<pre>
+<code>function</code>
+</pre>
+ </td><td>
+
+ </td><td>
+<pre>
+
+</pre>
+ </td></tr>
+ </table>
+ </dir>
+ <p>
+ The above functions will eventually be removed from the HDF5
+ distribution and from the <cite>HDF5 Reference Manual</cite>.
+ -->
+
+
+ The following function has been removed in this release.
+
+ <dl>
+ <dd>
+ <dt>C++ wrapper:
+ <dd><code>CompType::getMemberDims</code>
+ </dl>
+
+
+ <h3>Functions with Changed Syntax</h3>
+
+ The following functions have changed as noted.
+ <p>
+ <dl>
+ <dt>C functions:
+ <dt><code>H5Pset_fapl_multi</code>
+ <dd>The prototype for this function was changed from:
+ <ul>
+ <li><em>herr_t</em> <code>H5Pset_fapl_multi</code>
+ (<em>hid_t</em> <code>fapl_id</code>,
+ <em>const H5FD_mem_t *</em> <code>memb_map</code>,
+ <em>const hid_t *</em> <code>memb_fapl</code>,
+ <em>const char **</em> <code>memb_name</code>,
+ <em>const haddr_t *</em> <code>memb_addr</code>,
+ <em>hbool_t</em> <code>relax</code>)<br>
+ </ul>
+
+ to:
+
+ <ul>
+ <li><em>herr_t</em> <code>H5Pset_fapl_multi</code>
+ (<em>hid_t</em> <code>fapl_id</code>,
+ <em>const H5FD_mem_t *</em> <code>memb_map</code>,
+ <em>const hid_t *</em> <code>memb_fapl</code>,
+ <em>const char * const *</em> <code>memb_name</code>,
+ <em>const haddr_t *</em> <code>memb_addr</code>,
+ <em>hbool_t</em> <code>relax</code>)<br>
+ </ul>
+ <p>
+ This change should not appreciably affect application programs.
+
+ <dt><code>H5Tconvert</code>
+ <dd>The prototype for this function was changed from:
+ <ul>
+ <li><em>herr_t</em> <code>H5Tconvert</code>
+ (<em>hid_t</em> <code>src_id</code>,
+ <em>hid_t</em> <code>dst_id</code>,
+ <em>hsize_t</em> <code>nelmts</code>,
+ <em>void *</em> <code>buf</code>,
+ <em>void *</em> <code>background</code>,
+ <em>hid_t</em> <code>plist_id</code>)<br>
+ </ul>
+
+ to:
+
+ <ul>
+ <li><em>herr_t</em> <code>H5Tconvert</code>
+ (<em>hid_t</em> <code>src_id</code>,
+ <em>hid_t</em> <code>dst_id</code>,
+ <em>size_t</em> <code>nelmts</code>,
+ <em>void *</em> <code>buf</code>,
+ <em>void *</em> <code>background</code>,
+ <em>hid_t</em> <code>plist_id</code>)<br>
+ </ul>
+ <p>
+ This was changed to prevent overflows when <code>hsize_t</code> and
+ <code>size_t</code> types are different sizes. Application code
+ may need to be modified to take this into account. Application
+ code using this function may also be affected by the changes to
+ <code>H5Tregister</code> and <code>H5Tunregister</code> described
+ below.
+
+ <dt><code>H5Tregister</code> and <code>H5Tunregister</code>
+ <dd>These two routines are affected by the change to the
+ <code>H5T_conv_t</code> typedef (described below) and may
+ require application registered datatype conversion routines
+ to be modified to conform to the changed typedef.
+
+
+
+ <dd>
+ <dt>C++ wrappers:
+ <dt><code>H5::Exception</code> and its subclasses
+ <dd>Constructors used by <code>H5::Exception</code> and its
+ subclasses that were previously overloaded to take char pointers
+ have been removed.
+ Constructors that passed in a reference of <code>string</code>
+ have been changed to pass by value.
+ In addition, the default value of the detailed
+ message has been changed from <code>0/NULL</code> to
+ <code>DEFAULT_MSG</code>
+ (meaning "No detailed information provided").
+
+ <dd>
+ <dt><code>DSetCreatPropList::setLayout</code>
+ <dd>The prototype for <code>DSetCreatPropList::setLayout</code>
+ has been changed: the first parameter has been removed.
+
+ <!--
+ <dd>
+ <dt>Fortran90 subroutines:
+ <dt><code>h5subroutine_f?</code>
+ <dd>Change...
+ -->
+
+ </dl>
+
+
+ <h3>Constants with Changed Values</h3>
+
+ The following library structures have changed as noted.
+ <p>
+ <dl>
+ <dt>C API:
+ <dt><code>H5T_conv_t</code>
+ <dd>This function pointer typedef's definition has been changed from:
+
+ <ul>
+ <li><em>typedef herr_t</em> <code>(*H5T_conv_t)</code>
+ (<em>hid_t</em> <code>src_id</code>,
+ <em>hid_t</em> <code>dst_id</code>,
+ <em>H5T_cdata_t *</em> <code>cdata</code>,
+ <em>hsize_t</em> <code>nelmts</code>,
+ <em>size_t</em> <code>buf_stride</code>,
+ <em>size_t</em> <code>bkg_stride</code>,
+ <em>void *</em> <code>buf</code>,
+ <em>void *</em> <code>bkg</code>,
+ <em>hid_t</em> <code>plist_id</code>)<br>
+ </ul>
+
+ to:
+
+ <ul>
+ <li><em>typedef herr_t</em> <code>(*H5T_conv_t)</code>
+ (<em>hid_t</em> <code>src_id</code>,
+ <em>hid_t</em> <code>dst_id</code>,
+ <em>H5T_cdata_t *</em> <code>cdata</code>,
+ <em>size_t</em> <code>nelmts</code>,
+ <em>size_t</em> <code>buf_stride</code>,
+ <em>size_t</em> <code>bkg_stride</code>,
+ <em>void *</em> <code>buf</code>,
+ <em>void *</em> <code>bkg</code>,
+ <em>hid_t</em> <code>plist_id</code>)<br>
+ </ul>
+ <p>
+ This was changed to prevent overflows when <code>hsize_t</code> and
+ <code>size_t</code> types are different sizes. Application code
+ may need to be modified to take this into account.
+
+
+ </dir>
+<p>
+
+
+
+
+
+
+
+
+
+
+
+<a name="162">
+<h2>Release 1.6.2 versus Release 1.6.1</h2>
+</a>
+
+<dir>
+
+This section lists the API-level changes that have been made in the
+transition from the HDF5 Release 1.6.1 to Release 1.6.2.
+
+
+ <h3>New Functions and Tools</h3>
+ <dl>
+ <dt>C functions:
+ <dd>The following C functions are new for Release 1.6.2 and
+ are documented in the
+ <a href="../RM/RM_H5Front.html"><cite>HDF5 Reference Manual</cite></a>.
+
+ <table border="0">
+ <tr>
+ <td align="left" valign="top"><code>H5Iget_ref</code>
+ </td>
+ <td align="left" valign="top"><em>int</em> <code>H5Iget_ref</code>
+ (<em>hid_t </em><code>obj_id</code>)<br>
+ See <a href="../RM/RM_H5I.html#Identify-GetRef">entry</a>.</td>
+ </tr>
+ <tr>
+ <td align="left" valign="top"><code>H5Iinc_ref</code>
+ </td>
+ <td align="left" valign="top"><em>int</em> <code>H5Iinc_ref</code>
+ (<em>hid_t </em><code>obj_id</code>)<br>
+ See <a href="../RM/RM_H5I.html#Identify-IncRef">entry</a>.</td>
+ </tr>
+ <tr>
+ <td align="left" valign="top"><code>H5Idec_ref</code>
+ </td>
+ <td align="left" valign="top"><em>int</em> <code>H5Idec_ref</code>
+ (<em>hid_t </em><code>obj_id</code>)<br>
+ See <a href="../RM/RM_H5I.html#Identify-DecRef">entry</a>.</td>
+ </tr>
+ </table>
+
+ <dd>
+ <dt>Fortran subroutines:
+ <dd>The following Fortran90 subroutines are new for Release 1.6.2
+ and are documented in the
+ <a href="../RM/RM_H5Front.html"><cite>HDF5 Reference Manual</cite></a>.
+ <table border="0">
+ <tr>
+ <td align="left" valign="top">Corresponding to the
+ new C functions listed above:<br>
+ <code>h5iget_ref_f</code><br>
+ <code>h5iinc_ref_f</code><br>
+ <code>h5idec_ref_f</code>
+ </td>
+ <td align="left" valign="top">
+ </td>
+ </tr>
+ </table>
+
+ <dd>
+ <dt>Tools:
+ <dd>The following tools are new for Release 1.6.2 and are
+ documented on the <a href="../RM/Tools.html">Tools page</a> of the
+ <a href="../RM/RM_H5Front.html"><cite>HDF5 Reference Manual</cite></a>.
+ <dd><code>h5pcc</code> is designed to aid in the compilation
+ of C applications that employ the HDF5 Library.
+ <dd><code>h5pfc</code> is designed to aid in the compilation
+ of Fortran90 applications that employ the HDF5 Library.
+ </dl>
+
+
+ <h3>Deleted Functions</h3>
+
+ None.
+
+ <!--
+ The following functions are deprecated in HDF5 Release X.X.x.
+ A backward compatibility mode is provided in this release,
+ enabling these functions and other Release 1.4.x compatibility
+ features, but is available only when the HDF5 Library is
+ configured with the flag <code>H5_WANT_H5_V1_4_COMPAT</code>.
+ The backward compatibility mode is not enabled in the
+ binaries distributed by NCSA.
+
+ <dir>
+ <table border=0>
+ <tr valign="top" align="left"><td>
+
+ </td><td>
+<pre>
+<code>function</code>
+</pre>
+ </td><td>
+
+ </td><td>
+<pre>
+<code>function</code>
+</pre>
+ </td><td>
+
+ </td><td>
+<pre>
+
+</pre>
+ </td></tr>
+ </table>
+ </dir>
+ <p>
+ The above functions will eventually be removed from the HDF5
+ distribution and from the <cite>HDF5 Reference Manual</cite>.
+ -->
+
+
+ <h3>Functions with Changed Syntax</h3>
+
+ None.
+
+ <!--
+ The following functions have changed as noted.
+
+ <dl>
+ <dt>C functions:
+ <dt><code>H5function?</code>
+ <dd>Change....
+
+ <dd>
+ <dt>Fortran90 subroutines:
+ <dt><code>h5subroutine_f?</code>
+ <dd>Change...
+ </dl>
+ -->
+
+
+ <h3>Constants with Changed Values</h3>
+
+ None.
+
+
+ </dir>
+<p>
+
+
+
+
+
+
+
+
+
+
+<a name="161">
+<h2>Release 1.6.1 versus Release 1.6.0</h2>
+</a>
+
+<dir>
+
+This section lists the API-level changes that have been made in the
+transition from the HDF5 Release 1.6.0 to Release 1.6.1.
+
+
+ <h3>New Functions and Tools</h3>
+ <dl>
+ <dt>C functions:
+ <dd>The following C function is new for Release 1.6.1 and is documented in the
+ <a href="../RM/RM_H5Front.html"><cite>HDF5 Reference Manual</cite></a>.
+
+ <table border="0">
+ <tr>
+ <td align="left" valign="top"><code>H5Fget_freespace</code>
+ </td>
+ <td align="left" valign="top"><em>hssize_t</em> <code>H5Fget_freespace</code>
+ (<em>hid_t </em><code>file_id</code>)<br>
+ See <a href="../RM/RM_H5F.html#File-GetFreespace">entry</a>.</td>
+ </tr>
+ </table>
+
+ <dd>
+ <dt>Fortran subroutines
+ <dd>The following Fortran90 subroutines were new for Release 1.6.0
+ but were not documented. They are now included in the
+ <a href="../RM/RM_H5Front.html"><cite>HDF5 Reference Manual</cite></a>.
+ <table border="0">
+ <tr>
+ <td align="left" valign="top"><code>h5get_fapl_mpiposix_f</code>
+ </td>
+ <td align="left" valign="top">
+ <code>h5pget_fapl_mpiposix_f(prp_id, comm, use_gpfs, hdferr)</code><br>
+ See <a href="../RM/RM_H5P.html#Property-GetFaplMpiPosix">entry</a>.</td>
+ </tr><tr>
+ <td align="left" valign="top"><code>h5set_fapl_mpiposix_f</code>
+ </td>
+ <td align="left" valign="top">
+ <code>h5pset_fapl_mpiposix_f(prp_id, comm, use_gpfs, hdferr)</code><br>
+ See <a href="../RM/RM_H5P.html#Property-SetFaplMpiPosix">entry</a>.</td>
+ </tr>
+ </table>
+
+ <dd>
+ <dt>Tools:
+ <dd>Release 1.6.1 contains no new tools.
+ <!--
+ <dd>The following tools are new for Release X.X.x and are included in the
+ <a href="../RM/RM_H5Front.html"><cite>HDF5 Reference Manual</cite></a>.
+ <dd><code>new tool</code>
+ -->
+ </dl>
+
+
+ <h3>Deleted Functions</h3>
+ None.
+ <!--
+ The following functions are deprecated in HDF5 Release X.X.x.
+ A backward compatibility mode is provided in this release,
+ enabling these functions and other Release 1.4.x compatibility
+ features, but is available only when the HDF5 Library is
+ configured with the flag <code>H5_WANT_H5_V1_4_COMPAT</code>.
+ The backward compatibility mode is not enabled in the
+ binaries distributed by NCSA.
+
+ <dir>
+ <table border=0>
+ <tr valign="top" align="left"><td>
+
+ </td><td>
+<pre>
+<code>function</code>
+</pre>
+ </td><td>
+
+ </td><td>
+<pre>
+<code>function</code>
+</pre>
+ </td><td>
+
+ </td><td>
+<pre>
+
+</pre>
+ </td></tr>
+ </table>
+ </dir>
+ <p>
+ The above functions will eventually be removed from the HDF5
+ distribution and from the <cite>HDF5 Reference Manual</cite>.
+ -->
+
+
+ <h3>Functions with Changed Syntax</h3>
+ The following functions have changed as noted.
+
+ <dl>
+ <dt>C functions:
+ <dt><code>H5Gget_obj_info</code>
+ <dd>The <code>H5G_stat_t</code> struct contains two new fields.<br>
+ This change will be transparent to existing applications,
+ though those calling <code>H5Gget_obj_info</code> will have
+ to be recompiled before linking with the updated library.
+
+ <dd>
+ <dt>Fortran90 subroutines:
+ <dt><code>h5pset_cache_f</code>
+ <dd>The <code>rdcc_nbytes</code> parameter has changed from
+ <code><em>INTEGER</em></code> to <code><em>INTEGER(SIZE_T)</em></code>
+ to better match the C API and the <code>h5pget_cache_f</code>
+ subroutine.
+ </dl>
+
+
+ <h3>Constants with Changed Values</h3>
+
+ None.
+
+
+ </dir>
+<p>
+
+
+
+
+
+
+
+
+<a name="160">
+<h2>Release 1.6.0 versus Release 1.4.5</h2>
+</a>
+
+<dir>
+
+This section lists the API-level changes that have been made in the
+transition from the HDF5 Release 1.4.<i>x</i> series to Release 1.6.0.
+
+
+ <h3>New Functions and Tools</h3>
+ <dl>
+ <dt>The following functions are new for Release 1.6.0 and are included in the
+ <a href="../RM/RM_H5Front.html"><cite>HDF5 Reference Manual</cite></a>.
+
+<dd>
+<table border="0">
+ <tr>
+ <td align="left" valign="top"><code>H5set_free_list_limits</code></td>
+ <td align="left" valign="top">
+ <em>herr_t</em> <code>H5set_free_list_limits</code> (<em>int</em> <code>reg_global_lim</code>,
+ <em>int</em> <code>reg_list_lim</code>, <em>int</em> <code>arr_global_lim</code>,
+ <em>int</em> <code>arr_list_lim</code>, <em>int</em> <code>blk_global_lim</code>,
+ <em>int</em> <code>blk_list_lim</code>)
+ </td>
+ </tr>
+ <tr>
+ <td align="left" valign="top"><code>H5Dget_offset</code></td>
+ <td align="left" valign="top"><em>hsize_t</em> <code>H5Dget_offset</code> (<em>hid_t </em><code>dset_id</code>)</td>
+ </tr>
+ <tr>
+ <td align="left" valign="top"><code>H5Dget_space_status</code></td>
+ <td align="left" valign="top"><em>hid_t</em> <code>H5Dget_space_status</code> (<em>hid_t</em>
+ <code>dset_id</code>, <em>H5D_space_status_t *</em><code>status</code>)
+ </td>
+
+ </tr>
+ <tr>
+ <td align="left" valign="top"><code>H5Fget_obj_ids</code></td>
+ <td align="left" valign="top">
+ <em>int </em><code>H5Fget_obj_ids</code> (<em>hid_t</em> <code>file_id</code>,
+ <em>unsigned int</em> <code>types</code>,
+ <em>int</em> <code>max_objs</code>, <em>hid_t *</em><code>obj_id_list</code>)
+ </td>
+ </tr>
+ <tr>
+ <td align="left" valign="top"><code>H5Fget_vfd_handle</code></td>
+ <td align="left" valign="top">
+ <em>herr_t </em><code>H5Fget_vfd_handle</code> (<em>hid_t</em> <code>file_id</code>,
+ <em>hid_t</em> <code>fapl_id</code>, <em>void *</em><code>file_handle</code>)
+ </td>
+ </tr>
+ <tr>
+ <td align="left" valign="top"><code>H5Gget_num_objs</code></td>
+ <td align="left" valign="top">
+ <em>herr_t</em> <code>H5Gget_num_objs</code> (<em>hid_t</em> <code>loc_id</code>,
+ <em>hsize_t* </em> <code>num_obj</code>)
+ </td>
+ </tr>
+ <tr>
+ <td align="left" valign="top"><code>H5Gget_objname_by_idx</code></td>
+ <td align="left" valign="top">
+ <em>ssize_t</em> <code>H5Gget_objname_by_idx</code> (<em>hid_t</em> <code>group_id</code>,
+ <em>hsize_t</em> <code>idx</code>, <em>char *</em><code>name</code>,
+ <em>size_t*</em> <code>size</code>)
+ </td>
+ </tr>
+ <tr>
+ <td align="left" valign="top"><code>H5Gget_objtype_by_idx</code></td>
+ <td align="left" valign="top">
+ <em>int</em> <code>H5Gget_objtype_by_idx</code> (<em>hid_t</em> <code>group_id</code>,
+ <em>hsize_t</em> <code>idx</code>)
+ </td>
+ </tr>
+ <tr>
+ <td align="left" valign="top"><code>H5Iget_name</code></td>
+ <td align="left" valign="top">
+ <em>ssize_t</em> <code>H5Iget_name</code> (<em>hid_t</em> <code>obj_id</code>,
+ <em>char *</em><code>name</code>, <em>size_t</em> <code>size</code>)
+ </td>
+ </tr>
+ <tr>
+ <td align="left" valign="top"><code>H5Pall_filters_avail</code></td>
+ <td align="left" valign="top">
+ <em>htri_t</em> <code>H5Pall_filters_avail</code> (<em>hid_t</em> <code>dcpl_id</code>)
+ </td>
+ </tr>
+ <tr>
+ <td align="left" valign="top"><code>H5Pfill_value_defined</code></td>
+ <td align="left" valign="top">
+ <em>herr_t </em><code>H5Pfill_value_defined</code> (<em>hid_t</em> <code>plist_id</code>,
+ <em>H5D_fill_value_t *</em><code>status</code>)
+ </td>
+ </tr>
+ <tr>
+ <td align="left" valign="top"><code>H5Pget_alloc_time</code></td>
+ <td align="left" valign="top">
+ <em>herr_t </em><code>H5Pget_alloc_time</code> (<em>hid_t</em> <code>plist_id</code>,
+ <em>H5D_alloc_time_t *</em><code>alloc_time</code>)
+ </td>
+ </tr>
+ <tr>
+ <td align="left" valign="top"><code>H5Pget_edc_check</code></td>
+ <td align="left" valign="top">
+ <em>H5Z_EDC_t</em> <code>H5Pget_edc_check</code> (<em>hid_t</em>
+ <code>plist</code>)
+ </td>
+ </tr>
+ <tr>
+ <td align="left" valign="top"><code>H5Pget_family_offset</code></td>
+ <td align="left" valign="top">
+ <em>herr_t</em> <code>H5Pget_family_offset</code> (<em>hid_t</em> <code>fapl_id</code>,
+ <em>hsize_t *</em><code>offset</code>)
+ </td>
+ </tr>
+ <tr>
+ <td align="left" valign="top"><code>H5Pget_fapl_mpiposix</code></td>
+ <td align="left" valign="top">
+ <em>herr_t</em> <code>H5Pget_fapl_mpiposix</code> (<em>hid_t</em> <code>fapl_id</code>,
+ <em>MPI_Comm *</em><code>comm</code>)
+ </td>
+ </tr>
+ <tr>
+ <td align="left" valign="top"><code>H5Pget_fclose_degree</code></td>
+ <td align="left" valign="top">
+ <em>herr_t</em> <code>H5Pget_fclose_degree</code>(<em>hid_t</em> <code>fapl_id</code>,
+ <em>H5F_close_degree_t *</em><code>fc_degree</code>)
+ <br>
+ <i>(This item corrected 14 September 2004.)</i>
+ </td>
+ </tr>
+ <tr>
+ <td align="left" valign="top"><code>H5Pget_fill_time</code></td>
+ <td align="left" valign="top">
+ <em>herr_t </em><code>H5Pget_fill_time</code> (<em>hid_t</em> <code>plist_id</code>,
+ <em>H5D_fill_time_t *</em><code>fill_time</code>)
+ </td>
+ </tr>
+ <tr>
+ <td align="left" valign="top"><code>H5Pget_filter_by_id</code></td>
+ <td align="left" valign="top">
+ <em>herr_t</em> <code>H5Pget_filter_by_id</code> (<em>hid_t</em> <code>plist_id</code>,
+ <em>H5Z_filter_t</em> <code>filter</code>, <em>unsigned int *</em><code>flags</code>,
+ <em>size_t *</em><code>cd_nelmts</code>, <em>unsigned int</em> <code>cd_values[]</code>,
+ <em>size_t</em> <code>namelen</code>, <em>char *</em><code>name[]</code>)
+ </td>
+ </tr>
+ <tr>
+ <td align="left" valign="top"><code>H5Pget_hyper_vector_size</code></td>
+ <td align="left" valign="top">
+ <em>herr_t</em> <code>H5Pget_hyper_vector_size</code> (<em>hid_t</em> <code>dxpl_id</code>,
+ <em>size_t *</em><code>vector_size</code>)
+ </td>
+ </tr>
+ <tr>
+ <td align="left" valign="top"><code>H5Pget_multi_type</code></td>
+ <td align="left" valign="top">
+ <em>herr_t</em> <code>H5Pget_multi_type</code> (<em>hid_t</em> <code>fapl_id</code>,
+ <em>H5FD_mem_t *</em><code>type</code>)
+ </td>
+ </tr>
+ <tr>
+ <td align="left" valign="top"><code>H5Pmodify_filter</code></td>
+ <td align="left" valign="top">
+ <em>herr_t</em> <code>H5Pmodify_filter</code> (<em>hid_t</em> <code>plist</code>,
+ <em>H5Z_filter_t</em> <code>filter</code>, <em>unsigned int</em> <code>flags</code>,
+ <em>size_t</em> <code>cd_nelmts</code>, <em>const unsigned int</em> <code>cd_values[]</code>)
+ </td>
+ </tr>
+ <tr>
+ <td align="left" valign="top"><code>H5Pset_alloc_time</code></td>
+ <td align="left" valign="top">
+ <em>herr_t </em><code>H5Pset_alloc_time</code> (<em>hid_t</em>
+ <code>plist_id</code>, <em>H5D_alloc_time_t</em> <code>alloc_time</code>)
+ </td>
+ </tr>
+ <tr>
+ <td align="left" valign="top"><code>H5Pset_edc_check</code></td>
+ <td align="left" valign="top">
+ <em>herr_t</em> <code>H5Pset_edc_check</code> (<em>hid_t</em>
+ <code>plist</code>, <em>H5Z_EDC_t</em> <code>check</code>)
+ </td>
+ </tr>
+ <tr>
+ <td align="left" valign="top"><code>H5Pset_family_offset</code></td>
+ <td align="left" valign="top">
+ <em>herr_t</em> <code>H5Pset_family_offset</code> (<em>hid_t</em> <code>fapl_id</code>,
+ <em>hsize_t</em> <code>offset</code>)
+ </td>
+ </tr>
+ <tr>
+ <td align="left" valign="top"><code>H5Pset_fapl_mpiposix</code></td>
+ <td align="left" valign="top">
+ <em>herr_t</em> <code>H5Pset_fapl_mpiposix</code> (<em>hid_t</em> <code>fapl_id</code>,
+ <em>MPI_Comm</em> <code>comm</code>)
+ </td>
+ </tr>
+ <tr>
+ <td align="left" valign="top"><code>H5Pset_fclose_degree</code></td>
+ <td align="left" valign="top">
+ <em>herr_t</em> <code>H5Pset_fclose_degree</code>(<em>hid_t</em> <code>fapl_id</code>,
+ <em>H5F_close_degree_t</em> <code>fc_degree</code>)
+ <br>
+ <i>(This item corrected 14 September 2004.)</i>
+ </td>
+ </tr>
+ <tr>
+ <td align="left" valign="top"><code>H5Pset_fill_time</code></td>
+ <td align="left" valign="top">
+ <em>herr_t </em><code>H5Pset_fill_time</code> (<em>hid_t</em> <code>plist_id</code>,
+ <em>H5D_fill_time_t</em> <code>fill_time</code>)
+ </td>
+ </tr>
+ <tr>
+ <td align="left" valign="top"><code>H5Pset_filter</code></td>
+ <td align="left" valign="top">
+ <em>herr_t</em> <code>H5Pset_filter</code>
+ (<em>hid_t</em> <code>plist</code>, <em>H5Z_filter_t</em> <code>filter</code>,
+ <em>unsigned int</em> <code>flags</code>, <em>size_t</em> <code>cd_nelmts</code>,
+ <em>const unsigned int</em> <code>cd_values[])</code>
+ </td>
+ </tr>
+ <tr>
+ <td align="left" valign="top"><code>H5Pset_filter_callback</code></td>
+ <td align="left" valign="top">
+ <em>herr_t</em> <code>H5Pset_filter_callback</code> (<em>hid_t</em>
+ <code>plist</code>, <em>H5Z_filter_func_t</em> <code>func</code>,
+ <em>void *</em><code>op_data</code>)
+ </td>
+ </tr>
+ <tr>
+ <td align="left" valign="top"><code>H5Pset_fletcher32</code></td>
+ <td align="left" valign="top">
+ <em>herr_t</em> <code>H5Pset_fletcher32</code> (<em>hid_t</em>
+ <code>plist</code>)
+ </td>
+ </tr>
+ <tr>
+ <td align="left" valign="top"><code>H5Pset_hyper_vector_size</code> </td>
+ <td align="left" valign="top">
+ <em>herr_t</em> <code>H5Pset_hyper_vector_size</code> (<em>hid_t</em> <code>dxpl_id</code>,
+ <em>size_t</em> <code>vector_size</code>)
+ </td>
+ </tr>
+ <tr>
+ <td align="left" valign="top"><code>H5Pset_multi_type</code></td>
+ <td align="left" valign="top">
+ <em>herr_t</em> <code>H5Pset_multi_type</code> (<em>hid_t</em> <code>fapl_id</code>,
+ <em>H5FD_mem_t</em> <code>type</code>)
+ </td>
+ </tr>
+ <tr>
+ <td align="left" valign="top"><code>H5Pset_shuffle</code></td>
+ <td align="left" valign="top">
+ <em>herr_t</em> <code>H5Pset_shuffle</code> (<em>hid_t</em> <code>plist_id</code>)
+ </td>
+ </tr>
+ <tr>
+ <td align="left" valign="top"><code>H5Pset_szip</code></td>
+ <td align="left" valign="top">
+ <em>herr_t</em> <code>H5Pset_szip</code> (<em>hid_t</em> <code>plist</code>,
+ <em>unsigned int</em> <code>options_mask</code>, <em>unsigned int</em>
+ <code>pixels_per_block</code>)
+ </td>
+ </tr>
+ <tr>
+ <td align="left" valign="top"><code>H5Rget_object_type</code></td>
+ <td align="left" valign="top">
+ <em>int</em> <code>H5Rget_object_type</code> (<em>hid_t</em> <code>id</code>,
+ <em>void *</em><code>ref</code>)
+ </td>
+ </tr>
+ <tr>
+ <td align="left" valign="top"><code>H5Sget_select_type</code></td>
+ <td align="left" valign="top">
+ <em>H5S_sel_type</em> <code>H5Sget_select_type</code> (<em>hid_t</em> <code>space_id</code>)
+ </td>
+ </tr>
+ <tr>
+ <td align="left" valign="top"><code>H5Tdetect_class</code></td>
+ <td align="left" valign="top">
+ <em>htri_t </em><code>H5Tdetect_class</code> (<em>hid_t</em> <code>dtype_id</code>,
+ <em>H5T_class_t</em> <code>dtype_class</code>)
+ </td>
+ </tr>
+ <tr>
+ <td align="left" valign="top"><code>H5Tget_native_type</code></td>
+ <td align="left" valign="top">
+ <em>hid_t</em> <code>H5Tget_native_type</code> (<em>hid_t</em> <code>type_id</code>,
+ <em>H5T_direction_t</em> <code>direction</code>)
+ </td>
+ </tr>
+ <tr>
+ <td align="left" valign="top"><code>H5Tis_variable_str</code></td>
+ <td align="left" valign="top">
+ <em>htri_t </em><code>H5Tis_variable_str</code> (<em>hid_t </em><code>dtype_id</code>)
+ </td>
+ </tr>
+ <tr>
+ <td align="left" valign="top"><code>H5Zfilter_avail</code></td>
+ <td align="left" valign="top">
+ <em>herr_t</em> <code>H5Zfilter_avail</code> (<em>H5Z_filter_t</em> <code>filter</code>)
+ </td>
+ </tr>
+ <tr>
+ <td align="left" valign="top"><code>H5Zunregister</code></td>
+ <td align="left" valign="top">
+ <em>herr_t</em> <code>H5Zunregister</code> (<em>H5Z_filter_t</em> <code>filter</code>)
+ </td>
+ </tr>
+</table>
+ </dd>
+ <dd> </dd>
+
+
+ <dt>The following tools are new for Release 1.6.0 and are included in the
+ <a href="../RM/RM_H5Front.html"><cite>HDF5 Reference Manual</cite></a>.
+ <dd><code>h5diff</code>
+ <dd><code>h5import</code>
+ <dd><code>h5fc</code>
+ <dd><code>h5c++</code>
+ <dd><code>h5perf</code>
+ <dd><code>h5redeploy</code>
+
+</dl>
+
+
+ <h3>Deleted Functions</h3>
+ The following functions are deprecated in HDF5 Release 1.6.0.
+ A backward compatibility mode is provided in this release,
+ enabling these functions and other Release 1.4.x compatibility
+ features, but is available only when the HDF5 Library is
+ configured with the flag <code>H5_WANT_H5_V1_4_COMPAT</code>.
+ The backward compatibility mode is not enabled in the
+ binaries distributed by NCSA.
+
+ <dir>
+ <table border=0>
+ <tr valign="top" align="left"><td>
+
+ </td><td>
+<pre>
+<code>H5Pset_hyper_cache</code>
+<code>H5Pget_hyper_cache</code>
+</pre>
+ </td><td>
+
+ </td><td>
+<pre>
+<code>H5Rget_object_type</code>
+</pre>
+ </td><td>
+
+ </td><td>
+<pre>
+
+</pre>
+ </td></tr>
+ </table>
+ </dir>
+ <p>
+ The above functions will eventually be removed from the HDF5
+ distribution and from the <cite>HDF5 Reference Manual</cite>.
+
+
+ <h3>Functions with Changed Syntax</h3>
+ The following functions have changed as noted.
+ <dir>
+ <dl>
+ <dt>C functions:
+ <dt><code>H5FDflush and VFL "flush" callbacks</code>
+ <dd>An extra parameter <code>closing</code> has been added to
+ these functions,
+ to allow the library to indicate that the file will be closed
+ following the call to "flush". Actions in the "flush" call
+ that are duplicated in the VFL "close" call may be omitted by
+ the VFL driver.
+ <dt>* <code>H5Gget_objtype_by_idx</code>
+ <dd>The function return type has changed from
+ <code><em>int</em></code> to
+ the enumerated type <code><em>H5G_obj_t</em></code>.
+ <dt>* <code>H5Pset(get)_buffer</code>
+ <dd>The <code>size</code> parameter for <code>H5Pset_buffer</code>
+ has changed from type <code><em>hsize_t</em></code> to
+ <code><em>size_t</em></code>.
+ <dd>The <code>H5Pget_buffer</code> return type has similarly
+ changed from <code><em>hsize_t</em></code> to
+ <code><em>size_t</em></code>.
+ <dt>* <code>H5Pset(get)_cache</code>
+ <dd>The <code>rdcc_nbytes</code> parameter has changed from type
+ <code><em>int</em></code> to
+ <code><em>size_t</em></code>.
+ <br>
+ <i>(This item corrected 3 March 2004.)</i>
+ <dt>* <code>H5Pset_fapl_log</code>
+ <dd>The <code>verbosity</code> parameter has been removed.
+ <dd>Two new parameters have been added:
+ <code>flags</code> of type <code><em>unsigned</em></code> and
+ <code>buf_size</code> of type <code><em>size_t</em></code>.
+ <dt>* <code>H5Pset(get)_fapl_mpiposix</code>
+ <dd>A <code>use_gpfs</code> parameter of type
+ <code><em>hbool_t</em></code> has been added.
+ <dt>* <code>H5Pset(get)_sieve_buf_size</code>
+ <dd>The <code>size</code> parameter has changed from type
+ <code><em>hsize_t</em></code> to
+ <code><em>size_t</em></code>.
+ <dt>* <code>H5Pset(get)_sym_k</code>
+ <dd>The <code>lk</code> parameter has changed from type
+ <code><em>int</em></code> to
+ <code><em>unsigned</em></code>.
+ <dt>* <code>H5Sget_select_bounds</code>
+ <dd>The <code>start</code> and <code>end</code> parameters have
+ changed from type <code><em>hsize_t *</em></code>
+ to <code><em>hssize_t *</em></code> to better match the
+ rest of the dataspace API.
+ <dt>* <code>H5Zregister</code>
+ <dd>This function is substantially revised in Release 1.6.0 with
+ a new <code>H5Z_class_t</code> struct and
+ new <i>set local</i> and <i>can apply</i> callback functions.
+ <dt>
+ <dt>Fortran90 functions:
+ <dt><code>h5pset(get)_fapl_core_f</code>
+ <dd>The <code>backing_store</code> parameter has changed from
+ <code><em>INTEGER</em></code> to <code><em>LOGICAL</em></code>
+ to better match the C API.
+ <dt><code>h5pset(get)_preserve_f</code>
+ <dd>The <code>flag</code> parameter has changed from
+ <code><em>INTEGER</em></code> to <code><em>LOGICAL</em></code>
+ to better match the C API.
+ </dl>
+ </dir>
+
+ <p>
+ Backward compatibility with the Release 1.4.x syntax is available
+ for the functions indicated above with a leading asterisk (*).
+ The backward compatibility features are available only when the
+ HDF5 Library is configured with the flag
+ <code>H5_WANT_H5_V1_4_COMPAT</code>,
+ is not enabled in the binaries distributed by NCSA, and
+ will eventually be removed from the HDF5 distribution.
+
+
+ <h3>Constants with Changed Values</h3>
+
+
+</dir>
+<p>
+
+
+
+
+
+
+<a name="145">
+<h2>Release 1.4.5 versus Release 1.4.4</h2>
+</a>
+<dir>
+ <h3>C Library</h3>
+ <dir>
+
+ <b>Added functions:</b>
+ <dir>
+ <table border=0>
+ <tr valign=top align=left><td>
+<pre>
+herr_t H5Pset_fapl_mpiposix(hid_t fapl_id, MPI_Comm comm);
+herr_t H5Pget_fapl_mpiposix(hid_t fapl_id, MPI_Comm *comm/*out*/);
+</pre>
+ </td></tr>
+ </table>
+ </dir>
+
+ <b>Changed functions:</b>
+ <dir>
+ The following functions have changed behavior.
+ <p>
+ <table border=0>
+ <tr valign=top align=left><td>
+ <code>H5Pset_fapl_mpio </code><br>
+ <code>H5Pget_fapl_mpio</code><br>
+ <code>H5Fcreate</code><br>
+ <code>H5Fopen</code><br>
+ <code>H5Fclose</code>
+ </td><td>
+ Previously, the Communicator and Info object arguments supplied
+ to <code>H5Pset_fapl_mpio</code> were stored in the property with
+ its handle values.
+ This meant changes to the communicator or the Info object
+ after calling <code>H5Pset_fapl_mpio</code> would affect the how
+ the property list functioned.
+ This was also the case when <code>H5Fopen/create</code> operated.
+ They just stored the handle value. This is not according to the
+ MPI-2 defined behavior of how Info objects should be handled.
+ (MPI-2 defines Info objects must be parsed when called.)<br>
+ <code>H5Pset_fapl_mpio</code> now stores a duplicate of each of
+ the communicator and Info object.<br>
+ <code>H5Pget_fapl_mpio</code> now returns a duplicate of its
+ stored communicator and Info object.
+ It is now the responsibility of the applications to free
+ those objects when done.<p>
+ <code>H5Fcreate</code> and <code>H5Fopen</code> also store
+ a duplicate of the communicator and Info
+ object supplied by the file access property List.
+ <code>H5Fclose</code> frees the duplicates.<p>
+ Advice to users: User applications should release the communicator and
+ Info object returned by <code>H5Pget_fapl_mpio</code> when they are
+ no longer needed.
+ </td></tr>
+ </table>
+ </dir>
+
+
+
+ <b>Removed functions:</b>
+ <dir>
+ <table border=0>
+ <tr valign=top align=left><td>
+None
+<!--
+<pre>
+List deleted function(s) here. Remove forced spaces.
+</pre>
+-->
+ </td><td>
+
+ </td><td>
+<pre>
+<!-- List deleted function(s) here. Remove forced spaces. -->
+</pre>
+ </td></tr>
+ </table>
+ </dir>
+
+ There were no other public API changes in the C library for this release.
+
+ </dir>
+ <h3>Fortran90 Library</h3>
+ <dir>
+
+
+ The following missing Fortran functions were added:
+<br>
+<br>
+ <code> h5get_libversion_f, h5check_version_f, h5garbage_collect_f, h5dont_atexit_f </code>
+<br>
+ <code> h5tget_member_index_f, h5tvlen_create_f </code>
+<br>
+ <code> h5dget_storage_size_f, h5dvlen_get_max_len_f , h5dwrite_vl_f, h5dread_vl_f</code>
+<br>
+<br>
+ Only <code>integer, real</code> and
+ <code>character</code> types are supported for VL datatypes.
+
+ </dir>
+</dir>
+
+
+<!-- Document API CHANGES ONLY in this file. -->
+
+<a name="144">
+<h2>Release 1.4.4 versus Release 1.4.3</h2>
+</a>
+<dir>
+ <h3>C Library</h3>
+ <dir>
+
+ <b>Added functions:</b>
+ <dir>
+ <table border=0>
+ <tr valign=top align=left><td>
+<pre>
+H5Pget_small_data_block_size
+H5Pset_small_data_block_size
+H5Tget_member_index
+</pre>
+ </td><td>
+
+ </td><td>
+<pre>
+<!-- List added function(s) here. Remove forced spaces. -->
+</pre>
+ </td></tr>
+ </table>
+ </dir>
+
+ <b>Changed functions:</b>
+ <dir>
+ <table border=0>
+ <tr valign=top align=left><td>
+None
+<!--
+<pre>
+List deleted function(s) here. Remove forced spaces.
+</pre>
+-->
+ </td><td>
+
+ </td><td>
+<pre>
+<!-- List deleted function(s) here. Remove forced spaces. -->
+</pre>
+ </td></tr>
+ </table>
+ </dir>
+
+ <b>Removed functions:</b>
+ <dir>
+ <table border=0>
+ <tr valign=top align=left><td>
+None
+<!--
+<pre>
+List deleted function(s) here. Remove forced spaces.
+</pre>
+-->
+ </td><td>
+
+ </td><td>
+<pre>
+<!-- List deleted function(s) here. Remove forced spaces. -->
+</pre>
+ </td></tr>
+ </table>
+ </dir>
+
+ There were no other public API changes in the C library for this release.
+
+ </dir>
+ <h3>Fortran90 Library</h3>
+ <dir>
+
+ <code>h5dwrite_f, h5dread_f, h5awrite_f, h5aread_f </code>were overloaded
+ with <code>dims</code> argument to be assumed size array of type <code>INTEGER(HSIZE_T).</code>
+ We recommend to use the subroutines with the new type. Module subroutines
+ that accept <code>dims</code> as <code>INTEGER</code> array of size <code>7</code> will be deprecated in the 1.6.0 release.
+
+ </dir>
+</dir>
+
+<a name="143">
+<h2>Release 1.4.3 versus Release 1.4.2</h2>
+</a>
+<dir>
+ <h3>C Library</h3>
+ <dir>
+
+ <b>Removed function:</b>
+ <dir>
+ <table border=0>
+ <tr valign=top align=left><td>
+<pre>
+H5Pset_fapl_dpss </pre>
+ </td><td>
+
+ </td><td>
+<pre>
+<!-- new deleted functions here. Remove forced spaces. -->
+</pre>
+ </td><td>
+
+ </td><td>
+<pre>
+<!-- new deleted functions here. Remove forced spaces. -->
+</pre>
+ </td></tr>
+ </table>
+ </dir>
+
+ There were no other public API changes in the C library for this release.
+
+ </dir>
+ <h3>Fortran90 Library</h3>
+ <dir>
+
+ There were no changes to the public Fortran90 APIs for this release.
+
+ </dir>
+</dir>
+
+<a name="142">
+<h2>Release 1.4.2 versus Release 1.4.1</h2>
+</a>
+<dir>
+ <h3>C Library</h3>
+ The HDF5 Release 1.4.2 C library is a "Bugfix Release";
+ there are no API changes in the underlying HDF5 Library.
+
+ <h3>Fortran90 Library</h3>
+ The following functions in the HDF5 Release 1.4.2 Fortran90 library
+ have an additional parameter, <code>dims</code>, that was not present
+ in Release 1.4.1:
+
+<dir>
+<pre>
+<font color=red>h5aread_f</font>(attr_id, memtype_id, buf, dims, hdferr)
+<font color=red>h5awrite_f</font>(attr_id, memtype_id, buf, dims, hdferr)
+<font color=red>h5dread_f</font>(dset_id, mem_type_id, buf, dims, hdferr, mem_space_id, &
+ file_space_id, xfer_prp)
+<font color=red>h5dwrite_f</font>(dset_id, mem_type_id, buf, dims, hdferr, mem_space_id, &
+ file_space_id, xfer_prp)
+</pre>
+</dir>
+
+ The <code>dims</code> parameter enables library portability
+ between the UNIX and Microsoft Windows platforms.
+
+</dir>
+
+
+<a name="141">
+<h2>Release 1.4.1 versus Release 1.4.0</h2>
+</a>
+<dir>
+ Release 1.4.1 is a "Tools Release"; there are no API changes in the
+ underlying HDF5 Library.
+</dir>
+
+
+<a name="140">
+<h2>Release 1.4.0 versus Release 1.2.2</h2>
+</a>
+
+<dir>
+
+ Several functions were added to or removed from the HDF5 Library
+ in the development of Release 1.4.0.
+ A few functions have been modified in minor ways.
+
+ <h3>New Functions</h3>
+ The following functions are new for Release 1.4.0 and are included in the
+ <a href="../RM/RM_H5Front.html"><cite>HDF5 Reference Manual</cite></a>.
+
+<dir>
+<pre>
+herr_t <font color=red>H5Dvlen_get_buf_size</font> (hid_t dataset_id, hid_t type_id,
+ hid_t space_id, hsize_t *size);
+herr_t <font color=red>H5Epush</font> (const char *file, const char *func,
+ unsigned line, H5E_major_t maj, H5E_minor_t min,
+ const char *str);
+hid_t <font color=red>H5Pget_driver</font> (hid_t plist_id);
+void *<font color=red>H5Pget_driver_info</font> (hid_t plist_id);
+herr_t <font color=red>H5Pget_dxpl_mpio</font> (hid_t dxpl_id,
+ H5FD_mpio_xfer_t *xfer_mode/*out*/);
+herr_t <font color=red>H5Pget_dxpl_multi</font> (hid_t dxpl_id,
+ hid_t *memb_dxpl/*out*/);
+herr_t <font color=red>H5Pget_fapl_core</font> (hid_t fapl_id, size_t *increment/*out*/,
+ hbool_t *backing_store/*out*/)
+herr_t <font color=red>H5Pget_fapl_family</font> (hid_t fapl_id,
+ hsize_t *memb_size/*out*/, hid_t *memb_fapl_id/*out*/);
+herr_t <font color=red>H5Pget_fapl_mpio</font> (hid_t fapl_id, MPI_Comm *comm/*out*/,
+ MPI_Info *info/*out*/);
+herr_t <font color=red>H5Pget_fapl_multi</font> (hid_t fapl_id,
+ H5FD_mem_t *memb_map/*out*/, hid_t *memb_fapl/*out*/,
+ char **memb_name/*out*/, haddr_t *memb_addr/*out*/,
+ hbool_t *relax/*out*/);
+herr_t <font color=red>H5Pget_fapl_stream</font> (hid_t fapl_id,
+ H5FD_stream_fapl_t *fapl /*out*/ );
+herr_t <font color=red>H5Pget_meta_block_size</font> (hid_t fapl_id,
+ hsize_t *size/*out*/);
+herr_t <font color=red>H5Pget_sieve_buf_size</font> (hid_t fapl_id,
+ hsize_t *size/*out*/);
+herr_t <font color=red>H5Pset_driver</font> (hid_t plist_id, hid_t driver_id,
+ const void *driver_info);
+herr_t <font color=red>H5Pset_dxpl_mpio</font> (hid_t dxpl_id,
+ H5FD_mpio_xfer_t xfer_mode);
+herr_t <font color=red>H5Pset_dxpl_multi</font> (hid_t dxpl_id,
+ const hid_t *memb_dxpl);
+herr_t <font color=red>H5Pset_fapl_core</font> (hid_t fapl_id, size_t increment,
+ hbool_t backing_store)
+herr_t <font color=red>H5Pset_fapl_family</font> (hid_t fapl_id, hsize_t memb_size,
+ hid_t memb_fapl_id);
+herr_t <font color=red>H5Pset_fapl_log</font> (hid_t fapl_id, char *logfile,
+ int verbosity);
+herr_t <font color=red>H5Pset_fapl_mpio</font> (hid_t fapl_id, MPI_Comm comm,
+ MPI_Info info);
+herr_t <font color=red>H5Pset_fapl_multi</font> (hid_t fapl_id,
+ const H5FD_mem_t *memb_map, const hid_t *memb_fapl,
+ const char **memb_name, const haddr_t *memb_addr,
+ hbool_t relax);
+herr_t <font color=red>H5Pset_fapl_sec2</font> (hid_t fapl_id);
+herr_t <font color=red>H5Pset_fapl_split</font> (hid_t fapl, const char *meta_ext,
+ hid_t meta_plist_id, const char *raw_ext,
+ hid_t raw_plist_id);
+herr_t <font color=red>H5Pset_fapl_stdio</font> (hid_t fapl_id);
+herr_t <font color=red>H5Pset_fapl_stream</font> (hid_t fapl_id,
+ H5FD_stream_fapl_t *fapl);
+herr_t <font color=red>H5Pset_meta_block_size</font>(hid_t fapl_id, hsize_t size);
+herr_t <font color=red>H5Pset_sieve_buf_size</font>(hid_t fapl_id, hsize_t size);
+hid_t <font color=red>H5Tarray_create</font> (hid_t base, int rank, const hsize_t dims[],
+ const int perm[])
+int <font color=red>H5Tget_array_dims</font> (hid_t adtype_id, hsize_t *dims[], int *perm[])
+int <font color=red>H5Tget_array_ndims</font> (hid_t adtype_id)
+</pre>
+</dir>
+
+
+ <p>
+ The following functions are new for Release 1.4.0, but
+ are intended only for use in specialized environments.
+ These are also included in the
+ <a href="../RM/RM_H5Front.html"><cite>HDF5 Reference Manual</cite></a>.
+
+<dir>
+<pre>
+herr_t <font color=red>H5Pget_fapl_dpss</font> (hid_t fapl_id);
+herr_t <font color=red>H5Pget_fapl_gass</font> (hid_t fapl_id, GASS_Info *info/*out*/);
+herr_t <font color=red>H5Pget_fapl_srb</font> (hid_t fapl_id, SRB_Info *info);
+herr_t <font color=red>H5Pset_fapl_dpss</font> (hid_t fapl_id);
+herr_t <font color=red>H5Pset_fapl_gass</font> (hid_t fapl_id, GASS_Info info);
+herr_t <font color=red>H5Pset_fapl_srb</font> (hid_t fapl_id, SRB_Info info);
+</pre>
+</dir>
+
+
+ <p>
+ The following functions are new for Release 1.4.0 but are intended
+ only for driver development work, not for general use.
+ They are listed in the
+ <a href="../TechNotes/VFLfunc.html"><cite>List of VFL Functions</cite></a>
+ document in the
+ <a href="../TechNotes.html"><cite>HDF5 Technical Notes</cite></a>.
+ They are described in detail only in the source code and
+ do not appear in the <cite>HDF5 Reference Manual</cite>.
+
+<dir>
+<pre>
+haddr_t <font color=red>H5FDalloc</font> (H5FD_t *file, H5FD_mem_t type,
+ hsize_t size);
+herr_t <font color=red>H5FDclose</font> (H5FD_t *file);
+int <font color=red>H5FDcmp</font> (const H5FD_t *f1, const H5FD_t *f2);
+herr_t <font color=red>H5FDflush</font> (H5FD_t *file);
+herr_t <font color=red>H5FDfree</font> (H5FD_t *file, H5FD_mem_t type,
+ haddr_t addr, hsize_t size);
+haddr_t <font color=red>H5FDget_eoa</font> (H5FD_t *file);
+haddr_t <font color=red>H5FDget_eof</font> (H5FD_t *file);
+H5FD_t *<font color=red>H5FDopen</font> (const char *name, unsigned flags,
+ hid_t fapl_id, haddr_t maxaddr);
+int <font color=red>H5FDquery</font> (const H5FD_t *f, unsigned long *flags);
+herr_t <font color=red>H5FDread</font> (H5FD_t *file, hid_t dxpl_id, haddr_t addr,
+ hsize_t size, void *buf/*out*/);
+haddr_t <font color=red>H5FDrealloc</font> (H5FD_t *file, H5FD_mem_t type,
+ haddr_t addr, hsize_t old_size, hsize_t new_size);
+hid_t <font color=red>H5FDregister</font> (const H5FD_class_t *cls);
+herr_t <font color=red>H5FDset_eoa</font> (H5FD_t *file, haddr_t eof);
+herr_t <font color=red>H5FDunregister</font> (hid_t driver_id);
+herr_t <font color=red>H5FDwrite</font> (H5FD_t *file, H5FD_mem_t type,
+ hid_t dxpl_id, haddr_t addr, hsize_t size,
+ const void *buf);
+</pre>
+</dir>
+
+
+ <h3>Deleted Functions</h3>
+ The following functions have been removed from the HDF5 Library
+ and from the <cite>HDF5 Reference Manual</cite>.
+ <dir>
+ <table>
+ <tr valign=top align=left><td>
+<pre>
+H5Pget_core
+H5Pget_driver
+H5Pget_family
+H5Pget_mpi
+H5Pget_sec2
+H5Pget_split
+H5Pget_stdio
+H5Pget_xfer
+</pre>
+ </td><td>
+
+ </td><td>
+<pre>
+H5Pset_core
+H5Pset_family
+H5Pset_mpi
+H5Pset_sec2
+H5Pset_split
+H5Pset_stdio
+H5Pset_xfer
+</pre>
+ </td><td>
+
+ </td><td>
+<pre>
+H5RAclose
+H5RAcreate
+H5RAopen
+H5RAread
+H5RAwrite
+H5Tget_member_dims
+H5Tinsert_array
+</pre>
+ </td></tr>
+ </table>
+ </dir>
+ Note that the entire H5RA interface, an experimental interface for
+ ragged arrays, has been removed from the library.
+
+
+ <h3>Functions with Changed Syntax</h3>
+ The following functions have changed slightly.
+ <dir>
+ <dl>
+ <dt><code>H5Pget_buffer</code>
+ <dd>Return type has changed to <em>hsize_t</em>.
+ <dt><code>H5Pset_buffer</code>
+ <dd>The type of the <code>size</code> parameter has changed
+ to <em>hsize_t</em>.
+ <dt><code>H5Tconvert</code>
+ <dd>The type of the <code>nelmts</code> parameter has changed
+ to <em>hsize_t</em>.
+ </dl>
+ </dir>
+
+ <h3>Constants with Changed Values</h3>
+ The values of the constants <code>H5P_DEFAULT</code> and
+ <code>H5S_ALL</code> have been changed from <code>-2</code>
+ to <code>0</code>.
+ These default values had to be special-cased in situations where
+ they could be returned to distinguish them from error values.
+
+</dir>
+<p>
+
+<a name="14">
+<h2>Migration from Release 1.2.2 to Release 1.4.<em>x</em></h2>
+</a>
+
+<dir>
+ <h3>H5Tinsert_array</h3>
+ The functionality of <code>H5Tinsert_array</code> has been replaced by
+ <code>H5Tarray_create</code>.
+ Here is an example of changing code from <code>H5Tinsert_array</code>
+ to <code>H5Tarray_create</code>.
+<pre>
+V1.2.2
+{
+ struct tmp_struct {
+ int a;
+ float f[3];
+ double d[2][4];
+ };
+ size_t f_dims[1]={3};
+ size_t d_dims[2]={2,4};
+ hid_t compound_type;
+
+ compound_type=H5Tcreate(H5T_COMPOUND,sizeof(struct tmp_struct));
+ H5Tinsert(compound_type,"a",HOFFSET(struct tmp_struct,a),H5T_NATIVE_INT);
+ H5Tinsert_array(compound_type,"f",HOFFSET(struct tmp_struct,f),1,f_dims,NULL,H5T_NATIVE_FLOAT);
+ H5Tinsert_array(compound_type,"d",HOFFSET(struct tmp_struct,d),2,d_dims,NULL,H5T_NATIVE_DOUBLE);
+}
+
+V1.4.0
+{
+ struct tmp_struct {
+ int a;
+ float f[3];
+ double d[2][4];
+ };
+ hsize_t f_dims[1]={3};
+ hsize_t d_dims[2]={2,4};
+ hid_t compound_type;
+ hid_t array_type;
+
+ compound_type=H5Tcreate(H5T_COMPOUND,sizeof(struct tmp_struct));
+ H5Tinsert(compound_type,"a",HOFFSET(struct tmp_struct,a),H5T_NATIVE_INT);
+ array_type=H5Tarray_create(H5T_NATIVE_FLOAT,1,f_dims,NULL);
+ H5Tinsert(compound_type,"f",HOFFSET(struct tmp_struct,f),array_type);
+ H5Tclose(array_type);
+ array_type=H5Tarray_create(H5T_NATIVE_DOUBLE,2,d_dims,NULL);
+ H5Tinsert(compound_type,"d",HOFFSET(struct tmp_struct,d),array_type);
+ H5Tclose(array_type);
+}
+
+</pre>
+</dir>
+<br />
+
+
+<!--
+<a name="RELEASE-HISTORY">
+<h2>This and Prior Releases: The RELEASE.txt and HISTORY.txt Files</h2>
+</a>
+
+<dir>
+ The HDF5 source code, as distributed to users and developers,
+ contains two files that will be of interest to readers of this
+ document. Both files are located at the top level of the
+ source code tree and are duplicated here for your reference:
+ <p>
+ <dl>
+ <dt><a href="RELEASE.txt" target="ExtWin">RELEASE.txt</a>
+ <dd>Technical notes regarding the release, including
+ new features and the changes since the last release,
+ notes regarding new or revised utilities,
+ notes regarding alternative language APIs (Fortran90, C++),
+ bugs fixed since the last release,
+ platforms on which the release has been tested, and
+ known problems.
+ This is the file commonly known as "the release notes."
+ <p>
+ <dt><a href="HISTORY.txt" target="ExtWin">HISTORY.txt</a>
+ <dd>A release-by-release history of the HDF5 Library.
+ This file is a compiled set of the release notes
+ (i.e., the RELEASE.txt files) from prior releases.
+ <dl>
+</dir>
+-->
+
+
+
+<!-- #BeginLibraryItem "/ed_libs/NavBar_ADevG.lbi" -->
+<hr />
+<center>
+<table border="0" width="98%">
+<tr><td valign="top" align="left">
+ <a href="../index.html">HDF5 documents and links</a> <br>
+ <a href="../H5.intro.html">Introduction to HDF5</a> <br>
+ <!--
+ <a href="Glossary.html">Glossary</a><br>
+ -->
+</td>
+<td valign="top" align="right">
+ <a href="../UG/index.html">HDF5 User's Guide</a> <br>
+ <a href="../RM/RM_H5Front.html">HDF5 Reference Manual</a> <br>
+ <a href="../ADGuide.html">HDF5 Application Developer's Guide</a> <br>
+</td></tr>
+</table>
+</center>
+<hr>
+<!-- #EndLibraryItem -->
+
+
+<?php include("../ed_libs/Footer2.htm"); ?>
+
+<!-- Created: Spring 1999 -->
+<!-- hhmts start -->
+<hr />
+Last modified: 26 September 2014
+<!-- hhmts end -->
+<br />
+<br />
+<br />
+
+</body>
+</html>
diff --git a/html/ADGuide/Changes.html b/html/ADGuide/Changes_1_8_x.html
similarity index 74%
copy from html/ADGuide/Changes.html
copy to html/ADGuide/Changes_1_8_x.html
index fafae9c..5035c61 100755
--- a/html/ADGuide/Changes.html
+++ b/html/ADGuide/Changes_1_8_x.html
@@ -24,28 +24,33 @@
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-->
<!-- #EndLibraryItem --><!-- #BeginLibraryItem "/ed_libs/NavBar_ADevG.lbi" -->
-<hr>
+<hr />
<center>
-<table border=0 width=98%>
-<tr><td valign=top align=left>
+<table border="0" width="98%">
+<tr><td valign="top" align="left">
<a href="../index.html">HDF5 documents and links</a> <br>
<a href="../H5.intro.html">Introduction to HDF5</a> <br>
<!--
<a href="Glossary.html">Glossary</a><br>
-->
</td>
-<td valign=top align=right>
+<td valign="top" align="right">
<a href="../UG/index.html">HDF5 User's Guide</a> <br>
<a href="../RM/RM_H5Front.html">HDF5 Reference Manual</a> <br>
<a href="../ADGuide.html">HDF5 Application Developer's Guide</a> <br>
</td></tr>
</table>
</center>
-<hr>
-<!-- #EndLibraryItem --><center>
-<h1>HDF5 Software Changes from Release to Release</h1>
-</center>
+<hr />
+<!-- #EndLibraryItem -->
+<br />
+<center>
+<h1>HDF5 Software Changes from Release to Release
+<br />
+for HDF5 Releases 1.8.x</h1>
+</center>
+<br />
<!-- *********************************************************** -->
@@ -56,51 +61,43 @@
<!-- *********************************************************** -->
+<p>This document covers HDF5 releases in the HDF5 Release 1.8.x
+series prior to the current release.
+For each release, we list new features and changes in
+the existing HDF5 feature set,
+the HDF5 application programming interface (API), and
+the command-line tools distributed with the HDF5 Library.
+The intent is to note changes that application developers must be
+aware of when maintaining applications or libraries
+that must work with progressively newer versions of HDF5.
+<p>
+See “<a href="Changes.html">HDF5 Software Changes from Release
+to Release</a>” for:
+ <ul>
+ <li>Changes in the current release in the HDF5 Release 1.8 series</li>
+ <li>Further description of this document and links to related
+ documents</li>
+ </ul>
+<p>
+See “<a href="Changes_1_4-1_6.html">HDF5 Software Changes from Release
+to Release for HDF5 Releases 1.4.0 through 1.6.10</a>” for:
+ <ul>
+ <li>Changes in HDF5 Releases 1.4.x and 1.6.x series</li>
+ </ul>
+<p>
-This document is provided to assist application developers who must keep
-an application synchronized with the HDF5 Library or related software.
-
+<br />
-<!-- ============= REVEAL THE FOLLOWING FOR RELEASE 1.8.14 =============
-<a name="1814">
-<h2>Release 1.8.14 of November 2014 (current release) versus Release 1.8.13</h2>
-</a>
-<dir>
-This section lists interface-level changes and
-other user-visible changes in behavior
-in the transition from HDF5 Release 1.8.13 to Release 1.8.14.
- <h3>New and Changed Functions, Classes, Subroutines, Wrappers,
- and Macros</h3>
- <dir>
- <dl>
- <dt><strong>In the C Interface (main library)</strong>
- <dt>The following new C functions have been added:
- </dt>
- <dd>To enable a single write or read call to operate
- on multiple datasets:
- <ul>
- <li><a href="../RM/RM_H5D.html#Dataset-WriteMulti">
- <code>H5Dwrite_multi</code></a>
- <li><a href="../RM/RM_H5D.html#Dataset-ReadMulti">
- <code>H5Dread_multi</code></a>
- <li>Related struct: <code>H5D_rw_multi_t</code>
- </ul>
- <br />
- </dd>
- </dl>
- </dir>
-</dir>
-============= REVEAL THE ABOVE FOR RELEASE 1.8.14 ============= -->
<a name="1813">
-<h2>Release 1.8.13 of May 2014 (current release) versus Release 1.8.12</h2>
+<h2>Release 1.8.13 of May 2014 versus Release 1.8.12</h2>
</a>
<dir>
@@ -109,9 +106,13 @@ other user-visible changes in behavior
in the transition from HDF5 Release 1.8.12 to Release 1.8.13.
+
+
<h3>New and Changed Functions, Classes, Subroutines, Wrappers,
and Macros</h3>
<dir>
+
+
<dl>
<dt><strong>In the C Interface (main library)</strong>
@@ -265,6 +266,10 @@ in the transition from HDF5 Release 1.8.12 to Release 1.8.13.
<dd>Additional overloads to the
class <code>Attribute</code>
to get an attribute’s name for convenience:
+
+
+
+
<pre>
ssize_t getName(char* attr_name, size_t buf_size=0)
ssize_t getName(H5std_string& attr_name, size_t buf_size=0)
@@ -1224,6 +1229,7 @@ in the transition from HDF5 Release 1.8.10 to Release 1.8.11.
<h3>Function<!--s-->, Subroutines, <!--Wrappers, Macros,-->
and Feature<!--s--> with Changed Syntax or Behavior</h3>
+
<dir>
<dl>
<dt>The return value of the following high-level C function
@@ -1264,6 +1270,8 @@ in the transition from HDF5 Release 1.8.10 to Release 1.8.11.
</dir>
+
+
<!-- DEPRECATION OF H5Pset_fapl_multi IS ON HOLD PENDING FURTHER INVESTIGATION.
<h3>Deprecated Function</h3>
<dir>
@@ -1273,6 +1281,9 @@ in the transition from HDF5 Release 1.8.10 to Release 1.8.11.
<dd>
<li><a href="../RM/RM_H5P.html#Property-SetFcplMulti">
<code>H5Pset_fapl_multi</code></a>
+
+
+
</dd>
<p>
This function may be removed from the library
@@ -1334,6 +1345,7 @@ in the transition from HDF5 Release 1.8.10 to Release 1.8.11.
</dir>
+
</dir>
@@ -7254,6 +7266,7 @@ in the transition to HDF5 Release 1.8.0 from the Release 1.6.<i>x</i> series.
<i>(This note added at Release 1.8.4, November 2009.)</i>
<p />
+
<li>In the function <code>H5Dextend</code>,
the <code>size</code> parameter signature was changed.
<dir>
@@ -7773,3314 +7786,99 @@ in the transition to HDF5 Release 1.8.0 from the Release 1.6.<i>x</i> series.
-<a name="1610">
-<h2>Release 1.6.10 versus Release 1.6.9,
- November 2009</h2>
+<a name="current">
+<h2>Current Release of HDF5</h2>
</a>
<dir>
-This section lists interface-level changes and
-other user-visible changes in behavior
-in the transition from HDF5 Release 1.6.9 to Release 1.6.10.
-
-</dir>
-<dir>
-
- <h3>Embedded HDF5 Library Settings Information</h3>
-
- <dl>
- <dd>Library settings are now embedded in an HDF5 executable
- so that an “orphaned” executable can be queried
- (via the Unix strings command, for example) to display the
- library settings used to build it.
- The embedded settings information is the same as that
- normally found in the <code>libhdf5.settings</code> file.
- <p>
- This capability may be disabled with the use of the
- <code>--disable-embedded-libin</code> flag during configure.
- </dl>
-
- <h3>Function with Changed Interface or Behavior</h3>
-
- <dl>
- <dd><a href="../RM/RM_H5.html#Library-VersCheck">
- <code>H5check_version</code></a> now displays
- embedded library information (see above)
- if a version mismatch is detected.
- <p>
- The function has also been changed to suppress the
- warning message entirely if
- <code>$HDF5_DISABLE_VERSION_CHECK</code> is set to
- <code>2</code> or higher.
- </dl>
-
-</dir>
-<dir>
-
- <h3>New C++ Member Function</h3>
-
- <dl>
- <dd>New C++ member functions are provided to
- determine a dataset’s or attribute’s
- data size in memory:
- <p>
- <code>
-
- size_t DataSet::getInMemDataSize() const</code>
- <br>
- <code>
-
- size_t Attribute::getInMemDataSize() const</code>
- <p>
- The size in each case is in bytes.
- </dl>
-
-</dir>
-<dir>
-
- <h3>Tool with Changed Interface or Behavior</h3>
-
- <dl>
- <dd><a href="../RM/Tools.html#Tools-Diff"><code>h5diff</code></a>
- has one new option:
- <p>
- <code> --use-system-epsilon</code>
- <p>
- With this option, <code>h5diff</code> returns a difference
- if and only if the difference between two data values
- exceeds the system value for epsilon
- (that is, if <code>|a-b| > <i>epsilon</i></code>).
- <p>
- The tool’s default behavior has also changed;
- without this option, the tool now checks for strict equality.
- <p>
- This option has no short form.
- <p>
- </dl>
+Change notes for the current release of HDF5 are published in
+“<a href="Changes.html">HDF5 Software Changes from
+Release to Release</a>”.
</dir>
+<br />
-
-<a name="169">
-<h2>Release 1.6.9 versus Release 1.6.8,
- May 2009</h2>
+<a name="1610">
+<h2>Releases 1.6.10 and Earlier</h2>
</a>
<dir>
-This section lists API-level changes and changes in behavior
-in the transition from HDF5 Release 1.6.8 to Release 1.6.9.
-
-
- <h3>API Compatibility Macros</h3>
-
- To facilitate writing applications that work with
- both the HDF5 Release 1.6 series and the 1.8 series,
- API compatibility macros analogous to those in 1.8
- have been defined. These macros map directly to the
- relevant functions and typedefs. Note that only the
- 1.6-style macros are supported in this branch.
- <p>
- Any program that is written using these macros
- exculsively will work with both the 1.6 and 1.8
- series HDF5 Libraries. The program will work without
- having to use any special flags or definitions, as
- long as the 1.8 library was compiled with support
- for deprecated symbols, which is the default.
- <p>
- Following is a list of macros and the
- symbols they alias:
- <p>
- <dl><dd><table width="90%">
- <tr>
- <td valign="top" align="left" width="20%">
- <strong>Macro</strong></td>
- <td valign="top" align="left">
- <strong>Symbol</strong></td>
- </tr>
- <tr>
- <td valign="top"><code>H5Acreate1</code></td>
- <td valign="top"><code>H5Acreate</code></td>
- </tr>
- <tr>
- <td valign="top"><code>H5Aiterate1</code></td>
- <td valign="top"><code>H5Aiterate</code></td>
- </tr>
- <tr>
- <td valign="top"><code>H5A_operator1_t</code></td>
- <td valign="top"><code>H5A_operator_t</code></td>
- </tr>
- <tr>
- <td valign="top"><code>H5Dcreate1</code></td>
- <td valign="top"><code>H5Dcreate</code></td>
- </tr>
- <tr>
- <td valign="top"><code>H5Dopen1</code></td>
- <td valign="top"><code>H5Dopen</code></td>
- </tr>
- <tr>
- <td valign="top"><code>H5Eclear1</code></td>
- <td valign="top"><code>H5Eclear</code></td>
- </tr>
- <tr>
- <td valign="top"><code>H5Eget_auto1</code></td>
- <td valign="top"><code>H5Eget_auto</code></td>
- </tr>
- <tr>
- <td valign="top"><code>H5Eprint1</code></td>
- <td valign="top"><code>H5Eprint</code></td>
- </tr>
- <tr>
- <td valign="top"><code>H5Epush1</code></td>
- <td valign="top"><code>H5Epush</code></td>
- </tr>
- <tr>
- <td valign="top"><code>H5Eset_auto1</code></td>
- <td valign="top"><code>H5Eset_auto</code></td>
- </tr>
- <tr>
- <td valign="top"><code>H5Ewalk1</code></td>
- <td valign="top"><code>H5Ewalk</code></td>
- </tr>
- <tr>
- <td valign="top"><code>H5E_walk1_t</code></td>
- <td valign="top"><code>H5E_walk_t</code></td>
- </tr>
- <tr>
- <td valign="top"><code>H5E_error1_t</code></td>
- <td valign="top"><code>H5E_error_t</code></td>
- </tr>
- <tr>
- <td valign="top"><code>H5Gcreate1</code></td>
- <td valign="top"><code>H5Gcreate</code></td>
- </tr>
- <tr>
- <td valign="top"><code>H5Gopen1</code></td>
- <td valign="top"><code>H5Gopen</code></td>
- </tr>
- <tr>
- <td valign="top"><code>H5Pget_filter1</code></td>
- <td valign="top"><code>H5Pget_filter</code></td>
- </tr>
- <tr>
- <td valign="top"><code>H5Pget_filter_by_id1</code></td>
- <td valign="top"><code>H5Pget_filter_by_id</code></td>
- </tr>
- <tr>
- <td valign="top"><code>H5Pinsert1</code></td>
- <td valign="top"><code>H5Pinsert</code></td>
- </tr>
- <tr>
- <td valign="top"><code>H5Pregister1</code></td>
- <td valign="top"><code>H5Pregister</code></td>
- </tr>
- <tr>
- <td valign="top"><code>H5Rget_obj_type1</code></td>
- <td valign="top"><code>H5Rget_obj_type</code></td>
- </tr>
- <tr>
- <td valign="top"><code>H5Tarray_create1</code></td>
- <td valign="top"><code>H5Tarray_create</code></td>
- </tr>
- <tr>
- <td valign="top"><code>H5Tcommit1</code></td>
- <td valign="top"><code>H5Tcommit</code></td>
- </tr>
- <tr>
- <td valign="top"><code>H5Tget_array_dims1</code></td>
- <td valign="top"><code>H5Tget_array_dims</code></td>
- </tr>
- <tr>
- <td valign="top"><code>H5Topen1</code></td>
- <td valign="top"><code>H5Topen</code></td>
- </tr>
- <tr>
- <td valign="top"><code>H5E_auto1_t</code></td>
- <td valign="top"><code>H5E_auto_t</code></td>
- </tr>
- <tr>
- <td valign="top"><code>H5Z_class1_t</code></td>
- <td valign="top"><code>H5Z_class_t</code></td>
- </tr>
- </code>
- </table></dl>
- <p>
- Note that for the 1.6 series, the numbered symbols are macros,
- while in the 1.8 series, the non-numbered symbols are
- macros. This was done because there is no need to
- switch between different API versions in the 1.6 series.
- <p>
- <code>H5Z_class1_t</code> was introduced in Release 1.6.9 while all the
- others were introduced in Release 1.6.8. For more information see
- <cite><a href="http://www.hdfgroup.org/HDF5/doc/RM/APICompatMacros.html">API
- Compatibility Macros</a></cite>, an HDF5 Release 1.8-series document.
- <p>
-
+Change notes for HDF5 Release 1.6.10 and earlier releases
+are published in
+“<a href="Changes_1_4-1_6.html">HDF5 Software Changes from
+Release to Release for HDF5 Releases 1.4.0 through 1.6.10</a>”.
</dir>
-<dir>
-
- <h3>Tools with Changed Interface or Behavior</h3>
-
- <dl>
- <dt><a href="../RM/Tools.html#Tools-Diff"><code>h5diff</code></a>
- <dd>The default behavior of <code>h5diff</code> is now
- to detect and compare NaNs.
- Use the <code>-N</code> or <code>--nan</code>
- option (below) to turn this behavior off and
- avoid the performance penalty that NaN detection
- and comparison entalis.
- (NaN detection and comparison became the default in
- in HDF5 Release 1.6.8.)
- <p>
- <dd>This tool has two new options:
- <p>
- <code>-c</code>, <code>--compare</code>
- <code> </code>
- Lists objects that are not comparable.
-
- <p>
- <code>-N</code>, <code>--nan</code>
- <code> </code>
- Avoids NaNs detection.
- <p>
-
- <dt><a href="../RM/Tools.html#Tools-Dump"><code>h5dump</code></a>
- <dd><code>h5dump</code> now correctly specifies an XML DTD
- or a schema URL.
- <p>
- <dd><code>h5dump</code> binary output now defaults to
- <code>NATIVE</code>.
- <p>
- <dd>The new <code>-b</code>, <code>--binary</code> option
- can be used to specify alternate binary formats.
- <p>
-
- <dt><a href="../RM/Tools.html#Tools-Repack"><code>h5repack</code></a>
- <dd>When a user does not specify a chunk size,
- <code>h5repack</code> now defines the default chunk size
- to be the same same as the size of the hyperslab used
- to read the chunks.
- <p>
- </dl>
+<br />
-</dir>
<!--
-<dir>
-
-
- <h3>Deprecated Functions</h3>
-
- The following functions are deprecated as of this release:
- <pre> <a href="../RM/RM_H5P.html#Property-SetPreserve">H5Pset_preserve</a>
- <a href="../RM/RM_H5P.html#Property-GetPreserve">H5Pget_preserve</a> </pre>
- <p>
- The original role of these functions is now
- part of the core HDF5 Library functionality.
- <p>
-
+<a name="RELEASE-HISTORY">
+<h2>This and Prior Releases: The RELEASE.txt and HISTORY.txt Files</h2>
+</a>
- <h3>Changed File Installation</h3>
- The file <code>libhdf5_fortran.settings</code> is no longer
- installed with the HDF5 Library;
- the original content of that file is now included in
- <code>libhdf5.settings</code>.
-
+<dir>
+ The HDF5 source code, as distributed to users and developers,
+ contains two files that will be of interest to readers of this
+ document. Both files are located at the top level of the
+ source code tree and are duplicated here for your reference:
+ <p>
+ <dl>
+ <dt><a href="RELEASE.txt" target="ExtWin">RELEASE.txt</a>
+ <dd>Technical notes regarding the release, including
+ new features and the changes since the last release,
+ notes regarding new or revised utilities,
+ notes regarding alternative language APIs (Fortran90, C++),
+ bugs fixed since the last release,
+ platforms on which the release has been tested, and
+ known problems.
+ This is the file commonly known as "the release notes."
+ <p>
+ <dt><a href="HISTORY.txt" target="ExtWin">HISTORY.txt</a>
+ <dd>A release-by-release history of the HDF5 Library.
+ This file is a compiled set of the release notes
+ (i.e., the RELEASE.txt files) from prior releases.
+ <dl>
</dir>
-->
-<a name="168">
-<h2>Release 1.6.8 versus Release 1.6.7,
- November 2008</h2>
-</a>
-
-<dir>
-
-This section lists API-level changes and changes in behavior
-in the transition from HDF5 Release 1.6.7 to Release 1.6.8.
-
+<!-- #BeginLibraryItem "/ed_libs/NavBar_ADevG.lbi" -->
+<hr />
+<center>
+<table border="0" width="98%">
+<tr><td valign="top" align="left">
+ <a href="../index.html">HDF5 documents and links</a> <br>
+ <a href="../H5.intro.html">Introduction to HDF5</a> <br>
+ <!--
+ <a href="Glossary.html">Glossary</a><br>
+ -->
+</td>
+<td valign="top" align="right">
+ <a href="../UG/index.html">HDF5 User's Guide</a> <br>
+ <a href="../RM/RM_H5Front.html">HDF5 Reference Manual</a> <br>
+ <a href="../ADGuide.html">HDF5 Application Developer's Guide</a> <br>
+</td></tr>
+</table>
+</center>
+<hr>
+<!-- #EndLibraryItem -->
- <h3>Functions with Changed Syntax</h3>
+<?php include("../ed_libs/Footer2.htm"); ?>
- The following function syntaxes have changed;
- the affected return values and parameter are noted as
- <font color=red><u>underscored red text</u></font>.
- <p>
- <dl>
- <dt><u>C function:</u>
- <dt><a href="../RM/RM_H5F.html#File-GetObjCount">
- <code>H5Fget_obj_count</code></a>
- <dd><code>
- <font color=red><u>
- ssize_t</u></font> H5Fget_obj_count(
- <em>hid_t </em><code>file_id</code>,
- <em>unsigned int</em> <code>types</code>
- )
- </code>
- <p>
- <dt><a href="../RM/RM_H5F.html#File-GetObjIDs">
- <code>H5Fget_obj_ids</code></a>
- <dd><code>
- <font color=red><u>
- ssize_t</u></font> H5Fget_obj_ids(
- <em>hid_t </em><code>file_id</code>,
- <em>unsigned int</em> <code>types</code>,
- <br>
-
- <font color=red><u>
- <em>size_t</em> <code>max_objs</code></u></font>,
- <em>hid_t *</em><code>obj_id_list</code>
- )
- </code>
- </dl>
- <p>
-</dir>
-<dir>
-
- <h3>Tools with Changed Interface or Behavior</h3>
-
- <dl>
- <dt><a href="../RM/Tools.html#Tools-Repack"><code>h5repack</code></a>
- and <a href="../RM/Tools.html#Tools-Diff"><code>h5diff</code></a>
- <dd>The standard command-line syntax of both tools
- has been changed to parallel that of <code>h5dump</code>.
- The new syntax of each is as follows:
- <p>
- <code>
- h5repack [<i>OPTIONS</i>] <i>file1 file2</i>
- </code>
- <p>
- <code>
- h5diff [<i>OPTIONS</i>] <i>file1 file2</i>
- [<i>object1</i> [<i>object2</i>]]
- </code>
- <p>
- In each case,
- the old syntax remains available (though undocumented)
- to avoid breaking existing scripts.
- <p>
- </dl>
-
-</dir>
-<dir>
-
- <dl>
- <dt><a href="../RM/Tools.html#Tools-Diff"><code>h5diff</code></a>
- <dd><code>h5diff</code> now returns <code>1</code>
- if the files differ in structure,
- i.e., if the file graphs differ by any object.
- <p>
- The tool’s error return code has been changed
- to <code>2</code>.
- <p>
-
- <dt><a href="../RM/Tools.html#Tools-Repack"><code>h5repack</code></a>
- <dd>The following new options control the addition of
- user block data to an existing HDF5 file:
- <dir>
- <table>
- <tr valign=top><td>
- <code>-u <em>U</em></code>
- <br>
- <code>--ublock=<em>U</em></code>
- </td><td> </td><td>
- Specifies the name of the file containing the
- user block data to be added.
- </td></tr>
- <tr valign=top><td>
- <br>
- <code>-b <em>B</em></code>
- <br>
- <code>--block=<em>B</em></code>
- </td><td> </td><td>
- <br>
- Specifies the size of the block to be added.
- </td></tr>
- </table>
- </dir>
- <p>
-
- <dd>The following new options set parameters
- governing the tool’s use of
- <code>H5Pset_alignment</code>:
- <dir>
- <table>
- <tr valign=top><td>
- <code>-t <em>T</em></code>
- <br>
- <code>--threshold=<em>T</em></code>
- </td><td> </td><td>
- Specifies the threshold value for
- <code>H5Pset_alignment</code>.
- </td></tr>
- <tr valign=top><td>
- <br>
- <code>-a <em>A</em></code>
- <br>
- <code>--alignment=<em>A</em></code>
- </td><td> </td><td>
- <br>
- Specifies the alignment value for
- <code>H5Pset_alignment</code>.
- </td></tr>
- </table>
- </dir>
- <p>
-
- <dd><code>h5repack</code> now supports multiple instances of
- the <code>'-f'</code> or <code>'--filter'</code> option,
- allowing the use of multiple I/O filters with an object.
- <p>
- <dd>With no change in the command-line syntax,
- <code>h5repack</code> now retains an existing userblock
- when repacking an HDF5 file.
- <p>
-
- <dt><a href="../RM/Tools.html#Tools-Import"><code>h5import</code></a>
- <dd>The floating point format flag <code>TEXTFPE</code>,
- for scientific notation, has been deprecated.
- The flag <code>TEXTFP</code>, which accepts
- scientific notation, should be used instead.
- <p>
-
- <dd><code>h5import</code> now imports string data
- with the <code>STR</code> keyword
- in the <code>INPUT-CLASS</code> configuration field.
- <p>
-
- <dt><a href="../RM/Tools.html#Tools-Dump"><code>h5dump</code></a>
- <dd>The new <code>'-m <i>T</i>'</code> or
- <code>'--format <i>T</i>'</code> option
- enables a user-defined formatting string
- for printing floating-point numbers.
- <p>
- <dd>With no change in the command-line syntax,
- <code>h5dump</code> now prints a compression ratio
- when compression filters are in use.
-
- </dl>
-
-</dir>
-<dir>
-
-
- <h3>Deprecated Functions</h3>
-
- The following functions are deprecated as of this release:
- <pre> <a href="../RM/RM_H5P.html#Property-SetPreserve">H5Pset_preserve</a>
- <a href="../RM/RM_H5P.html#Property-GetPreserve">H5Pget_preserve</a> </pre>
- <p>
- The original role of these functions is now
- part of the core HDF5 Library functionality.
- <p>
-
-
- <h3>Changed File Installation</h3>
- The file <code>libhdf5_fortran.settings</code> is no longer
- installed with the HDF5 Library;
- the original content of that file is now included in
- <code>libhdf5.settings</code>.
-
-
-
-</dir>
-
-
-<a name="167">
-<h2>Release 1.6.7 versus Release 1.6.6</h2>
-</a>
-
-<dir>
-
-This section lists the API-level changes that have been made in the
-transition from the HDF5 Release 1.6.6 to Release 1.6.7.
-As this is primarily a bug-fix release,
-the only interface changes are one changed function signature and
-the changes related to the removal of the
-stream I/O driver, as outlined below.
-
-
- <h3>Function with Changed Syntax</h3>
-
- The following function syntax has changed;
- the affected parameter is noted in <font color=red>red</font>.
- <p>
- <dl>
- <dt><u>C function:</u>
- <dt><code>H5Sselect_elements</code>
- <dd><code>
- herr_t H5Sselect_elements(
- <em>hid_t </em><code>space_id</code>,
- <em>H5S_seloper_t</em> <code>op</code>,
- <br>
-
- <em>size_t</em> <code>num_elements</code>,
- <font color=red>
- <em>const hsize_t *</em><code>coord</code>
- </font>
- )
- </code>
- </dl>
- <p>
- <cite>(This syntax change was listed on 10 September 2008,
- several months after Release 1.6.7.)</cite>
-
-
- <h3>Stream I/O Driver Removed</h3>
-
- The stream I/O driver, <code>H5FD_STREAM</code>, has been
- removd from and is no longer distributed with the HDF5 Library.
- The following APIs have therefore been removed from this release.
- <br>
- <code>H5Pset_fapl_stream</code>
- <br>
- <code>H5Pget_fapl_stream</code>
- <br>
- The stream driver <small>ENUM</small> value <code>H5FD_STREAM</code>
- has also been removed.
-
- <p>
- While the stream driver is no longer distributed by The HDF Group,
- it will be made available as a source code distribution from
- <a href="http://hdf5-addons.origo.ethz.ch/">
- <code>http://hdf5-addons.origo.ethz.ch/</code></a>.
- An integration mechanism will be developed and
- instructions for using the driver with HDF5
- will be posted on that site.
-
-</dir>
-
-<a name="166">
-<h2>Release 1.6.6 versus Release 1.6.5</h2>
-</a>
-
-<dir>
-
-This section lists the API-level changes that have been made in the
-transition from the HDF5 Release 1.6.5 to Release 1.6.6.
-<p>
-
-Release 1.6.6 is primarily a bug-fix release and includes
-no changes in the syntax or intended behavior of
-the library’s public interfaces.
-
-There are, however, two changes in tool interfaces.
-
-<!--
- <h3>New Functions and Tools</h3>
- <dl>
- <dt>C functions:
- <dd>None.
- <dd>The following C functions are new for Release 1.6.6 and
- are documented in the
- <a href="../RM/RM_H5Front.html"><cite>HDF5 Reference Manual</cite></a>.
-
- <table border="0">
- <tr>
- <td align="left" valign="top"><code>FUNCTION NAME</code>
- </td>
- <td align="left" valign="top"><em>FUNCTION</em> <code>SYNTAX</code>
- <br>
- See <a href="../RM/RM_H5[FUNCTION ENTRY URL]">entry</a>.</td>
- </tr>
- </table>
-
-
- <dd>
- <dt>Fortran subroutines:
- <dd>None.
-
- <dd>The following Fortran90 subroutines are new for Release 1.6.6
- and are documented in the
- <a href="../RM/RM_H5Front.html"><cite>HDF5 Reference Manual</cite></a>.
- <table border="0">
- <tr>
- <td align="left" valign="top">Corresponding to the
- new C functions listed above:<br>
- <code>FORTRAN_SUBROUTINE_NAME_f</code><br>
- </td>
- <td align="left" valign="top">
- </td>
- </tr>
- </table>
-
-
- <dd>
- <dt>Tools:
- <dd>None.
-
- <dd>The following tools are new for Release 1.6.6 and are
- documented on the <a href="../RM/Tools.html">Tools page</a> of the
- <a href="../RM/RM_H5Front.html"><cite>HDF5 Reference Manual</cite></a>.
- <dd><code>h5repack</code> description...
-
- <dd><code>h5repack</code> description...
-
- </dl>
-
-
- <h3>Deleted Functions</h3>
-
- None.
-
- The following functions are deprecated in HDF5 Release X.X.x.
- A backward compatibility mode is provided in this release,
- enabling these functions and other Release 1.4.x compatibility
- features, but is available only when the HDF5 Library is
- configured with the flag <code>H5_WANT_H5_V1_4_COMPAT</code>.
- The backward compatibility mode is not enabled in the
- binaries distributed by NCSA.
-
- <dir>
- <table border=0>
- <tr valign="top" align="left"><td>
-
- </td><td>
-<pre>
-<code>function</code>
-</pre>
- </td><td>
-
- </td><td>
-<pre>
-<code>function</code>
-</pre>
- </td><td>
-
- </td><td>
-<pre>
-
-</pre>
- </td></tr>
- </table>
- </dir>
- <p>
- The above functions will eventually be removed from the HDF5
- distribution and from the <cite>HDF5 Reference Manual</cite>.
-
-
- <h3>Functions with Changed Syntax</h3>
-
- None.
-
-
- The following functions have changed as noted.
-
- <dl>
- <dt>C functions:
- <dt><code>H5function?</code>
- <dd>Change....
-
- <dd>
- <dt>Fortran90 subroutines:
- <dt><code>h5subroutine_f?</code>
- <dd>Change...
- </dl>
-
-
- <h3>Constants with Changed Values</h3>
-
- None.
--->
-
-
- <h3>Tools with Changed Options and/or Behavior</h3>
-
-
- <dl>
- <dt>The following tools have changed in this release;
- these changes are documented on the
- <a href="../RM/Tools.html">Tools page</a> of the
- <a href="../RM/RM_H5Front.html"><cite>HDF5 Reference Manual</cite></a>.
- <br>
- <dd><code>h5repack</code>:
- <br>
- A new <code>-n</code> option allows the user to specify
- that a new file created by <code>h5repack</code> will use
- native datatypes.
- The default behavior is to use the original file datatypes.
- <table>
- <tr valign=top>
- <td> </td>
- <td><code>-n</code> </td>
- <td>Use native HDF5 datatypes when repacking.
- <br>
- (Default behavior is to use the original
- file datatypes.)
- </td></tr>
- </table>
- <em>Note that the default behavior of this tool
- has changed;
- prior to Release 1.6.6, </em><code>h5repack</code>
- <em> generated files only with native datatypes.</em>
-
-
- <p>
- <dd><code>h5dump</code>:
- <br>
- This tool includes a new <code>-b</code> option
- for binary output.
- <table>
- <tr valign=top>
- <td> </td>
- <td><code>-b <em>B</em></code> or
- <br>
- <code>--binary=<em>B</em> </code></td>
- <td valign="top">Output dataset to a binary file
- using the datatype specified by
- <code><em>B</em></code>.
- <br>
- <code><em>B</em></code> must have one of the
- following values:
- <br>
-
- <code>LE </code>
- Little-endian
- <br>
-
- <code>BE </code>
- Big-endian
- <br>
-
- <code>MEMORY </code>
- Memory datatype
- <br>
-
- <code>FILE </code>
- File datatype
- <br>
- Recommended usage is with the <code>-d</code> and
- <code>-o</code> options.
- </td>
- </tr>
- </table>
-
-
- </dl>
- </dl>
- </dir>
-<p>
-
-
-
-
-<a name="165">
-<h2>Release 1.6.5 versus Release 1.6.4</h2>
-</a>
-
-<dir>
-
-This section lists the API-level changes that have been made in the
-transition from the HDF5 Release 1.6.4 to Release 1.6.5.
-
-
- <h3>New Functions and Tools</h3>
- <dl>
-
- <dt>C functions and
- <dt>Fortran subroutines:
- <dd>HDF5 Release 1.6.5 is primarily a maintenance release,
- focusing on bugfixes, optimization and portability;
- there are no new C APIs or Fortran subroutines.
-
-
-<!--
- <dd>
- <dd>The following C functions are new for Release 1.6.4 and
- are documented in the
- <a href="../RM/RM_H5Front.html"><cite>HDF5 Reference Manual</cite></a>.
-
- <table border="0">
- <tr>
- <td align="left" valign="top"><code>function</code>
- </td>
- <td align="left" valign="top">syntax<br>
- See <a href="../RM/RM_H5__.html#__">entry</a>.</td>
- </tr>
-
- </table>
--->
-
- <dd>
- <dt>High Level C APIs:
- <dd>The High Level C APIs (HL), including the HDF5 Image,
- HDF5 Table, and HDF5 Lite interfaces
- (H5IM, H5TB, and H5LT, respectively),
- have been distributed with the main HDF5 source code distribution
- since Release 1.6.4 and are documented in
- <a href="http://www.hdfgroup.org/HDF5/hdf5_hl/doc/index.html">
- <cite>HDF5: High Level APIs</cite></a>.
- (<i>Note:</i> In release 1.8 and later, the HL APIs are
- documented in the <cite>HDF5 Reference Manual</cite>.)
-
-
- <dd>
- <dt>C++ wrappers:
- <dd><code>void PropList::copyProp(PropList& dest, const char* name) const</code>
- <dd><code>void PropList::copyProp(PropList& dest, const string& name) const</code>
- <dd><code>string CommonFG::getComment(const string& name) const</code>
- <dd><code>void CommonFG::removeComment(const char* name) const</code>
- <dd><code>void CommonFG::removeComment(const string& name) const</code>
- <dd><code>hsize_t Attribute::getStorageSize() const</code>
- <dd><code>void Attribute::close()</code>
- <dd><code>void DataSet::close()</code>
- <dd><code>void DataSpace::close()</code>
- <dd><code>void DataType::close()</code>
- <dd><code>void H5File::close()</code>
- <dd><code>void Group::close()</code>
- <dd><code>void PropList::close()</code>
- <dd><code>H5T_order_t AtomType::getOrder() const</code>
- <dd><code>void H5Object::renameAttr(const char* oldname, const char* newname) const</code>
- <dd><code>void H5Object::renameAttr(const string& oldname, const string& newname) const</code>
- <dd><code>string CommonFG::getObjnameByIdx(hsize_t idx) const</code>
- <dd><code>ArrayType AbstractDs::getArrayType() const</code>
- <dd><code>VarLenType AbstractDs::getVarLenType() const</code>
- <dd><code>ArrayType CommonFG::openArrayType(const char* name) const</code>
- <dd><code>ArrayType CommonFG::openArrayType(const string& name) const</code>
- <dd><code>VarLenType CommonFG::openVarLenType(const char* name) const</code>
- <dd><code>VarLenType CommonFG::openVarLenType(const string& name) const</code>
- <dd><code>ArrayType CompType::getMemberArrayType(unsigned member_num) const</code>
- <dd><code>VarLenType CompType::getMemberVarLenType(unsigned member_num) const</code>
-
-
- <dd>
-<!--
- <dt>Tools:
- <dd>Any?
--->
-
-
- </dl>
-
-
-<!--
- <h3>Deprecated and Deleted Functions</h3>
-
- The following functions have been removed in this release.
-
--->
- <!--
- None.
- -->
-<!--
- <dl>
- <dt><u>C functions:</u>
- <dt><code>H5function_name?</code>
-
-
- <p>
- <dt><u>Fortran90 subroutines:</u>
- <dt><code>h5subroutine_f?</code>
-
-
- <p>
- <dt><u>C++ wrappers:</u>
- <dt><code>C++_wrapper_name?</code>
-
-
- </dl>
--->
-
-
-<!--
- The following functions are deprecated in this HDF5 release.
- A backward compatibility mode is provided
- enabling these functions and other Release 1.4.x compatibility
- features, but is available only when the HDF5 Library is
- configured with the flag <code>H5_WANT_H5_V1_4_COMPAT</code>.
- The backward compatibility mode is not enabled in the
- binaries distributed by NCSA.
-
- <dir>
- <table border=0>
- <tr valign="top" align="left"><td>
-
- </td><td>
-<pre>
-<code>function</code>
-</pre>
- </td><td>
-
- </td><td>
-<pre>
-<code>function</code>
-</pre>
- </td><td>
-
- </td><td>
-<pre>
-
-</pre>
- </td></tr>
- </table>
- </dir>
- <p>
- The above functions will eventually be removed from the HDF5
- distribution and from the <cite>HDF5 Reference Manual</cite>.
--->
-
-
-
- <h3>Functions with New or Changed Symbols or Fixed Values</h3>
-
- Symbols and preset values associated with the following functions
- have changed as noted.
- <p>
-
- <dl>
- <dt><u>C functions:</u>
- <dt><code>H5Fget_obj_count</code>
- <dd><code>H5F_OBJ_LOCAL</code> has been
- added as a qualifier on the types of objects to be counted.
- <code>H5F_OBJ_LOCAL</code> restricts the search
- to objects opened through current file identifier.
-
- <dt><code>H5Tset_tag</code>
- <dd>The <code>H5T_OPAQUE_TAG_MAX</code>
- macro constant,
- specifying the maximum size of an opaque datatype tag,
- was added in <code>H5Tpublic.h</code>.
-
-
-<!--
- <dt><code>H5function_name?</code>
- <dd>Change...
--->
-
-
-<!--
- <p>
- <dt><u>Fortran90 subroutines:</u>
- <dt><code>h5subroutine_f?</code>
- <dd>Change...
-
-
- <p>
- <dt><u>C++ wrappers:</u>
- <dt><code>C++_wrapper_name?</code>
- <dd>Change...
--->
-
-
- </dl>
-
-
- <h3>Functions with Changed Syntax</h3>
-
- The following functions have changed as noted.
- Changed items are indicated in <font color="red">red</font>.
- <p>
-
-<!--
- <dl>
- <dt><u>C functions:</u>
- <dt><code>H5function_name?</code>
- <dd>Change...
-
-
- <p>
- <dt><u>Fortran90 subroutines:</u>
- <dt><code>h5subroutine_f?</code>
- <dd>Change...
--->
-
-
- <p>
- <dt><u>C++ wrappers:</u>
- <!--
- <dt><code>C++_wrapper_name?</code>
- <dd>Change....
- -->
- <dt>In all cases below, a parameter datatype has changed from
- <code>int</code> to <code>unsigned</code>.
-
- <dd><code>string CompType::getMemberName(
- <font color=red>unsigned</font> member_num ) const</code>
- <dd><code>size_t CompType::getMemberOffset(
- <font color=red>unsigned</font> member_num ) const</code>
- <dd><code>int CompType::getMemberDims(
- <font color=red>unsigned</font> member_num, size_t* dims,
- int* perm ) const</code>
- <dd><code>H5T_class_t CompType::getMemberClass(
- <font color=red>unsigned</font> member_num ) const</code>
- <dd><code>hid_t CompType::p_get_member_type(
- <font color=red>unsigned</font> member_num) const</code>
- <dd><code>DataType CompType::getMemberDataType(
- <font color=red>unsigned</font> member_num ) const</code>
- <dd><code>ArrayType CompType::getMemberArrayType(
- <font color=red>unsigned</font> member_num ) const</code>
- <dd><code>CompType CompType::getMemberCompType(
- <font color=red>unsigned</font> member_num ) const</code>
- <dd><code>EnumType CompType::getMemberEnumType(
- <font color=red>unsigned</font> member_num ) const</code>
- <dd><code>IntType CompType::getMemberIntType(
- <font color=red>unsigned</font> member_num ) const</code>
- <dd><code>FloatType CompType::getMemberFloatType(
- <font color=red>unsigned</font> member_num ) const</code>
- <dd><code>StrType CompType::getMemberStrType(
- <font color=red>unsigned</font> member_num ) const</code>
- <dd><code>VarLenType CompType::getMemberVarLenType(
- <font color=red>unsigned</font> member_num ) const</code>
-
- </dl>
-
-
-<!--
- <h3>Deleted Constants</h3>
-
- The following constants have been removed from the HDF5 Library:
- <ul>
- <li>Any?
- <ul>
- <li><code>Specifics?</code>
- </ul>
- </ul>
-
-
- <h3>Constants with Changed Values</h3>
-
- The following constants have been changed in this release:
- <ul>
- <li>Any?
- <ul>
- <li><code>Specifics?</code>
- </ul>
- </ul>
-
-
- <h3>Changed Library Sturctures</h3>
-
- The following library structures have changed and are now
- defined as follows:
-
- <p>
- <dl>
- <dt>C API:
- <dt><code>struct_name</code>
-
- <ul>
- <li>new definition<br>
- </ul>
- <p>
--->
-
-
- <h3>Changed Library Configuration</h3>
- <ul>
- <li>The path to the tr utility used by configure can be specififed
- by setting the TR variable.
- <li>The pdb2hdf tool has been deleted and PDB is no longer detected
- by configure.
- </ul>
-
-
- </dir>
-<p>
-
-
-
-<a name="164">
-<h2>Release 1.6.4 versus Release 1.6.3</h2>
-</a>
-
-<dir>
-
-This section lists the API-level changes that have been made in the
-transition from the HDF5 Release 1.6.3 to Release 1.6.4.
-
-
- <h3>New Functions and Tools</h3>
- <dl>
-
-<!--
- <dt>C functions:
--->
- <dt>C functions and
- <dt>Fortran subroutines:
- <dd>HDF5 Release 1.6.4 "Bugfix Release";
- there are no new C APIs or Fortran subroutines.
-<!--
- <dd>The following C functions are new for Release 1.6.4 and
- are documented in the
- <a href="../RM/RM_H5Front.html"><cite>HDF5 Reference Manual</cite></a>.
-
- <table border="0">
- <tr>
- <td align="left" valign="top"><code>function</code>
- </td>
- <td align="left" valign="top">syntax<br>
- See <a href="../RM/RM_H5__.html#__">entry</a>.</td>
- </tr>
-
- </table>
--->
-
- <dd>
- <dt>High Level C APIs:
- <dd>The High Level C APIs (HL), including the HDF5 Image,
- HDF5 Table, and HDF5 Lite interfaces
- (H5IM, H5TB, and H5LT, respectively) ,
- have been brought into the main HDF5 source code distribution.
- A link to the HL documentation appears on the opening
- page of the HDF5 document set or can be accessed directly at
- <a href="http://www.hdfgroup.org/HDF5/hdf5_hl/doc/RM_hdf5hl.html">
- <code>http://www.hdfgroup.org/HDF5/hdf5_hl/doc/RM_hdf5hl.html</code></a>
-
- <br><br>
- The HL library, <code>libhdf5_hl.a(so)</code>,
- is built and installed by default but can be disabled with
- the <code>--disable-hl</code> configure flag.
-
-<!--
- <dd>
- <dt>Fortran subroutines:
- <dd>The following Fortran90 subroutines are new for Release 1.6.3
- and are documented in the
- <a href="../RM/RM_H5Front.html"><cite>HDF5 Reference
- Manual</cite></a>.
- <table border="0">
- <tr>
- <td align="left" valign="top" colspan="2">New Fortran90
- subroutines corresponding to the new C functions
- listed above:<br>
- </td>
- </tr><tr>
- <td align="left" valign="top">
- <code>function</code><br>
- <code>function</code>
- </td>
- <td align="left" valign="top">
- <code>function</code>
- </td>
- </tr>
- </table>
-
- <table border="0">
- <tr>
- <td align="left" valign="top">New Fortran90 subroutines
- corresponding to C functions from prior releases:<br>
- None<br>
---><!--
- <code>new_fortran_here</code><br>
- <code>last_new_fortran_here</code>
---><!--
- </td>
- <td align="left" valign="top">
- </td>
- </tr>
- </table>
--->
-
-<!--
- <dd>
- <dt>C++ wrappers:
- <dd>
--->
-
- <dd>
- <dt>Tools:
- <dd>A new pair of tools, <code>h5jam</code> and <code>h5unjam</code>,
- is available to manage user blocks in HDF5 files.
- See <a href="../RM/Tools.html#Tools-Jam">their entry</a>
- in the <cite>HDF5 Reference Manual</cite>.
-
-
- </dl>
-
-
- <h3>Deleted Functions</h3>
-
- The following functions have been removed in this release.
-
- <dl>
- <dd>
- <dt>C++ wrappers:
- <dd> The C++ wrappers now rely on the C library's reference
- counting in place of the class <code>RefCounter</code>,
- which existed before the C mechanism was available.
- <code>RefCounter</code> has therefore been removed.
- </dl>
-
- <!--
- None.
- -->
-
- <!--
- The following functions are deprecated in HDF5 Release X.X.x.
- A backward compatibility mode is provided in this release,
- enabling these functions and other Release 1.4.x compatibility
- features, but is available only when the HDF5 Library is
- configured with the flag <code>H5_WANT_H5_V1_4_COMPAT</code>.
- The backward compatibility mode is not enabled in the
- binaries distributed by NCSA.
-
- <dir>
- <table border=0>
- <tr valign="top" align="left"><td>
-
- </td><td>
-<pre>
-<code>function</code>
-</pre>
- </td><td>
-
- </td><td>
-<pre>
-<code>function</code>
-</pre>
- </td><td>
-
- </td><td>
-<pre>
-
-</pre>
- </td></tr>
- </table>
- </dir>
- <p>
- The above functions will eventually be removed from the HDF5
- distribution and from the <cite>HDF5 Reference Manual</cite>.
- -->
-
-<!--
- The following functions have been removed in this release.
-
- <dl>
- <dd>
- <dt>Category
- <dd><code>function_name</code>
- </dl>
--->
-
-
- <h3>Functions with Changed Syntax</h3>
-
- The following functions have changed as noted.
- In general, one or more parameters or the return value has
- changed from a signed to an unsigned datatype.
- Changed items are indicated in
- <font color="red">red</font>.
- <p>
-
- <dl>
- <dt><u>C functions:</u>
- <dt><code>H5Pget_version</code>
- <dd><code>
- herr_t H5Pget_version(hid_t plist_id,
- <font color="red">unsigned *boot/*out*/</font>,
- <br>
- <font color="red">unsigned *freelist/*out*/</font>,
- <font color="red">unsigned *stab/*out*/</font>,
- <font color="red">unsigned *shhdr/*out*/</font>)
- </code>
-
- <dt><code>H5Pset_sym_k</code>
- <dd><code>
- H5Pset_sym_k(hid_t plist_id,
- <font color="red">unsigned ik</font>, unsigned lk)
- </code>
-
- <dt><code>H5Pget_sym_k</code>
- <dd><code>
- H5Pget_sym_k(hid_t plist_id,
- <font color="red">unsigned *ik/*out*/</font>,
- unsigned *lk/*out*/)
- </code>
-
- <dt><code>H5Pset_istore_k</code>
- <dd><code>
- herr_t H5Pset_istore_k(hid_t plist_id,
- <font color="red">unsigned ik</font>)
- </code>
-
- <dt><code>H5Pget_istore_k</code>
- <dd><code>
- herr_t H5Pget_istore_k(hid_t plist_id,
- <font color="red">unsigned *ik/*out*/</font>)
- </code>
-
- <dt><code>H5Pget_external</code>
- <dd><code>
- herr_t H5Pget_external(hid_t plist_id,
- <font color="red">unsigned idx</font>, size_t name_size,
- <br>
- char *name/*out*/, off_t *offset/*out*/,
- hsize_t *size/*out*/)
- </code>
-
- <dt><code>H5Pget_filter</code>
- <dd><code>
- H5Z_filter_t H5Pget_filter(hid_t plist_id,
- <font color="red">unsigned filter</font>,
- <br>
- unsigned int *flags/*out*/, size_t *cd_nelmts/*out*/,
- <br>
- unsigned cd_values[]/*out*/, unsigned int *flags/*out*/,
- <br>
- size_t namelen, char name[])
- </code>
-
- <dt><code>H5Sselect_hyperslab</code>
- <dd><code>
- herr_t H5Sselect_hyperslab(hid_t space_id, H5S_seloper_t op,
- <br>
- <font color="red">const hsize_t start[]</font>,
- const hsize_t _stride[], const hsize_t count[],
- <br>
- const hsize_t _block[])
- </code>
-
- <dt><code>H5Sselect_elements</code>
- <dd><code>
- herr_t H5Sselect_elements(hid_t space_id, H5S_seloper_t op,
- <br>
- size_t num_elemn, <font color="red">const hsize_t **coord</font>)
- </code>
-
- <dt><code>H5Tget_member_name</code>
- <dd><code>
- char *H5Tget_member_name(hid_t type_id,
- <font color="red">unsigned membno</font>)
- </code>
-
- <dt><code>H5Tget_member_offset</code>
- <dd><code>
- size_t H5Tget_member_offset(hid_t type_id,
- <font color="red">unsigned membno</font>)
- </code>
-
- <dt><code>H5Tget_member_class</code>
- <dd><code>
- H5T_class_t H5Tget_member_class(hid_t type_id,
- <font color="red">unsigned membno</font>)
- </code>
-
- <dt><code>H5Tget_member_type</code>
- <dd><code>
- hid_t H5Tget_member_type(hid_t type_id,
- <font color="red">unsigned membno</font>)
- </code>
-
- <dt><code>H5Tget_member_value</code>
- <dd><code>
- herr_t H5Tget_member_value(hid_t type_id,
- <font color="red">unsigned membno</font>,
- <br>
- void *value/*out*/)
- </code>
-
- <p>
- <dt><code>H5Diterate</code> is affected by a similar change
- in the syntax of <code>H5D_operator_t</code>.
- <dd><code>
- herr_t (*H5D_operator_t)(void *elem, hid_t type_id,
- <font color="red">unsigned ndim</font>,
- <br>
- <font color="red">const hsize_t *point</font>,
- void *operator_data)
- </code>
-
-
- <p>
- <dt><u>Fortran subroutines:</u>
- <dt><code>h5sselect_hyperslab_f</code>
- <dd><code>
- SUBROUTINE h5sselect_hyperslab_f(space_id, operator,
- <font color="red">start</font>, count, &
- <br>
- hdferr, stride, block)
- </code>
-
- <dt><code>h5sselect_elements_f</code>
- <dd><code>
- SUBROUTINE h5sselect_elements_f(space_id, operator, rank, &
- <br>
- num_elements, <font color="red">coord</font>, hdferr)
- </code>
-
-
- <p>
- <dt><u>C++ wrappers:</u>
- <dt><code>FileCreatPropList::getVersion</code>
- <dd><code>
- void FileCreatPropList::getVersion(
- <font color="red">unsigned& super</font>,
- <font color="red">unsigned& freelist</font>,
- <br>
- <font color="red">unsigned& stab</font>,
- <font color="red">unsigned& shhdr</font>) const
- </code>
-
-<!--
- <dt><code>FileCreatPropList::setSymk</code>
- <dd><code>
- void FileCreatPropList::setSymk( int ik, int lk ) const
- </code>
--->
-
- <dt><code>FileCreatPropList::setSymk</code>
- <dd><code>
- void FileCreatPropList::setSymk(
- <font color="red">unsigned ik</font>, unsigned lk ) const
- </code>
-
-<!--
- <dt><code>FileCreatPropList::getSymk</code>
- <dd><code>
- void FileCreatPropList::getSymk( int& ik, int& lk ) const
- </code>
--->
-
- <dt><code>FileCreatPropList::getSymk</code>
- <dd><code>
- void FileCreatPropList::getSymk(
- <font color="red">unsigned& ik</font>, unsigned& lk ) const
- </code>
-
- <dt><code>FileCreatPropList::setIstorek</code>
- <dd><code>
- void FileCreatPropList::setIstorek(
- <font color="red">unsigned ik</font> ) const
- </code>
-
- <dt><code>FileCreatPropList::getIstorek</code>
- <dd><code>
- <font color="red">unsigned</font>
- FileCreatPropList::getIstorek() const
- </code>
-
- <dt><code>DSetCreatPropList::getExternal</code>
- <dd><code>
- void DSetCreatPropList::getExternal(
- <font color="red">unsigned idx</font>,
- size_t name_size,
- <br>
- char* name, off_t& offset, hsize_t& size ) const
- </code>
-
- <dt><code>DSetCreatPropList::getFilter</code>
- <dd><code>
- H5Z_filter_t DSetCreatPropList::getFilter(
- <font color="red">ine filter_number</font>,
- <br>
- unsigned int &flags, size_t &cd_nelmts, unsigned int* cd_values,
- <br>
- size_t namelen, char name[] ) const
- </code>
-
- <dt><code>DataSpace::selectHyperslab</code>
- <dd><code>
- void DataSpace::selectHyperslab( H5S_seloper_t op,
- const hsize_t *count,
- <br>
- <font color="red">const hsize_t *start</font>,
- const hsize_t *stride, const hsize_t *block ) const
- </code>
-
- <dt><code>DataSpace::selectElements</code>
- <dd><code>
- void DataSpace::selectElements( H5S_seloper_t op,
- <br>
- const size_t num_elements,
- <font color="red">const hsize_t *coord[ ]</font> ) const
- </code>
-
- <dt><code>CompType::getMemberName</code>
- <dd><code>
- string CompType::getMemberName(
- <font color="red">unsigned member_num</font> ) const
- </code>
-
- <dt><code>CompType::getMemberOffset</code>
- <dd><code>
- size_t CompType::getMemberOffset(
- <font color="red">unsigned member_num</font> ) const
- </code>
-
- <dt><code>CompType::getMemberClass</code>
- <dd><code>
- H5T_class_t CompType::getMemberClass(
- <font color="red">unsigned member_num</font> ) const
- </code>
-
- <dt><code>EnumType::getMemberValue</code>
- <dd><code>
- void EnumType::getMemberValue(
- <font color="red">unsigned member_no</font>, void *value ) const
- </code>
-
-
-<!--
- <dd>The prototype for this function was changed from:
- <ul>
- <li>old sytax<br>
- </ul>
-
- to:
-
- <ul>
- <li>new syntax<br>
- </ul>
- <p>
-
-
-
-
- <dd>
- <dt>C++ wrappers:
- <dt><code>C++_wrapper_name</code>
- <dd>Change...
-
-
- <dd>
- <dt>Fortran90 subroutines:
- <dt><code>h5subroutine_f?</code>
- <dd>Change...
-
--->
- </dl>
- <p>
- <cite>(These lists of syntax changes were added
- on 31 March and 5 April 2005, shortly after Release 1.6.4.)</cite>
-
-
- <h3>Deleted Constants</h3>
-
- The following constants have been removed from the HDF5 Library:
- <ul>
- <li>Error codes
- <ul>
- <li><code>H5E_CANTALLOC</code>
- <li><code>H5E_CANTCHANGE</code>
- <li><code>H5E_CANTRECV</code>
- <li><code>H5E_CANTSENDMDATA</code>
- <li><code>H5E_FPHDF5</code>
- </ul>
- <li>An internal identifier category
- <ul>
- <li><code>H5I_TEMPBUF</code>
- </ul>
- </ul>
- <cite>(This list of deleted constants was added on 21 March 2005,
- shortly after Release 1.6.4.)</cite>
-
-
-<!--
- <h3>Constants with Changed Values</h3>
-
- The following library structures have changed as noted.
- <p>
- <dl>
- <dt>C API:
- <dt><code>struct_name</code>
- <dd>This function pointer typedef's definition has been changed from:
-
- <ul>
- <li>old definition<br>
- </ul>
-
- to:
-
- <ul>
- <li>new definition<br>
- </ul>
- <p>
--->
-
-
- <h3>Changed Library Configuration</h3>
- <dl>
- <dt>HDF5 Library configuration has been upgraded from
- GNU autoconf 2.53 to autoconf 2.59.
- </dl>
-
-
-
- </dir>
-<p>
-
-
-
-<a name="163">
-<h2>Release 1.6.3 versus Release 1.6.2</h2>
-</a>
-
-<dir>
-
-This section lists the API-level changes that have been made in the
-transition from the HDF5 Release 1.6.2 to Release 1.6.3.
-
-
- <h3>New Functions and Tools</h3>
- <dl>
- <dt>C functions:
- <dd>The following C functions are new for Release 1.6.3 and
- are documented in the
- <a href="../RM/RM_H5Front.html"><cite>HDF5 Reference Manual</cite></a>.
-
- <table border="0">
- <tr>
- <td align="left" valign="top"><code>H5Fget_name</code>
- </td>
- <td align="left" valign="top"><em>ssize_t</em> <code>H5Fget_name</code>
- (<em>hid_t</em> <code>obj_id</code>,
- <em>char *</em><code>name</code>,
- <em>size_t</em> <code>size</code>)<br>
- See <a href="../RM/RM_H5F.html#File-GetName">entry</a>.</td>
- </tr>
-
- <tr>
- <td align="left" valign="top"><code>H5Fget_filesize</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em> <code>H5Fget_filesize</code>
- (<em>hid_t</em> <code>file_id</code>,
- <em>hsize_t *</em> <code>size</code>)<br>
- See <a href="../RM/RM_H5F.html#File-GetFilesize">entry</a>.</td>
- </tr>
-
- <tr>
- <td align="left" valign="top"><code>H5Iget_file_id</code>
- </td>
- <td align="left" valign="top"><em>hid_t</em> <code>H5Iget_file_id</code>
- (<em>hid_t</em> <code>obj_id</code>)<br>
- See <a href="../RM/RM_H5I.html#Identify-GetFileId">entry</a>.</td>
- </tr>
-
- <tr>
- <td align="left" valign="top"><code>H5Premove_filter</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em> <code>H5Premove_filter</code>
- (<em>hid_t</em> <code>obj_id</code>,
- <em>H5Z_filter_t</em> <code>filter</code>)<br>
- See <a href="../RM/RM_H5P.html#Property-RemoveFilter">entry</a>.</td>
- </tr>
-
- <tr>
- <td align="left" valign="top"><code>H5Zget_filter_info</code>
- </td>
- <td align="left" valign="top"><em>herr_t</em> <code>H5Zget_filter_info</code>
- (<em>H5Z_filter_t</em> <code>filter</code>,
- <em>unsigned int *</em> <code>flags</code>)<br>
- See <a href="../RM/RM_H5Z.html#Compression-GetFilterInfo">entry</a>.</td>
- </tr>
- </table>
-
- <dd>
- <dt>Fortran subroutines:
- <dd>The following Fortran90 subroutines are new for Release 1.6.3
- and are documented in the
- <a href="../RM/RM_H5Front.html"><cite>HDF5 Reference
- Manual</cite></a>.
- <table border="0">
- <tr>
- <td align="left" valign="top" colspan="2">New Fortran90
- subroutines corresponding to the new C functions
- listed above:<br>
- </td>
- </tr><tr>
- <td align="left" valign="top">
- <code>h5fget_name_f</code><br>
- <code>h5fget_filesize_f</code>
- </td>
- <td align="left" valign="top">
- <code>h5iget_file_id_f</code><br>
- <code>h5premove_filter_f</code><br>
- <code>h5zget_filter_info_f</code>
- </td>
- </tr>
- </table>
-
- <table border="0">
- <tr>
- <td align="left" valign="top">New Fortran90 subroutines
- corresponding to C functions from prior releases:<br>
- None<br>
-<!--
- <code>new_fortran_here</code><br>
- <code>last_new_fortran_here</code>
--->
- </td>
- <td align="left" valign="top">
- </td>
- </tr>
- </table>
-
- <dd>
- <dt>C++ wrappers:
- <dd>C++ wrappers have been brought in sync with the C library,
- rendering the C++ API significantly more complete.
- Most of the new wrappers are for H5P and H5T APIs.
- <p>
- All available C++ elements are now documented in the
- <a href="../cpplus_RM/index.html" target="CppExternal">
- <cite>HDF5 C++ API Reference Manual</cite></a>.
- (The <cite>HDF5 C++ API Reference Manual</cite> is also a
- new addition in this release.)
-
- <dd>
- <dt>Tools:
- <dd>The following tools are new for Release 1.6.3 and are
- documented on the <a href="../RM/Tools.html">Tools page</a> of the
- <a href="../RM/RM_H5Front.html"><cite>HDF5 Reference Manual</cite></a>.
- <dd><code>h5new_tool</code> is designed to do whatever this sentence says.
- (Clearly, this is a placeholder entry that should be removed before release.)
- <dd>
- <dd>The following tool was in Release 1.6.2 but was not included in formal documentation.
- A full description is now included on the
- <a href="../RM/Tools.html">Tools page</a> of the
- <a href="../RM/RM_H5Front.html"><cite>HDF5 Reference Manual</cite></a>.
- <dd><code>h5repack</code> is designed to copy an HDF5 file
- to a new file with or without compression and/or chunking.
- </dl>
-
-
- <h3>Deleted Functions</h3>
-
- <!--
- None.
- -->
-
- <!--
- The following functions are deprecated in HDF5 Release X.X.x.
- A backward compatibility mode is provided in this release,
- enabling these functions and other Release 1.4.x compatibility
- features, but is available only when the HDF5 Library is
- configured with the flag <code>H5_WANT_H5_V1_4_COMPAT</code>.
- The backward compatibility mode is not enabled in the
- binaries distributed by NCSA.
-
- <dir>
- <table border=0>
- <tr valign="top" align="left"><td>
-
- </td><td>
-<pre>
-<code>function</code>
-</pre>
- </td><td>
-
- </td><td>
-<pre>
-<code>function</code>
-</pre>
- </td><td>
-
- </td><td>
-<pre>
-
-</pre>
- </td></tr>
- </table>
- </dir>
- <p>
- The above functions will eventually be removed from the HDF5
- distribution and from the <cite>HDF5 Reference Manual</cite>.
- -->
-
-
- The following function has been removed in this release.
-
- <dl>
- <dd>
- <dt>C++ wrapper:
- <dd><code>CompType::getMemberDims</code>
- </dl>
-
-
- <h3>Functions with Changed Syntax</h3>
-
- The following functions have changed as noted.
- <p>
- <dl>
- <dt>C functions:
- <dt><code>H5Pset_fapl_multi</code>
- <dd>The prototype for this function was changed from:
- <ul>
- <li><em>herr_t</em> <code>H5Pset_fapl_multi</code>
- (<em>hid_t</em> <code>fapl_id</code>,
- <em>const H5FD_mem_t *</em> <code>memb_map</code>,
- <em>const hid_t *</em> <code>memb_fapl</code>,
- <em>const char **</em> <code>memb_name</code>,
- <em>const haddr_t *</em> <code>memb_addr</code>,
- <em>hbool_t</em> <code>relax</code>)<br>
- </ul>
-
- to:
-
- <ul>
- <li><em>herr_t</em> <code>H5Pset_fapl_multi</code>
- (<em>hid_t</em> <code>fapl_id</code>,
- <em>const H5FD_mem_t *</em> <code>memb_map</code>,
- <em>const hid_t *</em> <code>memb_fapl</code>,
- <em>const char * const *</em> <code>memb_name</code>,
- <em>const haddr_t *</em> <code>memb_addr</code>,
- <em>hbool_t</em> <code>relax</code>)<br>
- </ul>
- <p>
- This change should not appreciably affect application programs.
-
- <dt><code>H5Tconvert</code>
- <dd>The prototype for this function was changed from:
- <ul>
- <li><em>herr_t</em> <code>H5Tconvert</code>
- (<em>hid_t</em> <code>src_id</code>,
- <em>hid_t</em> <code>dst_id</code>,
- <em>hsize_t</em> <code>nelmts</code>,
- <em>void *</em> <code>buf</code>,
- <em>void *</em> <code>background</code>,
- <em>hid_t</em> <code>plist_id</code>)<br>
- </ul>
-
- to:
-
- <ul>
- <li><em>herr_t</em> <code>H5Tconvert</code>
- (<em>hid_t</em> <code>src_id</code>,
- <em>hid_t</em> <code>dst_id</code>,
- <em>size_t</em> <code>nelmts</code>,
- <em>void *</em> <code>buf</code>,
- <em>void *</em> <code>background</code>,
- <em>hid_t</em> <code>plist_id</code>)<br>
- </ul>
- <p>
- This was changed to prevent overflows when <code>hsize_t</code> and
- <code>size_t</code> types are different sizes. Application code
- may need to be modified to take this into account. Application
- code using this function may also be affected by the changes to
- <code>H5Tregister</code> and <code>H5Tunregister</code> described
- below.
-
- <dt><code>H5Tregister</code> and <code>H5Tunregister</code>
- <dd>These two routines are affected by the change to the
- <code>H5T_conv_t</code> typedef (described below) and may
- require application registered datatype conversion routines
- to be modified to conform to the changed typedef.
-
-
-
- <dd>
- <dt>C++ wrappers:
- <dt><code>H5::Exception</code> and its subclasses
- <dd>Constructors used by <code>H5::Exception</code> and its
- subclasses that were previously overloaded to take char pointers
- have been removed.
- Constructors that passed in a reference of <code>string</code>
- have been changed to pass by value.
- In addition, the default value of the detailed
- message has been changed from <code>0/NULL</code> to
- <code>DEFAULT_MSG</code>
- (meaning "No detailed information provided").
-
- <dd>
- <dt><code>DSetCreatPropList::setLayout</code>
- <dd>The prototype for <code>DSetCreatPropList::setLayout</code>
- has been changed: the first parameter has been removed.
-
- <!--
- <dd>
- <dt>Fortran90 subroutines:
- <dt><code>h5subroutine_f?</code>
- <dd>Change...
- -->
-
- </dl>
-
-
- <h3>Constants with Changed Values</h3>
-
- The following library structures have changed as noted.
- <p>
- <dl>
- <dt>C API:
- <dt><code>H5T_conv_t</code>
- <dd>This function pointer typedef's definition has been changed from:
-
- <ul>
- <li><em>typedef herr_t</em> <code>(*H5T_conv_t)</code>
- (<em>hid_t</em> <code>src_id</code>,
- <em>hid_t</em> <code>dst_id</code>,
- <em>H5T_cdata_t *</em> <code>cdata</code>,
- <em>hsize_t</em> <code>nelmts</code>,
- <em>size_t</em> <code>buf_stride</code>,
- <em>size_t</em> <code>bkg_stride</code>,
- <em>void *</em> <code>buf</code>,
- <em>void *</em> <code>bkg</code>,
- <em>hid_t</em> <code>plist_id</code>)<br>
- </ul>
-
- to:
-
- <ul>
- <li><em>typedef herr_t</em> <code>(*H5T_conv_t)</code>
- (<em>hid_t</em> <code>src_id</code>,
- <em>hid_t</em> <code>dst_id</code>,
- <em>H5T_cdata_t *</em> <code>cdata</code>,
- <em>size_t</em> <code>nelmts</code>,
- <em>size_t</em> <code>buf_stride</code>,
- <em>size_t</em> <code>bkg_stride</code>,
- <em>void *</em> <code>buf</code>,
- <em>void *</em> <code>bkg</code>,
- <em>hid_t</em> <code>plist_id</code>)<br>
- </ul>
- <p>
- This was changed to prevent overflows when <code>hsize_t</code> and
- <code>size_t</code> types are different sizes. Application code
- may need to be modified to take this into account.
-
-
- </dir>
-<p>
-
-
-
-
-
-
-
-
-
-
-
-<a name="162">
-<h2>Release 1.6.2 versus Release 1.6.1</h2>
-</a>
-
-<dir>
-
-This section lists the API-level changes that have been made in the
-transition from the HDF5 Release 1.6.1 to Release 1.6.2.
-
-
- <h3>New Functions and Tools</h3>
- <dl>
- <dt>C functions:
- <dd>The following C functions are new for Release 1.6.2 and
- are documented in the
- <a href="../RM/RM_H5Front.html"><cite>HDF5 Reference Manual</cite></a>.
-
- <table border="0">
- <tr>
- <td align="left" valign="top"><code>H5Iget_ref</code>
- </td>
- <td align="left" valign="top"><em>int</em> <code>H5Iget_ref</code>
- (<em>hid_t </em><code>obj_id</code>)<br>
- See <a href="../RM/RM_H5I.html#Identify-GetRef">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Iinc_ref</code>
- </td>
- <td align="left" valign="top"><em>int</em> <code>H5Iinc_ref</code>
- (<em>hid_t </em><code>obj_id</code>)<br>
- See <a href="../RM/RM_H5I.html#Identify-IncRef">entry</a>.</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Idec_ref</code>
- </td>
- <td align="left" valign="top"><em>int</em> <code>H5Idec_ref</code>
- (<em>hid_t </em><code>obj_id</code>)<br>
- See <a href="../RM/RM_H5I.html#Identify-DecRef">entry</a>.</td>
- </tr>
- </table>
-
- <dd>
- <dt>Fortran subroutines:
- <dd>The following Fortran90 subroutines are new for Release 1.6.2
- and are documented in the
- <a href="../RM/RM_H5Front.html"><cite>HDF5 Reference Manual</cite></a>.
- <table border="0">
- <tr>
- <td align="left" valign="top">Corresponding to the
- new C functions listed above:<br>
- <code>h5iget_ref_f</code><br>
- <code>h5iinc_ref_f</code><br>
- <code>h5idec_ref_f</code>
- </td>
- <td align="left" valign="top">
- </td>
- </tr>
- </table>
-
- <dd>
- <dt>Tools:
- <dd>The following tools are new for Release 1.6.2 and are
- documented on the <a href="../RM/Tools.html">Tools page</a> of the
- <a href="../RM/RM_H5Front.html"><cite>HDF5 Reference Manual</cite></a>.
- <dd><code>h5pcc</code> is designed to aid in the compilation
- of C applications that employ the HDF5 Library.
- <dd><code>h5pfc</code> is designed to aid in the compilation
- of Fortran90 applications that employ the HDF5 Library.
- </dl>
-
-
- <h3>Deleted Functions</h3>
-
- None.
-
- <!--
- The following functions are deprecated in HDF5 Release X.X.x.
- A backward compatibility mode is provided in this release,
- enabling these functions and other Release 1.4.x compatibility
- features, but is available only when the HDF5 Library is
- configured with the flag <code>H5_WANT_H5_V1_4_COMPAT</code>.
- The backward compatibility mode is not enabled in the
- binaries distributed by NCSA.
-
- <dir>
- <table border=0>
- <tr valign="top" align="left"><td>
-
- </td><td>
-<pre>
-<code>function</code>
-</pre>
- </td><td>
-
- </td><td>
-<pre>
-<code>function</code>
-</pre>
- </td><td>
-
- </td><td>
-<pre>
-
-</pre>
- </td></tr>
- </table>
- </dir>
- <p>
- The above functions will eventually be removed from the HDF5
- distribution and from the <cite>HDF5 Reference Manual</cite>.
- -->
-
-
- <h3>Functions with Changed Syntax</h3>
-
- None.
-
- <!--
- The following functions have changed as noted.
-
- <dl>
- <dt>C functions:
- <dt><code>H5function?</code>
- <dd>Change....
-
- <dd>
- <dt>Fortran90 subroutines:
- <dt><code>h5subroutine_f?</code>
- <dd>Change...
- </dl>
- -->
-
-
- <h3>Constants with Changed Values</h3>
-
- None.
-
-
- </dir>
-<p>
-
-
-
-
-
-
-
-
-
-
-<a name="161">
-<h2>Release 1.6.1 versus Release 1.6.0</h2>
-</a>
-
-<dir>
-
-This section lists the API-level changes that have been made in the
-transition from the HDF5 Release 1.6.0 to Release 1.6.1.
-
-
- <h3>New Functions and Tools</h3>
- <dl>
- <dt>C functions:
- <dd>The following C function is new for Release 1.6.1 and is documented in the
- <a href="../RM/RM_H5Front.html"><cite>HDF5 Reference Manual</cite></a>.
-
- <table border="0">
- <tr>
- <td align="left" valign="top"><code>H5Fget_freespace</code>
- </td>
- <td align="left" valign="top"><em>hssize_t</em> <code>H5Fget_freespace</code>
- (<em>hid_t </em><code>file_id</code>)<br>
- See <a href="../RM/RM_H5F.html#File-GetFreespace">entry</a>.</td>
- </tr>
- </table>
-
- <dd>
- <dt>Fortran subroutines
- <dd>The following Fortran90 subroutines were new for Release 1.6.0
- but were not documented. They are now included in the
- <a href="../RM/RM_H5Front.html"><cite>HDF5 Reference Manual</cite></a>.
- <table border="0">
- <tr>
- <td align="left" valign="top"><code>h5get_fapl_mpiposix_f</code>
- </td>
- <td align="left" valign="top">
- <code>h5pget_fapl_mpiposix_f(prp_id, comm, use_gpfs, hdferr)</code><br>
- See <a href="../RM/RM_H5P.html#Property-GetFaplMpiPosix">entry</a>.</td>
- </tr><tr>
- <td align="left" valign="top"><code>h5set_fapl_mpiposix_f</code>
- </td>
- <td align="left" valign="top">
- <code>h5pset_fapl_mpiposix_f(prp_id, comm, use_gpfs, hdferr)</code><br>
- See <a href="../RM/RM_H5P.html#Property-SetFaplMpiPosix">entry</a>.</td>
- </tr>
- </table>
-
- <dd>
- <dt>Tools:
- <dd>Release 1.6.1 contains no new tools.
- <!--
- <dd>The following tools are new for Release X.X.x and are included in the
- <a href="../RM/RM_H5Front.html"><cite>HDF5 Reference Manual</cite></a>.
- <dd><code>new tool</code>
- -->
- </dl>
-
-
- <h3>Deleted Functions</h3>
- None.
- <!--
- The following functions are deprecated in HDF5 Release X.X.x.
- A backward compatibility mode is provided in this release,
- enabling these functions and other Release 1.4.x compatibility
- features, but is available only when the HDF5 Library is
- configured with the flag <code>H5_WANT_H5_V1_4_COMPAT</code>.
- The backward compatibility mode is not enabled in the
- binaries distributed by NCSA.
-
- <dir>
- <table border=0>
- <tr valign="top" align="left"><td>
-
- </td><td>
-<pre>
-<code>function</code>
-</pre>
- </td><td>
-
- </td><td>
-<pre>
-<code>function</code>
-</pre>
- </td><td>
-
- </td><td>
-<pre>
-
-</pre>
- </td></tr>
- </table>
- </dir>
- <p>
- The above functions will eventually be removed from the HDF5
- distribution and from the <cite>HDF5 Reference Manual</cite>.
- -->
-
-
- <h3>Functions with Changed Syntax</h3>
- The following functions have changed as noted.
-
- <dl>
- <dt>C functions:
- <dt><code>H5Gget_obj_info</code>
- <dd>The <code>H5G_stat_t</code> struct contains two new fields.<br>
- This change will be transparent to existing applications,
- though those calling <code>H5Gget_obj_info</code> will have
- to be recompiled before linking with the updated library.
-
- <dd>
- <dt>Fortran90 subroutines:
- <dt><code>h5pset_cache_f</code>
- <dd>The <code>rdcc_nbytes</code> parameter has changed from
- <code><em>INTEGER</em></code> to <code><em>INTEGER(SIZE_T)</em></code>
- to better match the C API and the <code>h5pget_cache_f</code>
- subroutine.
- </dl>
-
-
- <h3>Constants with Changed Values</h3>
-
- None.
-
-
- </dir>
-<p>
-
-
-
-
-
-
-
-
-<a name="160">
-<h2>Release 1.6.0 versus Release 1.4.5</h2>
-</a>
-
-<dir>
-
-This section lists the API-level changes that have been made in the
-transition from the HDF5 Release 1.4.<i>x</i> series to Release 1.6.0.
-
-
- <h3>New Functions and Tools</h3>
- <dl>
- <dt>The following functions are new for Release 1.6.0 and are included in the
- <a href="../RM/RM_H5Front.html"><cite>HDF5 Reference Manual</cite></a>.
-
-<dd>
-<table border="0">
- <tr>
- <td align="left" valign="top"><code>H5set_free_list_limits</code></td>
- <td align="left" valign="top">
- <em>herr_t</em> <code>H5set_free_list_limits</code> (<em>int</em> <code>reg_global_lim</code>,
- <em>int</em> <code>reg_list_lim</code>, <em>int</em> <code>arr_global_lim</code>,
- <em>int</em> <code>arr_list_lim</code>, <em>int</em> <code>blk_global_lim</code>,
- <em>int</em> <code>blk_list_lim</code>)
- </td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Dget_offset</code></td>
- <td align="left" valign="top"><em>hsize_t</em> <code>H5Dget_offset</code> (<em>hid_t </em><code>dset_id</code>)</td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Dget_space_status</code></td>
- <td align="left" valign="top"><em>hid_t</em> <code>H5Dget_space_status</code> (<em>hid_t</em>
- <code>dset_id</code>, <em>H5D_space_status_t *</em><code>status</code>)
- </td>
-
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Fget_obj_ids</code></td>
- <td align="left" valign="top">
- <em>int </em><code>H5Fget_obj_ids</code> (<em>hid_t</em> <code>file_id</code>,
- <em>unsigned int</em> <code>types</code>,
- <em>int</em> <code>max_objs</code>, <em>hid_t *</em><code>obj_id_list</code>)
- </td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Fget_vfd_handle</code></td>
- <td align="left" valign="top">
- <em>herr_t </em><code>H5Fget_vfd_handle</code> (<em>hid_t</em> <code>file_id</code>,
- <em>hid_t</em> <code>fapl_id</code>, <em>void *</em><code>file_handle</code>)
- </td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Gget_num_objs</code></td>
- <td align="left" valign="top">
- <em>herr_t</em> <code>H5Gget_num_objs</code> (<em>hid_t</em> <code>loc_id</code>,
- <em>hsize_t* </em> <code>num_obj</code>)
- </td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Gget_objname_by_idx</code></td>
- <td align="left" valign="top">
- <em>ssize_t</em> <code>H5Gget_objname_by_idx</code> (<em>hid_t</em> <code>group_id</code>,
- <em>hsize_t</em> <code>idx</code>, <em>char *</em><code>name</code>,
- <em>size_t*</em> <code>size</code>)
- </td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Gget_objtype_by_idx</code></td>
- <td align="left" valign="top">
- <em>int</em> <code>H5Gget_objtype_by_idx</code> (<em>hid_t</em> <code>group_id</code>,
- <em>hsize_t</em> <code>idx</code>)
- </td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Iget_name</code></td>
- <td align="left" valign="top">
- <em>ssize_t</em> <code>H5Iget_name</code> (<em>hid_t</em> <code>obj_id</code>,
- <em>char *</em><code>name</code>, <em>size_t</em> <code>size</code>)
- </td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Pall_filters_avail</code></td>
- <td align="left" valign="top">
- <em>htri_t</em> <code>H5Pall_filters_avail</code> (<em>hid_t</em> <code>dcpl_id</code>)
- </td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Pfill_value_defined</code></td>
- <td align="left" valign="top">
- <em>herr_t </em><code>H5Pfill_value_defined</code> (<em>hid_t</em> <code>plist_id</code>,
- <em>H5D_fill_value_t *</em><code>status</code>)
- </td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Pget_alloc_time</code></td>
- <td align="left" valign="top">
- <em>herr_t </em><code>H5Pget_alloc_time</code> (<em>hid_t</em> <code>plist_id</code>,
- <em>H5D_alloc_time_t *</em><code>alloc_time</code>)
- </td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Pget_edc_check</code></td>
- <td align="left" valign="top">
- <em>H5Z_EDC_t</em> <code>H5Pget_edc_check</code> (<em>hid_t</em>
- <code>plist</code>)
- </td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Pget_family_offset</code></td>
- <td align="left" valign="top">
- <em>herr_t</em> <code>H5Pget_family_offset</code> (<em>hid_t</em> <code>fapl_id</code>,
- <em>hsize_t *</em><code>offset</code>)
- </td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Pget_fapl_mpiposix</code></td>
- <td align="left" valign="top">
- <em>herr_t</em> <code>H5Pget_fapl_mpiposix</code> (<em>hid_t</em> <code>fapl_id</code>,
- <em>MPI_Comm *</em><code>comm</code>)
- </td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Pget_fclose_degree</code></td>
- <td align="left" valign="top">
- <em>herr_t</em> <code>H5Pget_fclose_degree</code>(<em>hid_t</em> <code>fapl_id</code>,
- <em>H5F_close_degree_t *</em><code>fc_degree</code>)
- <br>
- <i>(This item corrected 14 September 2004.)</i>
- </td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Pget_fill_time</code></td>
- <td align="left" valign="top">
- <em>herr_t </em><code>H5Pget_fill_time</code> (<em>hid_t</em> <code>plist_id</code>,
- <em>H5D_fill_time_t *</em><code>fill_time</code>)
- </td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Pget_filter_by_id</code></td>
- <td align="left" valign="top">
- <em>herr_t</em> <code>H5Pget_filter_by_id</code> (<em>hid_t</em> <code>plist_id</code>,
- <em>H5Z_filter_t</em> <code>filter</code>, <em>unsigned int *</em><code>flags</code>,
- <em>size_t *</em><code>cd_nelmts</code>, <em>unsigned int</em> <code>cd_values[]</code>,
- <em>size_t</em> <code>namelen</code>, <em>char *</em><code>name[]</code>)
- </td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Pget_hyper_vector_size</code></td>
- <td align="left" valign="top">
- <em>herr_t</em> <code>H5Pget_hyper_vector_size</code> (<em>hid_t</em> <code>dxpl_id</code>,
- <em>size_t *</em><code>vector_size</code>)
- </td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Pget_multi_type</code></td>
- <td align="left" valign="top">
- <em>herr_t</em> <code>H5Pget_multi_type</code> (<em>hid_t</em> <code>fapl_id</code>,
- <em>H5FD_mem_t *</em><code>type</code>)
- </td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Pmodify_filter</code></td>
- <td align="left" valign="top">
- <em>herr_t</em> <code>H5Pmodify_filter</code> (<em>hid_t</em> <code>plist</code>,
- <em>H5Z_filter_t</em> <code>filter</code>, <em>unsigned int</em> <code>flags</code>,
- <em>size_t</em> <code>cd_nelmts</code>, <em>const unsigned int</em> <code>cd_values[]</code>)
- </td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Pset_alloc_time</code></td>
- <td align="left" valign="top">
- <em>herr_t </em><code>H5Pset_alloc_time</code> (<em>hid_t</em>
- <code>plist_id</code>, <em>H5D_alloc_time_t</em> <code>alloc_time</code>)
- </td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Pset_edc_check</code></td>
- <td align="left" valign="top">
- <em>herr_t</em> <code>H5Pset_edc_check</code> (<em>hid_t</em>
- <code>plist</code>, <em>H5Z_EDC_t</em> <code>check</code>)
- </td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Pset_family_offset</code></td>
- <td align="left" valign="top">
- <em>herr_t</em> <code>H5Pset_family_offset</code> (<em>hid_t</em> <code>fapl_id</code>,
- <em>hsize_t</em> <code>offset</code>)
- </td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Pset_fapl_mpiposix</code></td>
- <td align="left" valign="top">
- <em>herr_t</em> <code>H5Pset_fapl_mpiposix</code> (<em>hid_t</em> <code>fapl_id</code>,
- <em>MPI_Comm</em> <code>comm</code>)
- </td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Pset_fclose_degree</code></td>
- <td align="left" valign="top">
- <em>herr_t</em> <code>H5Pset_fclose_degree</code>(<em>hid_t</em> <code>fapl_id</code>,
- <em>H5F_close_degree_t</em> <code>fc_degree</code>)
- <br>
- <i>(This item corrected 14 September 2004.)</i>
- </td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Pset_fill_time</code></td>
- <td align="left" valign="top">
- <em>herr_t </em><code>H5Pset_fill_time</code> (<em>hid_t</em> <code>plist_id</code>,
- <em>H5D_fill_time_t</em> <code>fill_time</code>)
- </td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Pset_filter</code></td>
- <td align="left" valign="top">
- <em>herr_t</em> <code>H5Pset_filter</code>
- (<em>hid_t</em> <code>plist</code>, <em>H5Z_filter_t</em> <code>filter</code>,
- <em>unsigned int</em> <code>flags</code>, <em>size_t</em> <code>cd_nelmts</code>,
- <em>const unsigned int</em> <code>cd_values[])</code>
- </td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Pset_filter_callback</code></td>
- <td align="left" valign="top">
- <em>herr_t</em> <code>H5Pset_filter_callback</code> (<em>hid_t</em>
- <code>plist</code>, <em>H5Z_filter_func_t</em> <code>func</code>,
- <em>void *</em><code>op_data</code>)
- </td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Pset_fletcher32</code></td>
- <td align="left" valign="top">
- <em>herr_t</em> <code>H5Pset_fletcher32</code> (<em>hid_t</em>
- <code>plist</code>)
- </td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Pset_hyper_vector_size</code> </td>
- <td align="left" valign="top">
- <em>herr_t</em> <code>H5Pset_hyper_vector_size</code> (<em>hid_t</em> <code>dxpl_id</code>,
- <em>size_t</em> <code>vector_size</code>)
- </td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Pset_multi_type</code></td>
- <td align="left" valign="top">
- <em>herr_t</em> <code>H5Pset_multi_type</code> (<em>hid_t</em> <code>fapl_id</code>,
- <em>H5FD_mem_t</em> <code>type</code>)
- </td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Pset_shuffle</code></td>
- <td align="left" valign="top">
- <em>herr_t</em> <code>H5Pset_shuffle</code> (<em>hid_t</em> <code>plist_id</code>)
- </td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Pset_szip</code></td>
- <td align="left" valign="top">
- <em>herr_t</em> <code>H5Pset_szip</code> (<em>hid_t</em> <code>plist</code>,
- <em>unsigned int</em> <code>options_mask</code>, <em>unsigned int</em>
- <code>pixels_per_block</code>)
- </td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Rget_object_type</code></td>
- <td align="left" valign="top">
- <em>int</em> <code>H5Rget_object_type</code> (<em>hid_t</em> <code>id</code>,
- <em>void *</em><code>ref</code>)
- </td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Sget_select_type</code></td>
- <td align="left" valign="top">
- <em>H5S_sel_type</em> <code>H5Sget_select_type</code> (<em>hid_t</em> <code>space_id</code>)
- </td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Tdetect_class</code></td>
- <td align="left" valign="top">
- <em>htri_t </em><code>H5Tdetect_class</code> (<em>hid_t</em> <code>dtype_id</code>,
- <em>H5T_class_t</em> <code>dtype_class</code>)
- </td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Tget_native_type</code></td>
- <td align="left" valign="top">
- <em>hid_t</em> <code>H5Tget_native_type</code> (<em>hid_t</em> <code>type_id</code>,
- <em>H5T_direction_t</em> <code>direction</code>)
- </td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Tis_variable_str</code></td>
- <td align="left" valign="top">
- <em>htri_t </em><code>H5Tis_variable_str</code> (<em>hid_t </em><code>dtype_id</code>)
- </td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Zfilter_avail</code></td>
- <td align="left" valign="top">
- <em>herr_t</em> <code>H5Zfilter_avail</code> (<em>H5Z_filter_t</em> <code>filter</code>)
- </td>
- </tr>
- <tr>
- <td align="left" valign="top"><code>H5Zunregister</code></td>
- <td align="left" valign="top">
- <em>herr_t</em> <code>H5Zunregister</code> (<em>H5Z_filter_t</em> <code>filter</code>)
- </td>
- </tr>
-</table>
- </dd>
- <dd> </dd>
-
-
- <dt>The following tools are new for Release 1.6.0 and are included in the
- <a href="../RM/RM_H5Front.html"><cite>HDF5 Reference Manual</cite></a>.
- <dd><code>h5diff</code>
- <dd><code>h5import</code>
- <dd><code>h5fc</code>
- <dd><code>h5c++</code>
- <dd><code>h5perf</code>
- <dd><code>h5redeploy</code>
-
-</dl>
-
-
- <h3>Deleted Functions</h3>
- The following functions are deprecated in HDF5 Release 1.6.0.
- A backward compatibility mode is provided in this release,
- enabling these functions and other Release 1.4.x compatibility
- features, but is available only when the HDF5 Library is
- configured with the flag <code>H5_WANT_H5_V1_4_COMPAT</code>.
- The backward compatibility mode is not enabled in the
- binaries distributed by NCSA.
-
- <dir>
- <table border=0>
- <tr valign="top" align="left"><td>
-
- </td><td>
-<pre>
-<code>H5Pset_hyper_cache</code>
-<code>H5Pget_hyper_cache</code>
-</pre>
- </td><td>
-
- </td><td>
-<pre>
-<code>H5Rget_object_type</code>
-</pre>
- </td><td>
-
- </td><td>
-<pre>
-
-</pre>
- </td></tr>
- </table>
- </dir>
- <p>
- The above functions will eventually be removed from the HDF5
- distribution and from the <cite>HDF5 Reference Manual</cite>.
-
-
- <h3>Functions with Changed Syntax</h3>
- The following functions have changed as noted.
- <dir>
- <dl>
- <dt>C functions:
- <dt><code>H5FDflush and VFL "flush" callbacks</code>
- <dd>An extra parameter <code>closing</code> has been added to
- these functions,
- to allow the library to indicate that the file will be closed
- following the call to "flush". Actions in the "flush" call
- that are duplicated in the VFL "close" call may be omitted by
- the VFL driver.
- <dt>* <code>H5Gget_objtype_by_idx</code>
- <dd>The function return type has changed from
- <code><em>int</em></code> to
- the enumerated type <code><em>H5G_obj_t</em></code>.
- <dt>* <code>H5Pset(get)_buffer</code>
- <dd>The <code>size</code> parameter for <code>H5Pset_buffer</code>
- has changed from type <code><em>hsize_t</em></code> to
- <code><em>size_t</em></code>.
- <dd>The <code>H5Pget_buffer</code> return type has similarly
- changed from <code><em>hsize_t</em></code> to
- <code><em>size_t</em></code>.
- <dt>* <code>H5Pset(get)_cache</code>
- <dd>The <code>rdcc_nbytes</code> parameter has changed from type
- <code><em>int</em></code> to
- <code><em>size_t</em></code>.
- <br>
- <i>(This item corrected 3 March 2004.)</i>
- <dt>* <code>H5Pset_fapl_log</code>
- <dd>The <code>verbosity</code> parameter has been removed.
- <dd>Two new parameters have been added:
- <code>flags</code> of type <code><em>unsigned</em></code> and
- <code>buf_size</code> of type <code><em>size_t</em></code>.
- <dt>* <code>H5Pset(get)_fapl_mpiposix</code>
- <dd>A <code>use_gpfs</code> parameter of type
- <code><em>hbool_t</em></code> has been added.
- <dt>* <code>H5Pset(get)_sieve_buf_size</code>
- <dd>The <code>size</code> parameter has changed from type
- <code><em>hsize_t</em></code> to
- <code><em>size_t</em></code>.
- <dt>* <code>H5Pset(get)_sym_k</code>
- <dd>The <code>lk</code> parameter has changed from type
- <code><em>int</em></code> to
- <code><em>unsigned</em></code>.
- <dt>* <code>H5Sget_select_bounds</code>
- <dd>The <code>start</code> and <code>end</code> parameters have
- changed from type <code><em>hsize_t *</em></code>
- to <code><em>hssize_t *</em></code> to better match the
- rest of the dataspace API.
- <dt>* <code>H5Zregister</code>
- <dd>This function is substantially revised in Release 1.6.0 with
- a new <code>H5Z_class_t</code> struct and
- new <i>set local</i> and <i>can apply</i> callback functions.
- <dt>
- <dt>Fortran90 functions:
- <dt><code>h5pset(get)_fapl_core_f</code>
- <dd>The <code>backing_store</code> parameter has changed from
- <code><em>INTEGER</em></code> to <code><em>LOGICAL</em></code>
- to better match the C API.
- <dt><code>h5pset(get)_preserve_f</code>
- <dd>The <code>flag</code> parameter has changed from
- <code><em>INTEGER</em></code> to <code><em>LOGICAL</em></code>
- to better match the C API.
- </dl>
- </dir>
-
- <p>
- Backward compatibility with the Release 1.4.x syntax is available
- for the functions indicated above with a leading asterisk (*).
- The backward compatibility features are available only when the
- HDF5 Library is configured with the flag
- <code>H5_WANT_H5_V1_4_COMPAT</code>,
- is not enabled in the binaries distributed by NCSA, and
- will eventually be removed from the HDF5 distribution.
-
-
- <h3>Constants with Changed Values</h3>
-
-
-</dir>
-<p>
-
-
-
-
-
-
-<a name="145">
-<h2>Release 1.4.5 versus Release 1.4.4</h2>
-</a>
-<dir>
- <h3>C Library</h3>
- <dir>
-
- <b>Added functions:</b>
- <dir>
- <table border=0>
- <tr valign=top align=left><td>
-<pre>
-herr_t H5Pset_fapl_mpiposix(hid_t fapl_id, MPI_Comm comm);
-herr_t H5Pget_fapl_mpiposix(hid_t fapl_id, MPI_Comm *comm/*out*/);
-</pre>
- </td></tr>
- </table>
- </dir>
-
- <b>Changed functions:</b>
- <dir>
- The following functions have changed behavior.
- <p>
- <table border=0>
- <tr valign=top align=left><td>
- <code>H5Pset_fapl_mpio </code><br>
- <code>H5Pget_fapl_mpio</code><br>
- <code>H5Fcreate</code><br>
- <code>H5Fopen</code><br>
- <code>H5Fclose</code>
- </td><td>
- Previously, the Communicator and Info object arguments supplied
- to <code>H5Pset_fapl_mpio</code> were stored in the property with
- its handle values.
- This meant changes to the communicator or the Info object
- after calling <code>H5Pset_fapl_mpio</code> would affect the how
- the property list functioned.
- This was also the case when <code>H5Fopen/create</code> operated.
- They just stored the handle value. This is not according to the
- MPI-2 defined behavior of how Info objects should be handled.
- (MPI-2 defines Info objects must be parsed when called.)<br>
- <code>H5Pset_fapl_mpio</code> now stores a duplicate of each of
- the communicator and Info object.<br>
- <code>H5Pget_fapl_mpio</code> now returns a duplicate of its
- stored communicator and Info object.
- It is now the responsibility of the applications to free
- those objects when done.<p>
- <code>H5Fcreate</code> and <code>H5Fopen</code> also store
- a duplicate of the communicator and Info
- object supplied by the file access property List.
- <code>H5Fclose</code> frees the duplicates.<p>
- Advice to users: User applications should release the communicator and
- Info object returned by <code>H5Pget_fapl_mpio</code> when they are
- no longer needed.
- </td></tr>
- </table>
- </dir>
-
-
-
- <b>Removed functions:</b>
- <dir>
- <table border=0>
- <tr valign=top align=left><td>
-None
-<!--
-<pre>
-List deleted function(s) here. Remove forced spaces.
-</pre>
--->
- </td><td>
-
- </td><td>
-<pre>
-<!-- List deleted function(s) here. Remove forced spaces. -->
-</pre>
- </td></tr>
- </table>
- </dir>
-
- There were no other public API changes in the C library for this release.
-
- </dir>
- <h3>Fortran90 Library</h3>
- <dir>
-
-
- The following missing Fortran functions were added:
-<br>
-<br>
- <code> h5get_libversion_f, h5check_version_f, h5garbage_collect_f, h5dont_atexit_f </code>
-<br>
- <code> h5tget_member_index_f, h5tvlen_create_f </code>
-<br>
- <code> h5dget_storage_size_f, h5dvlen_get_max_len_f , h5dwrite_vl_f, h5dread_vl_f</code>
-<br>
-<br>
- Only <code>integer, real</code> and
- <code>character</code> types are supported for VL datatypes.
-
- </dir>
-</dir>
-
-
-<!-- Document API CHANGES ONLY in this file. -->
-
-<a name="144">
-<h2>Release 1.4.4 versus Release 1.4.3</h2>
-</a>
-<dir>
- <h3>C Library</h3>
- <dir>
-
- <b>Added functions:</b>
- <dir>
- <table border=0>
- <tr valign=top align=left><td>
-<pre>
-H5Pget_small_data_block_size
-H5Pset_small_data_block_size
-H5Tget_member_index
-</pre>
- </td><td>
-
- </td><td>
-<pre>
-<!-- List added function(s) here. Remove forced spaces. -->
-</pre>
- </td></tr>
- </table>
- </dir>
-
- <b>Changed functions:</b>
- <dir>
- <table border=0>
- <tr valign=top align=left><td>
-None
-<!--
-<pre>
-List deleted function(s) here. Remove forced spaces.
-</pre>
--->
- </td><td>
-
- </td><td>
-<pre>
-<!-- List deleted function(s) here. Remove forced spaces. -->
-</pre>
- </td></tr>
- </table>
- </dir>
-
- <b>Removed functions:</b>
- <dir>
- <table border=0>
- <tr valign=top align=left><td>
-None
-<!--
-<pre>
-List deleted function(s) here. Remove forced spaces.
-</pre>
--->
- </td><td>
-
- </td><td>
-<pre>
-<!-- List deleted function(s) here. Remove forced spaces. -->
-</pre>
- </td></tr>
- </table>
- </dir>
-
- There were no other public API changes in the C library for this release.
-
- </dir>
- <h3>Fortran90 Library</h3>
- <dir>
-
- <code>h5dwrite_f, h5dread_f, h5awrite_f, h5aread_f </code>were overloaded
- with <code>dims</code> argument to be assumed size array of type <code>INTEGER(HSIZE_T).</code>
- We recommend to use the subroutines with the new type. Module subroutines
- that accept <code>dims</code> as <code>INTEGER</code> array of size <code>7</code> will be deprecated in the 1.6.0 release.
-
- </dir>
-</dir>
-
-<a name="143">
-<h2>Release 1.4.3 versus Release 1.4.2</h2>
-</a>
-<dir>
- <h3>C Library</h3>
- <dir>
-
- <b>Removed function:</b>
- <dir>
- <table border=0>
- <tr valign=top align=left><td>
-<pre>
-H5Pset_fapl_dpss </pre>
- </td><td>
-
- </td><td>
-<pre>
-<!-- new deleted functions here. Remove forced spaces. -->
-</pre>
- </td><td>
-
- </td><td>
-<pre>
-<!-- new deleted functions here. Remove forced spaces. -->
-</pre>
- </td></tr>
- </table>
- </dir>
-
- There were no other public API changes in the C library for this release.
-
- </dir>
- <h3>Fortran90 Library</h3>
- <dir>
-
- There were no changes to the public Fortran90 APIs for this release.
-
- </dir>
-</dir>
-
-<a name="142">
-<h2>Release 1.4.2 versus Release 1.4.1</h2>
-</a>
-<dir>
- <h3>C Library</h3>
- The HDF5 Release 1.4.2 C library is a "Bugfix Release";
- there are no API changes in the underlying HDF5 Library.
-
- <h3>Fortran90 Library</h3>
- The following functions in the HDF5 Release 1.4.2 Fortran90 library
- have an additional parameter, <code>dims</code>, that was not present
- in Release 1.4.1:
-
-<dir>
-<pre>
-<font color=red>h5aread_f</font>(attr_id, memtype_id, buf, dims, hdferr)
-<font color=red>h5awrite_f</font>(attr_id, memtype_id, buf, dims, hdferr)
-<font color=red>h5dread_f</font>(dset_id, mem_type_id, buf, dims, hdferr, mem_space_id, &
- file_space_id, xfer_prp)
-<font color=red>h5dwrite_f</font>(dset_id, mem_type_id, buf, dims, hdferr, mem_space_id, &
- file_space_id, xfer_prp)
-</pre>
-</dir>
-
- The <code>dims</code> parameter enables library portability
- between the UNIX and Microsoft Windows platforms.
-
-</dir>
-
-
-<a name="141">
-<h2>Release 1.4.1 versus Release 1.4.0</h2>
-</a>
-<dir>
- Release 1.4.1 is a "Tools Release"; there are no API changes in the
- underlying HDF5 Library.
-</dir>
-
-
-<a name="140">
-<h2>Release 1.4.0 versus Release 1.2.2</h2>
-</a>
-
-<dir>
-
- Several functions were added to or removed from the HDF5 Library
- in the development of Release 1.4.0.
- A few functions have been modified in minor ways.
-
- <h3>New Functions</h3>
- The following functions are new for Release 1.4.0 and are included in the
- <a href="../RM/RM_H5Front.html"><cite>HDF5 Reference Manual</cite></a>.
-
-<dir>
-<pre>
-herr_t <font color=red>H5Dvlen_get_buf_size</font> (hid_t dataset_id, hid_t type_id,
- hid_t space_id, hsize_t *size);
-herr_t <font color=red>H5Epush</font> (const char *file, const char *func,
- unsigned line, H5E_major_t maj, H5E_minor_t min,
- const char *str);
-hid_t <font color=red>H5Pget_driver</font> (hid_t plist_id);
-void *<font color=red>H5Pget_driver_info</font> (hid_t plist_id);
-herr_t <font color=red>H5Pget_dxpl_mpio</font> (hid_t dxpl_id,
- H5FD_mpio_xfer_t *xfer_mode/*out*/);
-herr_t <font color=red>H5Pget_dxpl_multi</font> (hid_t dxpl_id,
- hid_t *memb_dxpl/*out*/);
-herr_t <font color=red>H5Pget_fapl_core</font> (hid_t fapl_id, size_t *increment/*out*/,
- hbool_t *backing_store/*out*/)
-herr_t <font color=red>H5Pget_fapl_family</font> (hid_t fapl_id,
- hsize_t *memb_size/*out*/, hid_t *memb_fapl_id/*out*/);
-herr_t <font color=red>H5Pget_fapl_mpio</font> (hid_t fapl_id, MPI_Comm *comm/*out*/,
- MPI_Info *info/*out*/);
-herr_t <font color=red>H5Pget_fapl_multi</font> (hid_t fapl_id,
- H5FD_mem_t *memb_map/*out*/, hid_t *memb_fapl/*out*/,
- char **memb_name/*out*/, haddr_t *memb_addr/*out*/,
- hbool_t *relax/*out*/);
-herr_t <font color=red>H5Pget_fapl_stream</font> (hid_t fapl_id,
- H5FD_stream_fapl_t *fapl /*out*/ );
-herr_t <font color=red>H5Pget_meta_block_size</font> (hid_t fapl_id,
- hsize_t *size/*out*/);
-herr_t <font color=red>H5Pget_sieve_buf_size</font> (hid_t fapl_id,
- hsize_t *size/*out*/);
-herr_t <font color=red>H5Pset_driver</font> (hid_t plist_id, hid_t driver_id,
- const void *driver_info);
-herr_t <font color=red>H5Pset_dxpl_mpio</font> (hid_t dxpl_id,
- H5FD_mpio_xfer_t xfer_mode);
-herr_t <font color=red>H5Pset_dxpl_multi</font> (hid_t dxpl_id,
- const hid_t *memb_dxpl);
-herr_t <font color=red>H5Pset_fapl_core</font> (hid_t fapl_id, size_t increment,
- hbool_t backing_store)
-herr_t <font color=red>H5Pset_fapl_family</font> (hid_t fapl_id, hsize_t memb_size,
- hid_t memb_fapl_id);
-herr_t <font color=red>H5Pset_fapl_log</font> (hid_t fapl_id, char *logfile,
- int verbosity);
-herr_t <font color=red>H5Pset_fapl_mpio</font> (hid_t fapl_id, MPI_Comm comm,
- MPI_Info info);
-herr_t <font color=red>H5Pset_fapl_multi</font> (hid_t fapl_id,
- const H5FD_mem_t *memb_map, const hid_t *memb_fapl,
- const char **memb_name, const haddr_t *memb_addr,
- hbool_t relax);
-herr_t <font color=red>H5Pset_fapl_sec2</font> (hid_t fapl_id);
-herr_t <font color=red>H5Pset_fapl_split</font> (hid_t fapl, const char *meta_ext,
- hid_t meta_plist_id, const char *raw_ext,
- hid_t raw_plist_id);
-herr_t <font color=red>H5Pset_fapl_stdio</font> (hid_t fapl_id);
-herr_t <font color=red>H5Pset_fapl_stream</font> (hid_t fapl_id,
- H5FD_stream_fapl_t *fapl);
-herr_t <font color=red>H5Pset_meta_block_size</font>(hid_t fapl_id, hsize_t size);
-herr_t <font color=red>H5Pset_sieve_buf_size</font>(hid_t fapl_id, hsize_t size);
-hid_t <font color=red>H5Tarray_create</font> (hid_t base, int rank, const hsize_t dims[],
- const int perm[])
-int <font color=red>H5Tget_array_dims</font> (hid_t adtype_id, hsize_t *dims[], int *perm[])
-int <font color=red>H5Tget_array_ndims</font> (hid_t adtype_id)
-</pre>
-</dir>
-
-
- <p>
- The following functions are new for Release 1.4.0, but
- are intended only for use in specialized environments.
- These are also included in the
- <a href="../RM/RM_H5Front.html"><cite>HDF5 Reference Manual</cite></a>.
-
-<dir>
-<pre>
-herr_t <font color=red>H5Pget_fapl_dpss</font> (hid_t fapl_id);
-herr_t <font color=red>H5Pget_fapl_gass</font> (hid_t fapl_id, GASS_Info *info/*out*/);
-herr_t <font color=red>H5Pget_fapl_srb</font> (hid_t fapl_id, SRB_Info *info);
-herr_t <font color=red>H5Pset_fapl_dpss</font> (hid_t fapl_id);
-herr_t <font color=red>H5Pset_fapl_gass</font> (hid_t fapl_id, GASS_Info info);
-herr_t <font color=red>H5Pset_fapl_srb</font> (hid_t fapl_id, SRB_Info info);
-</pre>
-</dir>
-
-
- <p>
- The following functions are new for Release 1.4.0 but are intended
- only for driver development work, not for general use.
- They are listed in the
- <a href="../TechNotes/VFLfunc.html"><cite>List of VFL Functions</cite></a>
- document in the
- <a href="../TechNotes.html"><cite>HDF5 Technical Notes</cite></a>.
- They are described in detail only in the source code and
- do not appear in the <cite>HDF5 Reference Manual</cite>.
-
-<dir>
-<pre>
-haddr_t <font color=red>H5FDalloc</font> (H5FD_t *file, H5FD_mem_t type,
- hsize_t size);
-herr_t <font color=red>H5FDclose</font> (H5FD_t *file);
-int <font color=red>H5FDcmp</font> (const H5FD_t *f1, const H5FD_t *f2);
-herr_t <font color=red>H5FDflush</font> (H5FD_t *file);
-herr_t <font color=red>H5FDfree</font> (H5FD_t *file, H5FD_mem_t type,
- haddr_t addr, hsize_t size);
-haddr_t <font color=red>H5FDget_eoa</font> (H5FD_t *file);
-haddr_t <font color=red>H5FDget_eof</font> (H5FD_t *file);
-H5FD_t *<font color=red>H5FDopen</font> (const char *name, unsigned flags,
- hid_t fapl_id, haddr_t maxaddr);
-int <font color=red>H5FDquery</font> (const H5FD_t *f, unsigned long *flags);
-herr_t <font color=red>H5FDread</font> (H5FD_t *file, hid_t dxpl_id, haddr_t addr,
- hsize_t size, void *buf/*out*/);
-haddr_t <font color=red>H5FDrealloc</font> (H5FD_t *file, H5FD_mem_t type,
- haddr_t addr, hsize_t old_size, hsize_t new_size);
-hid_t <font color=red>H5FDregister</font> (const H5FD_class_t *cls);
-herr_t <font color=red>H5FDset_eoa</font> (H5FD_t *file, haddr_t eof);
-herr_t <font color=red>H5FDunregister</font> (hid_t driver_id);
-herr_t <font color=red>H5FDwrite</font> (H5FD_t *file, H5FD_mem_t type,
- hid_t dxpl_id, haddr_t addr, hsize_t size,
- const void *buf);
-</pre>
-</dir>
-
-
- <h3>Deleted Functions</h3>
- The following functions have been removed from the HDF5 Library
- and from the <cite>HDF5 Reference Manual</cite>.
- <dir>
- <table>
- <tr valign=top align=left><td>
-<pre>
-H5Pget_core
-H5Pget_driver
-H5Pget_family
-H5Pget_mpi
-H5Pget_sec2
-H5Pget_split
-H5Pget_stdio
-H5Pget_xfer
-</pre>
- </td><td>
-
- </td><td>
-<pre>
-H5Pset_core
-H5Pset_family
-H5Pset_mpi
-H5Pset_sec2
-H5Pset_split
-H5Pset_stdio
-H5Pset_xfer
-</pre>
- </td><td>
-
- </td><td>
-<pre>
-H5RAclose
-H5RAcreate
-H5RAopen
-H5RAread
-H5RAwrite
-H5Tget_member_dims
-H5Tinsert_array
-</pre>
- </td></tr>
- </table>
- </dir>
- Note that the entire H5RA interface, an experimental interface for
- ragged arrays, has been removed from the library.
-
-
- <h3>Functions with Changed Syntax</h3>
- The following functions have changed slightly.
- <dir>
- <dl>
- <dt><code>H5Pget_buffer</code>
- <dd>Return type has changed to <em>hsize_t</em>.
- <dt><code>H5Pset_buffer</code>
- <dd>The type of the <code>size</code> parameter has changed
- to <em>hsize_t</em>.
- <dt><code>H5Tconvert</code>
- <dd>The type of the <code>nelmts</code> parameter has changed
- to <em>hsize_t</em>.
- </dl>
- </dir>
-
- <h3>Constants with Changed Values</h3>
- The values of the constants <code>H5P_DEFAULT</code> and
- <code>H5S_ALL</code> have been changed from <code>-2</code>
- to <code>0</code>.
- These default values had to be special-cased in situations where
- they could be returned to distinguish them from error values.
-
-</dir>
-<p>
-
-<a name="14">
-<h2>Migration from Release 1.2.2 to Release 1.4.<em>x</em></h2>
-</a>
-
-<dir>
- <h3>H5Tinsert_array</h3>
- The functionality of <code>H5Tinsert_array</code> has been replaced by
- <code>H5Tarray_create</code>.
- Here is an example of changing code from <code>H5Tinsert_array</code>
- to <code>H5Tarray_create</code>.
-<pre>
-V1.2.2
-{
- struct tmp_struct {
- int a;
- float f[3];
- double d[2][4];
- };
- size_t f_dims[1]={3};
- size_t d_dims[2]={2,4};
- hid_t compound_type;
-
- compound_type=H5Tcreate(H5T_COMPOUND,sizeof(struct tmp_struct));
- H5Tinsert(compound_type,"a",HOFFSET(struct tmp_struct,a),H5T_NATIVE_INT);
- H5Tinsert_array(compound_type,"f",HOFFSET(struct tmp_struct,f),1,f_dims,NULL,H5T_NATIVE_FLOAT);
- H5Tinsert_array(compound_type,"d",HOFFSET(struct tmp_struct,d),2,d_dims,NULL,H5T_NATIVE_DOUBLE);
-}
-
-V1.4.0
-{
- struct tmp_struct {
- int a;
- float f[3];
- double d[2][4];
- };
- hsize_t f_dims[1]={3};
- hsize_t d_dims[2]={2,4};
- hid_t compound_type;
- hid_t array_type;
-
- compound_type=H5Tcreate(H5T_COMPOUND,sizeof(struct tmp_struct));
- H5Tinsert(compound_type,"a",HOFFSET(struct tmp_struct,a),H5T_NATIVE_INT);
- array_type=H5Tarray_create(H5T_NATIVE_FLOAT,1,f_dims,NULL);
- H5Tinsert(compound_type,"f",HOFFSET(struct tmp_struct,f),array_type);
- H5Tclose(array_type);
- array_type=H5Tarray_create(H5T_NATIVE_DOUBLE,2,d_dims,NULL);
- H5Tinsert(compound_type,"d",HOFFSET(struct tmp_struct,d),array_type);
- H5Tclose(array_type);
-}
-
-</pre>
-</dir>
-
-
-<a name="RELEASE-HISTORY">
-<h2>This and Prior Releases: The RELEASE.txt and HISTORY.txt Files</h2>
-</a>
-
-<dir>
- The HDF5 source code, as distributed to users and developers,
- contains two files that will be of interest to readers of this
- document. Both files are located at the top level of the
- source code tree and are duplicated here for your reference:
- <p>
- <dl>
- <dt><a href="RELEASE.txt" target="ExtWin">RELEASE.txt</a>
- <dd>Technical notes regarding the release, including
- new features and the changes since the last release,
- notes regarding new or revised utilities,
- notes regarding alternative language APIs (Fortran90, C++),
- bugs fixed since the last release,
- platforms on which the release has been tested, and
- known problems.
- This is the file commonly known as "the release notes."
- <p>
- <dt><a href="HISTORY.txt" target="ExtWin">HISTORY.txt</a>
- <dd>A release-by-release history of the HDF5 Library.
- This file is a compiled set of the release notes
- (i.e., the RELEASE.txt files) from prior releases.
- <dl>
-</dir>
-
-
-<!-- #BeginLibraryItem "/ed_libs/NavBar_ADevG.lbi" -->
-<hr>
-<center>
-<table border=0 width=98%>
-<tr><td valign=top align=left>
- <a href="../index.html">HDF5 documents and links</a> <br>
- <a href="../H5.intro.html">Introduction to HDF5</a> <br>
- <!--
- <a href="Glossary.html">Glossary</a><br>
- -->
-</td>
-<td valign=top align=right>
- <a href="../UG/index.html">HDF5 User's Guide</a> <br>
- <a href="../RM/RM_H5Front.html">HDF5 Reference Manual</a> <br>
- <a href="../ADGuide.html">HDF5 Application Developer's Guide</a> <br>
-</td></tr>
-</table>
-</center>
-<hr>
-<!-- #EndLibraryItem --><!-- #BeginLibraryItem "/ed_libs/Footer.lbi" -->
-<address>
-<table width="100%" border="0">
- <tr valign="top">
- <td align="left">
- <address>
- The HDF Group Help Desk: <img src="../Graphics/help.png" align=top height=16>
- <br>
- Describes HDF5 Release 1.8.13, May 2014.
- </address>
- </td><td width="5%"> </td>
- <td align="right">
- <a href="../Copyright.html">Copyright</a> by
- <a href="http://www.hdfgroup.org">The HDF Group</a>
- <br>
- and the Board of Trustees of the University of Illinois
- </td>
- </tr>
-</table>
-</address>
-<!-- #EndLibraryItem --><!-- Created: Spring 1999 -->
+<!-- Created: Spring 1999 -->
<!-- hhmts start -->
-Last modified: 12 May 2014
+<hr />
+Last modified: 26 September 2014
<!-- hhmts end -->
+<br />
+<br />
+<br />
</body>
</html>
diff --git a/html/ADGuide/CompatFormat180.html b/html/ADGuide/CompatFormat180.html
index 316b568..38cd0b6 100644
--- a/html/ADGuide/CompatFormat180.html
+++ b/html/ADGuide/CompatFormat180.html
@@ -1065,25 +1065,11 @@ to create no compatibility concerns</a>.”
</table>
</center>
<hr>
-<!-- #EndLibraryItem --><!-- #BeginLibraryItem "/ed_libs/Footer-THGonly.lbi" -->
-<address>
-<table width="100%" border="0">
- <tr valign="top">
- <td align="left">
- <address>
- The HDF Group Help Desk: <img src="../Graphics/help.png" align=top height=16>
- <br>
- Describes HDF5 Release 1.8.13, May 2014.
- </address>
- </td><td width="5%"> </td>
- <td align="right">
- <a href="../Copyright.html">Copyright</a> by
- <a href="http://www.hdfgroup.org">The HDF Group</a>
- </td>
- </tr>
-</table>
-</address>
-<!-- #EndLibraryItem --><!-- Created: Spring 1999 -->
+<!-- #EndLibraryItem -->
+
+<?php include("../ed_libs/Footer-THGonly2.htm"); ?>
+
+<!-- Created: Spring 1999 -->
<!-- hhmts start -->
Last modified: 23 October 2007
<!-- hhmts end -->
diff --git a/html/ADGuide/Compatibility_Report/CR_1.8.14.html b/html/ADGuide/Compatibility_Report/CR_1.8.14.html
new file mode 100644
index 0000000..7ad4130
--- /dev/null
+++ b/html/ADGuide/Compatibility_Report/CR_1.8.14.html
@@ -0,0 +1,1176 @@
+<!-- kind:binary;verdict:incompatible;affected:0.8;added:31;removed:14;type_problems_high:0;type_problems_medium:0;type_problems_low:1;interface_problems_high:0;interface_problems_medium:0;interface_problems_low:0;changed_constants:6;tool_version:1.99.9 -->
+<!-- kind:source;verdict:incompatible;affected:1.7;added:31;removed:31;type_problems_high:0;type_problems_medium:0;type_problems_low:1;interface_problems_high:0;interface_problems_medium:0;interface_problems_low:0;changed_constants:43;tool_version:1.99.9 -->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <meta name="keywords" content="hdf5, compatibility, API, report" />
+ <meta name="description" content="Compatibility report for the hdf5 library between 1.8.13 and 1.8.14 versions" />
+ <title>
+ hdf5: 1.8.13 to 1.8.14 compatibility report
+ </title>
+ <style type="text/css">
+ body {
+ font-family:Arial, sans-serif;
+ color:Black;
+ font-size:14px;
+}
+hr {
+ color:Black;
+ background-color:Black;
+ height:1px;
+ border:0;
+}
+h1 {
+ margin-bottom:0px;
+ padding-bottom:0px;
+ font-size:26px;
+}
+h2 {
+ margin-bottom:0px;
+ padding-bottom:0px;
+ font-size:20px;
+ white-space:nowrap;
+}
+span.section {
+ font-weight:bold;
+ cursor:pointer;
+ font-size:16px;
+ color:#003E69;
+ white-space:nowrap;
+ margin-left:5px;
+}
+span.new_sign {
+ font-weight:bold;
+ margin-left:26px;
+ font-size:16px;
+ color:#003E69;
+}
+span.new_sign_lbl {
+ margin-left:28px;
+ font-size:14px;
+ color:Black;
+}
+span:hover.section {
+ color:#336699;
+}
+span.section_affected {
+ cursor:pointer;
+ margin-left:7px;
+ padding-left:15px;
+ font-size:14px;
+ color:#cc3300;
+}
+span.section_info {
+ cursor:pointer;
+ margin-left:7px;
+ padding-left:15px;
+ font-size:14px;
+ color:Black;
+}
+span.extendable {
+ font-weight:100;
+ font-size:16px;
+}
+span.h_name {
+ color:#cc3300;
+ font-size:14px;
+ font-weight:bold;
+}
+div.h_list {
+ font-size:15px;
+ padding-left:5px;
+}
+span.ns {
+ color:#408080;
+ font-size:15px;
+}
+div.lib_list {
+ font-size:15px;
+ padding-left:5px;
+}
+span.lib_name {
+ color:Green;
+ font-size:14px;
+ font-weight:bold;
+}
+span.iname {
+ font-weight:bold;
+ font-size:16px;
+ color:#003E69;
+ margin-left:5px;
+}
+span.iname_b {
+ font-weight:bold;
+ font-size:15px;
+}
+span.iname_a {
+ color:#333333;
+ font-weight:bold;
+ font-size:15px;
+}
+span.sym_p {
+ font-weight:normal;
+ white-space:normal;
+}
+div.affect {
+ padding-left:15px;
+ padding-bottom:4px;
+ font-size:14px;
+ font-style:italic;
+ line-height:13px;
+}
+div.affected {
+ padding-left:30px;
+ padding-top:5px;
+}
+table.ptable {
+ border-collapse:collapse;
+ border:1px outset black;
+ line-height:16px;
+ margin-left:15px;
+ margin-top:3px;
+ margin-bottom:3px;
+ width:900px;
+}
+table.ptable td {
+ border:1px solid gray;
+ padding: 3px;
+}
+table.vtable {
+ border-collapse:collapse;
+ border:1px outset black;
+ line-height:16px;
+ margin-left:30px;
+ margin-top:10px;
+ width:100px;
+}
+table.vtable td {
+ border:1px solid gray;
+ white-space:nowrap;
+ padding: 3px;
+}
+table.ptable th, table.vtable th {
+ background-color:#eeeeee;
+ font-weight:bold;
+ color:#333333;
+ font-family:Verdana, Arial;
+ font-size:13px;
+ border:1px solid gray;
+ text-align:center;
+ vertical-align:top;
+ white-space:nowrap;
+ padding: 3px;
+}
+table.summary {
+ border-collapse:collapse;
+ border:1px outset black;
+}
+table.summary th {
+ background-color:#eeeeee;
+ font-weight:100;
+ text-align:left;
+ font-size:15px;
+ white-space:nowrap;
+ border:1px inset gray;
+ padding: 3px;
+}
+table.summary td {
+ text-align:right;
+ font-size:16px;
+ white-space:nowrap;
+ border:1px inset gray;
+ padding: 3px 5px 3px 10px;
+}
+table.code_view {
+ cursor:text;
+ margin-top:7px;
+ margin-left:15px;
+ font-family:Monaco, Consolas, 'DejaVu Sans Mono', 'Droid Sans Mono', Monospace;
+ font-size:14px;
+ padding:10px;
+ border:1px solid #e0e8e5;
+ color:#444444;
+ background-color:#eff3f2;
+ overflow:auto;
+}
+table.code_view td {
+ padding-left:15px;
+ text-align:left;
+ white-space:nowrap;
+}
+span.mangled {
+ padding-left:15px;
+ font-size:14px;
+ cursor:text;
+ color:#444444;
+}
+span.sym_ver {
+ color:#333333;
+ white-space:nowrap;
+ font-family:"DejaVu Sans Mono", Monospace;
+}
+span.attr {
+ color:#333333;
+ font-weight:100;
+}
+span.color_p {
+ font-style:italic;
+ color:Brown;
+}
+span.param {
+ font-style:italic;
+}
+span.focus_p {
+ font-style:italic;
+ color:Red;
+}
+span.ttype {
+ font-weight:100;
+}
+span.nowrap {
+ white-space:nowrap;
+}
+span.value {
+ white-space:nowrap;
+ font-weight:bold;
+}
+td.passed {
+ background-color:#CCFFCC;
+}
+td.warning {
+ background-color:#F4F4AF;
+}
+td.failed {
+ background-color:#FFCCCC;
+}
+td.new {
+ background-color:#C6DEFF;
+}
+.tabset {
+ float:left;
+}
+a.tab {
+ border:1px solid #AAA;
+ float:left;
+ margin:0px 5px -1px 0px;
+ padding:3px 5px 3px 5px;
+ position:relative;
+ font-size:14px;
+ background-color:#DDD;
+ text-decoration:none;
+ color:Black;
+}
+a.disabled:hover
+{
+ color:Black;
+ background:#EEE;
+}
+a.active:hover
+{
+ color:Black;
+ background:White;
+}
+a.active {
+ border-bottom-color:White;
+ background-color:White;
+}
+div.tab {
+ border:1px solid #AAA;
+ padding:0 7px 0 12px;
+ width:97%;
+ clear:both;
+}
+ </style>
+ <script type="text/javascript" language="JavaScript">
+ <!--
+ function showContent(header, id)
+{
+ e = document.getElementById(id);
+ if(e.style.display == 'none')
+ {
+ e.style.display = 'block';
+ e.style.visibility = 'visible';
+ header.innerHTML = header.innerHTML.replace(/\[[^0-9 ]\]/gi,"[−]");
+ }
+ else
+ {
+ e.style.display = 'none';
+ e.style.visibility = 'hidden';
+ header.innerHTML = header.innerHTML.replace(/\[[^0-9 ]\]/gi,"[+]");
+ }
+}
+function initTabs()
+{
+ var url = window.location.href;
+ if(url.indexOf('_Source_')!=-1 || url.indexOf('#Source')!=-1)
+ {
+ var tab1 = document.getElementById('BinaryID');
+ var tab2 = document.getElementById('SourceID');
+ tab1.className='tab disabled';
+ tab2.className='tab active';
+ }
+ var sets = document.getElementsByTagName('div');
+ for (var i = 0; i < sets.length; i++)
+ {
+ if (sets[i].className.indexOf('tabset') != -1)
+ {
+ var tabs = [];
+ var links = sets[i].getElementsByTagName('a');
+ for (var j = 0; j < links.length; j++)
+ {
+ if (links[j].className.indexOf('tab') != -1)
+ {
+ tabs.push(links[j]);
+ links[j].tabs = tabs;
+ var tab = document.getElementById(links[j].href.substr(links[j].href.indexOf('#') + 1));
+ //reset all tabs on start
+ if (tab)
+ {
+ if (links[j].className.indexOf('active')!=-1) {
+ tab.style.display = 'block';
+ }
+ else {
+ tab.style.display = 'none';
+ }
+ }
+ links[j].onclick = function()
+ {
+ var tab = document.getElementById(this.href.substr(this.href.indexOf('#') + 1));
+ if (tab)
+ {
+ //reset all tabs before change
+ for (var k = 0; k < this.tabs.length; k++)
+ {
+ document.getElementById(this.tabs[k].href.substr(this.tabs[k].href.indexOf('#') + 1)).style.display = 'none';
+ this.tabs[k].className = this.tabs[k].className.replace('active', 'disabled');
+ }
+ this.className = 'tab active';
+ tab.style.display = 'block';
+ // window.location.hash = this.id.replace('ID', '');
+ return false;
+ }
+ }
+ }
+ }
+ }
+ }
+ if(url.indexOf('#')!=-1) {
+ location.href=location.href;
+ }
+}
+if (window.addEventListener) window.addEventListener('load', initTabs, false);
+else if (window.attachEvent) window.attachEvent('onload', initTabs);
+ -->
+ </script>
+ </head><body><a name='Source'></a><a name='Binary'></a><a name='Top'></a><h1><span class='nowrap'>API compatibility report for the <span style='color:Blue;'>hdf5</span> library</span> <span class='nowrap'> between <span style='color:Red;'>1.8.13</span> and <span style='color:Red;'>1.8.14</span> versions on <span style='color:Blue;'>x86</span></span></h1>
+
+ <br/><div class='tabset'>
+ <a id='BinaryID' href='#BinaryTab' class='tab active'>Binary<br/>Compatibility</a>
+ <a id='SourceID' href='#SourceTab' style='margin-left:3px' class='tab disabled'>Source<br/>Compatibility</a>
+ </div><div id='BinaryTab' class='tab'>
+<h2>Test Info</h2><hr/>
+<table class='summary'>
+<tr><th>Library Name</th><td>hdf5</td></tr>
+<tr><th>Version #1</th><td>1.8.13</td></tr>
+<tr><th>Version #2</th><td>1.8.14</td></tr>
+<tr><th>CPU Type</th><td>x86</td></tr>
+<tr><th>GCC Version</th><td>4.1.2</td></tr>
+<tr><th>Subject</th><td width='150px'>Binary Compatibility</td></tr>
+</table>
+<h2>Test Results</h2><hr/>
+<table class='summary'><tr><th>Total Header Files</th><td><a href='#Headers' style='color:Blue;'>75</a></td></tr>
+<tr><th>Total Shared Libraries</th><td><a href='#Libs' style='color:Blue;'>6</a></td></tr>
+<tr><th>Total Symbols / Types</th><td>1754 / 540</td></tr>
+<tr><th>Verdict</th><td><span style='color:Red;'><b>Incompatible<br/>(0.8%)</b></span></td></tr>
+</table>
+<h2>Problem Summary</h2><hr/>
+<table class='summary'><tr><th></th><th style='text-align:center;'>Severity</th><th style='text-align:center;'>Count</th></tr><tr><th>Added Symbols</th><td>-</td><td class='new'><a href='#Binary_Added' style='color:Blue;'>31</a></td></tr>
+<tr><th>Removed Symbols</th><td>High</td><td class='failed'><a href='#Binary_Removed' style='color:Blue;'>14</a></td></tr>
+<tr><th rowspan='3'>Problems with<br/>Data Types</th><td>High</td><td>0</td></tr>
+<tr><td>Medium</td><td>0</td></tr>
+<tr><td>Low</td><td class='warning'><a href='#Type_Binary_Problems_Low' style='color:Blue;'>1</a></td></tr>
+<tr><th rowspan='3'>Problems with<br/>Symbols</th><td>High</td><td>0</td></tr>
+<tr><td>Medium</td><td>0</td></tr>
+<tr><td>Low</td><td>0</td></tr>
+<tr><th>Problems with<br/>Constants</th><td>Low</td><td class='warning'><a href='#Constant_Binary_Problems_Low' style='color:Blue;'>6</a></td></tr>
+<tr><th>Other Changes<br/>in Constants</th><td>-</td><td class='passed'><a href='#Other_Binary_Changes_In_Constants' style='color:Blue;'>1</a></td></tr>
+</table>
+
+<a name='Binary_Added'></a><h2>Added Symbols (31)</h2><hr/>
+<span class='h_name'>H5Ppublic.h</span>, <span class='lib_name'>libhdf5.so.9.0.0</span><br/>
+<span class="iname">H5P_CLS_ATTRIBUTE_CREATE_ID_g <span class='attr'>[data]</span></span><br/>
+<span class="iname">H5P_CLS_DATASET_ACCESS_ID_g <span class='attr'>[data]</span></span><br/>
+<span class="iname">H5P_CLS_DATASET_CREATE_ID_g <span class='attr'>[data]</span></span><br/>
+<span class="iname">H5P_CLS_DATASET_XFER_ID_g <span class='attr'>[data]</span></span><br/>
+<span class="iname">H5P_CLS_DATATYPE_ACCESS_ID_g <span class='attr'>[data]</span></span><br/>
+<span class="iname">H5P_CLS_DATATYPE_CREATE_ID_g <span class='attr'>[data]</span></span><br/>
+<span class="iname">H5P_CLS_FILE_ACCESS_ID_g <span class='attr'>[data]</span></span><br/>
+<span class="iname">H5P_CLS_FILE_CREATE_ID_g <span class='attr'>[data]</span></span><br/>
+<span class="iname">H5P_CLS_FILE_MOUNT_ID_g <span class='attr'>[data]</span></span><br/>
+<span class="iname">H5P_CLS_GROUP_ACCESS_ID_g <span class='attr'>[data]</span></span><br/>
+<span class="iname">H5P_CLS_GROUP_CREATE_ID_g <span class='attr'>[data]</span></span><br/>
+<span class="iname">H5P_CLS_LINK_ACCESS_ID_g <span class='attr'>[data]</span></span><br/>
+<span class="iname">H5P_CLS_LINK_CREATE_ID_g <span class='attr'>[data]</span></span><br/>
+<span class="iname">H5P_CLS_OBJECT_COPY_ID_g <span class='attr'>[data]</span></span><br/>
+<span class="iname">H5P_CLS_OBJECT_CREATE_ID_g <span class='attr'>[data]</span></span><br/>
+<span class="iname">H5P_CLS_ROOT_ID_g <span class='attr'>[data]</span></span><br/>
+<span class="iname">H5P_CLS_STRING_CREATE_ID_g <span class='attr'>[data]</span></span><br/>
+<span class="iname">H5P_LST_ATTRIBUTE_CREATE_ID_g <span class='attr'>[data]</span></span><br/>
+<span class="iname">H5P_LST_DATASET_ACCESS_ID_g <span class='attr'>[data]</span></span><br/>
+<span class="iname">H5P_LST_DATASET_CREATE_ID_g <span class='attr'>[data]</span></span><br/>
+<span class="iname">H5P_LST_DATASET_XFER_ID_g <span class='attr'>[data]</span></span><br/>
+<span class="iname">H5P_LST_DATATYPE_ACCESS_ID_g <span class='attr'>[data]</span></span><br/>
+<span class="iname">H5P_LST_DATATYPE_CREATE_ID_g <span class='attr'>[data]</span></span><br/>
+<span class="iname">H5P_LST_FILE_ACCESS_ID_g <span class='attr'>[data]</span></span><br/>
+<span class="iname">H5P_LST_FILE_CREATE_ID_g <span class='attr'>[data]</span></span><br/>
+<span class="iname">H5P_LST_FILE_MOUNT_ID_g <span class='attr'>[data]</span></span><br/>
+<span class="iname">H5P_LST_GROUP_ACCESS_ID_g <span class='attr'>[data]</span></span><br/>
+<span class="iname">H5P_LST_GROUP_CREATE_ID_g <span class='attr'>[data]</span></span><br/>
+<span class="iname">H5P_LST_LINK_ACCESS_ID_g <span class='attr'>[data]</span></span><br/>
+<span class="iname">H5P_LST_LINK_CREATE_ID_g <span class='attr'>[data]</span></span><br/>
+<span class="iname">H5P_LST_OBJECT_COPY_ID_g <span class='attr'>[data]</span></span><br/>
+<br/>
+<a style='font-size:11px;' href='#Top'>to the top</a><br/>
+<a name='Binary_Removed'></a><a name='Binary_Withdrawn'></a><h2>Removed Symbols (14)</h2><hr/>
+<span class='h_name'>H5Ppublic.h</span>, <span class='lib_name'>libhdf5.so.8.0.2</span><br/>
+<span class="iname">H5P_LST_ATTRIBUTE_CREATE_g <span class='attr'>[data]</span></span><br/>
+<span class="iname">H5P_LST_DATASET_ACCESS_g <span class='attr'>[data]</span></span><br/>
+<span class="iname">H5P_LST_DATASET_CREATE_g <span class='attr'>[data]</span></span><br/>
+<span class="iname">H5P_LST_DATASET_XFER_g <span class='attr'>[data]</span></span><br/>
+<span class="iname">H5P_LST_DATATYPE_ACCESS_g <span class='attr'>[data]</span></span><br/>
+<span class="iname">H5P_LST_DATATYPE_CREATE_g <span class='attr'>[data]</span></span><br/>
+<span class="iname">H5P_LST_FILE_ACCESS_g <span class='attr'>[data]</span></span><br/>
+<span class="iname">H5P_LST_FILE_CREATE_g <span class='attr'>[data]</span></span><br/>
+<span class="iname">H5P_LST_FILE_MOUNT_g <span class='attr'>[data]</span></span><br/>
+<span class="iname">H5P_LST_GROUP_ACCESS_g <span class='attr'>[data]</span></span><br/>
+<span class="iname">H5P_LST_GROUP_CREATE_g <span class='attr'>[data]</span></span><br/>
+<span class="iname">H5P_LST_LINK_ACCESS_g <span class='attr'>[data]</span></span><br/>
+<span class="iname">H5P_LST_LINK_CREATE_g <span class='attr'>[data]</span></span><br/>
+<span class="iname">H5P_LST_OBJECT_COPY_g <span class='attr'>[data]</span></span><br/>
+<br/>
+<a style='font-size:11px;' href='#Top'>to the top</a><br/>
+<a name='Low_Risk_Binary_Problems'></a><a name='Type_Binary_Problems_Low'></a>
+<h2>Problems with Data Types, Low Severity (1)</h2><hr/>
+<span class='h_name'>H5Lpublic.h</span><br/>
+<span class="section" onclick="javascript:showContent(this, 'c_1')">
+<span class='extendable'>[+]</span> <span class='ttype'>typedef</span> H5L_traverse_func_t (1)</span>
+<br/>
+<div id="c_1" style="display:none;">
+<table class='ptable'><tr>
+<th width='2%'></th><th width='47%'>Change</th>
+<th>Effect</th></tr><tr><th>1</th><td align='left' valign='top'>Base type has been changed from <span class='value'>herr_t(*)(char const*,hid_t,void const*,size_t,hid_t)</span> to <span class='value'>hid_t(*)(char const*,hid_t,void const*,size_t,hid_t)</span>.</td><td align='left' valign='top'>Replacement of the base data type may indicate a change in its semantic meaning.</td></tr>
+</table>
+<span class="section_affected" onclick="javascript:showContent(this, 'c_2')">
+[+] affected symbols (1)</span>
+<div id="c_2" style="display:none;">
+<div class='affected'><span class='iname_a'>H5Lregister <span class='sym_p'>( <span class='nowrap'>struct H5L_class_t const* <span class='focus_p'>cls</span> )</span></span></span><br/><div class='affect'>Field 'cls->trav_func' in 1st parameter 'cls' (pointer) has type 'H5L_traverse_func_t'.</div>
+</div></div>
+<br/><br/></div>
+
+<br/><a style='font-size:11px;' href='#Top'>to the top</a><br/>
+<a name='Constant_Binary_Problems_Low'></a><h2>Problems with Constants, Low Severity (6)</h2><hr/>
+<span class='h_name'>H5Dpublic.h</span><br/>
+<span class="section" onclick="javascript:showContent(this, 'c_3')">
+<span class='extendable'>[+]</span> H5D_CHUNK_CACHE_W0_DEFAULT</span>
+<br/>
+<div id="c_3" style="display:none;">
+<table class='ptable'><tr><th width='2%'></th><th width='47%'>Change</th><th>Effect</th></tr><tr><th>1</th><td align='left' valign='top'>The value of constant <b>H5D_CHUNK_CACHE_W0_DEFAULT</b> has been changed from <b>-1.</b> to <b>(-1.0f)</b>.</td><td align='left' valign='top'>Applications will pass an old value of this constant as the parameter to the new-version library functions, that expect a new one. This may result in crash of incorrect behavior of applications.</td></tr>
+</table><br/></div>
+
+<br/>
+<span class='h_name'>H5Epublic.h</span><br/>
+<span class="section" onclick="javascript:showContent(this, 'c_4')">
+<span class='extendable'>[+]</span> H5E_DEFAULT</span>
+<br/>
+<div id="c_4" style="display:none;">
+<table class='ptable'><tr><th width='2%'></th><th width='47%'>Change</th><th>Effect</th></tr><tr><th>1</th><td align='left' valign='top'>The value of constant <b>H5E_DEFAULT</b> has been changed from <b>0</b> to <b>(hid_t)0</b>.</td><td align='left' valign='top'>Applications will pass an old value of this constant as the parameter to the new-version library functions, that expect a new one. This may result in crash of incorrect behavior of applications.</td></tr>
+</table><br/></div>
+
+<br/>
+<span class='h_name'>H5Gpublic.h</span><br/>
+<span class="section" onclick="javascript:showContent(this, 'c_5')">
+<span class='extendable'>[+]</span> H5G_SAME_LOC</span>
+<br/>
+<div id="c_5" style="display:none;">
+<table class='ptable'><tr><th width='2%'></th><th width='47%'>Change</th><th>Effect</th></tr><tr><th>1</th><td align='left' valign='top'>The value of constant <b>H5G_SAME_LOC</b> has been changed from <b>0</b> to <b>(hid_t)0</b>.</td><td align='left' valign='top'>Applications will pass an old value of this constant as the parameter to the new-version library functions, that expect a new one. This may result in crash of incorrect behavior of applications.</td></tr>
+</table><br/></div>
+
+<br/>
+<span class='h_name'>H5Lpublic.h</span><br/>
+<span class="section" onclick="javascript:showContent(this, 'c_6')">
+<span class='extendable'>[+]</span> H5L_SAME_LOC</span>
+<br/>
+<div id="c_6" style="display:none;">
+<table class='ptable'><tr><th width='2%'></th><th width='47%'>Change</th><th>Effect</th></tr><tr><th>1</th><td align='left' valign='top'>The value of constant <b>H5L_SAME_LOC</b> has been changed from <b>0</b> to <b>(hid_t)0</b>.</td><td align='left' valign='top'>Applications will pass an old value of this constant as the parameter to the new-version library functions, that expect a new one. This may result in crash of incorrect behavior of applications.</td></tr>
+</table><br/></div>
+
+<br/>
+<span class='h_name'>H5public.h</span><br/>
+<span class="section" onclick="javascript:showContent(this, 'c_7')">
+<span class='extendable'>[+]</span> H5P_DEFAULT</span>
+<br/>
+<div id="c_7" style="display:none;">
+<table class='ptable'><tr><th width='2%'></th><th width='47%'>Change</th><th>Effect</th></tr><tr><th>1</th><td align='left' valign='top'>The value of constant <b>H5P_DEFAULT</b> has been changed from <b>0</b> to <b>(hid_t)0</b>.</td><td align='left' valign='top'>Applications will pass an old value of this constant as the parameter to the new-version library functions, that expect a new one. This may result in crash of incorrect behavior of applications.</td></tr>
+</table><br/></div>
+
+<br/>
+<span class='h_name'>H5Spublic.h</span><br/>
+<span class="section" onclick="javascript:showContent(this, 'c_8')">
+<span class='extendable'>[+]</span> H5S_ALL</span>
+<br/>
+<div id="c_8" style="display:none;">
+<table class='ptable'><tr><th width='2%'></th><th width='47%'>Change</th><th>Effect</th></tr><tr><th>1</th><td align='left' valign='top'>The value of constant <b>H5S_ALL</b> has been changed from <b>0</b> to <b>(hid_t)0</b>.</td><td align='left' valign='top'>Applications will pass an old value of this constant as the parameter to the new-version library functions, that expect a new one. This may result in crash of incorrect behavior of applications.</td></tr>
+</table><br/></div>
+
+<br/>
+<a style='font-size:11px;' href='#Top'>to the top</a><br/>
+<a name='Other_Binary_Changes'></a><a name='Other_Binary_Changes_In_Constants'></a><h2>Other Changes in Constants (1)</h2><hr/>
+<span class='h_name'>H5pubconf.h</span><br/>
+<span class="section" onclick="javascript:showContent(this, 'c_9')">
+<span class='extendable'>[+]</span> H5_HAVE_ASPRINTF</span>
+<br/>
+<div id="c_9" style="display:none;">
+<table class='ptable'><tr><th width='2%'></th><th width='47%'>Change</th><th>Effect</th></tr><tr><th>1</th><td align='left' valign='top'>The constant <b>H5_HAVE_ASPRINTF</b> with value <b>1</b> has been added.</td><td align='left' valign='top'>No effect.</td></tr>
+</table><br/></div>
+
+<br/>
+<a style='font-size:11px;' href='#Top'>to the top</a><br/>
+<a name='Headers'></a><h2>Header Files (75)</h2><hr/>
+<div class='h_list'>
+H5AbstractDs.h<br/>
+H5ACpublic.h<br/>
+H5api_adpt.h<br/>
+H5Apublic.h<br/>
+H5ArrayType.h<br/>
+H5AtomType.h<br/>
+H5Attribute.h<br/>
+H5Classes.h<br/>
+H5CommonFG.h<br/>
+H5CompType.h<br/>
+H5Cpp.h<br/>
+H5CppDoc.h<br/>
+H5Cpublic.h<br/>
+H5DataSet.h<br/>
+H5DataSpace.h<br/>
+H5DataType.h<br/>
+H5DcreatProp.h<br/>
+H5DOpublic.h<br/>
+H5Dpublic.h<br/>
+H5DSpublic.h<br/>
+H5DxferProp.h<br/>
+H5EnumType.h<br/>
+H5Epubgen.h<br/>
+H5Epublic.h<br/>
+H5Exception.h<br/>
+H5f90i.h<br/>
+H5f90i_gen.h<br/>
+H5FaccProp.h<br/>
+H5FcreatProp.h<br/>
+H5FDcore.h<br/>
+H5FDdirect.h<br/>
+H5FDfamily.h<br/>
+H5FDlog.h<br/>
+H5FDmpi.h<br/>
+H5FDmpio.h<br/>
+H5FDmulti.h<br/>
+H5FDpublic.h<br/>
+H5FDsec2.h<br/>
+H5FDstdio.h<br/>
+H5File.h<br/>
+H5FloatType.h<br/>
+H5Fpublic.h<br/>
+H5Gpublic.h<br/>
+H5Group.h<br/>
+H5IdComponent.h<br/>
+H5IMpublic.h<br/>
+H5Include.h<br/>
+H5IntType.h<br/>
+H5Ipublic.h<br/>
+H5Library.h<br/>
+H5Location.h<br/>
+H5Lpublic.h<br/>
+H5LTpublic.h<br/>
+H5MMpublic.h<br/>
+H5Object.h<br/>
+H5Opublic.h<br/>
+H5overflow.h<br/>
+H5PacketTable.h<br/>
+H5PLextern.h<br/>
+H5Ppublic.h<br/>
+H5PredType.h<br/>
+H5PropList.h<br/>
+H5PTpublic.h<br/>
+H5pubconf.h<br/>
+H5public.h<br/>
+H5Rpublic.h<br/>
+H5Spublic.h<br/>
+H5StrType.h<br/>
+H5TBpublic.h<br/>
+H5Tpublic.h<br/>
+H5VarLenType.h<br/>
+H5version.h<br/>
+H5Zpublic.h<br/>
+hdf5.h<br/>
+hdf5_hl.h<br/>
+</div>
+<br/><a style='font-size:11px;' href='#Top'>to the top</a><br/>
+<a name='Libs'></a><h2>Shared Libraries (6)</h2><hr/>
+<div class='lib_list'>
+libhdf5.so.8.0.2<br/>
+libhdf5_cpp.so.8.0.2<br/>
+libhdf5_fortran.so.8.0.2<br/>
+libhdf5_hl.so.8.0.2<br/>
+libhdf5_hl_cpp.so.8.0.2<br/>
+libhdf5hl_fortran.so.8.0.2<br/>
+</div>
+<br/><a style='font-size:11px;' href='#Top'>to the top</a><br/>
+<br/><br/><br/></div><div id='SourceTab' class='tab'>
+<h2>Test Info</h2><hr/>
+<table class='summary'>
+<tr><th>Library Name</th><td>hdf5</td></tr>
+<tr><th>Version #1</th><td>1.8.13</td></tr>
+<tr><th>Version #2</th><td>1.8.14</td></tr>
+<tr><th>CPU Type</th><td>x86</td></tr>
+<tr><th>GCC Version</th><td>4.1.2</td></tr>
+<tr><th>Subject</th><td width='150px'>Source Compatibility</td></tr>
+</table>
+<h2>Test Results</h2><hr/>
+<table class='summary'><tr><th>Total Header Files</th><td><a href='#Headers' style='color:Blue;'>75</a></td></tr>
+<tr><th>Total Shared Libraries</th><td><a href='#Libs' style='color:Blue;'>6</a></td></tr>
+<tr><th>Total Symbols / Types</th><td>1807 / 543</td></tr>
+<tr><th>Verdict</th><td><span style='color:Red;'><b>Incompatible<br/>(1.7%)</b></span></td></tr>
+</table>
+<h2>Problem Summary</h2><hr/>
+<table class='summary'><tr><th></th><th style='text-align:center;'>Severity</th><th style='text-align:center;'>Count</th></tr><tr><th>Added Symbols</th><td>-</td><td class='new'><a href='#Source_Added' style='color:Blue;'>31</a></td></tr>
+<tr><th>Removed Symbols</th><td>High</td><td class='failed'><a href='#Source_Removed' style='color:Blue;'>31</a></td></tr>
+<tr><th rowspan='3'>Problems with<br/>Data Types</th><td>High</td><td>0</td></tr>
+<tr><td>Medium</td><td>0</td></tr>
+<tr><td>Low</td><td class='warning'><a href='#Type_Source_Problems_Low' style='color:Blue;'>1</a></td></tr>
+<tr><th rowspan='3'>Problems with<br/>Symbols</th><td>High</td><td>0</td></tr>
+<tr><td>Medium</td><td>0</td></tr>
+<tr><td>Low</td><td>0</td></tr>
+<tr><th>Problems with<br/>Constants</th><td>Low</td><td class='warning'><a href='#Constant_Source_Problems_Low' style='color:Blue;'>43</a></td></tr>
+<tr><th>Other Changes<br/>in Constants</th><td>-</td><td class='passed'><a href='#Other_Source_Changes_In_Constants' style='color:Blue;'>2</a></td></tr>
+</table>
+
+<a name='Source_Added'></a><h2>Added Symbols (31)</h2><hr/>
+<span class='h_name'>H5Ppublic.h</span><br/>
+<span class="iname">H5P_CLS_ATTRIBUTE_CREATE_ID_g <span class='attr'>[data]</span></span><br/>
+<span class="iname">H5P_CLS_DATASET_ACCESS_ID_g <span class='attr'>[data]</span></span><br/>
+<span class="iname">H5P_CLS_DATASET_CREATE_ID_g <span class='attr'>[data]</span></span><br/>
+<span class="iname">H5P_CLS_DATASET_XFER_ID_g <span class='attr'>[data]</span></span><br/>
+<span class="iname">H5P_CLS_DATATYPE_ACCESS_ID_g <span class='attr'>[data]</span></span><br/>
+<span class="iname">H5P_CLS_DATATYPE_CREATE_ID_g <span class='attr'>[data]</span></span><br/>
+<span class="iname">H5P_CLS_FILE_ACCESS_ID_g <span class='attr'>[data]</span></span><br/>
+<span class="iname">H5P_CLS_FILE_CREATE_ID_g <span class='attr'>[data]</span></span><br/>
+<span class="iname">H5P_CLS_FILE_MOUNT_ID_g <span class='attr'>[data]</span></span><br/>
+<span class="iname">H5P_CLS_GROUP_ACCESS_ID_g <span class='attr'>[data]</span></span><br/>
+<span class="iname">H5P_CLS_GROUP_CREATE_ID_g <span class='attr'>[data]</span></span><br/>
+<span class="iname">H5P_CLS_LINK_ACCESS_ID_g <span class='attr'>[data]</span></span><br/>
+<span class="iname">H5P_CLS_LINK_CREATE_ID_g <span class='attr'>[data]</span></span><br/>
+<span class="iname">H5P_CLS_OBJECT_COPY_ID_g <span class='attr'>[data]</span></span><br/>
+<span class="iname">H5P_CLS_OBJECT_CREATE_ID_g <span class='attr'>[data]</span></span><br/>
+<span class="iname">H5P_CLS_ROOT_ID_g <span class='attr'>[data]</span></span><br/>
+<span class="iname">H5P_CLS_STRING_CREATE_ID_g <span class='attr'>[data]</span></span><br/>
+<span class="iname">H5P_LST_ATTRIBUTE_CREATE_ID_g <span class='attr'>[data]</span></span><br/>
+<span class="iname">H5P_LST_DATASET_ACCESS_ID_g <span class='attr'>[data]</span></span><br/>
+<span class="iname">H5P_LST_DATASET_CREATE_ID_g <span class='attr'>[data]</span></span><br/>
+<span class="iname">H5P_LST_DATASET_XFER_ID_g <span class='attr'>[data]</span></span><br/>
+<span class="iname">H5P_LST_DATATYPE_ACCESS_ID_g <span class='attr'>[data]</span></span><br/>
+<span class="iname">H5P_LST_DATATYPE_CREATE_ID_g <span class='attr'>[data]</span></span><br/>
+<span class="iname">H5P_LST_FILE_ACCESS_ID_g <span class='attr'>[data]</span></span><br/>
+<span class="iname">H5P_LST_FILE_CREATE_ID_g <span class='attr'>[data]</span></span><br/>
+<span class="iname">H5P_LST_FILE_MOUNT_ID_g <span class='attr'>[data]</span></span><br/>
+<span class="iname">H5P_LST_GROUP_ACCESS_ID_g <span class='attr'>[data]</span></span><br/>
+<span class="iname">H5P_LST_GROUP_CREATE_ID_g <span class='attr'>[data]</span></span><br/>
+<span class="iname">H5P_LST_LINK_ACCESS_ID_g <span class='attr'>[data]</span></span><br/>
+<span class="iname">H5P_LST_LINK_CREATE_ID_g <span class='attr'>[data]</span></span><br/>
+<span class="iname">H5P_LST_OBJECT_COPY_ID_g <span class='attr'>[data]</span></span><br/>
+<br/>
+<a style='font-size:11px;' href='#Top'>to the top</a><br/>
+<a name='Source_Removed'></a><a name='Source_Withdrawn'></a><h2>Removed Symbols (31)</h2><hr/>
+<span class='h_name'>H5Ppublic.h</span><br/>
+<span class="iname">H5P_CLS_ATTRIBUTE_CREATE_g <span class='attr'>[data]</span></span><br/>
+<span class="iname">H5P_CLS_DATASET_ACCESS_g <span class='attr'>[data]</span></span><br/>
+<span class="iname">H5P_CLS_DATASET_CREATE_g <span class='attr'>[data]</span></span><br/>
+<span class="iname">H5P_CLS_DATASET_XFER_g <span class='attr'>[data]</span></span><br/>
+<span class="iname">H5P_CLS_DATATYPE_ACCESS_g <span class='attr'>[data]</span></span><br/>
+<span class="iname">H5P_CLS_DATATYPE_CREATE_g <span class='attr'>[data]</span></span><br/>
+<span class="iname">H5P_CLS_FILE_ACCESS_g <span class='attr'>[data]</span></span><br/>
+<span class="iname">H5P_CLS_FILE_CREATE_g <span class='attr'>[data]</span></span><br/>
+<span class="iname">H5P_CLS_FILE_MOUNT_g <span class='attr'>[data]</span></span><br/>
+<span class="iname">H5P_CLS_GROUP_ACCESS_g <span class='attr'>[data]</span></span><br/>
+<span class="iname">H5P_CLS_GROUP_CREATE_g <span class='attr'>[data]</span></span><br/>
+<span class="iname">H5P_CLS_LINK_ACCESS_g <span class='attr'>[data]</span></span><br/>
+<span class="iname">H5P_CLS_LINK_CREATE_g <span class='attr'>[data]</span></span><br/>
+<span class="iname">H5P_CLS_OBJECT_COPY_g <span class='attr'>[data]</span></span><br/>
+<span class="iname">H5P_CLS_OBJECT_CREATE_g <span class='attr'>[data]</span></span><br/>
+<span class="iname">H5P_CLS_ROOT_g <span class='attr'>[data]</span></span><br/>
+<span class="iname">H5P_CLS_STRING_CREATE_g <span class='attr'>[data]</span></span><br/>
+<span class="iname">H5P_LST_ATTRIBUTE_CREATE_g <span class='attr'>[data]</span></span><br/>
+<span class="iname">H5P_LST_DATASET_ACCESS_g <span class='attr'>[data]</span></span><br/>
+<span class="iname">H5P_LST_DATASET_CREATE_g <span class='attr'>[data]</span></span><br/>
+<span class="iname">H5P_LST_DATASET_XFER_g <span class='attr'>[data]</span></span><br/>
+<span class="iname">H5P_LST_DATATYPE_ACCESS_g <span class='attr'>[data]</span></span><br/>
+<span class="iname">H5P_LST_DATATYPE_CREATE_g <span class='attr'>[data]</span></span><br/>
+<span class="iname">H5P_LST_FILE_ACCESS_g <span class='attr'>[data]</span></span><br/>
+<span class="iname">H5P_LST_FILE_CREATE_g <span class='attr'>[data]</span></span><br/>
+<span class="iname">H5P_LST_FILE_MOUNT_g <span class='attr'>[data]</span></span><br/>
+<span class="iname">H5P_LST_GROUP_ACCESS_g <span class='attr'>[data]</span></span><br/>
+<span class="iname">H5P_LST_GROUP_CREATE_g <span class='attr'>[data]</span></span><br/>
+<span class="iname">H5P_LST_LINK_ACCESS_g <span class='attr'>[data]</span></span><br/>
+<span class="iname">H5P_LST_LINK_CREATE_g <span class='attr'>[data]</span></span><br/>
+<span class="iname">H5P_LST_OBJECT_COPY_g <span class='attr'>[data]</span></span><br/>
+<br/>
+<a style='font-size:11px;' href='#Top'>to the top</a><br/>
+<a name='Low_Risk_Source_Problems'></a><a name='Type_Source_Problems_Low'></a>
+<h2>Problems with Data Types, Low Severity (1)</h2><hr/>
+<span class='h_name'>H5Lpublic.h</span><br/>
+<span class="section" onclick="javascript:showContent(this, 'c_10')">
+<span class='extendable'>[+]</span> <span class='ttype'>typedef</span> H5L_traverse_func_t (1)</span>
+<br/>
+<div id="c_10" style="display:none;">
+<table class='ptable'><tr>
+<th width='2%'></th><th width='47%'>Change</th>
+<th>Effect</th></tr><tr><th>1</th><td align='left' valign='top'>Base type has been changed from <span class='value'>herr_t(*)(char const*,hid_t,void const*,size_t,hid_t)</span> to <span class='value'>hid_t(*)(char const*,hid_t,void const*,size_t,hid_t)</span>.</td><td align='left' valign='top'>Recompilation of a client program may be broken.</td></tr>
+</table>
+<span class="section_affected" onclick="javascript:showContent(this, 'c_11')">
+[+] affected symbols (1)</span>
+<div id="c_11" style="display:none;">
+<div class='affected'><span class='iname_a'>H5Lregister <span class='sym_p'>( <span class='nowrap'>struct H5L_class_t const* <span class='focus_p'>cls</span> )</span></span></span><br/><div class='affect'>Field 'cls->trav_func' in 1st parameter 'cls' (pointer) has type 'H5L_traverse_func_t'.</div>
+</div></div>
+<br/><br/></div>
+
+<br/><a style='font-size:11px;' href='#Top'>to the top</a><br/>
+<a name='Constant_Source_Problems_Low'></a><h2>Problems with Constants, Low Severity (43)</h2><hr/>
+<span class='h_name'>H5Dpublic.h</span><br/>
+<span class="section" onclick="javascript:showContent(this, 'c_12')">
+<span class='extendable'>[+]</span> H5D_CHUNK_CACHE_W0_DEFAULT</span>
+<br/>
+<div id="c_12" style="display:none;">
+<table class='ptable'><tr><th width='2%'></th><th width='47%'>Change</th><th>Effect</th></tr><tr><th>1</th><td align='left' valign='top'>The value of constant <b>H5D_CHUNK_CACHE_W0_DEFAULT</b> has been changed from <b>-1.</b> to <b>(-1.0f)</b>.</td><td align='left' valign='top'>Recompilation of a client program may be broken.</td></tr>
+</table><br/></div>
+
+<br/>
+<span class='h_name'>H5Epublic.h</span><br/>
+<span class="section" onclick="javascript:showContent(this, 'c_13')">
+<span class='extendable'>[+]</span> H5E_DEFAULT</span>
+<br/>
+<div id="c_13" style="display:none;">
+<table class='ptable'><tr><th width='2%'></th><th width='47%'>Change</th><th>Effect</th></tr><tr><th>1</th><td align='left' valign='top'>The value of constant <b>H5E_DEFAULT</b> has been changed from <b>0</b> to <b>(hid_t)0</b>.</td><td align='left' valign='top'>Recompilation of a client program may be broken.</td></tr>
+</table><br/></div>
+
+<br/>
+<span class='h_name'>H5Gpublic.h</span><br/>
+<span class="section" onclick="javascript:showContent(this, 'c_14')">
+<span class='extendable'>[+]</span> H5G_SAME_LOC</span>
+<br/>
+<div id="c_14" style="display:none;">
+<table class='ptable'><tr><th width='2%'></th><th width='47%'>Change</th><th>Effect</th></tr><tr><th>1</th><td align='left' valign='top'>The value of constant <b>H5G_SAME_LOC</b> has been changed from <b>0</b> to <b>(hid_t)0</b>.</td><td align='left' valign='top'>Recompilation of a client program may be broken.</td></tr>
+</table><br/></div>
+
+<br/>
+<span class='h_name'>H5Lpublic.h</span><br/>
+<span class="section" onclick="javascript:showContent(this, 'c_15')">
+<span class='extendable'>[+]</span> H5L_SAME_LOC</span>
+<br/>
+<div id="c_15" style="display:none;">
+<table class='ptable'><tr><th width='2%'></th><th width='47%'>Change</th><th>Effect</th></tr><tr><th>1</th><td align='left' valign='top'>The value of constant <b>H5L_SAME_LOC</b> has been changed from <b>0</b> to <b>(hid_t)0</b>.</td><td align='left' valign='top'>Recompilation of a client program may be broken.</td></tr>
+</table><br/></div>
+
+<br/>
+<span class='h_name'>H5Ppublic.h</span><br/>
+<span class="section" onclick="javascript:showContent(this, 'c_16')">
+<span class='extendable'>[+]</span> H5P_ATTRIBUTE_CREATE</span>
+<br/>
+<div id="c_16" style="display:none;">
+<table class='ptable'><tr><th width='2%'></th><th width='47%'>Change</th><th>Effect</th></tr><tr><th>1</th><td align='left' valign='top'>The value of constant <b>H5P_ATTRIBUTE_CREATE</b> has been changed from <span class='value'>(H5OPEN H5P_CLS_ATTRIBUTE_CREATE_g)</span> to <span class='value'>(H5OPEN H5P_CLS_ATTRIBUTE_CREATE_ID_g)</span>.</td><td align='left' valign='top'>Recompilation of a client program may be broken.</td></tr>
+</table><br/></div>
+
+<span class="section" onclick="javascript:showContent(this, 'c_17')">
+<span class='extendable'>[+]</span> H5P_ATTRIBUTE_CREATE_DEFAULT</span>
+<br/>
+<div id="c_17" style="display:none;">
+<table class='ptable'><tr><th width='2%'></th><th width='47%'>Change</th><th>Effect</th></tr><tr><th>1</th><td align='left' valign='top'>The value of constant <b>H5P_ATTRIBUTE_CREATE_DEFAULT</b> has been changed from <span class='value'>(H5OPEN H5P_LST_ATTRIBUTE_CREATE_g)</span> to <span class='value'>(H5OPEN H5P_LST_ATTRIBUTE_CREATE_ID_g)</span>.</td><td align='left' valign='top'>Recompilation of a client program may be broken.</td></tr>
+</table><br/></div>
+
+<span class="section" onclick="javascript:showContent(this, 'c_18')">
+<span class='extendable'>[+]</span> H5P_DATASET_ACCESS</span>
+<br/>
+<div id="c_18" style="display:none;">
+<table class='ptable'><tr><th width='2%'></th><th width='47%'>Change</th><th>Effect</th></tr><tr><th>1</th><td align='left' valign='top'>The value of constant <b>H5P_DATASET_ACCESS</b> has been changed from <span class='value'>(H5OPEN H5P_CLS_DATASET_ACCESS_g)</span> to <span class='value'>(H5OPEN H5P_CLS_DATASET_ACCESS_ID_g)</span>.</td><td align='left' valign='top'>Recompilation of a client program may be broken.</td></tr>
+</table><br/></div>
+
+<span class="section" onclick="javascript:showContent(this, 'c_19')">
+<span class='extendable'>[+]</span> H5P_DATASET_ACCESS_DEFAULT</span>
+<br/>
+<div id="c_19" style="display:none;">
+<table class='ptable'><tr><th width='2%'></th><th width='47%'>Change</th><th>Effect</th></tr><tr><th>1</th><td align='left' valign='top'>The value of constant <b>H5P_DATASET_ACCESS_DEFAULT</b> has been changed from <span class='value'>(H5OPEN H5P_LST_DATASET_ACCESS_g)</span> to <span class='value'>(H5OPEN H5P_LST_DATASET_ACCESS_ID_g)</span>.</td><td align='left' valign='top'>Recompilation of a client program may be broken.</td></tr>
+</table><br/></div>
+
+<span class="section" onclick="javascript:showContent(this, 'c_20')">
+<span class='extendable'>[+]</span> H5P_DATASET_CREATE</span>
+<br/>
+<div id="c_20" style="display:none;">
+<table class='ptable'><tr><th width='2%'></th><th width='47%'>Change</th><th>Effect</th></tr><tr><th>1</th><td align='left' valign='top'>The value of constant <b>H5P_DATASET_CREATE</b> has been changed from <span class='value'>(H5OPEN H5P_CLS_DATASET_CREATE_g)</span> to <span class='value'>(H5OPEN H5P_CLS_DATASET_CREATE_ID_g)</span>.</td><td align='left' valign='top'>Recompilation of a client program may be broken.</td></tr>
+</table><br/></div>
+
+<span class="section" onclick="javascript:showContent(this, 'c_21')">
+<span class='extendable'>[+]</span> H5P_DATASET_CREATE_DEFAULT</span>
+<br/>
+<div id="c_21" style="display:none;">
+<table class='ptable'><tr><th width='2%'></th><th width='47%'>Change</th><th>Effect</th></tr><tr><th>1</th><td align='left' valign='top'>The value of constant <b>H5P_DATASET_CREATE_DEFAULT</b> has been changed from <span class='value'>(H5OPEN H5P_LST_DATASET_CREATE_g)</span> to <span class='value'>(H5OPEN H5P_LST_DATASET_CREATE_ID_g)</span>.</td><td align='left' valign='top'>Recompilation of a client program may be broken.</td></tr>
+</table><br/></div>
+
+<span class="section" onclick="javascript:showContent(this, 'c_22')">
+<span class='extendable'>[+]</span> H5P_DATASET_XFER</span>
+<br/>
+<div id="c_22" style="display:none;">
+<table class='ptable'><tr><th width='2%'></th><th width='47%'>Change</th><th>Effect</th></tr><tr><th>1</th><td align='left' valign='top'>The value of constant <b>H5P_DATASET_XFER</b> has been changed from <span class='value'>(H5OPEN H5P_CLS_DATASET_XFER_g)</span> to <span class='value'>(H5OPEN H5P_CLS_DATASET_XFER_ID_g)</span>.</td><td align='left' valign='top'>Recompilation of a client program may be broken.</td></tr>
+</table><br/></div>
+
+<span class="section" onclick="javascript:showContent(this, 'c_23')">
+<span class='extendable'>[+]</span> H5P_DATASET_XFER_DEFAULT</span>
+<br/>
+<div id="c_23" style="display:none;">
+<table class='ptable'><tr><th width='2%'></th><th width='47%'>Change</th><th>Effect</th></tr><tr><th>1</th><td align='left' valign='top'>The value of constant <b>H5P_DATASET_XFER_DEFAULT</b> has been changed from <span class='value'>(H5OPEN H5P_LST_DATASET_XFER_g)</span> to <span class='value'>(H5OPEN H5P_LST_DATASET_XFER_ID_g)</span>.</td><td align='left' valign='top'>Recompilation of a client program may be broken.</td></tr>
+</table><br/></div>
+
+<span class="section" onclick="javascript:showContent(this, 'c_24')">
+<span class='extendable'>[+]</span> H5P_DATATYPE_ACCESS</span>
+<br/>
+<div id="c_24" style="display:none;">
+<table class='ptable'><tr><th width='2%'></th><th width='47%'>Change</th><th>Effect</th></tr><tr><th>1</th><td align='left' valign='top'>The value of constant <b>H5P_DATATYPE_ACCESS</b> has been changed from <span class='value'>(H5OPEN H5P_CLS_DATATYPE_ACCESS_g)</span> to <span class='value'>(H5OPEN H5P_CLS_DATATYPE_ACCESS_ID_g)</span>.</td><td align='left' valign='top'>Recompilation of a client program may be broken.</td></tr>
+</table><br/></div>
+
+<span class="section" onclick="javascript:showContent(this, 'c_25')">
+<span class='extendable'>[+]</span> H5P_DATATYPE_ACCESS_DEFAULT</span>
+<br/>
+<div id="c_25" style="display:none;">
+<table class='ptable'><tr><th width='2%'></th><th width='47%'>Change</th><th>Effect</th></tr><tr><th>1</th><td align='left' valign='top'>The value of constant <b>H5P_DATATYPE_ACCESS_DEFAULT</b> has been changed from <span class='value'>(H5OPEN H5P_LST_DATATYPE_ACCESS_g)</span> to <span class='value'>(H5OPEN H5P_LST_DATATYPE_ACCESS_ID_g)</span>.</td><td align='left' valign='top'>Recompilation of a client program may be broken.</td></tr>
+</table><br/></div>
+
+<span class="section" onclick="javascript:showContent(this, 'c_26')">
+<span class='extendable'>[+]</span> H5P_DATATYPE_CREATE</span>
+<br/>
+<div id="c_26" style="display:none;">
+<table class='ptable'><tr><th width='2%'></th><th width='47%'>Change</th><th>Effect</th></tr><tr><th>1</th><td align='left' valign='top'>The value of constant <b>H5P_DATATYPE_CREATE</b> has been changed from <span class='value'>(H5OPEN H5P_CLS_DATATYPE_CREATE_g)</span> to <span class='value'>(H5OPEN H5P_CLS_DATATYPE_CREATE_ID_g)</span>.</td><td align='left' valign='top'>Recompilation of a client program may be broken.</td></tr>
+</table><br/></div>
+
+<span class="section" onclick="javascript:showContent(this, 'c_27')">
+<span class='extendable'>[+]</span> H5P_DATATYPE_CREATE_DEFAULT</span>
+<br/>
+<div id="c_27" style="display:none;">
+<table class='ptable'><tr><th width='2%'></th><th width='47%'>Change</th><th>Effect</th></tr><tr><th>1</th><td align='left' valign='top'>The value of constant <b>H5P_DATATYPE_CREATE_DEFAULT</b> has been changed from <span class='value'>(H5OPEN H5P_LST_DATATYPE_CREATE_g)</span> to <span class='value'>(H5OPEN H5P_LST_DATATYPE_CREATE_ID_g)</span>.</td><td align='left' valign='top'>Recompilation of a client program may be broken.</td></tr>
+</table><br/></div>
+
+<span class="section" onclick="javascript:showContent(this, 'c_28')">
+<span class='extendable'>[+]</span> H5P_FILE_ACCESS</span>
+<br/>
+<div id="c_28" style="display:none;">
+<table class='ptable'><tr><th width='2%'></th><th width='47%'>Change</th><th>Effect</th></tr><tr><th>1</th><td align='left' valign='top'>The value of constant <b>H5P_FILE_ACCESS</b> has been changed from <span class='value'>(H5OPEN H5P_CLS_FILE_ACCESS_g)</span> to <span class='value'>(H5OPEN H5P_CLS_FILE_ACCESS_ID_g)</span>.</td><td align='left' valign='top'>Recompilation of a client program may be broken.</td></tr>
+</table><br/></div>
+
+<span class="section" onclick="javascript:showContent(this, 'c_29')">
+<span class='extendable'>[+]</span> H5P_FILE_ACCESS_DEFAULT</span>
+<br/>
+<div id="c_29" style="display:none;">
+<table class='ptable'><tr><th width='2%'></th><th width='47%'>Change</th><th>Effect</th></tr><tr><th>1</th><td align='left' valign='top'>The value of constant <b>H5P_FILE_ACCESS_DEFAULT</b> has been changed from <span class='value'>(H5OPEN H5P_LST_FILE_ACCESS_g)</span> to <span class='value'>(H5OPEN H5P_LST_FILE_ACCESS_ID_g)</span>.</td><td align='left' valign='top'>Recompilation of a client program may be broken.</td></tr>
+</table><br/></div>
+
+<span class="section" onclick="javascript:showContent(this, 'c_30')">
+<span class='extendable'>[+]</span> H5P_FILE_CREATE</span>
+<br/>
+<div id="c_30" style="display:none;">
+<table class='ptable'><tr><th width='2%'></th><th width='47%'>Change</th><th>Effect</th></tr><tr><th>1</th><td align='left' valign='top'>The value of constant <b>H5P_FILE_CREATE</b> has been changed from <span class='value'>(H5OPEN H5P_CLS_FILE_CREATE_g)</span> to <span class='value'>(H5OPEN H5P_CLS_FILE_CREATE_ID_g)</span>.</td><td align='left' valign='top'>Recompilation of a client program may be broken.</td></tr>
+</table><br/></div>
+
+<span class="section" onclick="javascript:showContent(this, 'c_31')">
+<span class='extendable'>[+]</span> H5P_FILE_CREATE_DEFAULT</span>
+<br/>
+<div id="c_31" style="display:none;">
+<table class='ptable'><tr><th width='2%'></th><th width='47%'>Change</th><th>Effect</th></tr><tr><th>1</th><td align='left' valign='top'>The value of constant <b>H5P_FILE_CREATE_DEFAULT</b> has been changed from <span class='value'>(H5OPEN H5P_LST_FILE_CREATE_g)</span> to <span class='value'>(H5OPEN H5P_LST_FILE_CREATE_ID_g)</span>.</td><td align='left' valign='top'>Recompilation of a client program may be broken.</td></tr>
+</table><br/></div>
+
+<span class="section" onclick="javascript:showContent(this, 'c_32')">
+<span class='extendable'>[+]</span> H5P_FILE_MOUNT</span>
+<br/>
+<div id="c_32" style="display:none;">
+<table class='ptable'><tr><th width='2%'></th><th width='47%'>Change</th><th>Effect</th></tr><tr><th>1</th><td align='left' valign='top'>The value of constant <b>H5P_FILE_MOUNT</b> has been changed from <span class='value'>(H5OPEN H5P_CLS_FILE_MOUNT_g)</span> to <span class='value'>(H5OPEN H5P_CLS_FILE_MOUNT_ID_g)</span>.</td><td align='left' valign='top'>Recompilation of a client program may be broken.</td></tr>
+</table><br/></div>
+
+<span class="section" onclick="javascript:showContent(this, 'c_33')">
+<span class='extendable'>[+]</span> H5P_FILE_MOUNT_DEFAULT</span>
+<br/>
+<div id="c_33" style="display:none;">
+<table class='ptable'><tr><th width='2%'></th><th width='47%'>Change</th><th>Effect</th></tr><tr><th>1</th><td align='left' valign='top'>The value of constant <b>H5P_FILE_MOUNT_DEFAULT</b> has been changed from <span class='value'>(H5OPEN H5P_LST_FILE_MOUNT_g)</span> to <span class='value'>(H5OPEN H5P_LST_FILE_MOUNT_ID_g)</span>.</td><td align='left' valign='top'>Recompilation of a client program may be broken.</td></tr>
+</table><br/></div>
+
+<span class="section" onclick="javascript:showContent(this, 'c_34')">
+<span class='extendable'>[+]</span> H5P_GROUP_ACCESS</span>
+<br/>
+<div id="c_34" style="display:none;">
+<table class='ptable'><tr><th width='2%'></th><th width='47%'>Change</th><th>Effect</th></tr><tr><th>1</th><td align='left' valign='top'>The value of constant <b>H5P_GROUP_ACCESS</b> has been changed from <span class='value'>(H5OPEN H5P_CLS_GROUP_ACCESS_g)</span> to <span class='value'>(H5OPEN H5P_CLS_GROUP_ACCESS_ID_g)</span>.</td><td align='left' valign='top'>Recompilation of a client program may be broken.</td></tr>
+</table><br/></div>
+
+<span class="section" onclick="javascript:showContent(this, 'c_35')">
+<span class='extendable'>[+]</span> H5P_GROUP_ACCESS_DEFAULT</span>
+<br/>
+<div id="c_35" style="display:none;">
+<table class='ptable'><tr><th width='2%'></th><th width='47%'>Change</th><th>Effect</th></tr><tr><th>1</th><td align='left' valign='top'>The value of constant <b>H5P_GROUP_ACCESS_DEFAULT</b> has been changed from <span class='value'>(H5OPEN H5P_LST_GROUP_ACCESS_g)</span> to <span class='value'>(H5OPEN H5P_LST_GROUP_ACCESS_ID_g)</span>.</td><td align='left' valign='top'>Recompilation of a client program may be broken.</td></tr>
+</table><br/></div>
+
+<span class="section" onclick="javascript:showContent(this, 'c_36')">
+<span class='extendable'>[+]</span> H5P_GROUP_CREATE</span>
+<br/>
+<div id="c_36" style="display:none;">
+<table class='ptable'><tr><th width='2%'></th><th width='47%'>Change</th><th>Effect</th></tr><tr><th>1</th><td align='left' valign='top'>The value of constant <b>H5P_GROUP_CREATE</b> has been changed from <span class='value'>(H5OPEN H5P_CLS_GROUP_CREATE_g)</span> to <span class='value'>(H5OPEN H5P_CLS_GROUP_CREATE_ID_g)</span>.</td><td align='left' valign='top'>Recompilation of a client program may be broken.</td></tr>
+</table><br/></div>
+
+<span class="section" onclick="javascript:showContent(this, 'c_37')">
+<span class='extendable'>[+]</span> H5P_GROUP_CREATE_DEFAULT</span>
+<br/>
+<div id="c_37" style="display:none;">
+<table class='ptable'><tr><th width='2%'></th><th width='47%'>Change</th><th>Effect</th></tr><tr><th>1</th><td align='left' valign='top'>The value of constant <b>H5P_GROUP_CREATE_DEFAULT</b> has been changed from <span class='value'>(H5OPEN H5P_LST_GROUP_CREATE_g)</span> to <span class='value'>(H5OPEN H5P_LST_GROUP_CREATE_ID_g)</span>.</td><td align='left' valign='top'>Recompilation of a client program may be broken.</td></tr>
+</table><br/></div>
+
+<span class="section" onclick="javascript:showContent(this, 'c_38')">
+<span class='extendable'>[+]</span> H5P_LINK_ACCESS</span>
+<br/>
+<div id="c_38" style="display:none;">
+<table class='ptable'><tr><th width='2%'></th><th width='47%'>Change</th><th>Effect</th></tr><tr><th>1</th><td align='left' valign='top'>The value of constant <b>H5P_LINK_ACCESS</b> has been changed from <span class='value'>(H5OPEN H5P_CLS_LINK_ACCESS_g)</span> to <span class='value'>(H5OPEN H5P_CLS_LINK_ACCESS_ID_g)</span>.</td><td align='left' valign='top'>Recompilation of a client program may be broken.</td></tr>
+</table><br/></div>
+
+<span class="section" onclick="javascript:showContent(this, 'c_39')">
+<span class='extendable'>[+]</span> H5P_LINK_ACCESS_DEFAULT</span>
+<br/>
+<div id="c_39" style="display:none;">
+<table class='ptable'><tr><th width='2%'></th><th width='47%'>Change</th><th>Effect</th></tr><tr><th>1</th><td align='left' valign='top'>The value of constant <b>H5P_LINK_ACCESS_DEFAULT</b> has been changed from <span class='value'>(H5OPEN H5P_LST_LINK_ACCESS_g)</span> to <span class='value'>(H5OPEN H5P_LST_LINK_ACCESS_ID_g)</span>.</td><td align='left' valign='top'>Recompilation of a client program may be broken.</td></tr>
+</table><br/></div>
+
+<span class="section" onclick="javascript:showContent(this, 'c_40')">
+<span class='extendable'>[+]</span> H5P_LINK_CREATE</span>
+<br/>
+<div id="c_40" style="display:none;">
+<table class='ptable'><tr><th width='2%'></th><th width='47%'>Change</th><th>Effect</th></tr><tr><th>1</th><td align='left' valign='top'>The value of constant <b>H5P_LINK_CREATE</b> has been changed from <span class='value'>(H5OPEN H5P_CLS_LINK_CREATE_g)</span> to <span class='value'>(H5OPEN H5P_CLS_LINK_CREATE_ID_g)</span>.</td><td align='left' valign='top'>Recompilation of a client program may be broken.</td></tr>
+</table><br/></div>
+
+<span class="section" onclick="javascript:showContent(this, 'c_41')">
+<span class='extendable'>[+]</span> H5P_LINK_CREATE_DEFAULT</span>
+<br/>
+<div id="c_41" style="display:none;">
+<table class='ptable'><tr><th width='2%'></th><th width='47%'>Change</th><th>Effect</th></tr><tr><th>1</th><td align='left' valign='top'>The value of constant <b>H5P_LINK_CREATE_DEFAULT</b> has been changed from <span class='value'>(H5OPEN H5P_LST_LINK_CREATE_g)</span> to <span class='value'>(H5OPEN H5P_LST_LINK_CREATE_ID_g)</span>.</td><td align='left' valign='top'>Recompilation of a client program may be broken.</td></tr>
+</table><br/></div>
+
+<span class="section" onclick="javascript:showContent(this, 'c_42')">
+<span class='extendable'>[+]</span> H5P_NO_CLASS</span>
+<br/>
+<div id="c_42" style="display:none;">
+<table class='ptable'><tr><th width='2%'></th><th width='47%'>Change</th><th>Effect</th></tr><tr><th>1</th><td align='left' valign='top'>The value of constant <b>H5P_NO_CLASS</b> has been changed from <span class='value'>(H5OPEN H5P_CLS_ROOT_g)</span> to <span class='value'>(H5OPEN H5P_CLS_ROOT_ID_g)</span>.</td><td align='left' valign='top'>Recompilation of a client program may be broken.</td></tr>
+</table><br/></div>
+
+<span class="section" onclick="javascript:showContent(this, 'c_43')">
+<span class='extendable'>[+]</span> H5P_OBJECT_COPY</span>
+<br/>
+<div id="c_43" style="display:none;">
+<table class='ptable'><tr><th width='2%'></th><th width='47%'>Change</th><th>Effect</th></tr><tr><th>1</th><td align='left' valign='top'>The value of constant <b>H5P_OBJECT_COPY</b> has been changed from <span class='value'>(H5OPEN H5P_CLS_OBJECT_COPY_g)</span> to <span class='value'>(H5OPEN H5P_CLS_OBJECT_COPY_ID_g)</span>.</td><td align='left' valign='top'>Recompilation of a client program may be broken.</td></tr>
+</table><br/></div>
+
+<span class="section" onclick="javascript:showContent(this, 'c_44')">
+<span class='extendable'>[+]</span> H5P_OBJECT_COPY_DEFAULT</span>
+<br/>
+<div id="c_44" style="display:none;">
+<table class='ptable'><tr><th width='2%'></th><th width='47%'>Change</th><th>Effect</th></tr><tr><th>1</th><td align='left' valign='top'>The value of constant <b>H5P_OBJECT_COPY_DEFAULT</b> has been changed from <span class='value'>(H5OPEN H5P_LST_OBJECT_COPY_g)</span> to <span class='value'>(H5OPEN H5P_LST_OBJECT_COPY_ID_g)</span>.</td><td align='left' valign='top'>Recompilation of a client program may be broken.</td></tr>
+</table><br/></div>
+
+<span class="section" onclick="javascript:showContent(this, 'c_45')">
+<span class='extendable'>[+]</span> H5P_OBJECT_CREATE</span>
+<br/>
+<div id="c_45" style="display:none;">
+<table class='ptable'><tr><th width='2%'></th><th width='47%'>Change</th><th>Effect</th></tr><tr><th>1</th><td align='left' valign='top'>The value of constant <b>H5P_OBJECT_CREATE</b> has been changed from <span class='value'>(H5OPEN H5P_CLS_OBJECT_CREATE_g)</span> to <span class='value'>(H5OPEN H5P_CLS_OBJECT_CREATE_ID_g)</span>.</td><td align='left' valign='top'>Recompilation of a client program may be broken.</td></tr>
+</table><br/></div>
+
+<span class="section" onclick="javascript:showContent(this, 'c_46')">
+<span class='extendable'>[+]</span> H5P_ROOT</span>
+<br/>
+<div id="c_46" style="display:none;">
+<table class='ptable'><tr><th width='2%'></th><th width='47%'>Change</th><th>Effect</th></tr><tr><th>1</th><td align='left' valign='top'>The value of constant <b>H5P_ROOT</b> has been changed from <span class='value'>(H5OPEN H5P_CLS_ROOT_g)</span> to <span class='value'>(H5OPEN H5P_CLS_ROOT_ID_g)</span>.</td><td align='left' valign='top'>Recompilation of a client program may be broken.</td></tr>
+</table><br/></div>
+
+<span class="section" onclick="javascript:showContent(this, 'c_47')">
+<span class='extendable'>[+]</span> H5P_STRING_CREATE</span>
+<br/>
+<div id="c_47" style="display:none;">
+<table class='ptable'><tr><th width='2%'></th><th width='47%'>Change</th><th>Effect</th></tr><tr><th>1</th><td align='left' valign='top'>The value of constant <b>H5P_STRING_CREATE</b> has been changed from <span class='value'>(H5OPEN H5P_CLS_STRING_CREATE_g)</span> to <span class='value'>(H5OPEN H5P_CLS_STRING_CREATE_ID_g)</span>.</td><td align='left' valign='top'>Recompilation of a client program may be broken.</td></tr>
+</table><br/></div>
+
+<br/>
+<span class='h_name'>H5pubconf.h</span><br/>
+<span class="section" onclick="javascript:showContent(this, 'c_48')">
+<span class='extendable'>[+]</span> H5_PACKAGE_STRING</span>
+<br/>
+<div id="c_48" style="display:none;">
+<table class='ptable'><tr><th width='2%'></th><th width='47%'>Change</th><th>Effect</th></tr><tr><th>1</th><td align='left' valign='top'>The value of constant <b>H5_PACKAGE_STRING</b> has been changed from <span class='value'>"HDF5 1.8.13"</span> to <span class='value'>"HDF5 1.8.14"</span>.</td><td align='left' valign='top'>Recompilation of a client program may be broken.</td></tr>
+</table><br/></div>
+
+<span class="section" onclick="javascript:showContent(this, 'c_49')">
+<span class='extendable'>[+]</span> H5_PACKAGE_VERSION</span>
+<br/>
+<div id="c_49" style="display:none;">
+<table class='ptable'><tr><th width='2%'></th><th width='47%'>Change</th><th>Effect</th></tr><tr><th>1</th><td align='left' valign='top'>The value of constant <b>H5_PACKAGE_VERSION</b> has been changed from <b>"1.8.13"</b> to <b>"1.8.14"</b>.</td><td align='left' valign='top'>Recompilation of a client program may be broken.</td></tr>
+</table><br/></div>
+
+<span class="section" onclick="javascript:showContent(this, 'c_50')">
+<span class='extendable'>[+]</span> H5_VERSION</span>
+<br/>
+<div id="c_50" style="display:none;">
+<table class='ptable'><tr><th width='2%'></th><th width='47%'>Change</th><th>Effect</th></tr><tr><th>1</th><td align='left' valign='top'>The value of constant <b>H5_VERSION</b> has been changed from <b>"1.8.13"</b> to <b>"1.8.14"</b>.</td><td align='left' valign='top'>Recompilation of a client program may be broken.</td></tr>
+</table><br/></div>
+
+<br/>
+<span class='h_name'>H5public.h</span><br/>
+<span class="section" onclick="javascript:showContent(this, 'c_51')">
+<span class='extendable'>[+]</span> H5_VERS_INFO</span>
+<br/>
+<div id="c_51" style="display:none;">
+<table class='ptable'><tr><th width='2%'></th><th width='47%'>Change</th><th>Effect</th></tr><tr><th>1</th><td align='left' valign='top'>The value of constant <b>H5_VERS_INFO</b> has been changed from <span class='value'>"HDF5 library version: 1.8.13"</span> to <span class='value'>"HDF5 library version: 1.8.14"</span>.</td><td align='left' valign='top'>Recompilation of a client program may be broken.</td></tr>
+</table><br/></div>
+
+<span class="section" onclick="javascript:showContent(this, 'c_52')">
+<span class='extendable'>[+]</span> H5_VERS_RELEASE</span>
+<br/>
+<div id="c_52" style="display:none;">
+<table class='ptable'><tr><th width='2%'></th><th width='47%'>Change</th><th>Effect</th></tr><tr><th>1</th><td align='left' valign='top'>The value of constant <b>H5_VERS_RELEASE</b> has been changed from <b>13</b> to <b>14</b>.</td><td align='left' valign='top'>Recompilation of a client program may be broken.</td></tr>
+</table><br/></div>
+
+<span class="section" onclick="javascript:showContent(this, 'c_53')">
+<span class='extendable'>[+]</span> H5P_DEFAULT</span>
+<br/>
+<div id="c_53" style="display:none;">
+<table class='ptable'><tr><th width='2%'></th><th width='47%'>Change</th><th>Effect</th></tr><tr><th>1</th><td align='left' valign='top'>The value of constant <b>H5P_DEFAULT</b> has been changed from <b>0</b> to <b>(hid_t)0</b>.</td><td align='left' valign='top'>Recompilation of a client program may be broken.</td></tr>
+</table><br/></div>
+
+<br/>
+<span class='h_name'>H5Spublic.h</span><br/>
+<span class="section" onclick="javascript:showContent(this, 'c_54')">
+<span class='extendable'>[+]</span> H5S_ALL</span>
+<br/>
+<div id="c_54" style="display:none;">
+<table class='ptable'><tr><th width='2%'></th><th width='47%'>Change</th><th>Effect</th></tr><tr><th>1</th><td align='left' valign='top'>The value of constant <b>H5S_ALL</b> has been changed from <b>0</b> to <b>(hid_t)0</b>.</td><td align='left' valign='top'>Recompilation of a client program may be broken.</td></tr>
+</table><br/></div>
+
+<br/>
+<a style='font-size:11px;' href='#Top'>to the top</a><br/>
+<a name='Other_Source_Changes'></a><a name='Other_Source_Changes_In_Constants'></a><h2>Other Changes in Constants (2)</h2><hr/>
+<span class='h_name'>H5PLextern.h</span><br/>
+<span class="section" onclick="javascript:showContent(this, 'c_55')">
+<span class='extendable'>[+]</span> H5PLUGIN_DLL</span>
+<br/>
+<div id="c_55" style="display:none;">
+<table class='ptable'><tr><th width='2%'></th><th width='47%'>Change</th><th>Effect</th></tr><tr><th>1</th><td align='left' valign='top'>The constant <b>H5PLUGIN_DLL</b> with value <span class='value'>__attribute__ ((visibility("default")))</span> has been added.</td><td align='left' valign='top'>No effect.</td></tr>
+</table><br/></div>
+
+<br/>
+<span class='h_name'>H5pubconf.h</span><br/>
+<span class="section" onclick="javascript:showContent(this, 'c_56')">
+<span class='extendable'>[+]</span> H5_HAVE_ASPRINTF</span>
+<br/>
+<div id="c_56" style="display:none;">
+<table class='ptable'><tr><th width='2%'></th><th width='47%'>Change</th><th>Effect</th></tr><tr><th>1</th><td align='left' valign='top'>The constant <b>H5_HAVE_ASPRINTF</b> with value <b>1</b> has been added.</td><td align='left' valign='top'>No effect.</td></tr>
+</table><br/></div>
+
+<br/>
+<a style='font-size:11px;' href='#Top'>to the top</a><br/>
+<a name='Headers'></a><h2>Header Files (75)</h2><hr/>
+<div class='h_list'>
+H5AbstractDs.h<br/>
+H5ACpublic.h<br/>
+H5api_adpt.h<br/>
+H5Apublic.h<br/>
+H5ArrayType.h<br/>
+H5AtomType.h<br/>
+H5Attribute.h<br/>
+H5Classes.h<br/>
+H5CommonFG.h<br/>
+H5CompType.h<br/>
+H5Cpp.h<br/>
+H5CppDoc.h<br/>
+H5Cpublic.h<br/>
+H5DataSet.h<br/>
+H5DataSpace.h<br/>
+H5DataType.h<br/>
+H5DcreatProp.h<br/>
+H5DOpublic.h<br/>
+H5Dpublic.h<br/>
+H5DSpublic.h<br/>
+H5DxferProp.h<br/>
+H5EnumType.h<br/>
+H5Epubgen.h<br/>
+H5Epublic.h<br/>
+H5Exception.h<br/>
+H5f90i.h<br/>
+H5f90i_gen.h<br/>
+H5FaccProp.h<br/>
+H5FcreatProp.h<br/>
+H5FDcore.h<br/>
+H5FDdirect.h<br/>
+H5FDfamily.h<br/>
+H5FDlog.h<br/>
+H5FDmpi.h<br/>
+H5FDmpio.h<br/>
+H5FDmulti.h<br/>
+H5FDpublic.h<br/>
+H5FDsec2.h<br/>
+H5FDstdio.h<br/>
+H5File.h<br/>
+H5FloatType.h<br/>
+H5Fpublic.h<br/>
+H5Gpublic.h<br/>
+H5Group.h<br/>
+H5IdComponent.h<br/>
+H5IMpublic.h<br/>
+H5Include.h<br/>
+H5IntType.h<br/>
+H5Ipublic.h<br/>
+H5Library.h<br/>
+H5Location.h<br/>
+H5Lpublic.h<br/>
+H5LTpublic.h<br/>
+H5MMpublic.h<br/>
+H5Object.h<br/>
+H5Opublic.h<br/>
+H5overflow.h<br/>
+H5PacketTable.h<br/>
+H5PLextern.h<br/>
+H5Ppublic.h<br/>
+H5PredType.h<br/>
+H5PropList.h<br/>
+H5PTpublic.h<br/>
+H5pubconf.h<br/>
+H5public.h<br/>
+H5Rpublic.h<br/>
+H5Spublic.h<br/>
+H5StrType.h<br/>
+H5TBpublic.h<br/>
+H5Tpublic.h<br/>
+H5VarLenType.h<br/>
+H5version.h<br/>
+H5Zpublic.h<br/>
+hdf5.h<br/>
+hdf5_hl.h<br/>
+</div>
+<br/><a style='font-size:11px;' href='#Top'>to the top</a><br/>
+<a name='Libs'></a><h2>Shared Libraries (6)</h2><hr/>
+<div class='lib_list'>
+libhdf5.so.8.0.2<br/>
+libhdf5_cpp.so.8.0.2<br/>
+libhdf5_fortran.so.8.0.2<br/>
+libhdf5_hl.so.8.0.2<br/>
+libhdf5_hl_cpp.so.8.0.2<br/>
+libhdf5hl_fortran.so.8.0.2<br/>
+</div>
+<br/><a style='font-size:11px;' href='#Top'>to the top</a><br/>
+<br/><br/><br/></div><div style='width:97%;padding-top:3px;font-size:11px;' align='right'><i>Generated on Mon Nov 10 08:02:30 2014 for <span style='font-weight:bold'>hdf5</span> by <a href='http://ispras.linuxbase.org/index.php/ABI_compliance_checker'>ABI Compliance Checker</a> 1.99.9 <br/>A tool for checking backward compatibility of a C/C++ library API </i></div>
+<div style='height:999px;'></div>
+</body></html>
\ No newline at end of file
diff --git a/html/ADGuide/ImageSpec.html b/html/ADGuide/ImageSpec.html
index 4d8e4ed..946ce7e 100755
--- a/html/ADGuide/ImageSpec.html
+++ b/html/ADGuide/ImageSpec.html
@@ -1267,27 +1267,11 @@ it may or may not be correct for a given application.</p>
</table>
</center>
<hr>
-<!-- #EndLibraryItem --><!-- #BeginLibraryItem "/ed_libs/Footer.lbi" -->
-<address>
-<table width="100%" border="0">
- <tr valign="top">
- <td align="left">
- <address>
- The HDF Group Help Desk: <img src="../Graphics/help.png" align=top height=16>
- <br>
- Describes HDF5 Release 1.8.13, May 2014.
- </address>
- </td><td width="5%"> </td>
- <td align="right">
- <a href="../Copyright.html">Copyright</a> by
- <a href="http://www.hdfgroup.org">The HDF Group</a>
- <br>
- and the Board of Trustees of the University of Illinois
- </td>
- </tr>
-</table>
-</address>
-<!-- #EndLibraryItem --><!-- Created: Spring 1999 -->
+<!-- #EndLibraryItem -->
+
+<?php include("../ed_libs/Footer2.htm"); ?>
+
+<!-- Created: Spring 1999 -->
<!-- hhmts start -->
Last modified: 8 June 2005
<!-- hhmts end -->
diff --git a/html/Advanced.html b/html/Advanced.html
index 96c612c..e8ac543 100644
--- a/html/Advanced.html
+++ b/html/Advanced.html
@@ -325,31 +325,11 @@
</table>
</center>
<hr>
-<!-- #EndLibraryItem --><address>
-
-<!-- #BeginLibraryItem "/ed_libs/Footer.lbi" -->
-<address>
-<table width="100%" border="0">
- <tr valign="top">
- <td align="left">
- <address>
- The HDF Group Help Desk: <img src="Graphics/help.png" align=top height=16>
- <br>
- Describes HDF5 Release 1.8.13, May 2014.
- </address>
- </td><td width="5%"> </td>
- <td align="right">
- <a href="Copyright.html">Copyright</a> by
- <a href="http://www.hdfgroup.org">The HDF Group</a>
- <br>
- and the Board of Trustees of the University of Illinois
- </td>
- </tr>
-</table>
-</address>
<!-- #EndLibraryItem -->
-
-Last modified: 23 April 2014
+
+<?php include("./ed_libs/Footer.htm"); ?>
+
+Last modified: 3 November 2014
</body>
diff --git a/html/Advanced/Chunking/index.html b/html/Advanced/Chunking/index.html
index d7420ef..55704f3 100644
--- a/html/Advanced/Chunking/index.html
+++ b/html/Advanced/Chunking/index.html
@@ -485,14 +485,14 @@ Example 2: Writing part of a column to a chunked dataset
---------1---------2---------3---------4---------5---------6---------7---------8
-->
The slide set “<a href="Chunking_Tutorial_EOS13_2009.pdf">HDF5
- Advanced Topics: Chunking in HDF5</a>” (PDF), a turotial from
+ Advanced Topics: Chunking in HDF5</a>” (PDF), a tutorial from
HDF and HDF-EOS Workshop XIII (2009) provides additional HDF5 chunking
use cases and examples.
<p>
The page
- “<a href="http://www.hdfgroup.org/ftp/HDF5/examples/examples-by-api/api18-c.html">HDF5
- Examples by API</a>” lists many code examples that are regularly
+ “<a href="http://www.hdfgroup.org/HDF5/examples/index.html">HDF5
+ Examples</a>” lists many code examples that are regularly
tested with the HDF5 Library. Several illustrate the use of chunking
in HDF5, particularly “Read/Write Chunked Dataset” and
any examples demonstrating filters.
@@ -533,28 +533,11 @@ Example 2: Writing part of a column to a chunked dataset
<hr /><br />
<p>Return to the <a href="../../Advanced.html">"Advanced Topics"</a> page.</p>
<br />
+<hr />
+<?php include("../../ed_libs/Footer3.htm"); ?>
-<hr>
-<!-- #BeginLibraryItem "/ed_libs/Footer-THGonly.lbi" -->
-<address>
-<table width="100%" border="0">
- <tr valign="top">
- <td align="left">
- <address>
- The HDF Group Help Desk: <img src="../../Graphics/help.png" align=top height=16>
- <br>
- Describes HDF5 Release 1.8.13, May 2014.
- </address>
- </td><td width="5%"> </td>
- <td align="right">
- <a href="../../Copyright.html">Copyright</a> by
- <a href="http://www.hdfgroup.org">The HDF Group</a>
- </td>
- </tr>
-</table>
-</address>
-<!-- #EndLibraryItem --><html><SCRIPT LANGUAGE="JAVASCRIPT">
+<SCRIPT LANGUAGE="JAVASCRIPT">
<!--
document.writeln("Last modified: 5 October 2010");
-->
diff --git a/html/Advanced/DirectChunkWrite/index.html b/html/Advanced/DirectChunkWrite/index.html
index 330a856..bf0c89c 100644
--- a/html/Advanced/DirectChunkWrite/index.html
+++ b/html/Advanced/DirectChunkWrite/index.html
@@ -79,25 +79,10 @@ The following documents describe the use of this feature:
<hr>
-<!-- #BeginLibraryItem "/ed_libs/Footer-THGonly.lbi" -->
-<address>
-<table width="100%" border="0">
- <tr valign="top">
- <td align="left">
- <address>
- The HDF Group Help Desk: <img src="../../Graphics/help.png" align=top height=16>
- <br>
- Describes HDF5 Release 1.8.13, May 2014.
- </address>
- </td><td width="5%"> </td>
- <td align="right">
- <a href="../../Copyright.html">Copyright</a> by
- <a href="http://www.hdfgroup.org">The HDF Group</a>
- </td>
- </tr>
-</table>
-</address>
-<!-- #EndLibraryItem --><html><SCRIPT LANGUAGE="JAVASCRIPT">
+
+<?php include("../../ed_libs/Footer3.htm"); ?>
+
+<SCRIPT LANGUAGE="JAVASCRIPT">
<!--
document.writeln("Last modified: 28 February 2013");
-->
diff --git a/html/Advanced/HDF5_Metadata/index.html b/html/Advanced/HDF5_Metadata/index.html
index 8d68d59..4c1c9a4 100644
--- a/html/Advanced/HDF5_Metadata/index.html
+++ b/html/Advanced/HDF5_Metadata/index.html
@@ -573,25 +573,10 @@ Return to “<a href="../../Advanced.html">Advanced Topics</a>.”</p>
<hr>
-<!-- #BeginLibraryItem "/ed_libs/Footer-THGonly.lbi" -->
-<address>
-<table width="100%" border="0">
- <tr valign="top">
- <td align="left">
- <address>
- The HDF Group Help Desk: <img src="../../Graphics/help.png" align=top height=16>
- <br>
- Describes HDF5 Release 1.8.13, May 2014.
- </address>
- </td><td width="5%"> </td>
- <td align="right">
- <a href="../../Copyright.html">Copyright</a> by
- <a href="http://www.hdfgroup.org">The HDF Group</a>
- </td>
- </tr>
-</table>
-</address>
-<!-- #EndLibraryItem --><html><SCRIPT LANGUAGE="JAVASCRIPT">
+
+<?php include("../../ed_libs/Footer3.htm"); ?>
+
+<SCRIPT LANGUAGE="JAVASCRIPT">
<!--
document.writeln("Last modified: 20 July 2011");
-->
diff --git a/html/Advanced/MetadataCache/index.html b/html/Advanced/MetadataCache/index.html
index 1ac11d2..8b1bedf 100755
--- a/html/Advanced/MetadataCache/index.html
+++ b/html/Advanced/MetadataCache/index.html
@@ -1242,27 +1242,10 @@
<br /><br />
<hr>
-<!-- #BeginLibraryItem "/ed_libs/Footer.lbi" -->
-<address>
-<table width="100%" border="0">
- <tr valign="top">
- <td align="left">
- <address>
- The HDF Group Help Desk: <img src="../../Graphics/help.png" align=top height=16>
- <br>
- Describes HDF5 Release 1.8.13, May 2014.
- </address>
- </td><td width="5%"> </td>
- <td align="right">
- <a href="../../Copyright.html">Copyright</a> by
- <a href="http://www.hdfgroup.org">The HDF Group</a>
- <br>
- and the Board of Trustees of the University of Illinois
- </td>
- </tr>
-</table>
-</address>
-<!-- #EndLibraryItem --><html><SCRIPT LANGUAGE="JAVASCRIPT">
+
+<?php include("../../ed_libs/Footer3.htm"); ?>
+
+<SCRIPT LANGUAGE="JAVASCRIPT">
<!--
document.writeln("Last modified: 5 October 2010");
-->
diff --git a/html/Advanced/UsingIdentifiers/index.html b/html/Advanced/UsingIdentifiers/index.html
index 6b45a9e..3d52890 100644
--- a/html/Advanced/UsingIdentifiers/index.html
+++ b/html/Advanced/UsingIdentifiers/index.html
@@ -33,7 +33,7 @@
<p>The purpose of this topic is to describe how identifiers behave
and how they should be treated by application programs.</p>
- <p>When an application program uses the HDF5 library to create or
+ <p>When an application program uses the HDF5 Library to create or
open an item, a unique identifier is returned. The items that return
a unique identifier when they are created or opened include the
following: dataset, group, datatype, dataspace, file, attribute,
@@ -43,7 +43,8 @@
once at the same time. For example, an application might open a group
twice, receiving two identifiers. Information from one dataset in the
group could be handled through one identifier, and the information
- from another dataset in the group is handled by a different identifier.</p>
+ from another dataset in the group could be handled by a different
+ identifier.</p>
<p>An application program should track every identifier it receives
as a result of creating or opening one of the items listed above. In
@@ -61,30 +62,55 @@
and still work with one or more portions of the file. Suppose an
application opened a file, a group within the file, and two datasets
within the group. If the application closed the file with
- <code>H5Fclose</code>,
-then the file would be considered closed to the application, but the
-group and two datasets would still be open.</p>
+ <code>H5Fclose</code>, then the file would be considered closed to
+ the application, but the group and two datasets would still be open.</p>
+
+ <p>There are several exceptions to the above file closing rule. One
+ is when the <code>H5close</code> function is used instead of
+ <code>H5Fclose</code>. <code>H5close</code> causes a general shut
+ down of the library: all data is written to disk, all identifiers are
+ closed, and all memory used by the library is cleaned up. Another
+ exception occurs on parallel processing systems. Suppose on a parallel
+ system an application has opened a file, a group in the file, and
+ two datasets in the group. If the application uses
+ the <code>H5Fclose</code> function to close the file, the call will fail
+ with an error. The open group and datasets must be closed before the
+ file can be closed. A third exception is when the file access property
+ list includes the property <code>H5F_CLOSE_STRONG</code>. This property
+ causes the closing of all of the file�s open items when the file is
+ closed with <code>H5Fclose</code>. For more information about
+ <code>H5close</code>, <code>H5Fclose</code>, and
+ <code>H5Pset_fclose_degree</code>, see the
+ <a href="../../RM/RM_H5Front.html"><cite>HDF5 Reference
+ Manual</cite></a></p>
-<p>There are several exceptions to the above file closing rule. One
-is when the <code>H5close</code> function is used instead of <code>H5Fclose</code>.
-<code>H5close</code>
-causes a general shutdown of the library: all data is written to disk,
-all identifiers are closed, and all memory used by the library is
-cleaned up. Another exception occurs on parallel processing systems.
-Suppose on a parallel system an application has opened a file, a group
-in the file, and two datasets in the group. If the application uses
-the <code>H5Fclose</code> function to close the file, the call will fail with an
-error. The open group and datasets must be closed before the file can
-be closed. A third exception is when the file access property list
-includes the property <code>H5F_CLOSE_STRONG</code>. This property causes the closing
-of all of the file�s open items when the file is closed with <code>H5Fclose</code>.</p>
-<p>For more information about <code>H5close</code>, <code>H5Fclose</code>,
-and <code>H5Pset_fclose_degree</code>,
-see the <a href="../../RM/RM_H5Front.html">
-<cite>HDF5 Reference Manual</cite></a></p>
+<!--
+<table align="left" width="100%" cellpadding="5" >
+<tr >
+<td style="background-color:#FFCC80">
+-->
+ <p>The reference manual entries for functions that return identifiers
+ describe what might be returned as follows:</p>
+
+ <dir>
+ <p><b>Returns:</b><br />
+
+ Returns an identifier if successful; otherwise returns a negative
+ value. </p>
+ </dir>
+
+ <p>In other words, a successful operation will return a non-negative
+ identifier which will never be 0 (zero) and will always be a positive
+ value. </p>
+
+<!--
+</td></tr>
+</table>
+-->
+<br />
<!--
@@ -138,27 +164,12 @@ see the <a href="../../RM/RM_H5Front.html">
<br /><br />
<hr>
-<!-- #BeginLibraryItem "/ed_libs/Footer-THGonly.lbi" -->
-<address>
-<table width="100%" border="0">
- <tr valign="top">
- <td align="left">
- <address>
- The HDF Group Help Desk: <img src="../../Graphics/help.png" align=top height=16>
- <br>
- Describes HDF5 Release 1.8.13, May 2014.
- </address>
- </td><td width="5%"> </td>
- <td align="right">
- <a href="../../Copyright.html">Copyright</a> by
- <a href="http://www.hdfgroup.org">The HDF Group</a>
- </td>
- </tr>
-</table>
-</address>
-<!-- #EndLibraryItem --><html><SCRIPT LANGUAGE="JAVASCRIPT">
+
+<?php include("../../ed_libs/Footer3.htm"); ?>
+
+<SCRIPT LANGUAGE="JAVASCRIPT">
<!--
-document.writeln("Last modified: 5 October 2010");
+document.writeln("Last modified: 14 October 2014");
-->
</SCRIPT>
diff --git a/html/Advanced/UsingUnicode/index.html b/html/Advanced/UsingUnicode/index.html
index cf2cf19..81fa1de 100644
--- a/html/Advanced/UsingUnicode/index.html
+++ b/html/Advanced/UsingUnicode/index.html
@@ -291,25 +291,10 @@ Return to “<a href="../../Advanced.html">Advanced Topics</a>.”</p>
<hr>
-<!-- #BeginLibraryItem "/ed_libs/Footer-THGonly.lbi" -->
-<address>
-<table width="100%" border="0">
- <tr valign="top">
- <td align="left">
- <address>
- The HDF Group Help Desk: <img src="../../Graphics/help.png" align=top height=16>
- <br>
- Describes HDF5 Release 1.8.13, May 2014.
- </address>
- </td><td width="5%"> </td>
- <td align="right">
- <a href="../../Copyright.html">Copyright</a> by
- <a href="http://www.hdfgroup.org">The HDF Group</a>
- </td>
- </tr>
-</table>
-</address>
-<!-- #EndLibraryItem --><html><SCRIPT LANGUAGE="JAVASCRIPT">
+
+<?php include("../../ed_libs/Footer3.htm"); ?>
+
+<SCRIPT LANGUAGE="JAVASCRIPT">
<!--
document.writeln("Last modified: 17 February 2014");
-->
diff --git a/html/Copyright.html b/html/Copyright.html
index 5bf71ad..0306981 100644
--- a/html/Copyright.html
+++ b/html/Copyright.html
@@ -139,26 +139,9 @@ for further details.
<!-- DO NOT EDIT THE FOLLOWING 8 LINES; -->
<!-- THEY ARE AUTOMATICALLY UPDATED BY DOCUMENTATION SOFTWARE. -->
-<!-- #BeginLibraryItem "/ed_libs/Footer.lbi" -->
-<address>
-<table width="100%" border="0">
- <tr valign="top">
- <td align="left">
- <address>
- The HDF Group Help Desk: <img src="Graphics/help.png" align="center" height=16>
- <br>
- Describes HDF5 Release 1.8.13, May 2014.
- </address>
- </td><td width="5%"> </td>
- <td align="right">
- <a href="Copyright.html">Copyright</a> by
- <a href="http://www.hdfgroup.org">The HDF Group</a><br>
- and the Board of Trustees of the University of Illinois
- </td>
- </tr>
-</table>
-</address>
-<!-- #EndLibraryItem --><SCRIPT LANGUAGE="JAVASCRIPT">
+<?php include("./ed_libs/Footer.htm"); ?>
+
+<SCRIPT LANGUAGE="JAVASCRIPT">
<!--
document.writeln("Last modified: 16 April 2014")
-->
diff --git a/html/Glossary.html b/html/Glossary.html
index 9c13834..7a91fdf 100644
--- a/html/Glossary.html
+++ b/html/Glossary.html
@@ -548,27 +548,11 @@ HDF5 Glossary and Terms
</table>
</center>
<hr>
-<!-- #EndLibraryItem --><!-- #BeginLibraryItem "/ed_libs/Footer.lbi" -->
-<address>
-<table width="100%" border="0">
- <tr valign="top">
- <td align="left">
- <address>
- The HDF Group Help Desk: <img src="Graphics/help.png" align=top height=16>
- <br>
- Describes HDF5 Release 1.8.13, May 2014.
- </address>
- </td><td width="5%"> </td>
- <td align="right">
- <a href="Copyright.html">Copyright</a> by
- <a href="http://www.hdfgroup.org">The HDF Group</a>
- <br>
- and the Board of Trustees of the University of Illinois
- </td>
- </tr>
-</table>
-</address>
-<!-- #EndLibraryItem --><SCRIPT LANGUAGE="JAVASCRIPT">
+<!-- #EndLibraryItem -->
+
+<?php include("./ed_libs/Footer.htm"); ?>
+
+<SCRIPT LANGUAGE="JAVASCRIPT">
<!--
document.writeln("Last modified: 24 February 2004");
-->
diff --git a/html/Graphics/favicon.ico b/html/Graphics/favicon.ico
new file mode 100644
index 0000000..cf669da
Binary files /dev/null and b/html/Graphics/favicon.ico differ
diff --git a/html/H5.format.html b/html/H5.format.html
index 5d9436d..f5f7691 100644
--- a/html/H5.format.html
+++ b/html/H5.format.html
@@ -157,7 +157,7 @@ TABLE.list TD { border:none; }
<li><a href="#DataStorage">Disk Format: Level 2B - Data Object Data Storage</a>
</ol>
</font>
- <LI><A href="#Appendix">Appendix</A>
+ <li><a href="#Appendix">Appendix</a>
</ol>
</td></tr>
</table>
@@ -189,13 +189,13 @@ TABLE.list TD { border:none; }
</table>
- <P>The format of an HDF5 file on disk encompasses several
+ <p>The format of an HDF5 file on disk encompasses several
key ideas of the HDF4 and AIO file formats as well as
addressing some shortcomings therein. The new format is
more self-describing than the HDF4 format and is more
uniformly applied to data objects in the file.
- <P>An HDF5 file appears to the user as a directed graph.
+ <p>An HDF5 file appears to the user as a directed graph.
The nodes of this graph are the higher-level HDF5 objects
that are exposed by the HDF5 APIs:
@@ -205,7 +205,7 @@ TABLE.list TD { border:none; }
<li>Named datatypes
</ul>
- <P>At the lowest level, as information is actually written to the disk,
+ <p>At the lowest level, as information is actually written to the disk,
an HDF5 file is made up of the following objects:
<ul>
<li>A superblock
@@ -216,7 +216,7 @@ TABLE.list TD { border:none; }
<li>Free space
</ul>
- <P>The HDF5 library uses these low-level objects to represent the
+ <p>The HDF5 library uses these low-level objects to represent the
higher-level objects that are then presented to the user or
to applications through the APIs.
For instance, a group is an object header that contains a message that
@@ -234,7 +234,7 @@ TABLE.list TD { border:none; }
the higher-level objects and their properties are described
in the <a href="UG/index.html"><cite>HDF5 User's Guide</cite></a>.
- <P>Three levels of information comprise the file format.
+ <p>Three levels of information comprise the file format.
Level 0 contains basic information for identifying and
defining information about the file. Level 1 information contains
the information about the pieces of a file shared by many objects
@@ -253,22 +253,22 @@ TABLE.list TD { border:none; }
by the <em>Size of Lengths</em> field in the superblock and is
indicated in this document with a superscripted 'L'.
- <P>Values for all fields in this document should be treated as unsigned
+ <p>Values for all fields in this document should be treated as unsigned
integers, unless otherwise noted in the description of a field.
Additionally, all metadata fields are stored in little-endian byte
order.
- </P>
+ </p>
- <P>All checksums used in the format are computed with the
- <A href="http://www.burtleburtle.net/bob/hash/doobs.html">Jenkins'
- lookup3</A> algorithm.
- </P>
+ <p>All checksums used in the format are computed with the
+ <a href="http://www.burtleburtle.net/bob/hash/doobs.html">Jenkins'
+ lookup3</a> algorithm.
+ </p>
- <P>Various tables in this document aligned with "This space inserted
+ <p>Various tables in this document aligned with "This space inserted
only to align table nicely". These entries in the table are just
to make the table presentation nicer and do not represent any values
or padding in the file.
- </P>
+ </p>
<BR>
<HR>
@@ -276,10 +276,10 @@ TABLE.list TD { border:none; }
<h2><a name="FileMetaData">
Disk Format: Level 0 - File Metadata</a></h2>
- <H3><A name="Superblock">
- Disk Format: Level 0A - Format Signature and Superblock</A></H3>
+ <h3><A name="Superblock">
+ Disk Format: Level 0A - Format Signature and Superblock</a></h3>
- <P>The superblock may begin at certain predefined offsets within
+ <p>The superblock may begin at certain predefined offsets within
the HDF5 file, allowing a block of unspecified content for
users to place additional information at the beginning (and
end) of the HDF5 file without limiting the HDF5 library's
@@ -292,7 +292,7 @@ TABLE.list TD { border:none; }
successive locations in the file, each a multiple of two of
the previous location, i.e. 0, 512, 1024, 2048, etc.
- <P>The superblock is composed of the format signature, followed by a
+ <p>The superblock is composed of the format signature, followed by a
superblock version number and information that is specific to each
version of the superblock.
Currently, there are three versions of the superblock format.
@@ -302,7 +302,7 @@ TABLE.list TD { border:none; }
eliminated or compressed and with superblock extension and checksum
support.
- <P>Version 0 and 1 of the superblock are described below:
+ <p>Version 0 and 1 of the superblock are described below:
<br>
<div align=center>
@@ -373,12 +373,12 @@ TABLE.list TD { border:none; }
<table class=note>
<tr><td>
- (Items marked with an 'O' in the above table are
+ (Items marked with an ‘O’ in the above table are
<br>
- of the size specified in "Size of Offsets.")
+ of the size specified in “Size of Offsets.”)
</td></tr>
<tr><td>
- (Items marked with an '1' in the above table are
+ (Items marked with a ‘1’ in the above table are
<br>
new in version 1 of the superblock)
</td></tr>
@@ -396,13 +396,13 @@ TABLE.list TD { border:none; }
<tr>
<td>Format Signature</td>
<td>
- <P>This field contains a constant value and can be used to
+ <p>This field contains a constant value and can be used to
quickly identify a file as being an HDF5 file. The
constant value is designed to allow easy identification of
an HDF5 file and to allow certain types of data corruption
to be detected. The file signature of an HDF5 file always
contains the following values:
- </P>
+ </p>
<center>
<table border align=center cellpadding=4>
@@ -445,7 +445,7 @@ TABLE.list TD { border:none; }
</center>
<br>
- <P>This signature both identifies the file as an HDF5 file
+ <p>This signature both identifies the file as an HDF5 file
and provides for immediate detection of common
file-transfer problems. The first two bytes distinguish
HDF5 files on systems that expect the first two bytes to
@@ -458,158 +458,158 @@ TABLE.list TD { border:none; }
sequences. The control-Z character stops file display
under MS-DOS. The final line feed checks for the inverse
of the CR-LF translation problem. (This is a direct
- descendent of the <A href="http://www.libpng.org/pub/png/spec/iso/index-object.html#5PNG-file-signature">PNG</A> file
+ descendent of the <a href="http://www.libpng.org/pub/png/spec/iso/index-object.html#5PNG-file-signature">PNG</a> file
signature.)
- </P>
+ </p>
- <P><EM>This field is present in version 0+ of the superblock.</EM>
- </P>
+ <p><EM>This field is present in version 0+ of the superblock.</EM>
+ </p>
</td>
</tr>
<tr>
<td>Version Number of the Superblock</td>
<td>
- <P>This value is used to determine the format of the
+ <p>This value is used to determine the format of the
information in the superblock. When the format of the
information in the superblock is changed, the version number
is incremented to the next integer and can be used to
determine how the information in the superblock is
formatted.
- </P>
+ </p>
- <P>Values of 0, 1 and 2 are defined for this field. (The format
+ <p>Values of 0, 1 and 2 are defined for this field. (The format
of version 2 is described below, not here)
- </P>
+ </p>
- <P><EM>This field is present in version 0+ of the superblock.</EM>
- </P>
+ <p><EM>This field is present in version 0+ of the superblock.</EM>
+ </p>
</td>
</tr>
<tr>
<td>Version Number of the File Free-Space Information</td>
<td>
- <P>This value is used to determine the format of the
+ <p>This value is used to determine the format of the
information in the file's free-space Information.
- </P>
- <P>The only value currently valid in this field is '0', which
+ </p>
+ <p>The only value currently valid in this field is '0', which
indicates that the free space index is formatted as described
- <A href="#FreeSpaceManager">below</A>.
- </P>
+ <a href="#FreeSpaceManager">below</a>.
+ </p>
- <P><EM>This field is present in version 0 and 1 of the superblock.</EM>
- </P>
+ <p><EM>This field is present in version 0 and 1 of the superblock.</EM>
+ </p>
</td>
</tr>
<tr>
<td>Version Number of the Root Group Symbol Table Entry</td>
<td>
- <P>This value is used to determine the format of the
+ <p>This value is used to determine the format of the
information in the Root Group Symbol Table Entry. When the
format of the information in that field is changed, the
version number is incremented to the next integer and can be
used to determine how the information in the field
is formatted.
- </P>
- <P>The only value currently valid in this field is '0', which
+ </p>
+ <p>The only value currently valid in this field is '0', which
indicates that the root group symbol table entry is formatted as
- described <A href="#SymbolTableEntry">below</A>.
- </P>
+ described <a href="#SymbolTableEntry">below</a>.
+ </p>
- <P><EM>This field is present in version 0 and 1 of the superblock.</EM>
- </P>
+ <p><EM>This field is present in version 0 and 1 of the superblock.</EM>
+ </p>
</td>
</tr>
<tr>
<td>Version Number of the Shared Header Message Format</td>
<td>
- <P>This value is used to determine the format of the
+ <p>This value is used to determine the format of the
information in a shared object header message. Since the format
of the shared header messages differs from the other private
header messages, a version number is used to identify changes
in the format.
- </P>
- <P>The only value currently valid in this field is '0', which
+ </p>
+ <p>The only value currently valid in this field is '0', which
indicates that shared header messages are formatted as
- described <A href="#ObjectHeaderMessages">below</A>.
- </P>
+ described <a href="#ObjectHeaderMessages">below</a>.
+ </p>
- <P><EM>This field is present in version 0 and 1 of the superblock.</EM>
- </P>
+ <p><EM>This field is present in version 0 and 1 of the superblock.</EM>
+ </p>
</td>
</tr>
<tr>
<td>Size of Offsets</td>
<td>
- <P>This value contains the number of bytes used to store
+ <p>This value contains the number of bytes used to store
addresses in the file. The values for the addresses of
objects in the file are offsets relative to a base address,
usually the address of the superblock signature. This
allows a wrapper to be added after the file is created
without invalidating the internal offset locations.
- </P>
+ </p>
- <P><EM>This field is present in version 0+ of the superblock.</EM>
- </P>
+ <p><EM>This field is present in version 0+ of the superblock.</EM>
+ </p>
</td>
</tr>
<tr>
<td>Size of Lengths</td>
<td>
- <P>This value contains the number of bytes used to store
+ <p>This value contains the number of bytes used to store
the size of an object.
- </P>
+ </p>
- <P><EM>This field is present in version 0+ of the superblock.</EM>
- </P>
+ <p><EM>This field is present in version 0+ of the superblock.</EM>
+ </p>
</td>
</tr>
<tr>
<td>Group Leaf Node K</td>
<td>
- <P>Each leaf node of a group B-tree will have at
+ <p>Each leaf node of a group B-tree will have at
least this many entries but not more than twice this
many. If a group has a single leaf node then it
may have fewer entries.
- </P>
- <P>This value must be greater than zero.
- </P>
- <P>See the <A href="#Btrees">description</A> of B-trees below.
- </P>
+ </p>
+ <p>This value must be greater than zero.
+ </p>
+ <p>See the <a href="#Btrees">description</a> of B-trees below.
+ </p>
- <P><EM>This field is present in version 0 and 1 of the superblock.</EM>
- </P>
+ <p><EM>This field is present in version 0 and 1 of the superblock.</EM>
+ </p>
</td>
</tr>
<tr>
<td>Group Internal Node K</td>
<td>
- <P>Each internal node of a group B-tree will have at
+ <p>Each internal node of a group B-tree will have at
least this many entries but not more than twice this
many. If the group has only one internal
node then it might have fewer entries.
- </P>
- <P>This value must be greater than zero.
- </P>
- <P>See the <A href="#Btrees">description</A> of B-trees below.
- </P>
+ </p>
+ <p>This value must be greater than zero.
+ </p>
+ <p>See the <a href="#Btrees">description</a> of B-trees below.
+ </p>
- <P><EM>This field is present in version 0 and 1 of the superblock.</EM>
- </P>
+ <p><EM>This field is present in version 0 and 1 of the superblock.</EM>
+ </p>
</td>
</tr>
<tr>
<td>File Consistency Flags</td>
<td>
- <P>This value contains flags to indicate information
+ <p>This value contains flags to indicate information
about the consistency of the information contained
within the file. Currently, the following bit flags are
defined:
@@ -628,35 +628,35 @@ TABLE.list TD { border:none; }
normal access to a file and only set after the file's
consistency is guaranteed by the library or a
consistency utility.
- </P>
+ </p>
- <P><EM>This field is present in version 0+ of the superblock.</EM>
- </P>
+ <p><EM>This field is present in version 0+ of the superblock.</EM>
+ </p>
</td>
</tr>
<tr>
<td>Indexed Storage Internal Node K</td>
<td>
- <P>Each internal node of an indexed storage B-tree will have at
+ <p>Each internal node of an indexed storage B-tree will have at
least this many entries but not more than twice this
many. If the index storage B-tree has only one internal
node then it might have fewer entries.
- </P>
- <P>This value must be greater than zero.
- </P>
- <P>See the <A href="#Btrees">description</A> of B-trees below.
- </P>
+ </p>
+ <p>This value must be greater than zero.
+ </p>
+ <p>See the <a href="#Btrees">description</a> of B-trees below.
+ </p>
- <P><EM>This field is present in version 1 of the superblock.</EM>
- </P>
+ <p><EM>This field is present in version 1 of the superblock.</EM>
+ </p>
</td>
</tr>
<tr>
<td>Base Address</td>
<td>
- <P>This is the absolute file address of the first byte of
+ <p>This is the absolute file address of the first byte of
the HDF5 data within the file. The library currently
constrains this value to be the absolute file address
of the superblock itself when creating new files;
@@ -668,73 +668,73 @@ TABLE.list TD { border:none; }
reflect their new positions in the file. Unless otherwise noted,
all other file addresses are relative to this base
address.
- </P>
+ </p>
- <P><EM>This field is present in version 0+ of the superblock.</EM>
- </P>
+ <p><EM>This field is present in version 0+ of the superblock.</EM>
+ </p>
</td>
</tr>
<tr>
<td>Address of Global Free-space Index</td>
<td>
- <P>Free-space management is not yet defined in the HDF5
+ <p>Free-space management is not yet defined in the HDF5
file format and is not handled by the library.
Currently this field always contains the
- <A href="#UndefinedAddress">undefined address</A>.
- </P>
+ <a href="#UndefinedAddress">undefined address</a>.
+ </p>
- <P><EM>This field is present in version 0 and 1 of the superblock.</EM>
- </P>
+ <p><EM>This field is present in version 0 and 1 of the superblock.</EM>
+ </p>
</td>
</tr>
<tr>
<td>End of File Address</td>
<td>
- <P>This is the absolute file address of the first byte past
+ <p>This is the absolute file address of the first byte past
the end of all HDF5 data. It is used to determine whether a
file has been accidently truncated and as an address where
file data allocation can occur if space from the free list is
not used.
- </P>
+ </p>
- <P><EM>This field is present in version 0+ of the superblock.</EM>
- </P>
+ <p><EM>This field is present in version 0+ of the superblock.</EM>
+ </p>
</td>
</tr>
<tr>
<td>Driver Information Block Address</td>
<td>
- <P>This is the relative file address of the file driver
+ <p>This is the relative file address of the file driver
information block which contains driver-specific
information needed to reopen the file. If there is no
driver information block then this entry should be the
- <A href="#UndefinedAddress">undefined address</A>.
- </P>
+ <a href="#UndefinedAddress">undefined address</a>.
+ </p>
- <P><EM>This field is present in version 0 and 1 of the superblock.</EM>
- </P>
+ <p><EM>This field is present in version 0 and 1 of the superblock.</EM>
+ </p>
</td>
</tr>
<tr>
<td>Root Group Symbol Table Entry</td>
<td>
- <P>This is the <A href="#SymbolTableEntry">symbol table entry</A>
+ <p>This is the <a href="#SymbolTableEntry">symbol table entry</a>
of the root group, which serves as the entry point into
the group graph for the file.
- </P>
+ </p>
- <P><EM>This field is present in version 0 and 1 of the superblock.</EM>
- </P>
+ <p><EM>This field is present in version 0 and 1 of the superblock.</EM>
+ </p>
</td>
</tr>
</table>
</div>
- <P>Version 2 of the superblock is described below:
+ <p>Version 2 of the superblock is described below:
<br>
<div align=center>
@@ -784,9 +784,9 @@ TABLE.list TD { border:none; }
<table class=note>
<tr><td>
- (Items marked with an 'O' in the above table are
+ (Items marked with an ‘O’ in the above table are
<br>
- of the size specified in "Size of Offsets.")
+ of the size specified in “Size of Offsets.”)
</td></tr>
</table>
</div>
@@ -802,92 +802,92 @@ TABLE.list TD { border:none; }
<tr>
<td>Format Signature</td>
<td>
- <P>This field is the same as described for versions 0 and 1 of the
+ <p>This field is the same as described for versions 0 and 1 of the
superblock.
- </P>
+ </p>
</tr>
<tr>
<td>Version Number of the Superblock</td>
<td>
- <P>This field has a value of 2 and has the same meaning as for
+ <p>This field has a value of 2 and has the same meaning as for
versions 0 and 1.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Size of Offsets</td>
<td>
- <P>This field is the same as described for versions 0 and 1 of the
+ <p>This field is the same as described for versions 0 and 1 of the
superblock.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Size of Lengths</td>
<td>
- <P>This field is the same as described for versions 0 and 1 of the
+ <p>This field is the same as described for versions 0 and 1 of the
superblock.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>File Consistency Flags</td>
<td>
- <P>This field is the same as desribed for versions 0 and 1 except
+ <p>This field is the same as desribed for versions 0 and 1 except
that it is smaller (the number of reserved bits has been reduced
from 30 to 6).
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Base Address</td>
<td>
- <P>This field is the same as described for versions 0 and 1 of the
+ <p>This field is the same as described for versions 0 and 1 of the
superblock.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Superblock Extension Address</td>
<td>
- <P>The field is the address of the object header for the
- <A href="#SuperblockExt">superblock extension</A>.
+ <p>The field is the address of the object header for the
+ <a href="#SuperblockExt">superblock extension</a>.
If there is no extension then this entry should be the
- <A href="#UndefinedAddress">undefined address</A>.
- </P>
+ <a href="#UndefinedAddress">undefined address</a>.
+ </p>
</td>
</tr>
<tr>
<td>End of File Address</td>
<td>
- <P>This field is the same as described for versions 0 and 1 of the
+ <p>This field is the same as described for versions 0 and 1 of the
superblock.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Root Group Object Header Address</td>
<td>
- <P>This is the address of
- the <A href="#DataObject">root group object header</A>,
+ <p>This is the address of
+ the <a href="#DataObject">root group object header</a>,
which serves as the entry point into the group graph for the file.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Superblock Checksum</td>
<td>
- <P>The checksum for the superblock.
- </P>
+ <p>The checksum for the superblock.
+ </p>
</td>
</tr>
@@ -895,10 +895,10 @@ TABLE.list TD { border:none; }
</div>
<br>
- <H3><A name="DriverInfo">
- Disk Format: Level 0B - File Driver Info</A></H3>
+ <h3><A name="DriverInfo">
+ Disk Format: Level 0B - File Driver Info</a></h3>
- <p>The <B>driver information block</B> is an optional region of the
+ <p>The <b>driver information block</b> is an optional region of the
file which contains information needed by the file driver
to reopen a file. The format is described below:
@@ -946,24 +946,24 @@ TABLE.list TD { border:none; }
<tr>
<td>Version</td>
<td>
- <P>The version number of the Driver Information Block.
+ <p>The version number of the Driver Information Block.
This document describes version 0.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Driver Information Size</td>
<td>
- <P>The size in bytes of the <em>Driver Information</em> field.
- </P>
+ <p>The size in bytes of the <em>Driver Information</em> field.
+ </p>
</td>
</tr>
<tr>
<td>Driver Identification</td>
<td>
- <P>This is an eight-byte ASCII string without null
+ <p>This is an eight-byte ASCII string without null
termination which identifies the driver and/or version number
of the Driver Information Block. The predefined driver encoded
in this field by the HDF5 library is identified by the
@@ -972,12 +972,12 @@ TABLE.list TD { border:none; }
the original version then the last letter(s) of the
identification will be replaced by a version number in
ASCII, starting with 0.
- </P>
- <P>
+ </p>
+ <p>
Identification for user-defined drivers is also eight-byte long.
It can be arbitrary but should be unique to avoid
the four character prefix "NCSA".
- </P>
+ </p>
</td>
</tr>
@@ -991,10 +991,10 @@ TABLE.list TD { border:none; }
<BR>
The two drivers encoded in the <em>Driver Identification</em> field are as follows:
- <UL>
- <LI>
+ <ul>
+ <li>
Multi driver:
- <P>
+ <p>
The identifier for this driver is "NCSAmulti".
This driver provides a mechanism for segregating raw data and different types of meta data
into multiple files.
@@ -1002,17 +1002,17 @@ TABLE.list TD { border:none; }
A maximum of 6 files will be created for the following data:
superblock, B-tree, raw data, global heap, local heap, and object header.
More than one type of data can be written to the same file.
- </P>
- <LI>
+ </p>
+ <li>
Family driver
- <P>
+ <p>
The identifier for this driver is "NCSAfami" and is encoded in this field for library version 1.8 and after.
This driver is designed for systems that do not support files larger than 2 gigabytes
by splitting the HDF5 file address space across several smaller files.
It does nothing to segregate meta data and raw data;
they are mixed in the address space just as they would be in a single contiguous file.
- </P>
- </UL>
+ </p>
+ </ul>
<BR>
The format of the <em>Driver Information</em> field for the above two drivers are described below:
<BR>
@@ -1133,7 +1133,7 @@ TABLE.list TD { border:none; }
<td align=center>6</td>
<td>The object header data.</td>
</tr>
- </table></P>
+ </table></p>
For example, if the third field has the value 3 and all the rest have the
value 1, it means there are two files: one for raw data, and one for superblock,
B-tree, global heap, local heap, and object header.
@@ -1142,25 +1142,25 @@ TABLE.list TD { border:none; }
<tr>
<td>Reserved</td>
- <td><P>These fields are reserved and should always be zero.</P></td>
+ <td><p>These fields are reserved and should always be zero.</p></td>
</tr>
<tr>
<td>Address of Member File N</td>
- <td><P>This field Specifies the virtual address at which the member file starts.</P>
- <P>N is the number of member files.</P>
+ <td><p>This field Specifies the virtual address at which the member file starts.</p>
+ <p>N is the number of member files.</p>
</td>
</tr>
<tr>
<td>End of Address for Member File N</td>
- <td><P>This field is the end of the allocated address for the member file.
- </P></td>
+ <td><p>This field is the end of the allocated address for the member file.
+ </p></td>
</tr>
<tr>
<td>Name of Member File N</td>
- <td><P>This field is the null-terminated name of the member file and
+ <td><p>This field is the null-terminated name of the member file and
its length should be multiples of 8 bytes.
Additional bytes will be padded with <em>NULL</em>s. The default naming
convention is <em>%s-X.h5</em>, where <em>X</em> is one of the letters
@@ -1168,7 +1168,7 @@ TABLE.list TD { border:none; }
<em>g</em> (for global heap), <em>l</em> (for local heap), and <em>o</em> (for
object header). The name of the whole HDF5 file will substitute the <em>%s</em>
in the string.
- </P>
+ </p>
</td>
</tr>
</table>
@@ -1205,32 +1205,35 @@ TABLE.list TD { border:none; }
<tr>
<td>Size of member file</td>
- <td><P>This field is the size of the member file in the family of files.</P></td>
+ <td><p>This field is the size of the member file in the family of files.</p></td>
</tr>
</table>
</div>
<br>
- <H3><A name="SuperblockExt">
- Disk Format: Level 0C - Superblock Extension</A></H3>
+ <h3><A name="SuperblockExt">
+ Disk Format: Level 0C - Superblock Extension</a></h3>
<p>The <em>superblock extension</em> is used to store superblock metadata
- which is either optional, or added after the version of the superblock
+ which is either optional or added after the version of the superblock
was defined. Superblock extensions may only exist when version 2+ of
superblock is used. A superblock extension is an object header which may
hold the following messages:
- <UL>
- <LI>
- <A href="#SOHMTableMessage">Shared Message Table message</A> containing
+ <ul>
+ <li>
+ <a href="#SOHMTableMessage">Shared Message Table message</a> containing
information to locate the master table of shared object header message
indices.
- <LI>
- <A href="#BtreeKValuesMessage">B-tree 'K' Values message</A> containing
+ <li>
+ <a href="#BtreeKValuesMessage">B-tree 'K' Values message</a> containing
non-default B-tree 'K' values.
- <LI>
- <A href="#DrvInfoMessage">Driver Info message</A> containing information
- needed by the file driver in order to reopen a file.
- </UL>
+ <li>
+ <a href="#DrvInfoMessage">Driver Info message</a> containing information
+ needed by the file driver in order to reopen a file.
+ See also the
+ <a href="#DriverInfo">“Disk Format: Level 0B - File Driver
+ Info”</a> section above.
+ </ul>
<BR>
<HR>
@@ -1327,9 +1330,9 @@ TABLE.list TD { border:none; }
<table class=note>
<tr><td>
- (Items marked with an 'O' the above table are
+ (Items marked with an ‘O’ the above table are
<br>
- of the size specified in "Size of Offsets.")
+ of the size specified in “Size of Offsets.”)
</td></tr>
</table>
</div>
@@ -1345,23 +1348,23 @@ TABLE.list TD { border:none; }
<tr>
<td>Signature</td>
<td>
- <P>The ASCII character string "<code>TREE</code>" is
+ <p>The ASCII character string "<code>TREE</code>" is
used to indicate the
beginning of a B-link tree node. This gives file
consistency checking utilities a better chance of
reconstructing a damaged file.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Node Type</td>
<td>
- <P>Each B-link tree points to a particular type of data.
+ <p>Each B-link tree points to a particular type of data.
This field indicates the type of data as well as
implying the maximum degree <em>K</em> of the tree and
the size of each Key field.
- </P>
+ </p>
<table class=list>
<tr>
@@ -1383,20 +1386,20 @@ TABLE.list TD { border:none; }
<tr>
<td>Node Level</td>
<td>
- <P>The node level indicates the level at which this node
+ <p>The node level indicates the level at which this node
appears in the tree (leaf nodes are at level zero). Not
only does the level indicate whether child pointers
point to sub-trees or to data, but it can also be used
to help file consistency checking utilities reconstruct
damanged trees.
- </P>
+ </p>
</td>
</tr>
<tr valign=top>
<td>Entries Used</td>
<td>
- <P>This determines the number of children to which this
+ <p>This determines the number of children to which this
node points. All nodes of a particular type of tree
have the same maximum degree, but most nodes will point
to less than that number of children. The valid child
@@ -1404,49 +1407,49 @@ TABLE.list TD { border:none; }
and the unused pointers and keys appear at the end of
the node. The unused pointers and keys have undefined
values.
- </P>
+ </p>
</td>
</tr>
<tr valign=top>
<td>Address of Left Sibling</td>
<td>
- <P>This is the relative file address of the left sibling of
+ <p>This is the relative file address of the left sibling of
the current node. If the current
node is the left-most node at this level then this field
- is the <A href="#UndefinedAddress">undefined address</A>.
- </P>
+ is the <a href="#UndefinedAddress">undefined address</a>.
+ </p>
</td>
</tr>
<tr valign=top>
<td>Address of Right Sibling</td>
<td>
- <P>This is the relative file address of the right sibling of
+ <p>This is the relative file address of the right sibling of
the current node. If the current
node is the right-most node at this level then this
- field is the <A href="#UndefinedAddress">undefined address</A>.
- </P>
+ field is the <a href="#UndefinedAddress">undefined address</a>.
+ </p>
</td>
</tr>
<tr valign=top>
<td>Keys and Child Pointers</td>
<td>
- <P>Each tree has 2<em>K</em>+1 keys with 2<em>K</em>
+ <p>Each tree has 2<em>K</em>+1 keys with 2<em>K</em>
child pointers interleaved between the keys. The number
of keys and child pointers actually containing valid
values is determined by the node's <em>Entries Used</em> field.
If that field is <em>N</em> then the B-link tree contains
<em>N</em> child pointers and <em>N</em>+1 keys.
- </P>
+ </p>
</td>
</tr>
<tr valign=top>
<td>Key</td>
<td>
- <P>The format and size of the key values is determined by
+ <p>The format and size of the key values is determined by
the type of data to which this tree points. The keys are
ordered and are boundaries for the contents of the child
pointer; that is, the key values represented by child
@@ -1454,9 +1457,9 @@ TABLE.list TD { border:none; }
<em>N</em>+1. Whether the interval is open or closed on
each end is determined by the type of data to which the
tree points.
- </P>
+ </p>
- <P>
+ <p>
The format of the key depends on the node type.
For nodes of node type 0 (group nodes), the key is formatted as
follows:
@@ -1472,9 +1475,9 @@ TABLE.list TD { border:none; }
</tr>
</table>
</center>
- </P>
+ </p>
- <P>
+ <p>
For nodes of node type 1 (chunked raw data nodes), the key is
formatted as follows:
<center>
@@ -1505,24 +1508,24 @@ TABLE.list TD { border:none; }
</tr>
</table>
</center>
- </P>
+ </p>
</td>
</tr>
<tr valign=top>
<td>Child Pointer</td>
<td>
- <P>The tree node contains file addresses of subtrees or
+ <p>The tree node contains file addresses of subtrees or
data depending on the node level. Nodes at Level 0 point
to data addresses, either raw data chunks or group nodes.
Nodes at non-zero levels point to other nodes of the
same B-tree.
- </P>
- <P>For raw data chunk nodes, the child pointer is the address
+ </p>
+ <p>For raw data chunk nodes, the child pointer is the address
of a single raw data chunk. For group nodes, the child pointer
- points to a <A href="#SymbolTable">symbol table</A>, which contains
+ points to a <a href="#SymbolTable">symbol table</a>, which contains
information for multiple symbol table entries.
- </P>
+ </p>
</td>
</tr>
</table>
@@ -1586,7 +1589,7 @@ TABLE.list TD { border:none; }
all its descendents. Storing this additional information allows fast
array-like indexing to locate the n'th record in the B-tree.
- <P>The entry into a version 2 B-tree is a header which contains global
+ <p>The entry into a version 2 B-tree is a header which contains global
information about the structure of the B-tree. The <EM>root node
address</EM>
field in the header points to the B-tree root node, which is either an
@@ -1657,25 +1660,25 @@ TABLE.list TD { border:none; }
<tr>
<td>Signature</td>
<td>
- <P>The ASCII character string "<code>BTHD</code>" is
+ <p>The ASCII character string "<code>BTHD</code>" is
used to indicate the header of a version 2 B-link tree node.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Version</td>
<td>
- <P>The version number for this B-tree header. This document
+ <p>The version number for this B-tree header. This document
describes version 0.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Type</td>
<td>
- <P>This field indicates the type of B-tree:
+ <p>This field indicates the type of B-tree:
<table class=list>
<tr>
<th width="30%">Value</th>
@@ -1742,83 +1745,83 @@ TABLE.list TD { border:none; }
</td>
</tr>
</table>
- <P>The format of records for each type is described below.
+ <p>The format of records for each type is described below.
</td>
</tr>
<tr valign=top>
<td>Node Size</td>
<td>
- <P>This is the size in bytes of all B-tree nodes.
- </P>
+ <p>This is the size in bytes of all B-tree nodes.
+ </p>
</td>
</tr>
<tr valign=top>
<td>Record Size</td>
<td>
- <P>This field is the size in bytes of the B-tree record.
- </P>
+ <p>This field is the size in bytes of the B-tree record.
+ </p>
</td>
</tr>
<tr valign=top>
<td>Depth</td>
<td>
- <P>This is the depth of the B-tree.
- </P>
+ <p>This is the depth of the B-tree.
+ </p>
</td>
</tr>
<tr valign=top>
<td>Split Percent</td>
<td>
- <P>The percent full that a node needs to increase above before it
+ <p>The percent full that a node needs to increase above before it
is split.
- </P>
+ </p>
</td>
</tr>
<tr valign=top>
<td>Merge Percent</td>
<td>
- <P>The percent full that a node needs to be decrease below before it
+ <p>The percent full that a node needs to be decrease below before it
is split.
- </P>
+ </p>
</td>
</tr>
<tr valign=top>
<td>Root Node Address</td>
<td>
- <P>This is the address of the root B-tree node. A B-tree with
- no records will have the <A href="#UndefinedAddress">undefined
- address</A> in this field.
- </P>
+ <p>This is the address of the root B-tree node. A B-tree with
+ no records will have the <a href="#UndefinedAddress">undefined
+ address</a> in this field.
+ </p>
</td>
</tr>
<tr valign=top>
<td>Number of Records in Root Node</td>
<td>
- <P>This is the number of records in the root node.
- </P>
+ <p>This is the number of records in the root node.
+ </p>
</td>
</tr>
<tr valign=top>
<td>Total Number of Records in B-tree</td>
<td>
- <P>This is the total number of records in the entire B-tree.
- </P>
+ <p>This is the total number of records in the entire B-tree.
+ </p>
</td>
</tr>
<tr valign=top>
<td>Checksum</td>
<td>
- <P>This is the checksum for the B-tree header.
- </P>
+ <p>This is the checksum for the B-tree header.
+ </p>
</td>
</tr>
</table>
@@ -1890,60 +1893,60 @@ TABLE.list TD { border:none; }
<tr>
<td>Signature</td>
<td>
- <P>The ASCII character string "<code>BTIN</code>" is
+ <p>The ASCII character string "<code>BTIN</code>" is
used to indicate the internal node of a B-link tree.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Version</td>
<td>
- <P>The version number for this B-tree internal node.
+ <p>The version number for this B-tree internal node.
This document describes version 0.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Type</td>
<td>
- <P>This field is the type of the B-tree node. It should always
+ <p>This field is the type of the B-tree node. It should always
be the same as the B-tree type in the header.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Records</td>
<td>
- <P>The size of this field is determined by the number of records
+ <p>The size of this field is determined by the number of records
for this node and the record size (from the header). The format
of records depends on the type of B-tree.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Child Node Pointer</td>
<td>
- <P>This field is the address of the child node pointed to by the
+ <p>This field is the address of the child node pointed to by the
internal node.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Number of Records in Child Node</td>
<td>
- <P>This is the number of records in the child node pointed to by
+ <p>This is the number of records in the child node pointed to by
the corresponding <em>Node Pointer</em>.
- </P>
- <P>The number of bytes used to store this field is determined by
+ </p>
+ <p>The number of bytes used to store this field is determined by
the maximum possible number of records able to be stored in the
child node.
- </P>
- <P>
+ </p>
+ <p>
The maximum number of records in a child node is computed in
the following way: Subtract the fixed size overhead for the
child node
@@ -1953,14 +1956,14 @@ TABLE.list TD { border:none; }
from the size of nodes for the B-tree and dividing that result
by the size of a record plus the pointer triplet of information
stored to reach each child node from this node.
- </P>
- <P>
+ </p>
+ <p>
Note that leaf nodes don't encode any
child pointer triplets, so the maximum number of records in a
leaf node is just the node size minus the leaf node overhead,
divided by the record size.
- </P>
- <P>
+ </p>
+ <p>
Also note that the first level of internal nodes above the
leaf nodes don't encode the <em>Total Number of Records in Child
Node</em> value in the child pointer triplets (since it is the
@@ -1968,39 +1971,39 @@ TABLE.list TD { border:none; }
maximum number of records in these nodes is computed with the
equation above, but using (<em>Child Pointer</em>, <em>Number of
Records in Child Node</em>) pairs instead of triplets.
- </P>
- <P>
+ </p>
+ <p>
The number of
bytes used to encode this field is the least number of bytes
required to encode the maximum number of records in a child
node value for the child nodes below this level
in the B-tree.
- </P>
- <P>
+ </p>
+ <p>
For example, if the maximum number of child records is 123, one
byte will be used to encode these values in this node, if the
maximum number of child records is
20000, two bytes will be used to encode these values in this
node, etc. The maximum number of bytes used to encode these
values is 8 (i.e. an unsigned 64-bit integer).
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Total Number of Records in Child Node</td>
<td>
- <P>This is the total number of records for the node pointed to by
+ <p>This is the total number of records for the node pointed to by
the corresponding <em>Node Pointer</em> and all its children.
This field exists only in nodes whose depth in the B-tree node
is greater than 1 (i.e. the "twig" internal nodes, just above
leaf nodes, don't store this field in their child node pointers).
- </P>
- <P>The number of bytes used to store this field is determined by
+ </p>
+ <p>The number of bytes used to store this field is determined by
the maximum possible number of records able to be stored in the
child node and its descendents.
- </P>
- <P>
+ </p>
+ <p>
The maximum possible number of records able to be stored in a
child node and its descendents is computed iteratively, in the
following way: The maximum number of records in a leaf node
@@ -2010,20 +2013,20 @@ TABLE.list TD { border:none; }
determines the maximum possible number of records in child node
pointers for the level of nodes two levels above leaf nodes.
This process is continued up to any level in the B-tree.
- </P>
- <P>
+ </p>
+ <p>
The number of bytes used to encode this value is computed in
the same way as for the <em>Number of Records in Child Node</em>
field.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Checksum</td>
<td>
- <P>This is the checksum for this node.
- </P>
+ <p>This is the checksum for this node.
+ </p>
</td>
</tr>
@@ -2067,44 +2070,44 @@ TABLE.list TD { border:none; }
<tr>
<td>Signature</td>
<td>
- <P>The ASCII character string "<code>BTLF</code>" is
+ <p>The ASCII character string "<code>BTLF</code>" is
used to indicate the leaf node of a version 2 B-link tree.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Version</td>
<td>
- <P>The version number for this B-tree leaf node.
+ <p>The version number for this B-tree leaf node.
This document describes version 0.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Type</td>
<td>
- <P>This field is the type of the B-tree node. It should always
+ <p>This field is the type of the B-tree node. It should always
be the same as the B-tree type in the header.
- </P>
+ </p>
</td>
<tr>
<td>Records</td>
<td>
- <P>The size of this field is determined by the number of records
+ <p>The size of this field is determined by the number of records
for this node and the record size (from the header). The format
of records depends on the type of B-tree.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Checksum</td>
<td>
- <P>This is the checksum for this node.
- </P>
+ <p>This is the checksum for this node.
+ </p>
</td>
</tr>
@@ -2153,24 +2156,24 @@ TABLE.list TD { border:none; }
<tr>
<td>Huge Object Address</td>
<td>
- <P>The address of the huge object in the file.
- </P>
+ <p>The address of the huge object in the file.
+ </p>
</td>
</tr>
<tr>
<td>Huge Object Length</td>
<td>
- <P>The length of the huge object in the file.
- </P>
+ <p>The length of the huge object in the file.
+ </p>
</td>
</tr>
<tr>
<td>Huge Object ID</td>
<td>
- <P>The heap ID for the huge object.
- </P>
+ <p>The heap ID for the huge object.
+ </p>
</td>
</tr>
@@ -2221,43 +2224,43 @@ TABLE.list TD { border:none; }
<tr>
<td>Filtered Huge Object Address</td>
<td>
- <P>The address of the filtered huge object in the file.
- </P>
+ <p>The address of the filtered huge object in the file.
+ </p>
</td>
</tr>
<tr>
<td>Filtered Huge Object Length</td>
<td>
- <P>The length of the filtered huge object in the file.
- </P>
+ <p>The length of the filtered huge object in the file.
+ </p>
</td>
</tr>
<tr>
<td>Filter Mask</td>
<td>
- <P>A 32-bit bitfield indicating which filters have been skipped for
+ <p>A 32-bit bitfield indicating which filters have been skipped for
this chunk. Each filter has an index number in the pipeline
(starting at 0, with the first filter to apply) and if that
filter is skipped, the bit corresponding to its index is set.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Filtered Huge Object Memory Size</td>
<td>
- <P>The size of the de-filtered huge object in memory.
- </P>
+ <p>The size of the de-filtered huge object in memory.
+ </p>
</td>
</tr>
<tr>
<td>Huge Object ID</td>
<td>
- <P>The heap ID for the huge object.
- </P>
+ <p>The heap ID for the huge object.
+ </p>
</td>
</tr>
@@ -2299,16 +2302,16 @@ TABLE.list TD { border:none; }
<tr>
<td>Huge Object Address</td>
<td>
- <P>The address of the huge object in the file.
- </P>
+ <p>The address of the huge object in the file.
+ </p>
</td>
</tr>
<tr>
<td>Huge Object Length</td>
<td>
- <P>The length of the huge object in the file.
- </P>
+ <p>The length of the huge object in the file.
+ </p>
</td>
</tr>
@@ -2356,35 +2359,35 @@ TABLE.list TD { border:none; }
<tr>
<td>Filtered Huge Object Address</td>
<td>
- <P>The address of the filtered huge object in the file.
- </P>
+ <p>The address of the filtered huge object in the file.
+ </p>
</td>
</tr>
<tr>
<td>Filtered Huge Object Length</td>
<td>
- <P>The length of the filtered huge object in the file.
- </P>
+ <p>The length of the filtered huge object in the file.
+ </p>
</td>
</tr>
<tr>
<td>Filter Mask</td>
<td>
- <P>A 32-bit bitfield indicating which filters have been skipped for
+ <p>A 32-bit bitfield indicating which filters have been skipped for
this chunk. Each filter has an index number in the pipeline
(starting at 0, with the first filter to apply) and if that
filter is skipped, the bit corresponding to its index is set.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Filtered Huge Object Memory Size</td>
<td>
- <P>The size of the de-filtered huge object in memory.
- </P>
+ <p>The size of the de-filtered huge object in memory.
+ </p>
</td>
</tr>
@@ -2430,17 +2433,17 @@ TABLE.list TD { border:none; }
<tr>
<td>Hash</td>
<td>
- <P>This field is hash value of the name for the link. The hash
+ <p>This field is hash value of the name for the link. The hash
value is the Jenkins' lookup3 checksum algorithm applied to
the link's name.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>ID</td>
<td>
- <P>This is a 7-byte sequence of bytes and is the heap ID for the
+ <p>This is a 7-byte sequence of bytes and is the heap ID for the
link record in the group's fractal heap.
</td>
</tr>
@@ -2485,15 +2488,15 @@ TABLE.list TD { border:none; }
<tr>
<td>Creation Order</td>
<td>
- <P>This field is the creation order value for the link.
- </P>
+ <p>This field is the creation order value for the link.
+ </p>
</td>
</tr>
<tr>
<td>ID</td>
<td>
- <P>This is a 7-byte sequence of bytes and is the heap ID for the
+ <p>This is a 7-byte sequence of bytes and is the heap ID for the
link record in the group's fractal heap.
</td>
</tr>
@@ -2542,7 +2545,7 @@ TABLE.list TD { border:none; }
<tr>
<td>Message Location</td>
<td>
- <P>This field Indicates the location where the message is stored:
+ <p>This field Indicates the location where the message is stored:
<table class=list>
<tr>
<th width="30%">Value</th>
@@ -2565,7 +2568,7 @@ TABLE.list TD { border:none; }
<tr>
<td>Hash</td>
<td>
- <P>This field is hash value of the shared message. The hash
+ <p>This field is hash value of the shared message. The hash
value is the Jenkins' lookup3 checksum algorithm applied to
the shared message.
</td>
@@ -2574,14 +2577,14 @@ TABLE.list TD { border:none; }
<tr>
<td>Reference Count</td>
<td>
- <P>The number of objects which reference this message.
+ <p>The number of objects which reference this message.
</td>
</tr>
<tr>
<td>Heap ID</td>
<td>
- <P>This is a 8-byte sequence of bytes and is the heap ID for the
+ <p>This is a 8-byte sequence of bytes and is the heap ID for the
shared message in the shared message index's fractal heap.
</td>
</tr>
@@ -2632,7 +2635,7 @@ TABLE.list TD { border:none; }
<tr>
<td>Message Location</td>
<td>
- <P>This field Indicates the location where the message is stored:
+ <p>This field Indicates the location where the message is stored:
<table class=list>
<tr>
<th width="30%">Value</th>
@@ -2655,7 +2658,7 @@ TABLE.list TD { border:none; }
<tr>
<td>Hash</td>
<td>
- <P>This field is hash value of the shared message. The hash
+ <p>This field is hash value of the shared message. The hash
value is the Jenkins' lookup3 checksum algorithm applied to
the shared message.
</td>
@@ -2664,14 +2667,14 @@ TABLE.list TD { border:none; }
<tr>
<td>Message Type</td>
<td>
- <P>The object header message type of the shared message.
+ <p>The object header message type of the shared message.
</td>
</tr>
<tr>
<td>Object Header Index</td>
<td>
- <P>This field indicates that the shared message is the n'th message
+ <p>This field indicates that the shared message is the n'th message
of its type in the specified object header.
</td>
</tr>
@@ -2679,7 +2682,7 @@ TABLE.list TD { border:none; }
<tr>
<td>Object Header Address</td>
<td>
- <P>The address of the object header containing the shared message.
+ <p>The address of the object header containing the shared message.
</td>
</tr>
@@ -2727,7 +2730,7 @@ TABLE.list TD { border:none; }
<tr>
<td>Heap ID</td>
<td>
- <P>This is a 8-byte sequence of bytes and is the heap ID for the
+ <p>This is a 8-byte sequence of bytes and is the heap ID for the
attribute in the object's attribute fractal heap.
</td>
</tr>
@@ -2735,25 +2738,25 @@ TABLE.list TD { border:none; }
<tr>
<td>Message Flags</td>
<td>
- <P>The object header message flags for the attribute message.
+ <p>The object header message flags for the attribute message.
</td>
</tr>
<tr>
<td>Creation Order</td>
<td>
- <P>This field is the creation order value for the attribute.
- </P>
+ <p>This field is the creation order value for the attribute.
+ </p>
</td>
</tr>
<tr>
<td>Hash</td>
<td>
- <P>This field is hash value of the name for the attribute. The hash
+ <p>This field is hash value of the name for the attribute. The hash
value is the Jenkins' lookup3 checksum algorithm applied to
the attribute's name.
- </P>
+ </p>
</td>
</tr>
@@ -2798,7 +2801,7 @@ TABLE.list TD { border:none; }
<tr>
<td>Heap ID</td>
<td>
- <P>This is a 8-byte sequence of bytes and is the heap ID for the
+ <p>This is a 8-byte sequence of bytes and is the heap ID for the
attribute in the object's attribute fractal heap.
</td>
</tr>
@@ -2806,15 +2809,15 @@ TABLE.list TD { border:none; }
<tr>
<td>Message Flags</td>
<td>
- <P>The object header message flags for the attribute message.
+ <p>The object header message flags for the attribute message.
</td>
</tr>
<tr>
<td>Creation Order</td>
<td>
- <P>This field is the creation order value for the attribute.
- </P>
+ <p>This field is the creation order value for the attribute.
+ </p>
</td>
</tr>
@@ -2882,47 +2885,47 @@ TABLE.list TD { border:none; }
<tr>
<td>Signature</td>
<td>
- <P>The ASCII character string "<code>SNOD</code>" is
+ <p>The ASCII character string "<code>SNOD</code>" is
used to indicate the
beginning of a symbol table node. This gives file
consistency checking utilities a better chance of
reconstructing a damaged file.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Version Number</td>
<td>
- <P>The version number for the symbol table node. This
+ <p>The version number for the symbol table node. This
document describes version 1. (There is no version '0'
of the symbol table node)
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Number of Entries</td>
<td>
- <P>Although all symbol table nodes have the same length,
+ <p>Although all symbol table nodes have the same length,
most contain fewer than the maximum possible number of
link entries. This field indicates how many entries
contain valid data. The valid entries are packed at the
beginning of the symbol table node while the remaining
entries contain undefined values.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Symbol Table Entries</td>
<td>
- <P>Each link has an entry in the symbol table node.
+ <p>Each link has an entry in the symbol table node.
The format of the entry is described below.
There are 2<EM>K</EM> entries in each group node, where
<EM>K</EM> is the "Group Leaf Node K" value from the
- <A href="#Superblock">superblock</A>.
- </P>
+ <a href="#Superblock">superblock</a>.
+ </p>
</td>
</tr>
</table>
@@ -2974,9 +2977,9 @@ TABLE.list TD { border:none; }
<table class=note>
<tr><td>
- (Items marked with an 'O' the above table are
+ (Items marked with an ‘O’ the above table are
<br>
- of the size specified in "Size of Offsets.")
+ of the size specified in “Size of Offsets.”)
</td></tr>
</table>
</div>
@@ -2992,28 +2995,28 @@ TABLE.list TD { border:none; }
<tr>
<td>Link Name Offset</td>
<td>
- <P>This is the byte offset into the group's local
+ <p>This is the byte offset into the group's local
heap for the name of the link. The name is null
terminated.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Object Header Address</td>
<td>
- <P>Every object has an object header which serves as a
+ <p>Every object has an object header which serves as a
permanent location for the object's metadata. In addition
to appearing in the object header, some of the object's metadata
can be cached in the scratch-pad space.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Cache Type</td>
<td>
- <P>The cache type is determined from the object header.
+ <p>The cache type is determined from the object header.
It also determines the format for the scratch-pad space:
<br>
<table class=list>
@@ -3044,34 +3047,34 @@ TABLE.list TD { border:none; }
</td>
</tr>
</table>
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Reserved</td>
<td>
- <P>These four bytes are present so that the scratch-pad
+ <p>These four bytes are present so that the scratch-pad
space is aligned on an eight-byte boundary. They are
always set to zero.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Scratch-pad Space</td>
<td>
- <P>This space is used for different purposes, depending
+ <p>This space is used for different purposes, depending
on the value of the Cache Type field. Any metadata
about an object represented in the scratch-pad
space is duplicated in the object header for that
object.
- </P>
- <P>
+ </p>
+ <p>
Furthermore, no data is cached in the group
entry scratch-pad space if the object header for
the object has a link count greater than one.
- </P>
+ </p>
</td>
</tr>
</table>
@@ -3113,9 +3116,9 @@ TABLE.list TD { border:none; }
<table class=note>
<tr><td>
- (Items marked with an 'O' the above table are
+ (Items marked with an ‘O’ the above table are
<br>
- of the size specified in "Size of Offsets.")
+ of the size specified in “Size of Offsets.”)
</td></tr>
</table>
</div>
@@ -3131,25 +3134,25 @@ TABLE.list TD { border:none; }
<tr>
<td>Address of B-tree</td>
<td>
- <P>This is the file address for the root of the
+ <p>This is the file address for the root of the
group's B-tree.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Address of Name Heap</td>
<td>
- <P>This is the file address for the group's local
+ <p>This is the file address for the group's local
heap, in which are stored the group's symbol names.
- </P>
+ </p>
</td>
</tr>
</table>
</div>
- <P>If the Cache Type field contains the value two
+ <p>If the Cache Type field contains the value two
<code>(2)</code>, then the scratch-pad space
contains cached metadata for a symbolic link
in the following format:
@@ -3185,11 +3188,11 @@ TABLE.list TD { border:none; }
<tr>
<td>Offset to Link Value</td>
<td>
- <P>The value of a symbolic link (that is, the name of the
+ <p>The value of a symbolic link (that is, the name of the
thing to which it points) is stored in the local heap.
This field is the 4-byte offset into the local heap for
the start of the link value, which is null terminated.
- </P>
+ </p>
</td>
</tr>
</table>
@@ -3197,13 +3200,13 @@ TABLE.list TD { border:none; }
<h3><a name="LocalHeap">Disk Format: Level 1D - Local Heaps</a></h3>
- <P>A local heap is a collection of small pieces of data that are particular
+ <p>A local heap is a collection of small pieces of data that are particular
to a single object in the HDF5 file. Objects can be
inserted and removed from the heap at any time.
The address of a heap does not change once the heap is created.
For example, a group stores addresses of objects in symbol table nodes
with the names of links stored in the group's local heap.
- </P>
+ </p>
<br>
<div align=center>
@@ -3243,14 +3246,14 @@ TABLE.list TD { border:none; }
<table class=note>
<tr><td>
- (Items marked with an 'L' the above table are
+ (Items marked with an ‘L’ the above table are
<br>
- of the size specified in "Size of Lengths.")
+ of the size specified in “Size of Lengths.”)
</td></tr>
<tr><td>
- (Items marked with an 'O' the above table are
+ (Items marked with an ‘O’ the above table are
<br>
- of the size specified in "Size of Offsets.")
+ of the size specified in “Size of Offsets.”)
</td></tr>
</table>
</div>
@@ -3266,42 +3269,42 @@ TABLE.list TD { border:none; }
<tr>
<td>Signature</td>
<td>
- <P>The ASCII character string "<code>HEAP</code>"
+ <p>The ASCII character string "<code>HEAP</code>"
is used to indicate the
beginning of a heap. This gives file consistency
checking utilities a better chance of reconstructing a
damaged file.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Version</td>
<td>
- <P>Each local heap has its own version number so that new
+ <p>Each local heap has its own version number so that new
heaps can be added to old files. This document
describes version zero (0) of the local heap.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Data Segment Size</td>
<td>
- <P>The total amount of disk memory allocated for the heap
+ <p>The total amount of disk memory allocated for the heap
data. This may be larger than the amount of space
required by the objects stored in the heap. The extra
unused space in the heap holds a linked list of free blocks.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Offset to Head of Free-list</td>
<td>
- <P>This is the offset within the heap data segment of the
+ <p>This is the offset within the heap data segment of the
first free block (or the
- <A href="#UndefinedAddress">undefined address</A> if there is no
+ <a href="#UndefinedAddress">undefined address</a> if there is no
free block). The free block contains "Size of Lengths" bytes that
are the offset of the next free block (or the
value '1' if this is the
@@ -3310,19 +3313,19 @@ TABLE.list TD { border:none; }
the space used to store the offset of the next free block and
the size of the current block, making the minimum size of a free
block 2 * "Size of Lengths".
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Address of Data Segment</td>
<td>
- <P>The data segment originally starts immediately after
+ <p>The data segment originally starts immediately after
the heap header, but if the data segment must grow as a
result of adding more objects, then the data segment may
be relocated, in its entirety, to another part of the
file.
- </P>
+ </p>
</td>
</tr>
</table>
@@ -3332,7 +3335,7 @@ TABLE.list TD { border:none; }
<h3><a name="GlobalHeap">Disk Format: Level 1E - Global Heap</a></h3>
- <P>Each HDF5 file has a global heap which stores various types of
+ <p>Each HDF5 file has a global heap which stores various types of
information which is typically shared between datasets. The
global heap was designed to satisfy these goals:
@@ -3351,18 +3354,18 @@ TABLE.list TD { border:none; }
and the resulting file hole should be eligible to be reclaimed
for other uses.
</ol>
- </P>
+ </p>
- <P>The implementation of the heap makes use of the memory management
+ <p>The implementation of the heap makes use of the memory management
already available at the file level and combines that with a new
object called a <em>collection</em> to achieve goal B. The global heap
is the set of all collections. Each global heap object belongs to
exactly one collection and each collection contains one or more global
heap objects. For the purposes of disk I/O and caching, a collection is
treated as an atomic object, addressing goal A.
- </P>
+ </p>
- <P>When a global heap object is deleted from a collection (which occurs
+ <p>When a global heap object is deleted from a collection (which occurs
when its reference count falls to zero), objects located after the
deleted object in the collection are packed down toward the beginning
of the collection and the collection's global heap object 0 is created
@@ -3371,9 +3374,9 @@ TABLE.list TD { border:none; }
with the possible exception of the final space in the collection, if
it is not large enough to hold the header for the collection's global
heap object 0. These features address goal C.
- </P>
+ </p>
- <P>The HDF5 library creates global heap collections as needed, so there may
+ <p>The HDF5 library creates global heap collections as needed, so there may
be multiple collections throughout the file. The set of all of them is
abstractly called the "global heap", although they don't actually link
to each other, and there is no global place in the file where you can
@@ -3382,7 +3385,7 @@ TABLE.list TD { border:none; }
example, data of variable-length datatype elements is stored in the
global heap and is accessed via a global heap ID. The format for
global heap IDs is described at the end of this section.
- </P>
+ </p>
<br>
<div align=center>
@@ -3444,57 +3447,57 @@ TABLE.list TD { border:none; }
<tr>
<td>Signature</td>
<td>
- <P>The ASCII character string "<code>GCOL</code>"
+ <p>The ASCII character string "<code>GCOL</code>"
is used to indicate the
beginning of a collection. This gives file consistency
checking utilities a better chance of reconstructing a
damaged file.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Version</td>
<td>
- <P>Each collection has its own version number so that new
+ <p>Each collection has its own version number so that new
collections can be added to old files. This document
describes version one (1) of the collections (there is no
version zero (0)).
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Collection Size</td>
<td>
- <P>This is the size in bytes of the entire collection
+ <p>This is the size in bytes of the entire collection
including this field. The default (and minimum)
collection size is 4096 bytes which is a typical file
system block size. This allows for 127 16-byte heap
objects plus their overhead (the collection header of 16 bytes
and the 16 bytes of information about each heap object).
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Global Heap Object 1 through <em>N</em></td>
<td>
- <P>The objects are stored in any order with no
+ <p>The objects are stored in any order with no
intervening unused space.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Global Heap Object 0</td>
<td>
- <P>Global Heap Object 0 (zero), when present, represents the free
+ <p>Global Heap Object 0 (zero), when present, represents the free
space in the collection. Free space always appears at the end of
the collection. If the free space is too small to store the header
for Object 0 (described below) then the header is implied and the
collection contains no free space.
- </P>
+ </p>
</td>
</table>
</div>
@@ -3543,69 +3546,69 @@ TABLE.list TD { border:none; }
<tr>
<td>Heap Object Index</td>
<td>
- <P>Each object has a unique identification number within a
+ <p>Each object has a unique identification number within a
collection. The identification numbers are chosen so that
new objects have the smallest value possible with the
exception that the identifier <code>0</code> always refers to the
object which represents all free space within the
collection.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Reference Count</td>
<td>
- <P>All heap objects have a reference count field. An
+ <p>All heap objects have a reference count field. An
object which is referenced from some other part of the
file will have a positive reference count. The reference
count for Object 0 is always zero.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Reserved</td>
<td>
- <P>Zero padding to align next field on an 8-byte boundary.
- </P>
+ <p>Zero padding to align next field on an 8-byte boundary.
+ </p>
</td>
</tr>
<tr>
<td>Object Size</td>
<td>
- <P>This is the size of the object data stored for the object.
+ <p>This is the size of the object data stored for the object.
The actual storage space allocated for the object data is rounded
up to a multiple of eight.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Object Data</td>
<td>
- <P>The object data is treated as a one-dimensional array
+ <p>The object data is treated as a one-dimensional array
of bytes to be interpreted by the caller.
- </P>
+ </p>
</td>
</tr>
</table>
<table class=note>
<tr><td>
- (Items marked with an 'O' in the above tables are
+ (Items marked with an ‘O’ in the above tables are
<br>
- of the size specified in "Size of Offsets.")
+ of the size specified in “Size of Offsets.”)
</td></tr>
<tr><td>
- (Items marked with an 'L' the above tables are
+ (Items marked with an ‘L’ the above tables are
<br>
- of the size specified in "Size of Lengths.")
+ of the size specified in “Size of Lengths.”)
</td></tr>
</table>
</div>
- <P>
+ <p>
The format for the ID used to locate an object in the global heap is
described here:
@@ -3644,38 +3647,38 @@ TABLE.list TD { border:none; }
<tr>
<td>Collection Address</td>
<td>
- <P>This field is the address of the global heap collection
+ <p>This field is the address of the global heap collection
where the data object is stored.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>ID</td>
<td>
- <P>This field is the index of the data object within the
+ <p>This field is the index of the data object within the
global heap collection.
- </P>
+ </p>
</td>
</tr>
</table>
</div>
- </P>
+ </p>
<br>
<h3><a name="FractalHeap">Disk Format: Level 1F - Fractal Heap</a></h3>
- <P>
+ <p>
Each fractal heap consists of a header and zero or more direct and
indirect blocks (described below). The header contains general
information as well as
initialization parameters for the doubling table. The <em>Root
Block Address</em> in the header points to the first direct or
indirect block in the heap.
- </P>
+ </p>
- <P>
+ <p>
Fractal heaps are based on a data structure called a <em>doubling
table</em>. A doubling table provides a mechanism for quickly
extending an array-like data structure that minimizes the number of
@@ -3684,9 +3687,9 @@ TABLE.list TD { border:none; }
doubling tables can be found in the RFC
“<a href="Supplements/FractalHeap/PrivateHeap.pdf">Private
Heaps in HDF5</a>.”
- </P>
+ </p>
- <P>
+ <p>
The fractal heap implements the doubling table structure with
indirect and direct blocks.
Indirect blocks in the heap do not actually contain data for
@@ -3695,9 +3698,9 @@ TABLE.list TD { border:none; }
direct blocks in the doubling table.
Direct blocks
contain the actual data for objects stored in the heap.
- </P>
+ </p>
- <P>
+ <p>
All indirect blocks have a constant number of block entries in each
row, called the <em>width</em> of the doubling table (stored in
the heap header).
@@ -3709,9 +3712,9 @@ TABLE.list TD { border:none; }
constant, except for the "root"
indirect block, which expands and shrinks its number of rows as
needed.
- </P>
+ </p>
- <P>
+ <p>
Blocks in the first <em>two</em> rows of an indirect block are
<em>Starting Block Size</em> number of bytes in size, and the blocks
in each subsequent row are twice the size of the blocks in the
@@ -3722,9 +3725,9 @@ TABLE.list TD { border:none; }
blocks and entries for blocks greater than that size point to
further indirect blocks (which have their own entries for direct
and indirect blocks, etc).
- </P>
+ </p>
- <P>
+ <p>
The number of rows of blocks, <em>nrows</em>, in an
indirect block of size <em>iblock_size</em> is given by the
following expression:
@@ -3732,9 +3735,9 @@ TABLE.list TD { border:none; }
<em>nrows</em> = (log<sub>2</sub>(<em>iblock_size</em>) -
log<sub>2</sub>(<em><Starting Block Size></em> *
<em><Width></em>)) + 1
- </P>
+ </p>
- <P>
+ <p>
The maximum number of rows of direct blocks, <em>max_dblock_rows</em>,
in any indirect block of a fractal heap is given by the
following expression:
@@ -3742,9 +3745,9 @@ TABLE.list TD { border:none; }
<em>max_dblock_rows</em> =
(log<sub>2</sub>(<em><Max. Direct Block Size></em>) -
log<sub>2</sub>(<em><Starting Block Size></em>)) + 2
- </P>
+ </p>
- <P>
+ <p>
Using the computed values for <em>nrows</em> and
<em>max_dblock_rows</em>, along with the <em>Width</em> of the
doubling table, the number of direct and indirect block entries
@@ -3760,14 +3763,14 @@ TABLE.list TD { border:none; }
<br> <br>
<em>N</em> = <em>K</em> - (<em>max_dblock_rows</em> *
<em>Width</em>)
- </P>
+ </p>
- <P>
+ <p>
The size indirect blocks on disk is determined by the number
of rows in the indirect block (computed above). The size of direct
blocks on disk is exactly the size of the block in the doubling
table.
- </P>
+ </p>
<br>
@@ -3912,41 +3915,41 @@ TABLE.list TD { border:none; }
<tr>
<td>Signature</td>
<td>
- <P>The ASCII character string "<code>FRHP</code>"
+ <p>The ASCII character string "<code>FRHP</code>"
is used to indicate the
beginning of a fractal heap header. This gives file consistency
checking utilities a better chance of reconstructing a
damaged file.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Version</td>
<td>
- <P>This document describes version 0.</P>
+ <p>This document describes version 0.</p>
</td>
</tr>
<tr>
<td>Heap ID Length</td>
<td>
- <P>This is the length in bytes of heap object IDs for this heap.</P>
+ <p>This is the length in bytes of heap object IDs for this heap.</p>
</td>
</tr>
<tr>
<td>I/O Filters' Encoded Length</td>
<td>
- <P>This is the size in bytes of the encoded <em>I/O Filter Information</em>.
- </P>
+ <p>This is the size in bytes of the encoded <em>I/O Filter Information</em>.
+ </p>
</td>
</tr>
<tr>
<td>Flags</td>
<td>
- <P>This field is the heap status flag and is a bit-field indicating additional
+ <p>This field is the heap status flag and is a bit-field indicating additional
information about the fractal heap.
<table class=list>
<tr>
@@ -3972,253 +3975,253 @@ TABLE.list TD { border:none; }
<td>Reserved</td>
</tr>
</table>
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Maximum Size of Managed Objects</td>
<td>
- <P>This is the maximum size of managed objects allowed in the heap.
+ <p>This is the maximum size of managed objects allowed in the heap.
Objects greater than this this are 'huge' objects and will be
stored in the file directly, rather than in a direct block for
the heap.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Next Huge Object ID</td>
<td>
- <P>This is the next ID value to use for a huge object in the heap.
- </P>
+ <p>This is the next ID value to use for a huge object in the heap.
+ </p>
</td>
<tr>
<td>v2 B-tree Address of Huge Objects</td>
<td>
- <P>This is the address of the <a href="#V2Btrees">v2 B-tree</a>
+ <p>This is the address of the <a href="#V2Btrees">v2 B-tree</a>
used to track huge objects in the heap. The type of records
stored in the <em>v2 B-tree</em> will
be determined by whether the address & length of a huge object
can fit into a heap ID (if yes, it's a "directly" accessed
huge object) and whether there is a filter used on objects
in the heap.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Amount of Free Space in Managed Blocks</td>
<td>
- <P>This is the total amount of free space in managed direct blocks
+ <p>This is the total amount of free space in managed direct blocks
(in bytes).
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Address of Managed Block Free Space Manager</td>
<td>
- <P>This is the address of the
+ <p>This is the address of the
<em><a href="#FreeSpaceManager">Free-Space Manager</a></em> for
managed blocks.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Amount of Managed Space in Heap</td>
<td>
- <P>This is the total amount of managed space in the heap (in bytes),
+ <p>This is the total amount of managed space in the heap (in bytes),
essentially the upper bound of the heap's linear address space.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Amount of Allocated Managed Space in Heap</td>
<td>
- <P>This is the total amount of managed space (in bytes) actually
+ <p>This is the total amount of managed space (in bytes) actually
allocated in
the heap. This can be less than the <em>Amount of Managed Space
in Heap</em> field, if some direct blocks in the heap's linear
address space are not allocated.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Offset of Direct Block Allocation Iterator in Managed Space</td>
<td>
- <P>This is the linear heap offset where the next direct
+ <p>This is the linear heap offset where the next direct
block should be allocated at (in bytes). This may be less than
the <em>Amount of Managed Space in Heap</em> value because the
heap's address space is increased by a "row" of direct blocks
at a time, rather than by single direct block increments.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Number of Managed Objects in Heap</td>
<td>
- <P>This is the number of managed objects in the heap.
- </P>
+ <p>This is the number of managed objects in the heap.
+ </p>
</td>
</tr>
<tr>
<td>Size of Huge Objects in Heap</td>
<td>
- <P>This is the total size of huge objects in the heap (in bytes).
- </P>
+ <p>This is the total size of huge objects in the heap (in bytes).
+ </p>
</td>
</tr>
<tr>
<td>Number of Huge Objects in Heap</td>
<td>
- <P>This is the number of huge objects in the heap.
- </P>
+ <p>This is the number of huge objects in the heap.
+ </p>
</td>
</tr>
<tr>
<td>Size of Tiny Objects in Heap</td>
<td>
- <P>This is the total size of tiny objects that are packed in heap
+ <p>This is the total size of tiny objects that are packed in heap
IDs (in bytes).
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Number of Tiny Objects in Heap</td>
<td>
- <P>This is the number of tiny objects that are packed in heap IDs.
- </P>
+ <p>This is the number of tiny objects that are packed in heap IDs.
+ </p>
</td>
</tr>
<tr>
<td>Table Width</td>
<td>
- <P>This is the number of columns in the doubling table for managed
+ <p>This is the number of columns in the doubling table for managed
blocks. This value must be a power of two.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Starting Block Size</td>
<td>
- <P>This is the starting block size to use in the doubling table for
+ <p>This is the starting block size to use in the doubling table for
managed blocks (in bytes). This value must be a power of two.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Maximum Direct Block Size</td>
<td>
- <P>This is the maximum size allowed for a managed direct block.
+ <p>This is the maximum size allowed for a managed direct block.
Objects inserted into the heap that are larger than this value
(less the # of bytes of direct block prefix/suffix)
are stored as 'huge' objects. This value must be a power of
two.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Maximum Heap Size</td>
<td>
- <P>This is the maximum size of the heap's linear address space for
+ <p>This is the maximum size of the heap's linear address space for
managed objects (in bytes). The value stored is the log2 of
the actual value, that is: the # of bits of the address space.
'Huge' and 'tiny' objects aren't counted in this value, since
they don't store objects in the linear address space of the
heap.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Starting # of Rows in Root Indirect Block</td>
<td>
- <P>This is the starting number of rows for the root indirect block.
+ <p>This is the starting number of rows for the root indirect block.
A value of 0 indicates that the root indirect block will have
the maximum number of rows needed to address the heap's <em>Maximum
Heap Size</em>.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Address of Root Block</td>
<td>
- <P>This is the address of the root block for the heap. It can
- be the <A href="#UndefinedAddress">undefined address</A> if
+ <p>This is the address of the root block for the heap. It can
+ be the <a href="#UndefinedAddress">undefined address</a> if
there is no data in the heap. It either points to a direct
block (if the <em>Current # of Rows in the Root Indirect Block</em>
value is 0), or an indirect block.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Current # of Rows in Root Indirect Block</td>
<td>
- <P>This is the current number of rows in the root indirect block.
+ <p>This is the current number of rows in the root indirect block.
A value of 0 indicates that <em>Address of Root Block</em>
points to direct block instead of indirect block.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Size of Filtered Root Direct Block</td>
<td>
- <P>This is the size of the root direct block, if filters are
+ <p>This is the size of the root direct block, if filters are
applied to heap objects (in bytes). This field is only
stored in the header if the <em>I/O Filters' Encoded Length</em>
is greater than 0.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>I/O Filter Mask</td>
<td>
- <P>This is the filter mask for the root direct block, if filters
+ <p>This is the filter mask for the root direct block, if filters
are applied to heap objects. This mask has the same format as
that used for the filter mask in chunked raw data records in a
<a href="#V1Btrees">v1 B-tree</a>.
This field is only
stored in the header if the <em>I/O Filters' Encoded Length</em>
is greater than 0.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>I/O Filter Information</td>
<td>
- <P>This is the I/O filter information encoding direct blocks and
+ <p>This is the I/O filter information encoding direct blocks and
huge objects, if filters are applied to heap objects. This
field is encoded as a <a href="#FilterMessage">Filter Pipeline</a>
message.
The size of this field is determined by <em>I/O Filters'
Encoded Length</em>.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Checksum</td>
<td>
- <P>This is the checksum for the header.</P>
+ <p>This is the checksum for the header.</p>
</td>
</tr>
@@ -4277,64 +4280,64 @@ TABLE.list TD { border:none; }
<tr>
<td>Signature</td>
<td>
- <P>The ASCII character string "<code>FHDB</code>"
+ <p>The ASCII character string "<code>FHDB</code>"
is used to indicate the
beginning of a fractal heap direct block. This gives file consistency
checking utilities a better chance of reconstructing a
damaged file.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Version</td>
<td>
- <P>This document describes version 0.</P>
+ <p>This document describes version 0.</p>
</td>
</tr>
<tr>
<td>Heap Header Address</td>
<td>
- <P>This is the address for the fractal heap header that this
+ <p>This is the address for the fractal heap header that this
block belongs to. This field is principally used for file
integrity checking.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Block Offset</td>
<td>
- <P>This is the offset of the block within the fractal heap's
+ <p>This is the offset of the block within the fractal heap's
address space (in bytes). The number of bytes used to encode
this field is the <em>Maximum Heap Size</em> (in the heap's
header) divided by 8 and rounded up to the next highest integer,
for values that aren't a multiple of 8. This value is
principally used for file integrity checking.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Object Data</td>
<td>
- <P>This section of the direct block stores the actual data for
+ <p>This section of the direct block stores the actual data for
objects in the heap. The size of this section is determined by
the direct block's size, minus the size of the other fields
stored in the direct block (the <em>Signature</em>,
<em>Version</em>, etc., including the <em>Checksum</em> if it's
present).
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Checksum</td>
<td>
- <P>This is the checksum for the direct block.</P>
- <P>This field is only present if bit 1 of <em>Flags</em> in the
- heap's header is set.</P>
+ <p>This is the checksum for the direct block.</p>
+ <p>This field is only present if bit 1 of <em>Flags</em> in the
+ heap's header is set.</p>
</td>
</tr>
@@ -4439,89 +4442,89 @@ TABLE.list TD { border:none; }
<tr>
<td>Signature</td>
<td>
- <P>The ASCII character string "<code>FHIB</code>" is used to
+ <p>The ASCII character string "<code>FHIB</code>" is used to
indicate the beginning of a fractal heap indirect block. This
gives file consistency checking utilities a better chance of
reconstructing a damaged file.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Version</td>
<td>
- <P>This document describes version 0.</P>
+ <p>This document describes version 0.</p>
</td>
</tr>
<tr>
<td>Heap Header Address</td>
<td>
- <P>This is the address for the fractal heap header that this
+ <p>This is the address for the fractal heap header that this
block belongs to. This field is principally used for file
integrity checking.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Block Offset</td>
<td>
- <P>This is the offset of the block within the fractal heap's
+ <p>This is the offset of the block within the fractal heap's
address space (in bytes). The number of bytes used to encode
this field is the <em>Maximum Heap Size</em> (in the heap's
header) divided by 8 and rounded up to the next highest integer,
for values that aren't a multiple of 8. This value is
principally used for file integrity checking.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Child Direct Block #K Address</td>
<td>
- <P>This field is the address of the child direct block.
+ <p>This field is the address of the child direct block.
The size of the [uncompressed] direct block can be computed by
its offset in the heap's linear address space.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Size of Filtered Direct Block #K</td>
<td>
- <P>This is the size of the child direct block after passing through
+ <p>This is the size of the child direct block after passing through
the I/O filters defined for this heap (in bytes). If no I/O
filters are present for this heap, this field is not present.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Filter Mask for Direct Block #K</td>
<td>
- <P>This is the I/O filter mask for the filtered direct block.
+ <p>This is the I/O filter mask for the filtered direct block.
This mask has the same format as that used for the filter mask
in chunked raw data records in a <a href="#V1Btrees">v1 B-tree</a>.
If no I/O filters are present for this heap, this field is not
present.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Child Indirect Block #N Address</td>
<td>
- <P>This field is the address of the child indirect block.
+ <p>This field is the address of the child indirect block.
The size of the indirect block can be computed by
its offset in the heap's linear address space.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Checksum</td>
<td>
- <P>This is the checksum for the indirect block.</P>
+ <p>This is the checksum for the indirect block.</p>
</td>
</tr>
@@ -4529,20 +4532,20 @@ TABLE.list TD { border:none; }
<table class=note>
<tr><td>
- (Items marked with an 'O' in the above tables are
+ (Items marked with an ‘O’ in the above tables are
<br>
- of the size specified in "Size of Offsets.")
+ of the size specified in “Size of Offsets.”)
</td></tr>
<tr><td>
- (Items marked with an 'L' the above table are
+ (Items marked with an ‘L’ the above table are
<br>
- of the size specified in "Size of Lengths.")
+ of the size specified in “Size of Lengths.”)
</td></tr>
</table>
</div>
<br>
- <P>An object in the fractal heap is identified by means of a fractal heap ID,
+ <p>An object in the fractal heap is identified by means of a fractal heap ID,
which encodes information to locate the object in the heap.
Currently, the fractal heap stores an object in one of three ways,
depending on the object's size:
@@ -4558,7 +4561,7 @@ TABLE.list TD { border:none; }
<tr>
<td align=center>Tiny</td>
<td>
- <P>When an object is small enough to be encoded in the heap ID, the
+ <p>When an object is small enough to be encoded in the heap ID, the
object's data is embedded in the fractal heap ID itself. There are
2 sub-types for this type of object: normal and extended. The
sub-type for tiny heap IDs depends on whether the heap ID is large
@@ -4567,23 +4570,23 @@ TABLE.list TD { border:none; }
form is used. If the heap ID length is greater than 18 bytes in
length, the "extented" form is used. See format description below
for both sub-types.
- </P>
+ </p>
</td>
</tr>
<tr>
<td align=center>Huge</td>
<td>
- <P>When the size of an object is larger than <em>Maximum Size of
+ <p>When the size of an object is larger than <em>Maximum Size of
Managed Objects</em> in the <em>Fractal Heap Header</em>, the
object's data is stored on its own in the file and the object
is tracked/indexed via a version 2 B-tree. All huge objects
for a particular fractal heap use the same v2 B-tree. All huge
objects for a particular fractal heap use the same format for
their huge object IDs.
- </P>
+ </p>
- <P>Depending on whether the IDs for a heap are large enough to hold
+ <p>Depending on whether the IDs for a heap are large enough to hold
the object's retrieval information and whether I/O pipeline filters
are applied to the heap's objects, 4 sub-types are derived for
for huge object IDs for this heap:
@@ -4591,52 +4594,52 @@ TABLE.list TD { border:none; }
<div align=center>
<table class=list>
<tr>
- <th width="35%">Sub-type</th>
+ <th align="left" width="35%">Sub-type</th>
<th align=left>Description</th>
</tr>
<tr>
<td align=left>Directly accessed, non-filtered</td>
<td>
- <P>The object's address and length are embedded in the
+ <p>The object's address and length are embedded in the
fractal heap ID itself and the object is directly accessed
from them. This allows the object to be accessed without
resorting to the B-tree.
- </P>
+ </p>
</td>
</tr>
<tr>
<td align=left>Directly accessed, filtered</td>
<td>
- <P>The filtered object's address, length, filter mask and
+ <p>The filtered object's address, length, filter mask and
de-filtered size are embedded in the fractal heap ID itself
and the object is accessed directly with them. This allows
the object to be accessed without resorting to the B-tree.
- </P>
+ </p>
</td>
</tr>
<tr>
<td align=left>Indirectly accessed, non-filtered</td>
<td>
- <P>The object is located by using a B-tree key embedded in
+ <p>The object is located by using a B-tree key embedded in
the fractal heap ID to retrieve the address and length from
the version 2 B-tree for huge objects. Then, the address
and length are used to access the object.
- </P>
+ </p>
</td>
</tr>
<tr>
<td align=left>Indirectly accessed, filtered</td>
<td>
- <P>The object is located by using a B-tree key embedded in
+ <p>The object is located by using a B-tree key embedded in
the fractal heap ID to retrieve the filtered object's
address, length, filter mask and de-filtered size from the
version 2 B-ree for huge objects. Then, this information
is used to access the object.
- </P>
+ </p>
</td>
</tr>
</table>
@@ -4648,18 +4651,18 @@ TABLE.list TD { border:none; }
<tr>
<td align=center>Managed</td>
<td>
- <P>When the size of an object does not meet the above two
+ <p>When the size of an object does not meet the above two
conditions, the object is stored and managed via the direct and
indirect blocks based on the doubling table.
- </P>
+ </p>
</td>
</tr>
</table>
</div>
- </P>
+ </p>
- <P>The specific format for each type of heap ID is described below:
- </P>
+ <p>The specific format for each type of heap ID is described below:
+ </p>
<br>
<div align=center>
@@ -4697,7 +4700,7 @@ TABLE.list TD { border:none; }
<tr>
<td>Version, Type & Length</td>
<td>
- <P>This is a bit field with the following definition:
+ <p>This is a bit field with the following definition:
<table class=list>
<tr>
<th width="30%">Bit</th>
@@ -4726,15 +4729,15 @@ TABLE.list TD { border:none; }
</td>
</tr>
</table>
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Data</td>
<td>
- <P>This is the data for the object.
- </P>
+ <p>This is the data for the object.
+ </p>
</td>
</tr>
@@ -4778,7 +4781,7 @@ TABLE.list TD { border:none; }
<tr>
<td>Version, Type & Length</td>
<td>
- <P>This is a bit field with the following definition:
+ <p>This is a bit field with the following definition:
<table class=list>
<tr>
<th width="30%">Bit</th>
@@ -4805,14 +4808,14 @@ TABLE.list TD { border:none; }
</td>
</tr>
</table>
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Extended Length</td>
<td>
- <P>This byte, together with the 4 bits in the previous byte,
+ <p>This byte, together with the 4 bits in the previous byte,
forms an unsigned 12-bit integer for holding the length of the
tiny object. These 8 bits are bits 0-7 of the 12-bit integer
formed. The value stored is one less than the actual length
@@ -4820,15 +4823,15 @@ TABLE.list TD { border:none; }
heap). For example, an object of actual length 1 has an encoded
length of 0, an object of actual length 2 has an encoded
length of 1, etc.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Data</td>
<td>
- <P>This is the data for the object.
- </P>
+ <p>This is the data for the object.
+ </p>
</td>
</tr>
@@ -4872,7 +4875,7 @@ TABLE.list TD { border:none; }
<tr>
<td>Version & Type</td>
<td>
- <P>This is a bit field with the following definition:
+ <p>This is a bit field with the following definition:
<table class=list>
<tr>
<th width="30%">Bit</th>
@@ -4896,18 +4899,18 @@ TABLE.list TD { border:none; }
</td>
</tr>
</table>
- </P>
+ </p>
</td>
</tr>
<tr>
<td>v2 B-tree Key</td>
- <td><P>This field is the B-tree key for retrieving the information
+ <td><p>This field is the B-tree key for retrieving the information
from the version 2 B-tree for huge objects needed to access the
object. See the description of <a href="#V2Btrees">v2 B-tree</a>
records sub-type 1 & 2 for a description of the fields. New key
values are derived from <em>Next Huge Object ID</em> in the
- <em>Fractal Heap Header</em>.</P>
+ <em>Fractal Heap Header</em>.</p>
</td>
</tr>
@@ -4954,7 +4957,7 @@ TABLE.list TD { border:none; }
<tr>
<td>Version & Type</td>
<td>
- <P>This is a bit field with the following definition:
+ <p>This is a bit field with the following definition:
<table class=list>
<tr>
<th width="30%">Bit</th>
@@ -4978,19 +4981,19 @@ TABLE.list TD { border:none; }
</td>
</tr>
</table>
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Address</td>
- <td><P>This field is the address of the object in the file.</P>
+ <td><p>This field is the address of the object in the file.</p>
</td>
</tr>
<tr>
<td>Length</td>
- <td><P>This field is the length of the object in the file.</P>
+ <td><p>This field is the length of the object in the file.</p>
</td>
</tr>
</table>
@@ -5044,7 +5047,7 @@ TABLE.list TD { border:none; }
<tr>
<td>Version & Type</td>
<td>
- <P>This is a bit field with the following definition:
+ <p>This is a bit field with the following definition:
<table class=list>
<tr>
<th width="30%">Bit</th>
@@ -5068,32 +5071,32 @@ TABLE.list TD { border:none; }
</td>
</tr>
</table>
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Address</td>
- <td><P>This field is the address of the filtered object in the file.</P>
+ <td><p>This field is the address of the filtered object in the file.</p>
</td>
</tr>
<tr>
<td>Length</td>
- <td><P>This field is the length of the filtered object in the file.</P>
+ <td><p>This field is the length of the filtered object in the file.</p>
</td>
</tr>
<tr>
<td>Filter Mask</td>
- <td><P>This field is the I/O pipeline filter mask for the
- filtered object in the file.</P>
+ <td><p>This field is the I/O pipeline filter mask for the
+ filtered object in the file.</p>
</td>
</tr>
<tr>
<td>Filtered Size</td>
- <td><P>This field is the size of the de-flitered object in the file.</P>
+ <td><p>This field is the size of the de-flitered object in the file.</p>
</td>
</tr>
@@ -5138,7 +5141,7 @@ TABLE.list TD { border:none; }
<tr>
<td>Version & Type</td>
<td>
- <P>This is a bit field with the following definition:
+ <p>This is a bit field with the following definition:
<table class=list>
<tr>
<th width="30%">Bit</th>
@@ -5162,35 +5165,35 @@ TABLE.list TD { border:none; }
</td>
</tr>
</table>
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Offset</td>
<td>
- <P>This field is the offset of the object in the heap. This field's
+ <p>This field is the offset of the object in the heap. This field's
size is the minimum number of bytes necessary to encode the
<em>Maximum Heap Size</em> value (from the <em>Fractal Heap
Header</em>). For example, if the value of the <em>Maximum
Heap Size</em> is less than 256 bytes, this field is 1 byte
in length, a <em>Maximum Heap Size</em> of of 256-65535 bytes
uses a 2 byte length, etc.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Length</td>
<td>
- <P>This field is the length of the object in the heap.
+ <p>This field is the length of the object in the heap.
It is determined by taking the minimum value of
<em>Maximum Direct Block Size</em>
and <em>Maximum Size of Managed Objects</em> in the
<em>Fractal Heap Header</em>. Again, the minimum number of
bytes needed to encode that value is used for the size of
this field.
- </P>
+ </p>
</td>
</tr>
@@ -5200,20 +5203,20 @@ TABLE.list TD { border:none; }
<br>
<h3><a name="FreeSpaceManager">Disk Format: Level 1G - Free-Space Manager</a></h3>
- <P>
+ <p>
Free-space managers are used to describe space within a heap or
the entire HDF5 file that is not currently used for that heap or
file.
- </P>
+ </p>
- <P>
+ <p>
The superblock contains a pointer to a free-space managers for the
whole file, but that pointer is currently required to be the
- <A href="#UndefinedAddress">undefined address</A>.
- </P>
+ <a href="#UndefinedAddress">undefined address</a>.
+ </p>
- <P>
+ <p>
The <em>free-space manager header</em> contains metadata information
about the space being tracked, along with the address of the list
of <em>free space sections</em> which actually describes the free
@@ -5223,9 +5226,9 @@ TABLE.list TD { border:none; }
tracked, creation parameters for handling free-space sections of a
client, and section information used to locate the collection of
free-space sections.
- </P>
+ </p>
- <P>
+ <p>
The <em>free-space section list</em> stores a collection of
free-space sections that is specific to each <em>client</em> of the
free-space manager.
@@ -5234,7 +5237,7 @@ TABLE.list TD { border:none; }
and uses it to track unused space within the heap. There are 4
types of section records for the fractal heap, each of which has
its own format, listed below.
- </P>
+ </p>
<br>
<div align=center>
@@ -5324,26 +5327,26 @@ TABLE.list TD { border:none; }
<tr>
<td>Signature</td>
<td>
- <P>The ASCII character string "<code>FSHD</code>" is used to
+ <p>The ASCII character string "<code>FSHD</code>" is used to
indicate the beginning of the Free-Space Manager Header.
This gives file consistency checking utilities a better chance of
reconstructing a damaged file.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Version</td>
<td>
- <P>This is the version number for the Free-Space Manager Header
- and this document describes version 0.</P>
+ <p>This is the version number for the Free-Space Manager Header
+ and this document describes version 0.</p>
</td>
</tr>
<tr>
<td>Client ID</td>
<td>
- <P>This is the client ID for identifying the user of this
+ <p>This is the client ID for identifying the user of this
free-space manager:
<table class=list>
@@ -5363,123 +5366,123 @@ TABLE.list TD { border:none; }
</td>
</tr>
</table>
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Total Space Tracked</td>
<td>
- <P>This is the total amount of free space being tracked, in bytes.
- </P>
+ <p>This is the total amount of free space being tracked, in bytes.
+ </p>
</td>
</tr>
<tr>
<td>Total Number of Sections</td>
<td>
- <P>This is the total number of free-space sections being tracked.
- </P>
+ <p>This is the total number of free-space sections being tracked.
+ </p>
</td>
</tr>
<tr>
<td>Number of Serialized Sections</td>
<td>
- <P>This is the number of serialized free-space sections being
+ <p>This is the number of serialized free-space sections being
tracked.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Number of Un-Serialized Sections</td>
<td>
- <P>This is the number of un-serialized free-space sections being
+ <p>This is the number of un-serialized free-space sections being
managed. Un-serialized sections are created by the free-space
client when the list of sections is read in.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Number of Section Classes</td>
<td>
- <P>This is the number of section classes handled by this free space
+ <p>This is the number of section classes handled by this free space
manager for the free-space client.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Shrink Percent</td>
<td>
- <P>This is the percent of current size to shrink the allocated
+ <p>This is the percent of current size to shrink the allocated
serialized free-space section list.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Expand Percent</td>
<td>
- <P>This is the percent of current size to expand the allocated
+ <p>This is the percent of current size to expand the allocated
serialized free-space section list.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Size of Address Space</td>
<td>
- <P>This is the size of the address space that free-space sections
+ <p>This is the size of the address space that free-space sections
are within. This is stored as the log<sub>2</sub> of the
actual value (i.e. the number of bits required to store values
within that address space).
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Maximum Section Size</td>
<td>
- <P>This is the maximum size of a section to be tracked.
- </P>
+ <p>This is the maximum size of a section to be tracked.
+ </p>
</td>
</tr>
<tr>
<td>Address of Serialized Section List</td>
<td>
- <P>This is the address where the serialized free-space section
+ <p>This is the address where the serialized free-space section
list is stored.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Size of Serialized Section List Used</td>
<td>
- <P>This is the size of the serialized free-space section
+ <p>This is the size of the serialized free-space section
list used (in bytes). This value must be less than
or equal to the <em>allocated size of serialized section
list</em>, below.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Allocated Size of Serialized Section List</td>
<td>
- <P>This is the size of serialized free-space section list
+ <p>This is the size of serialized free-space section list
actually allocated (in bytes).
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Checksum</td>
<td>
- <P>This is the checksum for the free-space manager header.</P>
+ <p>This is the checksum for the free-space manager header.</p>
</td>
</tr>
@@ -5487,7 +5490,7 @@ TABLE.list TD { border:none; }
</div>
<br>
- <P>
+ <p>
The free-space sections being managed are stored in a <em>free-space
section list</em>, described below. The sections in the <em>free-space
section list</em> are stored in the following way: a count of the
@@ -5496,7 +5499,7 @@ TABLE.list TD { border:none; }
free-space desribed (in bytes), followed by a list of section
description records; then another section count & size, followed by
the list of section descriptions for that size; etc.
- </P>
+ </p>
<br>
<div align=center>
@@ -5664,83 +5667,83 @@ TABLE.list TD { border:none; }
<tr>
<td>Signature</td>
<td>
- <P>The ASCII character string "<code>FSSE</code>" is used to
+ <p>The ASCII character string "<code>FSSE</code>" is used to
indicate the beginning of the Free-Space Section Information.
This gives file consistency checking utilities a better chance of
reconstructing a damaged file.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Version</td>
<td>
- <P>This is the version number for the Free-Space Section List
- and this document describes version 0.</P>
+ <p>This is the version number for the Free-Space Section List
+ and this document describes version 0.</p>
</td>
</tr>
<tr>
<td>Free-Space Manager Header Address</td>
<td>
- <P>This is the address of the <em>Free-Space Manager Header</em>.
+ <p>This is the address of the <em>Free-Space Manager Header</em>.
This field is principally used for file
integrity checking.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Number of Section Records for Set #N</td>
<td>
- <P>This is the number of free-space section records for set #N.
+ <p>This is the number of free-space section records for set #N.
The length of this field is the minimum number of bytes needed
to store the <em>number of serialized sections</em> (from the
<em>free-space manager header</em>).
- </P>
+ </p>
- <P>
+ <p>
The number of sets of free-space section records is
determined by the <em>size of serialized section list</em> in
the <em>free-space manager header</em>.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Section Size for Record Set #N</td>
<td>
- <P>This is the size (in bytes) of the free-space section described
+ <p>This is the size (in bytes) of the free-space section described
for <em>all</em> the section records in set #N.
- </P>
+ </p>
- <P>
+ <p>
The length of this field is the minimum number of bytes needed
to store the <em>maximum section size</em> (from the
<em>free-space manager header</em>).
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Record Set #N Section #K Offset</td>
<td>
- <P>This is the offset (in bytes) of the free-space section within
+ <p>This is the offset (in bytes) of the free-space section within
the client for the free-space manager.
- </P>
+ </p>
- <P>
+ <p>
The length of this field is the minimum number of bytes needed
to store the <em>size of address space</em> (from the
<em>free-space manager header</em>).
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Record Set #N Section #K Type</td>
<td>
- <P>This is the type of the section record, used to decode the
+ <p>This is the type of the section record, used to decode the
<em>record set #N section #K data</em> information.
Currently defined record types are:
@@ -5780,50 +5783,50 @@ TABLE.list TD { border:none; }
</td>
</tr>
</table>
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Record Set #N Section #K Data</td>
<td>
- <P>This is the section-type specific information for each record
+ <p>This is the section-type specific information for each record
in the record set, described below.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Checksum</td>
<td>
- <P>This is the checksum for the <em>Free-Space Section List</em>.
- </P>
+ <p>This is the checksum for the <em>Free-Space Section List</em>.
+ </p>
</td>
</tr>
</table>
- </div>
- <div>
+
+
<table class=note>
<tr><td>
- (Items marked with an 'O' in the above tables are
+ (Items marked with an ‘O’ in the above tables are
<br>
- of the size specified in "Size of Offsets.")
+ of the size specified in “Size of Offsets.”)
</td></tr>
<tr><td>
- (Items marked with an 'L' the above tables are
+ (Items marked with an ‘L’ the above tables are
<br>
- of the size specified in "Size of Lengths.")
+ of the size specified in “Size of Lengths.”)
</td></tr>
</table>
</div>
<br>
- <P>
+ <p>
The section-type specific data for each free-space section record is
described below:
- </P>
+ </p>
<br>
<div align=center>
@@ -5905,38 +5908,38 @@ TABLE.list TD { border:none; }
<tr>
<td>Fractal Heap Block Offset</td>
<td>
- <P>The offset of the indirect block in the fractal heap's address
+ <p>The offset of the indirect block in the fractal heap's address
space containing the empty blocks.
- </P>
- <P>
+ </p>
+ <p>
The number of bytes used to encode this field is the minimum
number of bytes needed to encode values for the <em>Maximum
Heap Size</em> (in the fractal heap's header).
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Block Start Row</td>
<td>
- <P>This is the row that the empty blocks start in.
- </P>
+ <p>This is the row that the empty blocks start in.
+ </p>
</td>
</tr>
<tr>
<td>Block Start Column</td>
<td>
- <P>This is the column that the empty blocks start in.
- </P>
+ <p>This is the column that the empty blocks start in.
+ </p>
</td>
</tr>
<tr>
<td>Number of Blocks</td>
<td>
- <P>This is the number of empty blocks covered by the section.
- </P>
+ <p>This is the number of empty blocks covered by the section.
+ </p>
</td>
</tr>
</table>
@@ -5945,7 +5948,7 @@ TABLE.list TD { border:none; }
<br>
<h3><a name="SOHMTable">Disk Format: Level 1H - Shared Object Header Message Table</a></h3>
- <P>
+ <p>
The <em>shared object header message table</em> is used to locate
object
header messages that are shared between two or more object headers
@@ -5956,33 +5959,33 @@ TABLE.list TD { border:none; }
heap (when two or more objects share the message), or remain in an
object's header (when only one object uses the message currently,
but the message can be shared in the future).
- </P>
+ </p>
- <P>
+ <p>
The <em>shared object header message table</em>
contains a list of shared message index headers. Each index header
records information about the version of the index format, the index
storage type, flags for the message types indexed, the number of
messages in the index, the address where the index resides,
and the fractal heap address if shared messages are stored there.
- </P>
+ </p>
- <P>
+ <p>
Each index can be either a list or a v2 B-tree and may transition
between those two forms as the number of messages in the index
varies. Each shared message record contains information used to
locate the shared message from either a fractal heap or an object
header. The types of messages that can be shared are: <em>Dataspace,
Datatype, Fill Value, Filter Pipeline and Attribute</em>.
- </P>
+ </p>
- <P>
+ <p>
The <em>shared object header message table</em> is pointed to
from a <a href="#SOHMTableMessage">shared message table</a> message
in the superblock extension for a file. This message stores the
version of the table format, along with the number of index headers
in the table.
- </P>
+ </p>
<br>
<div align=center>
@@ -6083,34 +6086,34 @@ TABLE.list TD { border:none; }
<tr>
<td>Signature</td>
<td>
- <P>The ASCII character string "<code>SMTB</code>" is used to
+ <p>The ASCII character string "<code>SMTB</code>" is used to
indicate the beginning of the Shared Object Header Message table.
This gives file consistency checking utilities a better chance of
reconstructing a damaged file.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Version for index #N</td>
<td>
- <P>This is the version number for the list of shared object header message
- indexes and this document describes version 0.</P>
+ <p>This is the version number for the list of shared object header message
+ indexes and this document describes version 0.</p>
</td>
</tr>
<tr>
<td>Index Type for index #N</td>
<td>
- <P>The type of index can be an unsorted list or a v2 B-tree.
- </P>
+ <p>The type of index can be an unsorted list or a v2 B-tree.
+ </p>
</td>
</tr>
<tr>
<td>Message Type Flags for index #N</td>
<td>
- <P>This field indicates the type of messages tracked in the index,
+ <p>This field indicates the type of messages tracked in the index,
as follows:
<table class=list>
<tr>
@@ -6149,99 +6152,99 @@ TABLE.list TD { border:none; }
</td>
</tr>
</table>
- </P>
+ </p>
- <P>
+ <p>
An index can track more than one type of message, but each type
of message can only by in one index.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Minimum Message Size for index #N</td>
<td>
- <P>This is the message size sharing threshold for the index.
+ <p>This is the message size sharing threshold for the index.
If the encoded size of the message is less than this value, the
message is not shared.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>List Cutoff for index #N</td>
<td>
- <P>This is is the cutoff value for the indexing of messages to
+ <p>This is is the cutoff value for the indexing of messages to
switch from a list to a v2 B-tree. If the number of messages
is greater than this value, the index should be a v2 B-tree.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>v2 B-tree Cutoff for index #N</td>
<td>
- <P>This is is the cutoff value for the indexing of messages to
+ <p>This is is the cutoff value for the indexing of messages to
switch from a v2 B-tree back to a list. If the number of
messages is less than this value, the index should be a list.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Number of Messages for index #N</td>
<td>
- <P>The number of shared messages being tracked for the index.
- </P>
+ <p>The number of shared messages being tracked for the index.
+ </p>
</td>
</tr>
<tr>
<td>Index Address for index #N</td>
<td>
- <P>This field is the address of the list or v2 B-tree where the
+ <p>This field is the address of the list or v2 B-tree where the
index nodes reside.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Fractal Heap Address for index #N</td>
<td>
- <P>This field is the address of the fractal heap if shared messages
+ <p>This field is the address of the fractal heap if shared messages
are stored there.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Checksum</td>
<td>
- <P>This is the checksum for the table.</P>
+ <p>This is the checksum for the table.</p>
</td>
</tr>
</table>
- </div>
- <div>
+
+
<table class=note>
<tr><td>
- (Items marked with an 'O' in the above tables are
+ (Items marked with an ‘O’ in the above tables are
<br>
- of the size specified in "Size of Offsets.")
+ of the size specified in “Size of Offsets.”)
</td></tr>
</table>
</div>
<br>
- <P>
+ <p>
Shared messages are indexed either with a <em>shared message record
list</em>, described below, or using a v2 B-tree (using record type 7).
The number of records in the <em>shared message record list</em> is
determined in the index's entry in the <em>shared object header message
table</em>.
- </P>
+ </p>
<br>
<div align=center>
@@ -6294,29 +6297,29 @@ TABLE.list TD { border:none; }
<tr>
<td>Signature</td>
<td>
- <P>The ASCII character string "<code>SMLI</code>" is used to
+ <p>The ASCII character string "<code>SMLI</code>" is used to
indicate the beginning of a list of index nodes.
This gives file consistency checking utilities a better chance of
reconstructing a damaged file.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Shared Message Record #N</td>
<td>
- <P>The record for locating the shared message, either in the
+ <p>The record for locating the shared message, either in the
fractal heap for the index, or an object header (see format for
<em>index nodes</em> below).
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Checksum</td>
<td>
- <P>This is the checksum for the list.
- </P>
+ <p>This is the checksum for the list.
+ </p>
</td>
</tr>
@@ -6324,10 +6327,10 @@ TABLE.list TD { border:none; }
</div>
<br>
- <P>
+ <p>
The record for each shared message in an index is stored in one of the
following forms:
- </P>
+ </p>
<br>
<div align=center>
@@ -6373,34 +6376,34 @@ TABLE.list TD { border:none; }
<tr>
<td>Message Location</td>
<td>
- <P>This has a value of 0 indicating that the message is stored in
+ <p>This has a value of 0 indicating that the message is stored in
the heap.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Hash Value</td>
<td>
- <P>This is the hash value for the message.
- </P>
+ <p>This is the hash value for the message.
+ </p>
</td>
</tr>
<tr>
<td>Reference Count</td>
<td>
- <P>This is the number of times the message is used in the file.
- </P>
+ <p>This is the number of times the message is used in the file.
+ </p>
</td>
</tr>
<tr>
<td>Fractal Heap ID</td>
<td>
- <P>This is an 8-byte fractal heap ID for the message as stored in
+ <p>This is an 8-byte fractal heap ID for the message as stored in
the fractal heap for the index.
- </P>
+ </p>
</td>
</tr>
</table>
@@ -6452,43 +6455,43 @@ TABLE.list TD { border:none; }
<tr>
<td>Message Location</td>
<td>
- <P>This has a value of 1 indicating that the message is stored in
+ <p>This has a value of 1 indicating that the message is stored in
an object header.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Hash Value</td>
<td>
- <P>This is the hash value for the message.
- </P>
+ <p>This is the hash value for the message.
+ </p>
</td>
</tr>
<tr>
<td>Message Type</td>
<td>
- <P>This is the message type in the object header.
- </P>
+ <p>This is the message type in the object header.
+ </p>
</td>
</tr>
<tr>
<td>Creation Index</td>
<td>
- <P>This is the creation index of the message within the object
+ <p>This is the creation index of the message within the object
header.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Object Header Address</td>
<td>
- <P>This is the address of the object header where the message is
+ <p>This is the address of the object header where the message is
located.
- </P>
+ </p>
</td>
</tr>
</table>
@@ -6499,24 +6502,24 @@ TABLE.list TD { border:none; }
<h2><a name="DataObject">Disk Format: Level 2 - Data Objects </a></h2>
- <P>Data objects contain the "real" user-visible information in the file.
+ <p>Data objects contain the "real" user-visible information in the file.
These objects compose the scientific data and other information which
are generally thought of as "data" by the end-user. All the
other information in the file is provided as a framework for
storing and accessing these data objects.
- </P>
+ </p>
- <P>A data object is composed of header and data
+ <p>A data object is composed of header and data
information. The header information contains the information
needed to interpret the data information for the object as
well as additional "metadata" or pointers to additional
"metadata" used to describe or annotate each object.
- </P>
+ </p>
<h3><a name="ObjectHeader">
Disk Format: Level 2A - Data Object Headers</a></h3>
- <P>The header information of an object is designed to encompass
+ <p>The header information of an object is designed to encompass
all the information about an object, except for the data itself.
This information includes
the dataspace, datatype, information about how the data
@@ -6528,13 +6531,13 @@ TABLE.list TD { border:none; }
not necessarily located immediately prior to the object's data in the
file and in fact may be located in any position in the file. The order
of the messages in an object header is not significant.
- </P>
+ </p>
- <P>Object headers are composed of a prefix and a set of messages. The
+ <p>Object headers are composed of a prefix and a set of messages. The
prefix contains the information needed to interpret the messages and
a small amount of metadata about the object, and the messages contain
the majority of the metadata about the object.
- </P>
+ </p>
<h3><a name="ObjectHeaderPrefix">
Disk Format: Level 2A1 - Data Object Header Prefix</a></h3>
@@ -6542,9 +6545,9 @@ TABLE.list TD { border:none; }
<h4><a name="V1ObjectHeaderPrefix">
Version 1 Data Object Header Prefix</a></h4>
- <P>Header messages are aligned on 8-byte boundaries for version 1
+ <p>Header messages are aligned on 8-byte boundaries for version 1
object headers.
- </P>
+ </p>
<br>
<div align=center>
@@ -6619,76 +6622,76 @@ TABLE.list TD { border:none; }
<tr>
<td>Version</td>
<td>
- <P>This value is used to determine the format of the
+ <p>This value is used to determine the format of the
information in the object header. When the format of the
object header is changed, the version number
is incremented and can be used to determine how the
information in the object header is formatted. This
is version one (1) (there was no version zero (0)) of the
object header.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Total Number of Header Messages</td>
<td>
- <P>This value determines the total number of messages listed in
+ <p>This value determines the total number of messages listed in
object headers for this object. This value includes the messages
in continuation messages for this object.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Object Reference Count</td>
<td>
- <P>This value specifies the number of "hard links" to this object
+ <p>This value specifies the number of "hard links" to this object
within the current file. References to the object from external
files, "soft links" in this file and object references in this
file are not tracked.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Object Header Size</td>
<td>
- <P>This value specifies the number of bytes of header message data
+ <p>This value specifies the number of bytes of header message data
following this length field that contain object header messages
for this object header. This value does not include the size of
object header continuation blocks for this object elsewhere in the
file.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Header Message #n Type</td>
<td>
- <P>This value specifies the type of information included in the
+ <p>This value specifies the type of information included in the
following header message data. The message types for
header messages are defined in sections below.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Size of Header Message #n Data</td>
<td>
- <P>This value specifies the number of bytes of header
+ <p>This value specifies the number of bytes of header
message data following the header message type and length
information for the current message. The size includes
padding bytes to make the message a multiple of eight
bytes.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Header Message #n Flags</td>
<td>
- <P>This is a bit field with the following definition:
+ <p>This is a bit field with the following definition:
<table class=list>
<tr>
<th width="30%">Bit</th>
@@ -6706,7 +6709,7 @@ TABLE.list TD { border:none; }
<td>If set, the message is <em>shared</em> and stored
in another location than the object header. The Header
Message Data field contains a Shared Message
- (described in the <A href="#ObjectHeaderMessages">Data Object Header Messages</a>
+ (described in the <a href="#ObjectHeaderMessages">Data Object Header Messages</a>
section below)
and the Size of Header Message Data field
contains the size of that Shared Message.
@@ -6752,20 +6755,20 @@ TABLE.list TD { border:none; }
<td><em>Reserved</em></td>
</tr>
</table>
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Header Message #n Data</td>
<td>
- <P>The format and length of this field is determined by the
+ <p>The format and length of this field is determined by the
header message type and size respectively. Some header
message types do not require any data and this information
can be eliminated by setting the length of the message to
zero. The data is padded with enough zeros to make the
size a multiple of eight.
- </P>
+ </p>
</td>
</tr>
</table>
@@ -6774,12 +6777,12 @@ TABLE.list TD { border:none; }
<h4><a name="V2ObjectHeaderPrefix">
Version 2 Data Object Headers</a></h4>
- <P>Note that the "total number of messages" field has been dropped from
+ <p>Note that the "total number of messages" field has been dropped from
the data object header prefix in this version. The number is messages
in the data object header is just determined by the messages encountered
in all the object header blocks.
- <P>Note also that the fields and messages in this version of data object
+ <p>Note also that the fields and messages in this version of data object
headers have <em>no</em> alignment or padding bytes inserted - they are
stored packed together.
@@ -6887,27 +6890,27 @@ TABLE.list TD { border:none; }
<tr>
<td>Signature</td>
<td>
- <P>The ASCII character string "<code>OHDR</code>"
+ <p>The ASCII character string "<code>OHDR</code>"
is used to indicate the
beginning of an object header. This gives file consistency
checking utilities a better chance of reconstructing a
damaged file.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Version</td>
<td>
- <P>This field has a value of 2 indicating version 2 of the object header.
- </P>
+ <p>This field has a value of 2 indicating version 2 of the object header.
+ </p>
</td>
</tr>
<tr>
<td>Flags</td>
<td>
- <P>This field is a bit-field indicating additional information
+ <p>This field is a bit-field indicating additional information
about the object header.
<table class=list>
<tr>
@@ -6971,192 +6974,192 @@ TABLE.list TD { border:none; }
<td>Reserved</td>
</tr>
</table>
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Access Time</td>
<td>
- <P>This 32-bit value represents the number of seconds after the
+ <p>This 32-bit value represents the number of seconds after the
UNIX epoch when the object's raw data was last accessed (i.e.
read or written).
- </P>
- <P>This field is present if bit 5 of <em>flags</em> is set.
- </P>
+ </p>
+ <p>This field is present if bit 5 of <em>flags</em> is set.
+ </p>
</td>
</tr>
<tr>
<td>Modification Time</td>
<td>
- <P>This 32-bit value represents the number of seconds after the
+ <p>This 32-bit value represents the number of seconds after the
UNIX epoch when the object's raw data was last modified (i.e.
written).
- </P>
- <P>This field is present if bit 5 of <em>flags</em> is set.
- </P>
+ </p>
+ <p>This field is present if bit 5 of <em>flags</em> is set.
+ </p>
</td>
</tr>
<tr>
<td>Change Time</td>
<td>
- <P>This 32-bit value represents the number of seconds after the
+ <p>This 32-bit value represents the number of seconds after the
UNIX epoch when the object's metadata was last changed.
- </P>
- <P>This field is present if bit 5 of <em>flags</em> is set.
- </P>
+ </p>
+ <p>This field is present if bit 5 of <em>flags</em> is set.
+ </p>
</td>
</tr>
<tr>
<td>Birth Time</td>
<td>
- <P>This 32-bit value represents the number of seconds after the
+ <p>This 32-bit value represents the number of seconds after the
UNIX epoch when the object was created.
- </P>
- <P>This field is present if bit 5 of <em>flags</em> is set.
- </P>
+ </p>
+ <p>This field is present if bit 5 of <em>flags</em> is set.
+ </p>
</td>
</tr>
<tr>
<td>Maximum # of compact attributes</td>
<td>
- <P>This is the maximum number of attributes to store in the compact
+ <p>This is the maximum number of attributes to store in the compact
format before switching to the indexed format.
- </P>
- <P>This field is present if bit 4 of <em>flags</em> is set.
- </P>
+ </p>
+ <p>This field is present if bit 4 of <em>flags</em> is set.
+ </p>
</td>
</tr>
<tr>
<td>Minimum # of dense attributes</td>
<td>
- <P>This is the minimum number of attributes to store in the indexed
+ <p>This is the minimum number of attributes to store in the indexed
format before switching to the compact format.
- </P>
- <P>This field is present if bit 4 of <em>flags</em> is set.
- </P>
+ </p>
+ <p>This field is present if bit 4 of <em>flags</em> is set.
+ </p>
</td>
</tr>
<tr>
<td>Size of Chunk #0</td>
<td>
- <P>
+ <p>
This unsigned value specifies the number of bytes of header
message data following this field that contain object header
information.
- </P>
- <P>
+ </p>
+ <p>
This value does not include the size of object header
continuation blocks for this object elsewhere in the file.
- </P>
- <P>
+ </p>
+ <p>
The length of this field varies depending on bits 0 and 1 of
the <em>flags</em> field.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Header Message #n Type</td>
<td>
- <P>Same format as version 1 of the object header, described above.
- </P>
+ <p>Same format as version 1 of the object header, described above.
+ </p>
</td>
</tr>
<tr>
<td>Size of Header Message #n Data</td>
<td>
- <P>This value specifies the number of bytes of header
+ <p>This value specifies the number of bytes of header
message data following the header message type and length
information for the current message. The size of messages
in this version does <em>not</em> include any padding bytes.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Header Message #n Flags</td>
<td>
- <P>Same format as version 1 of the object header, described above.
- </P>
+ <p>Same format as version 1 of the object header, described above.
+ </p>
</td>
</tr>
<tr>
<td>Header Message #n Creation Order</td>
<td>
- <P>This field stores the order that a message of a given type
+ <p>This field stores the order that a message of a given type
was created in.
- </P>
- <P>This field is present if bit 2 of <em>flags</em> is set.
- </P>
+ </p>
+ <p>This field is present if bit 2 of <em>flags</em> is set.
+ </p>
</td>
</tr>
<tr>
<td>Header Message #n Data</td>
<td>
- <P>Same format as version 1 of the object header, described above.
- </P>
+ <p>Same format as version 1 of the object header, described above.
+ </p>
</td>
</tr>
<tr>
<td>Gap</td>
<td>
- <P>A gap in an object header chunk is inferred by the end of the
+ <p>A gap in an object header chunk is inferred by the end of the
messages for the chunk before the beginning of the chunk's
checksum. Gaps are always smaller than the size of an
object header message prefix (message type + message size +
message flags).
- </P>
- <P>Gaps are formed when a message (typically an attribute message)
+ </p>
+ <p>Gaps are formed when a message (typically an attribute message)
in an earlier chunk is deleted and a message from a later
chunk that doesn't quite fit into the free space is moved
into the earlier chunk.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Checksum</td>
<td>
- <P>This is the checksum for the object header chunk.
- </P>
+ <p>This is the checksum for the object header chunk.
+ </p>
</td>
</tr>
</table>
</div>
- <P>The header message types and the message data associated with
+ <p>The header message types and the message data associated with
them compose the critical "metadata" about each object. Some
header messages are required for each object while others are
optional. Some optional header messages may also be repeated
several times in the header itself, the requirements and number
of times allowed in the header will be noted in each header
message description below.
- </P>
+ </p>
<hr>
<h3><a name="ObjectHeaderMessages">
Disk Format: Level 2A2 - Data Object Header Messages</a></h3>
- <P>Data object header messages are small pieces of metadata that are
+ <p>Data object header messages are small pieces of metadata that are
stored in the data object header for each object in an HDF5 file.
Data object header messages provide the metadata required to describe
an object and its contents, as well as optional pieces of metadata
that annotate the meaning or purpose of the object.
- </P>
+ </p>
- <P>Data object header messages are either stored directly in the data
+ <p>Data object header messages are either stored directly in the data
object header for the object or are shared between multiple objects
in the file. When a message is shared, a flag in the <em>Message Flags</em>
indicates that the actual <em>Message Data</em>
@@ -7164,9 +7167,9 @@ TABLE.list TD { border:none; }
data object header, or a heap in the file) and the <em>Message Data</em>
field contains the information needed to locate the actual information
for the message.
- </P>
+ </p>
- <P class=item>
+ <p class="item">
The format of shared message data is described here:
<br>
<div align=center>
@@ -7208,8 +7211,8 @@ TABLE.list TD { border:none; }
<tr>
<td>Version</td>
- <td><P>The version number is used when there are changes in the format
- of a shared object message and is described here:</P>
+ <td><p>The version number is used when there are changes in the format
+ of a shared object message and is described here:</p>
<table class=list>
<tr>
<th width="30%">Version</th>
@@ -7231,7 +7234,7 @@ TABLE.list TD { border:none; }
<tr>
<td>Type</td>
- <td><P>The type of shared message location:
+ <td><p>The type of shared message location:
<table class=list>
<tr>
<th width="30%">Value</th>
@@ -7250,8 +7253,8 @@ TABLE.list TD { border:none; }
<tr>
<td>Address</td>
- <td><P>The address of the object header
- containing the message to be shared.</P>
+ <td><p>The address of the object header
+ containing the message to be shared.</p>
</td>
</tr>
</table>
@@ -7293,8 +7296,8 @@ TABLE.list TD { border:none; }
<tr>
<td>Version</td>
- <td><P>The version number is used when there are changes in the format
- of a shared object message and is described here:</P>
+ <td><p>The version number is used when there are changes in the format
+ of a shared object message and is described here:</p>
<table class=list>
<tr>
<th width="30%">Version</th>
@@ -7312,7 +7315,7 @@ TABLE.list TD { border:none; }
<tr>
<td>Type</td>
- <td><P>The type of shared message location:
+ <td><p>The type of shared message location:
<table class=list>
<tr>
<th width="30%">Value</th>
@@ -7331,8 +7334,8 @@ TABLE.list TD { border:none; }
<tr>
<td>Address</td>
- <td><P>The address of the object header
- containing the message to be shared.</P></td>
+ <td><p>The address of the object header
+ containing the message to be shared.</p></td>
</tr>
</table>
</div>
@@ -7373,8 +7376,8 @@ TABLE.list TD { border:none; }
<tr>
<td>Version</td>
- <td><P>The version number indicates changes in the format of shared
- object message and is described here:</P>
+ <td><p>The version number indicates changes in the format of shared
+ object message and is described here:</p>
<table class=list>
<tr>
<th width="30%">Version</th>
@@ -7393,7 +7396,7 @@ TABLE.list TD { border:none; }
<tr>
<td>Type</td>
- <td><P>The type of shared message location:
+ <td><p>The type of shared message location:
<table class=list>
<tr>
<th width="30%">Value</th>
@@ -7432,56 +7435,56 @@ TABLE.list TD { border:none; }
<tr>
<td>Location</td>
- <td><P>This field contains either a <em>Size of Offsets</em>-bytes
+ <td><p>This field contains either a <em>Size of Offsets</em>-bytes
address of the object header
containing the message to be shared, or an 8-byte fractal heap ID
for the message in the file's <em>shared object header message</em>
heap.
- </P>
+ </p>
</td>
</tr>
</table>
</div>
- </P>
+ </p>
- <P>The following is a list of currently defined header messages:
- </P>
+ <p>The following is a list of currently defined header messages:
+ </p>
<hr>
<h4><a name="NILMessage">Name: NIL</a></h4>
- <P class=item><B>Header Message Type: </B>0x0000
- </P>
- <P class=item><B>Length:</B> varies
- </P>
- <P class=item><B>Status:</B> Optional, may be repeated.
- </P>
- <P class=item><B>Purpose and Description:</B> The NIL message is used to indicate a
+ <p class="item"><b>Header Message Type: </b>0x0000
+ </p>
+ <p class="item"><b>Length:</b> varies
+ </p>
+ <p class="item"><b>Status:</b> Optional, may be repeated.
+ </p>
+ <p class="item"><b>Purpose and Description:</b> The NIL message is used to indicate a
message which is to be ignored when reading the header messages for a
data object. [Possibly one which has been deleted for some reason.]
- </P>
- <P class=item><B>Format of Data:</B> Unspecified.
- </P>
+ </p>
+ <p class="item"><b>Format of Data:</b> Unspecified.
+ </p>
<hr>
<h4><a name="DataspaceMessage">Name: Dataspace</a></h4>
- <P class=item><B>Header Message Type: </B>0x0001
- </P>
- <P class=item><B>Length:</B> Varies according to the number of dimensions,
+ <p class="item"><b>Header Message Type: </b>0x0001
+ </p>
+ <p class="item"><b>Length:</b> Varies according to the number of dimensions,
as described in the following table.
- </P>
- <P class=item><B>Status:</B> Required for dataset objects, may not be
+ </p>
+ <p class="item"><b>Status:</b> Required for dataset objects, may not be
repeated.
- </P>
- <P class=item><B>Description:</B> The dataspace message describes the
+ </p>
+ <p class="item"><b>Description:</b> The dataspace message describes the
number of dimensions (i.e. "rank") and size of each dimension that the
data object has. This message is only used for datasets which have a
simple, rectilinear, array-like layout; datasets requiring a more
complex layout are not yet supported.
- </P>
+ </p>
- <P class=item><B>Format of Data:</B>
+ <p class="item"><b>Format of Data:</b>
<br>
<div align=center>
<table class=format>
@@ -7529,9 +7532,9 @@ TABLE.list TD { border:none; }
<table class=note>
<tr><td>
- (Items marked with an 'L' the above table are
+ (Items marked with an ‘L’ the above table are
<br>
- of the size specified in "Size of Lengths.")
+ of the size specified in “Size of Lengths.”)
</td></tr>
</table>
</div>
@@ -7547,81 +7550,81 @@ TABLE.list TD { border:none; }
<tr>
<td>Version</td>
<td>
- <P>This value is used to determine the format of the
+ <p>This value is used to determine the format of the
Dataspace Message. When the format of the
information in the message is changed, the version number
is incremented and can be used to determine how the
information in the object header is formatted. This
document describes version one (1) (there was no version
zero (0)).
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Dimensionality</td>
<td>
- <P>This value is the number of dimensions that the data
+ <p>This value is the number of dimensions that the data
object has.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Flags</td>
<td>
- <P>This field is used to store flags to indicate the
+ <p>This field is used to store flags to indicate the
presence of parts of this message. Bit 0 (the least
significant bit) is used to indicate that maximum
dimensions are present. Bit 1 is used to indicate that
permutation indices are present.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Dimension #n Size</td>
<td>
- <P>This value is the current size of the dimension of the
+ <p>This value is the current size of the dimension of the
data as stored in the file. The first dimension stored in
the list of dimensions is the slowest changing dimension
and the last dimension stored is the fastest changing
dimension.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Dimension #n Maximum Size</td>
<td>
- <P>This value is the maximum size of the dimension of the
+ <p>This value is the maximum size of the dimension of the
data as stored in the file. This value may be the special
- "<A href="#UnlimitedDim">unlimited</A>" size which indicates
+ "<a href="#UnlimitedDim">unlimited</a>" size which indicates
that the data may expand along this dimension indefinitely.
If these values are not stored, the maximum size of each
dimension is assumed to be the dimension's current size.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Permutation Index #n</td>
<td>
- <P>This value is the index permutation used to map
+ <p>This value is the index permutation used to map
each dimension from the canonical representation to an
alternate axis for each dimension. If these values are
not stored, the first dimension stored in the list of
dimensions is the slowest changing dimension and the last
dimension stored is the fastest changing dimension.
- </P>
+ </p>
</td>
</tr>
</table>
</div>
- </P>
+ </p>
- <P>Version 2 of the dataspace message dropped the optional permutation
+ <p>Version 2 of the dataspace message dropped the optional permutation
index value support, as it was never implemented in the HDF5 library:
<div align=center>
@@ -7660,9 +7663,9 @@ TABLE.list TD { border:none; }
<table class=note>
<tr><td>
- (Items marked with an 'L' the above table are
+ (Items marked with an ‘L’ the above table are
<br>
- of the size specified in "Size of Lengths.")
+ of the size specified in “Size of Lengths.”)
</td></tr>
</table>
</div>
@@ -7678,36 +7681,36 @@ TABLE.list TD { border:none; }
<tr>
<td>Version</td>
<td>
- <P>This value is used to determine the format of the
+ <p>This value is used to determine the format of the
Dataspace Message. This field should be '2' for version 2
format messages.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Dimensionality</td>
<td>
- <P>This value is the number of dimensions that the data object has.
- </P>
+ <p>This value is the number of dimensions that the data object has.
+ </p>
</td>
</tr>
<tr>
<td>Flags</td>
<td>
- <P>This field is used to store flags to indicate the
+ <p>This field is used to store flags to indicate the
presence of parts of this message. Bit 0 (the least
significant bit) is used to indicate that maximum
dimensions are present.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Type</td>
<td>
- <P>This field indicates the type of the dataspace:
+ <p>This field indicates the type of the dataspace:
<table class=list>
<tr>
<th width="30%">Value</th>
@@ -7739,32 +7742,32 @@ TABLE.list TD { border:none; }
<tr>
<td>Dimension #n Size</td>
<td>
- <P>This value is the current size of the dimension of the
+ <p>This value is the current size of the dimension of the
data as stored in the file. The first dimension stored in
the list of dimensions is the slowest changing dimension
and the last dimension stored is the fastest changing
dimension.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Dimension #n Maximum Size</td>
<td>
- <P>This value is the maximum size of the dimension of the
+ <p>This value is the maximum size of the dimension of the
data as stored in the file. This value may be the special
- "<A href="#UnlimitedDim">unlimited</A>" size which indicates
+ "<a href="#UnlimitedDim">unlimited</a>" size which indicates
that the data may expand along this dimension indefinitely.
If these values are not stored, the maximum size of each
dimension is assumed to be the dimension's current size.
- </P>
+ </p>
</td>
</tr>
</table>
</div>
- </P>
+ </p>
<!--
<hr>
@@ -7791,7 +7794,7 @@ TABLE.list TD { border:none; }
<center>
<table border cellpadding=4 width="80%">
<caption align=bottom>
- <B>HDF5 Dataspace Message Layout</B>
+ <b>HDF5 Dataspace Message Layout</b>
</caption>
<tr align=center>
@@ -7818,11 +7821,11 @@ TABLE.list TD { border:none; }
structured/unstructured and regular/irregular. <br>
The mesh type value is broken up as follows: <br>
- <P>
+ <p>
<center>
<table border cellpadding=4 width="80%">
<caption align=bottom>
- <B>HDF5 Mesh-type Layout</B>
+ <b>HDF5 Mesh-type Layout</b>
</caption>
<tr align=center>
@@ -7908,11 +7911,11 @@ TABLE.list TD { border:none; }
<dt>Logical Dimensionality: (unsigned 32-bit integer)
<dd>This value is the number of dimensions that the dataset occupies.
- <P>
+ <p>
<center>
<table border cellpadding=4 width="80%">
<caption align=bottom>
- <B>HDF5 Dataspace Embedded Dimensionality Information</B>
+ <b>HDF5 Dataspace Embedded Dimensionality Information</b>
</caption>
<tr align=center>
@@ -7957,11 +7960,11 @@ TABLE.list TD { border:none; }
dataset dataspace
within the embedded dataspace]<br>
- <P>
+ <p>
<center>
<table border cellpadding=4 width="80%">
<caption align=bottom>
- <B>HDF5 Dataspace Structured/Regular Grid Information</B>
+ <b>HDF5 Dataspace Structured/Regular Grid Information</b>
</caption>
<tr align=center>
@@ -8005,11 +8008,11 @@ TABLE.list TD { border:none; }
indefinitely.
</dl>
</dl>
- <P>
+ <p>
<center>
<table border cellpadding=4 width="80%">
<caption align=bottom>
- <B>HDF5 Dataspace Structured/Irregular Grid Information</B>
+ <b>HDF5 Dataspace Structured/Irregular Grid Information</b>
</caption>
<tr align=center>
@@ -8035,11 +8038,11 @@ TABLE.list TD { border:none; }
</table>
</center>
- <P>
+ <p>
<center>
<table border cellpadding=4 width="80%">
<caption align=bottom>
- <B>HDF5 Dataspace Unstructured Grid Information</B>
+ <b>HDF5 Dataspace Unstructured Grid Information</b>
</caption>
<tr align=center>
@@ -8061,18 +8064,18 @@ TABLE.list TD { border:none; }
<hr>
<h4><a name="LinkInfoMessage">Name: Link Info</a></h4>
- <P class=item><B>Header Message Type:</B> 0x002 </P>
- <P class=item><B>Length:</B> varies </P>
- <P class=item><B>Status:</B> Optional, may not be repeated. </P>
+ <p class="item"><b>Header Message Type:</b> 0x002 </p>
+ <p class="item"><b>Length:</b> varies </p>
+ <p class="item"><b>Status:</b> Optional, may not be repeated. </p>
- <P class=item><B>Description:</B>This message tracks variable information
+ <p class="item"><b>Description:</b>This message tracks variable information
about the current state of the links for a "new style" group's behavior.
Variable information
will be stored in this message and constant information will be stored
- in the <a href="#GroupInfoMessage">Group Info</a> message.</P>
- </P>
+ in the <a href="#GroupInfoMessage">Group Info</a> message.</p>
+ </p>
- <P class=item><B>Format of Data:</B>
+ <p class="item"><b>Format of Data:</b>
<div align=center>
<table class=format>
<caption>
@@ -8122,16 +8125,16 @@ TABLE.list TD { border:none; }
<tr>
<td>Version</td>
<td>
- <P>The version number for this message. This document describes
+ <p>The version number for this message. This document describes
version 0.
</td>
</tr>
<tr>
<td>Flags</td>
- <td><P>This field determines various optional aspects of the link
+ <td><p>This field determines various optional aspects of the link
info message:
- </P>
+ </p>
<table class=list>
<tr>
<th width="30%">Bit</th>
@@ -8153,55 +8156,55 @@ TABLE.list TD { border:none; }
<td>Reserved</td>
</tr>
</table>
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Maximum Creation Index</td>
- <td><P>This 64-bit value is the maximum creation order index value
- stored for a link in this group.</P>
- <P>This field is present if bit 0 of <em>flags</em> is set.</P>
+ <td><p>This 64-bit value is the maximum creation order index value
+ stored for a link in this group.</p>
+ <p>This field is present if bit 0 of <em>flags</em> is set.</p>
</td>
</tr>
<tr>
<td>Fractal Heap Address</td>
<td>
- <P>
+ <p>
This is the address of the fractal heap to store dense links.
Each link stored in the fractal heap is stored as a
<a href="#LinkMessage">Link Message</a>.
- </P>
- <P>
+ </p>
+ <p>
If there are no links in the group, or the group's links
are stored "compactly" (as object header messages), this
- value will be the <A href="#UndefinedAddress">undefined
- address</A>.
- </P>
+ value will be the <a href="#UndefinedAddress">undefined
+ address</a>.
+ </p>
</td>
</tr>
<tr>
<td>Address of v2 B-tree for Name Index</td>
- <td><P>This is the address of the version 2 B-tree to index names of links.</P>
- <P>If there are no links in the group, or the group's links
+ <td><p>This is the address of the version 2 B-tree to index names of links.</p>
+ <p>If there are no links in the group, or the group's links
are stored "compactly" (as object header messages), this
- value will be the <A href="#UndefinedAddress">undefined
- address</A>.
- </P>
+ value will be the <a href="#UndefinedAddress">undefined
+ address</a>.
+ </p>
</td>
</tr>
<tr>
<td>Address of v2 B-tree for Creation Order Index</td>
- <td><P>This is the address of the version 2 B-tree to index creation order of links.</P>
- <P>If there are no links in the group, or the group's links
+ <td><p>This is the address of the version 2 B-tree to index creation order of links.</p>
+ <p>If there are no links in the group, or the group's links
are stored "compactly" (as object header messages), this
- value will be the <A href="#UndefinedAddress">undefined
- address</A>.
- </P>
- <P>This field exists if bit 1 of <em>flags</em> is set.
+ value will be the <a href="#UndefinedAddress">undefined
+ address</a>.
+ </p>
+ <p>This field exists if bit 1 of <em>flags</em> is set.
</td>
</tr>
@@ -8212,30 +8215,30 @@ TABLE.list TD { border:none; }
<hr>
<h4><a name="DatatypeMessage">Name: Datatype</a></h4>
- <P class=item><B>Header Message Type:</B> 0x0003
- </P>
- <P class=item><B>Length:</B> variable
- </P>
- <P class=item><B>Status:</B> Required for dataset or named datatype objects,
+ <p class="item"><b>Header Message Type:</b> 0x0003
+ </p>
+ <p class="item"><b>Length:</b> variable
+ </p>
+ <p class="item"><b>Status:</b> Required for dataset or named datatype objects,
may not be repeated.
- </P>
+ </p>
- <P class=item><B>Description:</B> The datatype message defines the datatype
+ <p class="item"><b>Description:</b> The datatype message defines the datatype
for each element of a dataset or a common datatype for sharing between
multiple datasets. A datatype can describe an atomic type
like a fixed- or floating-point type or more complex types like a C
struct (compound datatype), array (array datatype) or C++ vector
(variable-length datatype).
- </P>
+ </p>
<P class=item2>Datatype messages that are part of a dataset object,
do not describe how elements are related to one another, the dataspace
message is used for that purpose. Datatype messages that are part of
a named datatype message describe a common datatype that can be
shared by multiple datasets in the file.
- </P>
+ </p>
- <P class=item><B>Format of Data:</B>
+ <p class="item"><b>Format of Data:</b>
<br>
<div align=center>
<table class=format>
@@ -8278,12 +8281,12 @@ TABLE.list TD { border:none; }
<tr>
<td>Class and Version</td>
<td>
- <P>The version of the datatype message and the datatype's class
+ <p>The version of the datatype message and the datatype's class
information are packed together in this field. The version
number is packed in the top 4 bits of the field and the class
is contained in the bottom 4 bits.
- </P>
- <P>The version number information is used for changes in the
+ </p>
+ <p>The version number information is used for changes in the
format of the datatype message and is described here:
<table class=list>
<tr>
@@ -8317,8 +8320,8 @@ TABLE.list TD { border:none; }
</td>
</tr>
</table>
- </P>
- <P>The class of the datatype determines the format for the class
+ </p>
+ <p>The class of the datatype determines the format for the class
bit field and properties portion of the datatype message, which
are described below. The
following classes are currently defined:
@@ -8383,44 +8386,44 @@ TABLE.list TD { border:none; }
<td>Array</td>
</tr>
</table>
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Class Bit Fields</td>
<td>
- <P>The information in these bit fields is specific to each datatype
+ <p>The information in these bit fields is specific to each datatype
class and is described below. All bits not defined for a
datatype class are set to zero.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Size</td>
<td>
- <P>The size of a datatype element in bytes.
- </P>
+ <p>The size of a datatype element in bytes.
+ </p>
</td>
</tr>
<tr>
<td>Properties</td>
<td>
- <P>This variable-sized sequence of bytes encodes information
+ <p>This variable-sized sequence of bytes encodes information
specific to each datatype class and is described for each class
below. If there is no property information specified for a
datatype class, the size of this field is zero bytes.
- </P>
+ </p>
</td>
</tr>
</table>
</div>
- </P>
+ </p>
- <P>Class specific information for Fixed-Point Numbers (Class 0):
+ <p>Class specific information for Fixed-Point Numbers (Class 0):
<br>
<div align=center>
@@ -8493,31 +8496,31 @@ TABLE.list TD { border:none; }
<tr>
<td>Bit Offset</td>
<td>
- <P>The bit offset of the first significant bit of the fixed-point
+ <p>The bit offset of the first significant bit of the fixed-point
value within the datatype. The bit offset specifies the number
of bits "to the right of" the value (which are set to the
lo_pad bit value).
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Bit Precision</td>
<td>
- <P>The number of bits of precision of the fixed-point value
+ <p>The number of bits of precision of the fixed-point value
within the datatype. This value, combined with the datatype
element's size and the Bit Offset field specifies the number
of bits "to the left of" the value (which are set to the
hi_pad bit value).
- </P>
+ </p>
</td>
</tr>
</table>
</div>
- </P>
+ </p>
- <P>Class specific information for Floating-Point Numbers (Class 1):
+ <p>Class specific information for Floating-Point Numbers (Class 1):
<br>
<div align=center>
@@ -8677,69 +8680,69 @@ TABLE.list TD { border:none; }
<tr>
<td>Bit Offset</td>
<td>
- <P>The bit offset of the first significant bit of the floating-point
+ <p>The bit offset of the first significant bit of the floating-point
value within the datatype. The bit offset specifies the number
of bits "to the right of" the value.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Bit Precision</td>
<td>
- <P>The number of bits of precision of the floating-point value
+ <p>The number of bits of precision of the floating-point value
within the datatype.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Exponent Location</td>
<td>
- <P>The bit position of the exponent field. Bits are numbered with
+ <p>The bit position of the exponent field. Bits are numbered with
the least significant bit number zero.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Exponent Size</td>
<td>
- <P>The size of the exponent field in bits.
- </P>
+ <p>The size of the exponent field in bits.
+ </p>
</td>
</tr>
<tr>
<td>Mantissa Location</td>
<td>
- <P>The bit position of the mantissa field. Bits are numbered with
+ <p>The bit position of the mantissa field. Bits are numbered with
the least significant bit number zero.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Mantissa Size</td>
<td>
- <P>The size of the mantissa field in bits.
- </P>
+ <p>The size of the mantissa field in bits.
+ </p>
</td>
</tr>
<tr>
<td>Exponent Bias</td>
<td>
- <P>The bias of the exponent field.
- </P>
+ <p>The bias of the exponent field.
+ </p>
</td>
</tr>
</table>
</div>
- </P>
+ </p>
- <P>Class specific information for Time (Class 2):
+ <p>Class specific information for Time (Class 2):
<br>
<div align=center>
@@ -8795,16 +8798,16 @@ TABLE.list TD { border:none; }
<tr>
<td>Bit Precision</td>
<td>
- <P>The number of bits of precision of the time value.
- </P>
+ <p>The number of bits of precision of the time value.
+ </p>
</td>
</tr>
</table>
</div>
- </P>
+ </p>
- <P>Class specific information for Strings (Class 3):
+ <p>Class specific information for Strings (Class 3):
<br>
<div align=center>
@@ -8904,11 +8907,11 @@ TABLE.list TD { border:none; }
</table>
</div>
- <P>There are no properties defined for the string class.
- </P>
- </P>
+ <p>There are no properties defined for the string class.
+ </p>
+ </p>
- <P>Class specific information for Bitfields (Class 4):
+ <p>Class specific information for Bitfields (Class 4):
<br>
<div align=center>
@@ -8975,26 +8978,26 @@ TABLE.list TD { border:none; }
<tr>
<td>Bit Offset</td>
<td>
- <P>The bit offset of the first significant bit of the bitfield
+ <p>The bit offset of the first significant bit of the bitfield
within the datatype. The bit offset specifies the number
of bits "to the right of" the value.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Bit Precision</td>
<td>
- <P>The number of bits of precision of the bitfield
+ <p>The number of bits of precision of the bitfield
within the datatype.
- </P>
+ </p>
</td>
</tr>
</table>
</div>
- </P>
+ </p>
- <P>Class specific information for Opaque (Class 5):
+ <p>Class specific information for Opaque (Class 5):
<br>
<div align=center>
@@ -9052,16 +9055,16 @@ TABLE.list TD { border:none; }
<tr>
<td>ASCII Tag</td>
<td>
- <P>This NUL-terminated string provides a description for the
+ <p>This NUL-terminated string provides a description for the
opaque type. It is NUL-padded to a multiple of 8 bytes.
- </P>
+ </p>
</td>
</tr>
</table>
</div>
- </P>
+ </p>
- <P>Class specific information for Compound (Class 6):
+ <p>Class specific information for Compound (Class 6):
<br>
<div align=center>
@@ -9089,15 +9092,15 @@ TABLE.list TD { border:none; }
</tr>
</table>
</div>
- </P>
+ </p>
- <P>The Properties field of a compound datatype is a list of the
+ <p>The Properties field of a compound datatype is a list of the
member definitions of the compound datatype. The member
definitions appear one after another with no intervening bytes.
The member types are described with a (recursively) encoded datatype
message.
- <P>Note that the property descriptions are different for different
+ <p>Note that the property descriptions are different for different
versions of the datatype version. Additionally note that the version
0 datatype encoding is deprecated and has been replaced with later
encodings in versions of the HDF5 library from the 1.4 release onward.
@@ -9171,59 +9174,59 @@ TABLE.list TD { border:none; }
<tr>
<td>Name</td>
<td>
- <P>This NUL-terminated string provides a description for the
+ <p>This NUL-terminated string provides a description for the
opaque type. It is NUL-padded to a multiple of 8 bytes.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Byte Offset of Member</td>
<td>
- <P>This is the byte offset of the member within the datatype.
- </P>
+ <p>This is the byte offset of the member within the datatype.
+ </p>
</td>
</tr>
<tr>
<td>Dimensionality</td>
<td>
- <P>If set to zero, this field indicates a scalar member. If set
+ <p>If set to zero, this field indicates a scalar member. If set
to a value greater than zero, this field indicates that the
member is an array of values. For array members, the size of
the array is indicated by the 'Size of Dimension n' field in
this message.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Dimension Permutation</td>
<td>
- <P>This field was intended to allow an array field to have
+ <p>This field was intended to allow an array field to have
it's dimensions permuted, but this was never implemented.
This field should always be set to zero.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Dimension #n Size</td>
<td>
- <P>This field is the size of a dimension of the array field as
+ <p>This field is the size of a dimension of the array field as
stored in the file. The first dimension stored in the list of
dimensions is the slowest changing dimension and the last
dimension stored is the fastest changing dimension.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Member Type Message</td>
<td>
- <P>This field is a datatype message describing the datatype of
+ <p>This field is a datatype message describing the datatype of
the member.
- </P>
+ </p>
</td>
</tr>
@@ -9270,32 +9273,32 @@ TABLE.list TD { border:none; }
<tr>
<td>Name</td>
<td>
- <P>This NUL-terminated string provides a description for the
+ <p>This NUL-terminated string provides a description for the
opaque type. It is NUL-padded to a multiple of 8 bytes.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Byte Offset of Member</td>
<td>
- <P>This is the byte offset of the member within the datatype.
- </P>
+ <p>This is the byte offset of the member within the datatype.
+ </p>
</td>
</tr>
<tr>
<td>Member Type Message</td>
<td>
- <P>This field is a datatype message describing the datatype of
+ <p>This field is a datatype message describing the datatype of
the member.
- </P>
+ </p>
</td>
</tr>
</table>
</div>
- </P>
+ </p>
<br>
<div align=center>
@@ -9337,39 +9340,39 @@ TABLE.list TD { border:none; }
<tr>
<td>Name</td>
<td>
- <P>This NUL-terminated string provides a description for the
+ <p>This NUL-terminated string provides a description for the
opaque type. It is <em>not</em> NUL-padded to a multiple of
8 bytes.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Byte Offset of Member</td>
<td>
- <P>This is the byte offset of the member within the datatype. The
+ <p>This is the byte offset of the member within the datatype. The
field size is the minimum # of bytes necessary, based on size
of the datatype element. For example, a datatype element size
of less than 256 bytes uses a 1 byte length, a datatype element
size of 256-65535 bytes uses a 2 byte length, etc.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Member Type Message</td>
<td>
- <P>This field is a datatype message describing the datatype of
+ <p>This field is a datatype message describing the datatype of
the member.
- </P>
+ </p>
</td>
</tr>
</table>
</div>
- </P>
+ </p>
- <P>Class specific information for Reference (Class 7):
+ <p>Class specific information for Reference (Class 7):
<br>
<div align=center>
@@ -9425,11 +9428,11 @@ TABLE.list TD { border:none; }
</table>
</div>
- <P>There are no properties defined for the reference class.
- </P>
- </P>
+ <p>There are no properties defined for the reference class.
+ </p>
+ </p>
- <P>Class specific information for Enumeration (Class 8):
+ <p>Class specific information for Enumeration (Class 8):
<br>
<div align=center>
@@ -9496,30 +9499,30 @@ TABLE.list TD { border:none; }
<tr>
<td>Base Type</td>
<td>
- <P>Each enumeration type is based on some parent type, usually an
+ <p>Each enumeration type is based on some parent type, usually an
integer. The information for that parent type is described
recursively by this field.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Names</td>
<td>
- <P>The name for each name/value pair. Each name is stored as a null
+ <p>The name for each name/value pair. Each name is stored as a null
terminated ASCII string in a multiple of eight bytes. The names
are in no particular order.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Values</td>
<td>
- <P>The list of values in the same order as the names. The values
+ <p>The list of values in the same order as the names. The values
are packed (no inter-value padding) and the size of each value
is determined by the parent type.
- </P>
+ </p>
</td>
</tr>
@@ -9566,39 +9569,39 @@ TABLE.list TD { border:none; }
<tr>
<td>Base Type</td>
<td>
- <P>Each enumeration type is based on some parent type, usually an
+ <p>Each enumeration type is based on some parent type, usually an
integer. The information for that parent type is described
recursively by this field.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Names</td>
<td>
- <P>The name for each name/value pair. Each name is stored as a null
+ <p>The name for each name/value pair. Each name is stored as a null
terminated ASCII string, <em>not</em> padded to a multiple of
eight bytes. The names are in no particular order.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Values</td>
<td>
- <P>The list of values in the same order as the names. The values
+ <p>The list of values in the same order as the names. The values
are packed (no inter-value padding) and the size of each value
is determined by the parent type.
- </P>
+ </p>
</td>
</tr>
</table>
</div>
- </P>
+ </p>
- <P>Class specific information for Variable-Length (Class 9):
+ <p>Class specific information for Variable-Length (Class 9):
<br>
<div align=center>
@@ -9776,29 +9779,29 @@ TABLE.list TD { border:none; }
<tr>
<td>Base Type</td>
<td>
- <P>Each variable-length type is based on some parent type. The
+ <p>Each variable-length type is based on some parent type. The
information for that parent type is described recursively by
this field.
- </P>
+ </p>
</td>
</tr>
</table>
</div>
- </P>
+ </p>
- <P>Class specific information for Array (Class 10):
+ <p>Class specific information for Array (Class 10):
- <P>There are no bit fields defined for the array class.
- </P>
+ <p>There are no bit fields defined for the array class.
+ </p>
- <P>Note that the dimension information defined in the property for this
+ <p>Note that the dimension information defined in the property for this
datatype class is independent of dataspace information for a dataset.
The dimension information here describes the dimensionality of the
information within a data element (or a component of an element, if the
array datatype is nested within another datatype) and the dataspace for a
dataset describes the size and locations of the elements in a dataset.
- </P>
+ </p>
<br>
<div align=center>
@@ -9857,43 +9860,43 @@ TABLE.list TD { border:none; }
<tr>
<td>Dimensionality</td>
<td>
- <P>This value is the number of dimensions that the array has.
- </P>
+ <p>This value is the number of dimensions that the array has.
+ </p>
</td>
</tr>
<tr>
<td>Dimension #n Size</td>
<td>
- <P>This value is the size of the dimension of the array
+ <p>This value is the size of the dimension of the array
as stored in the file. The first dimension stored in
the list of dimensions is the slowest changing dimension
and the last dimension stored is the fastest changing
dimension.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Permutation Index #n</td>
<td>
- <P>This value is the index permutation used to map
+ <p>This value is the index permutation used to map
each dimension from the canonical representation to an
alternate axis for each dimension. Currently, dimension
permutations are not supported and these indices should be set
to the index position minus one (i.e. the first dimension should
be set to 0, the second dimension should be set to 1, etc.)
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Base Type</td>
<td>
- <P>Each array type is based on some parent type. The
+ <p>Each array type is based on some parent type. The
information for that parent type is described recursively by
this field.
- </P>
+ </p>
</td>
</tr>
@@ -9947,54 +9950,54 @@ TABLE.list TD { border:none; }
<tr>
<td>Dimensionality</td>
<td>
- <P>This value is the number of dimensions that the array has.
- </P>
+ <p>This value is the number of dimensions that the array has.
+ </p>
</td>
</tr>
<tr>
<td>Dimension #n Size</td>
<td>
- <P>This value is the size of the dimension of the array
+ <p>This value is the size of the dimension of the array
as stored in the file. The first dimension stored in
the list of dimensions is the slowest changing dimension
and the last dimension stored is the fastest changing
dimension.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Base Type</td>
<td>
- <P>Each array type is based on some parent type. The
+ <p>Each array type is based on some parent type. The
information for that parent type is described recursively by
this field.
- </P>
+ </p>
</td>
</tr>
</table>
</div>
- </P>
+ </p>
<hr>
<h4><a name="OldFillValueMessage">Name: Data Storage - Fill Value (Old)</a></h4>
- <P class=item><B>Header Message Type:</B> 0x0004
- </P>
- <P class=item><B>Length:</B> varies
- </P>
- <P class=item><B>Status:</B> Optional, may not be repeated.
- </P>
+ <p class="item"><b>Header Message Type:</b> 0x0004
+ </p>
+ <p class="item"><b>Length:</b> varies
+ </p>
+ <p class="item"><b>Status:</b> Optional, may not be repeated.
+ </p>
- <P class=item><B>Description:</B> The fill value message stores a single
+ <p class="item"><b>Description:</b> The fill value message stores a single
data value which is returned to the application when an uninitialized
data element is read from a dataset. The fill value is interpreted
with the same datatype as the dataset. If no fill value message is
present then a fill value of all zero bytes is assumed.
- </P>
+ </p>
<P class=item2>This fill value message is deprecated in favor of the "new"
fill value message (Message Type 0x0005) and is only written to the
@@ -10002,9 +10005,9 @@ TABLE.list TD { border:none; }
the 1.6.0 version. Additionally, it only appears for datasets with a
user defined fill value (as opposed to the library default fill value
or an explicitly set "undefined" fill value).
- </P>
+ </p>
- <P class=item><B>Format of Data:</B>
+ <p class="item"><b>Format of Data:</b>
<br>
<div align=center>
<table class=format>
@@ -10040,40 +10043,40 @@ TABLE.list TD { border:none; }
<tr>
<td>Size</td>
<td>
- <P>This is the size of the Fill Value field in bytes.
- </P>
+ <p>This is the size of the Fill Value field in bytes.
+ </p>
</td>
</tr>
<tr>
<td>Fill Value</td>
<td>
- <P>The fill value. The bytes of the fill value are interpreted
+ <p>The fill value. The bytes of the fill value are interpreted
using the same datatype as for the dataset.
- </P>
+ </p>
</td>
</tr>
</table>
</div>
- </P>
+ </p>
<hr>
<h4><a name="FillValueMessage">Name: Data Storage - Fill Value </a></h4>
- <P class=item><B>Header Message Type:</B> 0x0005
- </P>
- <P class=item><B>Length:</B> varies
- </P>
- <P class=item><B>Status:</B> Required for dataset objects, may not be repeated.
- </P>
+ <p class="item"><b>Header Message Type:</b> 0x0005
+ </p>
+ <p class="item"><b>Length:</b> varies
+ </p>
+ <p class="item"><b>Status:</b> Required for dataset objects, may not be repeated.
+ </p>
- <P class=item><B>Description:</B> The fill value message stores a single
+ <p class="item"><b>Description:</b> The fill value message stores a single
data value which is returned to the application when an uninitialized
data element is read from a dataset. The fill value is interpreted
with the same datatype as the dataset.
- </P>
+ </p>
- <P class=item><B>Format of Data:</B>
+ <p class="item"><b>Format of Data:</b>
<br>
<div align=center>
<table class=format>
@@ -10116,7 +10119,7 @@ TABLE.list TD { border:none; }
<tr>
<td>Version</td>
<td>
- <P>The version number information is used for changes in the
+ <p>The version number information is used for changes in the
format of the fill value message and is described here:
<table class=list>
<tr>
@@ -10148,14 +10151,14 @@ TABLE.list TD { border:none; }
</td>
</tr>
</table>
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Space Allocation Time</td>
<td>
- <P>When the storage space for the dataset's raw data will be
+ <p>When the storage space for the dataset's raw data will be
allocated. The allowed values are:
<table class=list>
<tr>
@@ -10192,14 +10195,14 @@ TABLE.list TD { border:none; }
</td>
</tr>
</table>
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Fill Value Write Time</td>
<td>
- <P>At the time that storage space for the dataset's raw data is
+ <p>At the time that storage space for the dataset's raw data is
allocated, this value indicates whether the fill value should
be written to the raw data storage elements. The allowed values
are:
@@ -10232,40 +10235,40 @@ TABLE.list TD { border:none; }
</td>
</tr>
</table>
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Fill Value Defined</td>
<td>
- <P>This value indicates if a fill value is defined for this
+ <p>This value indicates if a fill value is defined for this
dataset. If this value is 0, the fill value is undefined.
If this value is 1, a fill value is defined for this dataset.
For version 2 or later of the fill value message, this value
controls the presence of the Size and Fill Value fields.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Size</td>
<td>
- <P>This is the size of the Fill Value field in bytes. This field
+ <p>This is the size of the Fill Value field in bytes. This field
is not present if the Version field is >1 and the Fill Value
Defined field is set to 0.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Fill Value</td>
<td>
- <P>The fill value. The bytes of the fill value are interpreted
+ <p>The fill value. The bytes of the fill value are interpreted
using the same datatype as for the dataset. This field is
not present if the Version field is >1 and the Fill Value
Defined field is set to 0.
- </P>
+ </p>
</td>
</tr>
</table>
@@ -10312,7 +10315,7 @@ TABLE.list TD { border:none; }
<tr>
<td>Version</td>
<td>
- <P>The version number information is used for changes in the
+ <p>The version number information is used for changes in the
format of the fill value message and is described here:
<table class=list>
<tr>
@@ -10344,14 +10347,14 @@ TABLE.list TD { border:none; }
</td>
</tr>
</table>
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Flags</td>
<td>
- <P>When the storage space for the dataset's raw data will be
+ <p>When the storage space for the dataset's raw data will be
allocated. The allowed values are:
<table class=list>
<tr>
@@ -10391,52 +10394,52 @@ TABLE.list TD { border:none; }
</td>
</tr>
</table>
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Size</td>
<td>
- <P>This is the size of the Fill Value field in bytes. This field
+ <p>This is the size of the Fill Value field in bytes. This field
is not present if the Version field is >1 and the Fill Value
Defined flag is set to 0.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Fill Value</td>
<td>
- <P>The fill value. The bytes of the fill value are interpreted
+ <p>The fill value. The bytes of the fill value are interpreted
using the same datatype as for the dataset. This field is
not present if the Version field is >1 and the Fill Value
Defined flag is set to 0.
- </P>
+ </p>
</td>
</tr>
</table>
</div>
- </P>
+ </p>
<hr>
<h4><a name="LinkMessage">Name: Link Message</a></h4>
- <P class=item><B>Header Message Type:</B> 0x0006</P>
- <P class=item><B>Length:</B> varies </P>
- <P class=item><B>Status:</B> Optional, may be repeated. </P>
+ <p class="item"><b>Header Message Type:</b> 0x0006</p>
+ <p class="item"><b>Length:</b> varies </p>
+ <p class="item"><b>Status:</b> Optional, may be repeated. </p>
- <P class=item><B>Description:</B>This message encodes the information
+ <p class="item"><b>Description:</b>This message encodes the information
for a link in a group's object header, when the group is storing its
links "compactly", or in the group's fractal heap, when the group is
storing its links "densely".
- </P>
- <P>
+ </p>
+ <p>
A group is storing its links compactly when the fractal heap address in
the <em><a href="#LinkInfoMessage">Link Info Message</a></em>
is set to the "undefined address" value.
- </P>
+ </p>
- <P class=item><B>Format of Data:</B>
+ <p class="item"><b>Format of Data:</b>
<div align=center>
<table class=format>
<caption>
@@ -10483,13 +10486,13 @@ TABLE.list TD { border:none; }
<tr>
<td>Version</td>
- <td><P>The version number for this message. This document describes version 1.</P>
+ <td><p>The version number for this message. This document describes version 1.</p>
</td>
</tr>
<tr>
<td>Flags</td>
- <td><P>This field contains information about the link and controls
+ <td><p>This field contains information about the link and controls
the presence of other fields below.
<table class=list>
<tr>
@@ -10563,13 +10566,13 @@ TABLE.list TD { border:none; }
</td>
</tr>
</table>
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Link type</td>
- <td><P>This is the link class type and can be one of the following
+ <td><p>This is the link class type and can be one of the following
values:
<table class=list>
<tr>
@@ -10603,25 +10606,25 @@ TABLE.list TD { border:none; }
</td>
</tr>
</table>
- </P>
- <P>This field is present if bit 3 of <em>Flags</em> is set.</P>
+ </p>
+ <p>This field is present if bit 3 of <em>Flags</em> is set.</p>
</td>
</tr>
<tr>
<td>Creation Order</td>
- <td><P>This 64-bit value is an index of the link's creation time within
+ <td><p>This 64-bit value is an index of the link's creation time within
the group. Values start at 0 when the group is created an increment
by one for each link added to the group. Removing a link from a
group does not change existing links' creation order field.
- </P>
- <P>This field is present if bit 2 of <em>Flags</em> is set.</P>
+ </p>
+ <p>This field is present if bit 2 of <em>Flags</em> is set.</p>
</td>
</tr>
<tr>
<td>Link Name Character Set</td>
- <td><P>This is the character set for encoding the link's name:
+ <td><p>This is the character set for encoding the link's name:
<table width=100% class=list>
<tr>
<th width="30%">Value</th>
@@ -10641,28 +10644,28 @@ TABLE.list TD { border:none; }
</td>
</tr>
</table>
- </P>
- <P>This field is present if bit 4 of <em>Flags</em> is set.</P>
+ </p>
+ <p>This field is present if bit 4 of <em>Flags</em> is set.</p>
</td>
</tr>
<tr>
<td>Length of link name</td>
- <td><P>This is the length of the link's name. The size of this field
- depends on bits 0 and 1 of <em>Flags</em>.</P>
+ <td><p>This is the length of the link's name. The size of this field
+ depends on bits 0 and 1 of <em>Flags</em>.</p>
</td>
</tr>
<tr>
<td>Link name</td>
- <td><P>This is the name of the link, non-NULL terminated.</P>
+ <td><p>This is the name of the link, non-NULL terminated.</p>
</td>
</tr>
<tr>
<td>Link information</td>
- <td><P>The format of this field depends on the <em>link type</em>.</P>
- <P>For hard links, the field is formatted as follows:
+ <td><p>The format of this field depends on the <em>link type</em>.</p>
+ <p>For hard links, the field is formatted as follows:
<table class=list>
<tr>
<td width=30%><i>Size of Offsets</i> bytes:</td>
@@ -10671,9 +10674,9 @@ TABLE.list TD { border:none; }
</td>
</tr>
</table>
- </P>
+ </p>
- <P>
+ <p>
For soft links, the field is formatted as follows:
<table class=list>
<tr>
@@ -10688,7 +10691,7 @@ TABLE.list TD { border:none; }
</tr>
</table>
- <P>
+ <p>
For external links, the field is formatted as follows:
<table class=list>
<tr>
@@ -10709,7 +10712,7 @@ TABLE.list TD { border:none; }
</tr>
</table>
- <P>
+ <p>
For user-defined links, the field is formatted as follows:
<table class=list>
<tr>
@@ -10730,19 +10733,19 @@ TABLE.list TD { border:none; }
<hr>
<h4><a name="ExternalFileListMessage">Name: Data Storage -
External Data Files</a></h4>
- <P class=item><B>Header Message Type:</B> 0x0007 </P>
- <P class=item><B>Length:</B> varies</P>
- <P class=item><B>Status:</B> Optional, may not be repeated.</P>
+ <p class="item"><b>Header Message Type:</b> 0x0007 </p>
+ <p class="item"><b>Length:</b> varies</p>
+ <p class="item"><b>Status:</b> Optional, may not be repeated.</p>
- <P class=item><B>Purpose and Description:</B> The external data storage
+ <p class="item"><b>Purpose and Description:</b> The external data storage
message indicates that the data for an object is stored outside the HDF5
file. The filename of the object is stored as a Universal
Resource Location (URL) of the actual filename containing the
data. An external file list record also contains the byte offset
of the start of the data within the file and the amount of space
- reserved in the file for that data.</P>
+ reserved in the file for that data.</p>
- <P class=item><B>Format of Data:</B>
+ <p class="item"><b>Format of Data:</b>
<br>
<div align=center>
<table class=format>
@@ -10788,7 +10791,7 @@ TABLE.list TD { border:none; }
<tr>
<td>Version</td>
<td>
- <P>The version number information is used for changes in the format of
+ <p>The version number information is used for changes in the format of
External Data Storage Message and is described here:
<table class=list>
<tr>
@@ -10804,40 +10807,40 @@ TABLE.list TD { border:none; }
<td>The current version used by the library.
</tr>
</table>
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Allocated Slots</td>
<td>
- <P>The total number of slots allocated in the message. Its value must be at least as
+ <p>The total number of slots allocated in the message. Its value must be at least as
large as the value contained in the Used Slots field. (The current library simply
- uses the number of Used Slots for this message)</P>
+ uses the number of Used Slots for this message)</p>
</td>
</tr>
<tr>
<td>Used Slots</td>
<td>
- <P>The number of initial slots which contains valid information.</P>
+ <p>The number of initial slots which contains valid information.</p>
</td>
</tr>
<tr>
<td>Heap Address</td>
<td>
- <P>This is the address of a local heap which contains the names for the external
+ <p>This is the address of a local heap which contains the names for the external
files (The local heap information can be found in Disk Format Level 1D in this
- document). The name at offset zero in the heap is always the empty string.</P>
+ document). The name at offset zero in the heap is always the empty string.</p>
</td>
</tr>
<tr>
<td>Slot Definitions</td>
<td>
- <P>The slot definitions are stored in order according to the array addresses they
- represent.</P>
+ <p>The slot definitions are stored in order according to the array addresses they
+ represent.</p>
</td>
</tr>
@@ -10883,7 +10886,7 @@ TABLE.list TD { border:none; }
<tr>
<td>Name Offset in Local Heap</td>
<td>
- <P>The byte offset within the local name heap for the name
+ <p>The byte offset within the local name heap for the name
of the file. File names are stored as a URL which has a
protocol name, a host name, a port number, and a file
name:
@@ -10898,45 +10901,45 @@ TABLE.list TD { border:none; }
it is relative to the application's current working
directory (the use of relative names is not
recommended).
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Offset in External Data File</td>
<td>
- <P>This is the byte offset to the start of the data in the
+ <p>This is the byte offset to the start of the data in the
specified file. For files that contain data for a single
- dataset this will usually be zero.</P>
+ dataset this will usually be zero.</p>
</td>
</tr>
<tr>
<td>Data Size in External File</td>
<td>
- <P>This is the total number of bytes reserved in the
+ <p>This is the total number of bytes reserved in the
specified file for raw data storage. For a file that
contains exactly one complete dataset which is not
extendable, the size will usually be the exact size of the
dataset. However, by making the size larger one allows
HDF5 to extend the dataset. The size can be set to a value
larger than the entire file since HDF5 will read zeros
- past the end of the file without failing.</P>
+ past the end of the file without failing.</p>
</td>
</tr>
</table>
</div>
- </P>
+ </p>
<hr>
<h4><a name="LayoutMessage">Name: Data Storage - Layout</a></h4>
- <P class=item><B>Header Message Type:</B> 0x0008</P>
- <P class=item><B>Length:</B> varies</P>
- <P class=item><B>Status:</B> Required for datasets, may not be repeated.</P>
+ <p class="item"><b>Header Message Type:</b> 0x0008</p>
+ <p class="item"><b>Length:</b> varies</p>
+ <p class="item"><b>Status:</b> Required for datasets, may not be repeated.</p>
- <P class=item><B>Purpose and Description:</B> Data layout describes how the
+ <p class="item"><b>Purpose and Description:</b> Data layout describes how the
elements of a multi-dimensional array are stored in the HDF5 file.
Three types of data layout are supported:
@@ -10961,7 +10964,7 @@ TABLE.list TD { border:none; }
this object header message.
</ol>
- <P class=item><B>Format of Data:</B>
+ <p class="item"><b>Format of Data:</b>
<br>
<div align=center>
<table class=format>
@@ -11032,8 +11035,8 @@ TABLE.list TD { border:none; }
<tr>
<td>Version</td>
<td>
- <P>The version number information is used for changes in the format of the data
- layout message and is described here:</P>
+ <p>The version number information is used for changes in the format of the data
+ layout message and is described here:</p>
<table class=list>
<tr>
<th width="30%">Version</th>
@@ -11062,18 +11065,18 @@ TABLE.list TD { border:none; }
<tr>
<td>Dimensionality</td>
- <td><P>An array has a fixed dimensionality. This field
+ <td><p>An array has a fixed dimensionality. This field
specifies the number of dimension size fields later in the
message. The value stored for chunked storage is 1 greater than
the number of dimensions in the dataset's dataspace (i.e. 2 is
stored for a 1 dimensional dataset, etc).
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Layout Class</td>
- <td><P>The layout class specifies the type of storage for the data
+ <td><p>The layout class specifies the type of storage for the data
and how the other fields of the layout message are to be
interpreted.
<table class=list>
@@ -11100,67 +11103,67 @@ TABLE.list TD { border:none; }
</td>
</tr>
</table>
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Data Address</td>
- <td><P>For contiguous storage, this is the address of the raw
+ <td><p>For contiguous storage, this is the address of the raw
data in the file. For chunked storage this is the address
of the v1 B-tree that is used to look up the addresses of the
chunks. This field is not present for compact storage.
If the version for this message is >1, the address
may have the "undefined address" value, to indicate that
- storage has not yet been allocated for this array.</P>
+ storage has not yet been allocated for this array.</p>
</td>
</tr>
<tr>
<td>Dimension #n Size</td>
- <td><P>For contiguous and compact storage the dimensions define
+ <td><p>For contiguous and compact storage the dimensions define
the entire size of the array while for chunked storage they define
the size of a single chunk. In all cases, they are in units of
array elements (not bytes). The first dimension stored in the list
of dimensions is the slowest changing dimension and the last
dimension stored is the fastest changing dimension.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Dataset Element Size</td>
- <td><P>The size of a dataset element, in bytes. This field is only
+ <td><p>The size of a dataset element, in bytes. This field is only
present for chunked storage.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Compact Data Size</td>
- <td><P>This field is only present for compact data storage.
+ <td><p>This field is only present for compact data storage.
It contains the size of the raw data for the dataset array, in
- bytes.</P>
+ bytes.</p>
</td>
<tr>
<td>Compact Data</td>
- <td><P>This field is only present for compact data storage.
- It contains the raw data for the dataset array.</P>
+ <td><p>This field is only present for compact data storage.
+ It contains the raw data for the dataset array.</p>
</td>
</tr>
</table>
</div>
<br>
- <P>Version 3 of this message re-structured the format into specific
+ <p>Version 3 of this message re-structured the format into specific
properties that are required for each layout class.
<br>
<div align=center>
<table class=format>
<caption>
- <B>Data Layout Message (Version 3)</B>
+ <b>Data Layout Message (Version 3)</b>
</caption>
<tr>
@@ -11193,8 +11196,8 @@ TABLE.list TD { border:none; }
<tr>
<td>Version</td>
<td>
- <P>The version number information is used for changes in the format of layout message
- and is described here:</P>
+ <p>The version number information is used for changes in the format of layout message
+ and is described here:</p>
<table class=list>
<tr>
<th width="30%">Version</th>
@@ -11212,7 +11215,7 @@ TABLE.list TD { border:none; }
<tr>
<td>Layout Class</td>
- <td><P>The layout class specifies the type of storage for the data
+ <td><p>The layout class specifies the type of storage for the data
and how the other fields of the layout message are to be
interpreted.
<table class=list>
@@ -11239,22 +11242,22 @@ TABLE.list TD { border:none; }
</td>
</tr>
</table>
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Properties</td>
- <td><P>This variable-sized field encodes information specific to each
+ <td><p>This variable-sized field encodes information specific to each
layout class and is described below. If there is no property
information specified for a layout class, the size of this field
- is zero bytes.</P></td>
+ is zero bytes.</p></td>
</tr>
</table>
</div>
<br>
- <P>Class-specific information for compact layout (Class 0): (Note: The dimensionality information
+ <p>Class-specific information for compact layout (Class 0): (Note: The dimensionality information
is in the Dataspace message)
<br>
@@ -11292,22 +11295,22 @@ TABLE.list TD { border:none; }
<tr>
<td>Size</td>
- <td><P>This field contains the size of the raw data for the dataset
+ <td><p>This field contains the size of the raw data for the dataset
array, in bytes.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Raw Data</td>
- <td><P>This field contains the raw data for the dataset array.</P></td>
+ <td><p>This field contains the raw data for the dataset array.</p></td>
</tr>
</table>
</div>
- </P>
+ </p>
<br>
- <P>Class-specific information for contiguous layout (Class 1): (Note: The dimensionality information
+ <p>Class-specific information for contiguous layout (Class 1): (Note: The dimensionality information
is in the Dataspace message)
<br>
@@ -11344,24 +11347,24 @@ TABLE.list TD { border:none; }
<tr>
<td>Address</td>
- <td><P>This is the address of the raw data in the file.
+ <td><p>This is the address of the raw data in the file.
The address may have the "undefined address" value, to indicate
- that storage has not yet been allocated for this array.</P></td>
+ that storage has not yet been allocated for this array.</p></td>
</tr>
<tr>
<td>Size</td>
- <td><P>This field contains the size allocated to store the raw data,
+ <td><p>This field contains the size allocated to store the raw data,
in bytes.
- </P>
+ </p>
</td>
</tr>
</table>
</div>
- </P>
+ </p>
<br>
- <P>Class-specific information for chunked layout (Class 2):
+ <p>Class-specific information for chunked layout (Class 2):
<br>
<div align=center>
@@ -11418,32 +11421,32 @@ TABLE.list TD { border:none; }
<tr>
<td>Dimensionality</td>
- <td><P>A chunk has a fixed dimensionality. This field specifies
- the number of dimension size fields later in the message.</P></td>
+ <td><p>A chunk has a fixed dimensionality. This field specifies
+ the number of dimension size fields later in the message.</p></td>
</tr>
<tr>
<td>Address</td>
- <td><P>This is the address of the v1 B-tree that is used to look up the
+ <td><p>This is the address of the v1 B-tree that is used to look up the
addresses of the chunks that actually store portions of the array
data. The address may have the "undefined address" value, to
- indicate that storage has not yet been allocated for this array.</P></td>
+ indicate that storage has not yet been allocated for this array.</p></td>
</tr>
<tr>
<td>Dimension #n Size</td>
- <td><P>These values define the dimension size of a single chunk, in
+ <td><p>These values define the dimension size of a single chunk, in
units of array elements (not bytes). The first dimension stored in
the list of dimensions is the slowest changing dimension and the
last dimension stored is the fastest changing dimension.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Dataset Element Size</td>
- <td><P>The size of a dataset element, in bytes.
- </P>
+ <td><p>The size of a dataset element, in bytes.
+ </p>
</td>
</tr>
</table>
@@ -11451,13 +11454,13 @@ TABLE.list TD { border:none; }
<hr>
<h4><a name="BogusMessage">Name: Bogus</a></h4>
- <P class=item><B>Header Message Type:</B> 0x0009</P>
- <P class=item><B>Length:</B> 4 bytes</P>
- <P class=item><B>Status:</B> For testing only, should never be stored in valid file</P>
- <P class=item><B>Purpose and Description:</B> This message is used for
+ <p class="item"><b>Header Message Type:</b> 0x0009</p>
+ <p class="item"><b>Length:</b> 4 bytes</p>
+ <p class="item"><b>Status:</b> For testing only, should never be stored in valid file</p>
+ <p class="item"><b>Purpose and Description:</b> This message is used for
testing the HDF5 library's response to an "unknown" message type and
should never be encounted in a valid HDF5 file.
- <P class=item><B>Format of Data:</B>
+ <p class="item"><b>Format of Data:</b>
<br>
<div align=center>
<table class=format>
@@ -11489,28 +11492,28 @@ TABLE.list TD { border:none; }
<tr>
<td>Bogus Value</td>
<td>
- <P>This value should always be: <code>0xdeadbeef</code>.
+ <p>This value should always be: <code>0xdeadbeef</code>.
</td>
</tr>
</table>
</div>
- </P>
+ </p>
<hr>
<h4><a name="GroupInfoMessage">Name: Group Info</a></h4>
- <P class=item><B>Header Message Type:</B> 0x000A</P>
- <P class=item><B>Length:</B> varies</P>
- <P class=item><B>Status:</B> Optional, may not be repeated.</P>
- <P class=item><B>Description:</B> This message stores information for the
+ <p class="item"><b>Header Message Type:</b> 0x000A</p>
+ <p class="item"><b>Length:</b> varies</p>
+ <p class="item"><b>Status:</b> Optional, may not be repeated.</p>
+ <p class="item"><b>Description:</b> This message stores information for the
constants defining a "new style" group's behavior. Constant information
will be stored in this message and variable information will be stored
- in the <a href="#LinkInfoMessage">Link Info</a> message.</P>
+ in the <a href="#LinkInfoMessage">Link Info</a> message.</p>
- <P>Note: the "estimated entry" information below is used when determining
+ <p>Note: the "estimated entry" information below is used when determining
the size of the object header for the group when it is created.
- </P>
+ </p>
- <P class=item><B>Format of Data:</B>
+ <p class="item"><b>Format of Data:</b>
<div align=center>
<table class=format>
<caption>
@@ -11551,14 +11554,14 @@ TABLE.list TD { border:none; }
<tr>
<td>Version</td>
- <td><P>The version number for this message. This document describes version 0.</P>
+ <td><p>The version number for this message. This document describes version 0.</p>
</td>
</tr>
<tr>
<td>Flags</td>
- <td><P>This is the group information flag with the following definition:
- </P>
+ <td><p>This is the group information flag with the following definition:
+ </p>
<table class=list>
<tr>
<th width="30%">Bit</th>
@@ -11586,63 +11589,63 @@ TABLE.list TD { border:none; }
<tr>
<td>Link Phase Change: Maximum Compact Value</td>
- <td><P>The is the maximum number of links to store "compactly" (in
- the group's object header).</P>
- <P>This field is present if bit 0 of <em>Flags</em> is set.</P>
+ <td><p>The is the maximum number of links to store "compactly" (in
+ the group's object header).</p>
+ <p>This field is present if bit 0 of <em>Flags</em> is set.</p>
</td>
</tr>
<tr>
<td>Link Phase Change: Minimum Dense Value</td>
- <td><P>This is the minimum number of links to store "densely" (in
+ <td><p>This is the minimum number of links to store "densely" (in
the group's fractal heap). The fractal heap's address is
located in the <a href="#LinkInfoMessage">Link Info</a>
- message.</P>
- <P>This field is present if bit 0 of <em>Flags</em> is set.</P>
+ message.</p>
+ <p>This field is present if bit 0 of <em>Flags</em> is set.</p>
</td>
</tr>
<tr>
<td>Estimated Number of Entries</td>
- <td><P>This is the estimated number of entries in groups.</P>
- <P>If this field is not present, the default value of <code>4</code>
- will be used for the estimated number of group entries.</P>
- <P>This field is present if bit 1 of <em>Flags</em> is set.</P>
+ <td><p>This is the estimated number of entries in groups.</p>
+ <p>If this field is not present, the default value of <code>4</code>
+ will be used for the estimated number of group entries.</p>
+ <p>This field is present if bit 1 of <em>Flags</em> is set.</p>
</td>
</tr>
<tr>
<td>Estimated Link Name Length of Entries</td>
- <td><P>This is the estimated length of entry name.</P>
- <P>If this field is not present, the default value of <code>8</code>
- will be used for the estimated link name length of group entries.</P>
- <P>This field is present if bit 1 of <em>Flags</em> is set.</P>
+ <td><p>This is the estimated length of entry name.</p>
+ <p>If this field is not present, the default value of <code>8</code>
+ will be used for the estimated link name length of group entries.</p>
+ <p>This field is present if bit 1 of <em>Flags</em> is set.</p>
</td>
</tr>
</table>
</div>
- </P>
+ </p>
<hr>
<h4><a name="FilterMessage">Name: Data Storage - Filter Pipeline</a></h4>
- <P class=item><B>Header Message Type:</B> 0x000B</P>
- <P class=item><B>Length:</B> varies</P>
- <P class=item><B>Status:</B> Optional, may not be repeated.</P>
+ <p class="item"><b>Header Message Type:</b> 0x000B</p>
+ <p class="item"><b>Length:</b> varies</p>
+ <p class="item"><b>Status:</b> Optional, may not be repeated.</p>
- <P class=item><B>Description:</B> This message describes the
+ <p class="item"><b>Description:</b> This message describes the
filter pipeline which should be applied to the data stream by
providing filter identification numbers, flags, a name, and
- client data.</P>
+ client data.</p>
- <P>This message may be present in the object headers of both
+ <p>This message may be present in the object headers of both
dataset and group objects. For datasets, it specifies the
filters to apply to raw data. For groups, it specifies the
filters to apply to the group's fractal heap. Currently,
only datasets using chunked data storage use the filter
- pipeline on their raw data.</P>
+ pipeline on their raw data.</p>
- <P class=item><B>Format of Data:</B>
+ <p class="item"><b>Format of Data:</b>
<br>
<div align=center>
<table class=format>
@@ -11683,21 +11686,21 @@ TABLE.list TD { border:none; }
<tr>
<td>Version</td>
- <td><P>The version number for this message. This table
- describes version 1.</P></td>
+ <td><p>The version number for this message. This table
+ describes version 1.</p></td>
</tr>
<tr>
<td>Number of Filters</td>
- <td><P>The total number of filters described in this
+ <td><p>The total number of filters described in this
message. The maximum possible number of filters in a
- message is 32.</P></td>
+ message is 32.</p></td>
</tr>
<tr>
<td>Filter Description List</td>
- <td><P>A description of each filter. A filter description
- appears in the next table.</P></td>
+ <td><p>A description of each filter. A filter description
+ appears in the next table.</p></td>
</tr>
</table>
</div>
@@ -11833,22 +11836,22 @@ TABLE.list TD { border:none; }
<td>Scale and offset encoded values</td>
</tr>
</table>
- </P></td>
+ </p></td>
</tr>
<tr>
<td>Name Length</td>
- <td><P>Each filter has an optional null-terminated ASCII name
+ <td><p>Each filter has an optional null-terminated ASCII name
and this field holds the length of the name including the
null termination padded with nulls to be a multiple of
eight. If the filter has no name then a value of zero is
- stored in this field.</P></td>
+ stored in this field.</p></td>
</tr>
<tr>
<td>Flags</td>
- <td><P>The flags indicate certain properties for a filter. The
- bit values defined so far are:</P>
+ <td><p>The flags indicate certain properties for a filter. The
+ bit values defined so far are:</p>
<table class=list>
<tr>
<th width="30%">Bit</th>
@@ -11872,31 +11875,31 @@ TABLE.list TD { border:none; }
<tr>
<td>Number of Client Data Values</td>
- <td><P>Each filter can store integer values to control
+ <td><p>Each filter can store integer values to control
how the filter operates. The number of entries in the
- <em>Client Data</em> array is stored in this field.</P></td>
+ <em>Client Data</em> array is stored in this field.</p></td>
</tr>
<tr>
<td>Name</td>
- <td><P>If the <em>Name Length</em> field is non-zero then it will
+ <td><p>If the <em>Name Length</em> field is non-zero then it will
contain the size of this field, padded to a multiple of eight. This
field contains a null-terminated, ASCII character
- string to serve as a comment/name for the filter.</P></td>
+ string to serve as a comment/name for the filter.</p></td>
</tr>
<tr>
<td>Client Data</td>
- <td><P>This is an array of four-byte integers which will be
+ <td><p>This is an array of four-byte integers which will be
passed to the filter function. The <em>Client Data Number</em> of
- Values determines the number of elements in the array.</P></td>
+ Values determines the number of elements in the array.</p></td>
</tr>
<tr>
<td>Padding</td>
- <td><P>Four bytes of zeros are added to the message at this
+ <td><p>Four bytes of zeros are added to the message at this
point if the Client Data Number of Values field contains
- an odd number.</P></td>
+ an odd number.</p></td>
</tr>
</table>
</div>
@@ -11937,21 +11940,21 @@ TABLE.list TD { border:none; }
<tr>
<td>Version</td>
- <td><P>The version number for this message. This table
- describes version 2.</P></td>
+ <td><p>The version number for this message. This table
+ describes version 2.</p></td>
</tr>
<tr>
<td>Number of Filters</td>
- <td><P>The total number of filters described in this
+ <td><p>The total number of filters described in this
message. The maximum possible number of filters in a
- message is 32.</P></td>
+ message is 32.</p></td>
</tr>
<tr>
<td>Filter Description List</td>
- <td><P>A description of each filter. A filter description
- appears in the next table.</P></td>
+ <td><p>A description of each filter. A filter description
+ appears in the next table.</p></td>
</tr>
</table>
</div>
@@ -12083,28 +12086,28 @@ TABLE.list TD { border:none; }
<td>Scale and offset encoded values</td>
</tr>
</table>
- </P></td>
+ </p></td>
</tr>
<tr>
<td>Name Length</td>
- <td><P>Each filter has an optional null-terminated ASCII name
+ <td><p>Each filter has an optional null-terminated ASCII name
and this field holds the length of the name including the
null termination padded with nulls to be a multiple of
eight. If the filter has no name then a value of zero is
- stored in this field.</P>
- <P>Filters with IDs less than 256 (i.e. those that are defined in
+ stored in this field.</p>
+ <p>Filters with IDs less than 256 (i.e. those that are defined in
this format documentation)
do not store the <em>Name Length</em> or
<em>Name</em> fields.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Flags</td>
- <td><P>The flags indicate certain properties for a filter. The
- bit values defined so far are:</P>
+ <td><p>The flags indicate certain properties for a filter. The
+ bit values defined so far are:</p>
<table class=list>
<tr>
<th width="30%">Bit</th>
@@ -12128,44 +12131,44 @@ TABLE.list TD { border:none; }
<tr>
<td>Number of Client Data Values</td>
- <td><P>Each filter can store integer values to control
+ <td><p>Each filter can store integer values to control
how the filter operates. The number of entries in the
- <em>Client Data</em> array is stored in this field.</P></td>
+ <em>Client Data</em> array is stored in this field.</p></td>
</tr>
<tr>
<td>Name</td>
- <td><P>If the <em>Name Length</em> field is non-zero then it will
+ <td><p>If the <em>Name Length</em> field is non-zero then it will
contain the size of this field, <em>not</em> padded to a multiple
of eight. This field contains a <em>non-</em>null-terminated,
ASCII character string to serve as a comment/name for the filter.
- </P>
- <P>Filters that are defined in this format documentation (deflate,
+ </p>
+ <p>Filters that are defined in this format documentation (deflate,
shuffle, etc.) do not store the <em>Name Length</em> or
<em>Name</em> fields.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Client Data</td>
- <td><P>This is an array of four-byte integers which will be
+ <td><p>This is an array of four-byte integers which will be
passed to the filter function. The Client Data Number of
- Values</em> determines the number of elements in the array.</P>
+ Values</em> determines the number of elements in the array.</p>
</td>
</tr>
</table>
</div>
<p>
- </P>
+ </p>
<hr>
<h4><a name="AttributeMessage">Name: Attribute</a></h4>
- <P class=item><B>Header Message Type:</B> 0x000C
- <P class=item><B>Length:</B> varies
- <P class=item><B>Status:</B> Optional, may be repeated.
+ <p class="item"><b>Header Message Type:</b> 0x000C
+ <p class="item"><b>Length:</b> varies
+ <p class="item"><b>Status:</b> Optional, may be repeated.
- <P class=item><B>Description:</B> The <em>Attribute</em>
+ <p class="item"><b>Description:</b> The <em>Attribute</em>
message is used to store objects in the HDF5 file which are used
as attributes, or “metadata” about the current object. An
attribute is a small dataset; it has a name, a datatype, a data
@@ -12185,7 +12188,7 @@ TABLE.list TD { border:none; }
of an attribute with a duplicate name to fail). Attributes on
different objects may have the same name, however.</p>
- <P class=item><B>Format of Data:</B>
+ <p class="item"><b>Format of Data:</b>
<br>
<div align=center>
<table class=format>
@@ -12239,8 +12242,8 @@ TABLE.list TD { border:none; }
<tr>
<td>Version</td>
- <td><P>The version number information is used for changes in the format of the
- attribute message and is described here:</P>
+ <td><p>The version number information is used for changes in the format of the
+ attribute message and is described here:</p>
<table class=list>
<tr>
<th width="30%">Version</th>
@@ -12263,54 +12266,54 @@ TABLE.list TD { border:none; }
<tr>
<td>Name Size</td>
- <td><P>The length of the attribute name in bytes including the
+ <td><p>The length of the attribute name in bytes including the
null terminator. Note that the <em>Name</em> field below may
contain additional padding not represented by this
- field.</P></td>
+ field.</p></td>
</tr>
<tr>
<td>Datatype Size</td>
- <td><P>The length of the datatype description in the <em>Datatype</em>
+ <td><p>The length of the datatype description in the <em>Datatype</em>
field below. Note that the <em>Datatype</em> field may contain
- additional padding not represented by this field.</P></td>
+ additional padding not represented by this field.</p></td>
</tr>
<tr>
<td>Dataspace Size</td>
- <td><P>The length of the dataspace description in the <em>Dataspace</em>
+ <td><p>The length of the dataspace description in the <em>Dataspace</em>
field below. Note that the <em>Dataspace</em> field may contain
- additional padding not represented by this field.</P></td>
+ additional padding not represented by this field.</p></td>
</tr>
<tr>
<td>Name</td>
- <td><P>The null-terminated attribute name. This field is
+ <td><p>The null-terminated attribute name. This field is
padded with additional null characters to make it a
- multiple of eight bytes.</P></td>
+ multiple of eight bytes.</p></td>
</tr>
<tr>
<td>Datatype</td>
- <td><P>The datatype description follows the same format as
+ <td><p>The datatype description follows the same format as
described for the datatype object header message. This
field is padded with additional zero bytes to make it a
- multiple of eight bytes.</P></td>
+ multiple of eight bytes.</p></td>
</tr>
<tr>
<td>Dataspace</td>
- <td><P>The dataspace description follows the same format as
+ <td><p>The dataspace description follows the same format as
described for the dataspace object header message. This
field is padded with additional zero bytes to make it a
- multiple of eight bytes.</P></td>
+ multiple of eight bytes.</p></td>
</tr>
<tr>
<td>Data</td>
- <td><P>The raw data for the attribute. The size is determined
+ <td><p>The raw data for the attribute. The size is determined
from the datatype and dataspace descriptions. This
- field is <em>not</em> padded with additional bytes.</P></td>
+ field is <em>not</em> padded with additional bytes.</p></td>
</tr>
</table>
</div>
@@ -12368,8 +12371,8 @@ TABLE.list TD { border:none; }
<tr>
<td>Version</td>
- <td><P>The version number information is used for changes in the
- format of the attribute message and is described here:</P>
+ <td><p>The version number information is used for changes in the
+ format of the attribute message and is described here:</p>
<table class=list width="90%">
<tr>
<th width="30%">Version</th>
@@ -12391,9 +12394,9 @@ TABLE.list TD { border:none; }
<tr>
<td>Flags</td>
- <td><P>This bit-field contains extra information about
+ <td><p>This bit-field contains extra information about
interpreting the attribute message:
- </P>
+ </p>
<table class=list width="90%">
<tr>
<th width="30%">Bit</th>
@@ -12415,64 +12418,64 @@ TABLE.list TD { border:none; }
<tr>
<td>Name Size</td>
- <td><P>The length of the attribute name in bytes including the
- null terminator.</P></td>
+ <td><p>The length of the attribute name in bytes including the
+ null terminator.</p></td>
</tr>
<tr>
<td>Datatype Size</td>
- <td><P>The length of the datatype description in the <em>Datatype</em>
- field below.</P></td>
+ <td><p>The length of the datatype description in the <em>Datatype</em>
+ field below.</p></td>
</tr>
<tr>
<td>Dataspace Size</td>
- <td><P>The length of the dataspace description in the <em>Dataspace</em>
- field below.</P></td>
+ <td><p>The length of the dataspace description in the <em>Dataspace</em>
+ field below.</p></td>
</tr>
<tr>
<td>Name</td>
- <td><P>The null-terminated attribute name. This field is <em>not</em>
- padded with additional bytes.</P></td>
+ <td><p>The null-terminated attribute name. This field is <em>not</em>
+ padded with additional bytes.</p></td>
</tr>
<tr>
<td>Datatype</td>
- <td><P>The datatype description follows the same format as
+ <td><p>The datatype description follows the same format as
described for the datatype object header message.
- </P>
- <P>If the
+ </p>
+ <p>If the
<em>Flag</em> field indicates this attribute's datatype is
shared, this field will contain a "shared message" encoding
instead of the datatype encoding.
- </P>
- <P>This field is <em>not</em> padded with additional bytes.
- </P>
+ </p>
+ <p>This field is <em>not</em> padded with additional bytes.
+ </p>
</td>
</tr>
<tr>
<td>Dataspace</td>
- <td><P>The dataspace description follows the same format as
+ <td><p>The dataspace description follows the same format as
described for the dataspace object header message.
- </P>
- <P>If the
+ </p>
+ <p>If the
<em>Flag</em> field indicates this attribute's dataspace is
shared, this field will contain a "shared message" encoding
instead of the dataspace encoding.
- </P>
- <P>This field is <em>not</em> padded with additional bytes.</P>
+ </p>
+ <p>This field is <em>not</em> padded with additional bytes.</p>
</td>
</tr>
<tr>
<td>Data</td>
- <td><P>The raw data for the attribute. The size is determined
+ <td><p>The raw data for the attribute. The size is determined
from the datatype and dataspace descriptions.
- </P>
- <P>This field is <em>not</em> padded with additional zero bytes.
- </P>
+ </p>
+ <p>This field is <em>not</em> padded with additional zero bytes.
+ </p>
</td>
</tr>
</table>
@@ -12536,8 +12539,8 @@ TABLE.list TD { border:none; }
<tr>
<td>Version</td>
- <td><P>The version number information is used for changes in the
- format of the attribute message and is described here:</P>
+ <td><p>The version number information is used for changes in the
+ format of the attribute message and is described here:</p>
<table class=list width="90%">
<tr>
<th width="30%">Version</th>
@@ -12557,9 +12560,9 @@ TABLE.list TD { border:none; }
<tr>
<td>Flags</td>
- <td><P>This bit-field contains extra information about
+ <td><p>This bit-field contains extra information about
interpreting the attribute message:
- </P>
+ </p>
<table class=list width="90%">
<tr>
<th width="30%">Bit</th>
@@ -12581,25 +12584,25 @@ TABLE.list TD { border:none; }
<tr>
<td>Name Size</td>
- <td><P>The length of the attribute name in bytes including the
- null terminator.</P></td>
+ <td><p>The length of the attribute name in bytes including the
+ null terminator.</p></td>
</tr>
<tr>
<td>Datatype Size</td>
- <td><P>The length of the datatype description in the <em>Datatype</em>
- field below.</P></td>
+ <td><p>The length of the datatype description in the <em>Datatype</em>
+ field below.</p></td>
</tr>
<tr>
<td>Dataspace Size</td>
- <td><P>The length of the dataspace description in the <em>Dataspace</em>
- field below.</P></td>
+ <td><p>The length of the dataspace description in the <em>Dataspace</em>
+ field below.</p></td>
</tr>
<tr>
<td>Name Character Set Encoding</td>
- <td><P>The character set encoding for the attribute's name:
+ <td><p>The character set encoding for the attribute's name:
<table width=100% class=list>
<tr>
<th width="30%">Value</th>
@@ -12618,71 +12621,71 @@ TABLE.list TD { border:none; }
</td>
</tr>
</table>
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Name</td>
- <td><P>The null-terminated attribute name. This field is <em>not</em>
- padded with additional bytes.</P></td>
+ <td><p>The null-terminated attribute name. This field is <em>not</em>
+ padded with additional bytes.</p></td>
</tr>
<tr>
<td>Datatype</td>
- <td><P>The datatype description follows the same format as
+ <td><p>The datatype description follows the same format as
described for the datatype object header message.
- </P>
- <P>If the
+ </p>
+ <p>If the
<em>Flag</em> field indicates this attribute's datatype is
shared, this field will contain a "shared message" encoding
instead of the datatype encoding.
- </P>
- <P>This field is <em>not</em> padded with additional bytes.
- </P>
+ </p>
+ <p>This field is <em>not</em> padded with additional bytes.
+ </p>
</td>
</tr>
<tr>
<td>Dataspace</td>
- <td><P>The dataspace description follows the same format as
+ <td><p>The dataspace description follows the same format as
described for the dataspace object header message.
- </P>
- <P>If the
+ </p>
+ <p>If the
<em>Flag</em> field indicates this attribute's dataspace is
shared, this field will contain a "shared message" encoding
instead of the dataspace encoding.
- </P>
- <P>This field is <em>not</em> padded with additional bytes.</P>
+ </p>
+ <p>This field is <em>not</em> padded with additional bytes.</p>
</td>
</tr>
<tr>
<td>Data</td>
- <td><P>The raw data for the attribute. The size is determined
+ <td><p>The raw data for the attribute. The size is determined
from the datatype and dataspace descriptions.
- </P>
- <P>This field is <em>not</em> padded with additional zero bytes.
- </P>
+ </p>
+ <p>This field is <em>not</em> padded with additional zero bytes.
+ </p>
</td>
</tr>
</table>
</div>
- </P>
+ </p>
<hr>
<h4><a name="CommentMessage">Name: Object Comment</a></h4>
- <P class=item><B>Header Message Type:</B> 0x000D</P>
- <P class=item><B>Length:</B> varies</P>
- <P class=item><B>Status:</B> Optional, may not be repeated.</P>
+ <p class="item"><b>Header Message Type:</b> 0x000D</p>
+ <p class="item"><b>Length:</b> varies</p>
+ <p class="item"><b>Status:</b> Optional, may not be repeated.</p>
- <P class=item><B>Description:</B> The object comment is
+ <p class="item"><b>Description:</b> The object comment is
designed to be a short description of an object. An object comment
is a sequence of non-zero (<code>\0</code>) ASCII characters with no
- other formatting included by the library.</P>
+ other formatting included by the library.</p>
- <P class=item><B>Format of Data:</B>
+ <p class="item"><b>Format of Data:</b>
<br>
<div align=center>
<table class=format>
@@ -12717,16 +12720,16 @@ TABLE.list TD { border:none; }
</tr>
</table>
</div>
- </P>
+ </p>
<hr>
<h4><a name="OldModificationTimeMessage">Name: Object Modification Time (Old)</a></h4>
- <P class=item><B>Header Message Type:</B> 0x000E</P>
- <P class=item><B>Length:</B> fixed</P>
- <P class=item><B>Status:</B> Optional, may not be repeated.</P>
+ <p class="item"><b>Header Message Type:</b> 0x000E</p>
+ <p class="item"><b>Length:</b> fixed</p>
+ <p class="item"><b>Status:</b> Optional, may not be repeated.</p>
- <P class=item><B>Description:</B> The object modification date
+ <p class="item"><b>Description:</b> The object modification date
and time is a timestamp which indicates (using ISO-8601 date and
time format) the last modification of an object. The time is
updated when any object header message changes according to the
@@ -12737,9 +12740,9 @@ TABLE.list TD { border:none; }
<a href="#ModificationTimeMessage">Object Modification Time</a>
message and is no longer written
to the file in versions of the HDF5 library after the 1.6.0 version.
- </P>
+ </p>
- <P class=item><B>Format of Data:</B>
+ <p class="item"><b>Format of Data:</b>
<br>
<div align=center>
<table class=format>
@@ -12785,65 +12788,65 @@ TABLE.list TD { border:none; }
<tr>
<td>Year</td>
- <td><P>The four-digit year as an ASCII string. For example,
+ <td><p>The four-digit year as an ASCII string. For example,
<code>1998</code>.
- </P></td>
+ </p></td>
</tr>
<tr>
<td>Month</td>
- <td><P>The month number as a two digit ASCII string where
- January is <code>01</code> and December is <code>12</code>.</P></td>
+ <td><p>The month number as a two digit ASCII string where
+ January is <code>01</code> and December is <code>12</code>.</p></td>
</tr>
<tr>
<td>Day of Month</td>
- <td><P>The day number within the month as a two digit ASCII
- string. The first day of the month is <code>01</code>.</P></td>
+ <td><p>The day number within the month as a two digit ASCII
+ string. The first day of the month is <code>01</code>.</p></td>
</tr>
<tr>
<td>Hour</td>
- <td><P>The hour of the day as a two digit ASCII string where
- midnight is <code>00</code> and 11:00pm is <code>23</code>.</P></td>
+ <td><p>The hour of the day as a two digit ASCII string where
+ midnight is <code>00</code> and 11:00pm is <code>23</code>.</p></td>
</tr>
<tr>
<td>Minute</td>
- <td><P>The minute of the hour as a two digit ASCII string where
+ <td><p>The minute of the hour as a two digit ASCII string where
the first minute of the hour is <code>00</code> and
- the last is <code>59</code>.</P></td>
+ the last is <code>59</code>.</p></td>
</tr>
<tr>
<td>Second</td>
- <td><P>The second of the minute as a two digit ASCII string
+ <td><p>The second of the minute as a two digit ASCII string
where the first second of the minute is <code>00</code>
- and the last is <code>59</code>.</P></td>
+ and the last is <code>59</code>.</p></td>
</tr>
<tr>
<td>Reserved</td>
- <td><P>This field is reserved and should always be zero.</P></td>
+ <td><p>This field is reserved and should always be zero.</p></td>
</tr>
</table>
</div>
- </P>
+ </p>
<hr>
<h4><a name="SOHMTableMessage">Name: Shared Message Table</a></h4>
- <P class=item><B>Header Message Type:</B> 0x000F</P>
- <P class=item><B>Length:</B> fixed </P>
- <P class=item><B>Status:</B> Optional, may not be repeated.</P>
+ <p class="item"><b>Header Message Type:</b> 0x000F</p>
+ <p class="item"><b>Length:</b> fixed </p>
+ <p class="item"><b>Status:</b> Optional, may not be repeated.</p>
- <P class=item><B>Description:</B> This message is used to locate the
+ <p class="item"><b>Description:</b> This message is used to locate the
table of shared object header message (SOHM) indexes. Each
index consists of information to find the shared messages from either
the heap or object header. This message is <em>only</em> found in the
superblock extension.
- </P>
+ </p>
- <P class=item><B>Format of Data:</B>
+ <p class="item"><b>Format of Data:</b>
<br>
<div align=center>
<table class=format>
@@ -12885,36 +12888,36 @@ TABLE.list TD { border:none; }
<tr>
<td>Version</td>
- <td><P>The version number for this message. This document describes version 0.</td>
+ <td><p>The version number for this message. This document describes version 0.</td>
</tr>
<tr>
<td>Shared Object Header Message Table Address</td>
- <td><P>This field is the address of the master table for shared
- object header message indexes.</P>
+ <td><p>This field is the address of the master table for shared
+ object header message indexes.</p>
</td>
</tr>
<tr>
<td>Number of Indices</td>
- <td><P>This field is the number of indices in the master table.</P>
+ <td><p>This field is the number of indices in the master table.</p>
</tr>
</table>
</div>
- </P>
+ </p>
<hr>
<h4><a name="ContinuationMessage">Name: Object Header Continuation</a></h4>
- <P class=item><B>Header Message Type:</B> 0x0010</P>
- <P class=item><B>Length:</B> fixed</P>
- <P class=item><B>Status:</B> Optional, may be repeated.</P>
- <P class=item><B>Description:</B> The object header continuation is the
+ <p class="item"><b>Header Message Type:</b> 0x0010</p>
+ <p class="item"><b>Length:</b> fixed</p>
+ <p class="item"><b>Status:</b> Optional, may be repeated.</p>
+ <p class="item"><b>Description:</b> The object header continuation is the
location in the file of a block containing more header messages for the
current data object. This can be used when header blocks become too
- large or are likely to change over time.</P>
+ large or are likely to change over time.</p>
- <P class=item><B>Format of Data:</B>
+ <p class="item"><b>Format of Data:</b>
<br>
<div align=center>
<table class=format>
@@ -12949,33 +12952,33 @@ TABLE.list TD { border:none; }
<tr>
<td>Offset</td>
- <td><P>This value is the address in the file where the
- header continuation block is located.</P></td>
+ <td><p>This value is the address in the file where the
+ header continuation block is located.</p></td>
</tr>
<tr>
<td>Length</td>
- <td><P>This value is the length in bytes of the header continuation
- block in the file.</P></td>
+ <td><p>This value is the length in bytes of the header continuation
+ block in the file.</p></td>
</tr>
</table>
</div>
- </P>
+ </p>
- <P>The format of the header continuation block that this message points
+ <p>The format of the header continuation block that this message points
to depends on the version of the object header that the message is
contained within.
- </P>
+ </p>
- <P>
+ <p>
Continuation blocks for version 1 object headers have no special
formatting information, they are merely a list of object header
message info sequences (type, size, flags, reserved bytes and data
for each message sequence). See the description
of <a href="#V1ObjectHeaderPrefix">Version 1 Data Object Header Prefix.</a>
- </P>
+ </p>
- <P>Continuation blocks for version 2 object headers <em>do</em> have
+ <p>Continuation blocks for version 2 object headers <em>do</em> have
special formatting information as described here
(see also the description of
<a href="#V2ObjectHeaderPrefix">Version 2 Data Object Header Prefix.</a>):
@@ -13051,61 +13054,61 @@ TABLE.list TD { border:none; }
<tr>
<td>Signature</td>
<td>
- <P>The ASCII character string "<code>OCHK</code>"
+ <p>The ASCII character string "<code>OCHK</code>"
is used to indicate the
beginning of an object header continuation block. This gives file
consistency checking utilities a better chance of reconstructing a
damaged file.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Header Message #n Type</td>
<td>
- <P>Same format as version 1 of the object header, described above.
+ <p>Same format as version 1 of the object header, described above.
</td>
</tr>
<tr>
<td>Size of Header Message #n Data</td>
<td>
- <P>Same format as version 1 of the object header, described above.
+ <p>Same format as version 1 of the object header, described above.
</td>
</tr>
<tr>
<td>Header Message #n Flags</td>
<td>
- <P>Same format as version 1 of the object header, described above.
+ <p>Same format as version 1 of the object header, described above.
</td>
</tr>
<tr>
<td>Header Message #n Creation Order</td>
<td>
- <P>This field stores the order that a message of a given type
+ <p>This field stores the order that a message of a given type
was created in.
- <P>This field is present if bit 2 of <em>flags</em> is set.</P>
+ <p>This field is present if bit 2 of <em>flags</em> is set.</p>
</td>
</tr>
<tr>
<td>Header Message #n Data</td>
<td>
- <P>Same format as version 1 of the object header, described above.
+ <p>Same format as version 1 of the object header, described above.
</td>
</tr>
<tr>
<td>Gap</td>
<td>
- <P>A gap in an object header chunk is inferred by the end of the
+ <p>A gap in an object header chunk is inferred by the end of the
messages for the chunk before the beginning of the chunk's
checksum. Gaps are always smaller than the size of an
object header message prefix (message type + message size +
message flags).
- <P>Gaps are formed when a message (typically an attribute message)
+ <p>Gaps are formed when a message (typically an attribute message)
in an earlier chunk is deleted and a message from a later
chunk that doesn't quite fit into the free space is moved
into the earlier chunk.
@@ -13115,30 +13118,30 @@ TABLE.list TD { border:none; }
<tr>
<td>Checksum</td>
<td>
- <P>This is the checksum for the object header chunk.
- </P>
+ <p>This is the checksum for the object header chunk.
+ </p>
</td>
</tr>
</table>
</div>
- </P>
+ </p>
<hr>
<h4><a name="SymbolTableMessage">Name: Symbol Table Message</a></h4>
- <P class=item><B>Header Message Type:</B> 0x0011</P>
- <P class=item><B>Length:</B> fixed</P>
- <P class=item><B>Status:</B> Required for "old style" groups, may not be repeated.</P>
- <P class=item><B>Description:</B> Each "old style" group has a v1 B-tree
+ <p class="item"><b>Header Message Type:</b> 0x0011</p>
+ <p class="item"><b>Length:</b> fixed</p>
+ <p class="item"><b>Status:</b> Required for "old style" groups, may not be repeated.</p>
+ <p class="item"><b>Description:</b> Each "old style" group has a v1 B-tree
and a local heap for storing symbol table entries, which are located
- with this message.</P>
+ with this message.</p>
- <P class=item><B>Format of data:</B>
+ <p class="item"><b>Format of data:</b>
<br>
<div align=center>
<table class=format>
<caption>
- <B>Symbol Table Message</B>
+ <b>Symbol Table Message</b>
</caption>
<tr>
@@ -13168,34 +13171,34 @@ TABLE.list TD { border:none; }
<tr>
<td>v1 B-tree Address</td>
- <td><P>This value is the address of the v1 B-tree containing the
- symbol table entries for the group.</P></td>
+ <td><p>This value is the address of the v1 B-tree containing the
+ symbol table entries for the group.</p></td>
</tr>
<tr>
<td>Local Heap Address</td>
- <td><P>This value is the address of the local heap containing
- the link names for the symbol table entries for the group.</P></td>
+ <td><p>This value is the address of the local heap containing
+ the link names for the symbol table entries for the group.</p></td>
</tr>
</table>
</div>
- </P>
+ </p>
<hr>
<h4><a name="ModificationTimeMessage">Name: Object Modification Time</a></h4>
- <P class=item><B>Header Message Type:</B> 0x0012 </P>
- <P class=item><B>Length:</B> Fixed </P>
- <P class=item><B>Status:</B> Optional, may not be repeated. </P>
+ <p class="item"><b>Header Message Type:</b> 0x0012 </p>
+ <p class="item"><b>Length:</b> Fixed </p>
+ <p class="item"><b>Status:</b> Optional, may not be repeated. </p>
- <P class=item><B>Description:</B> The object modification
+ <p class="item"><b>Description:</b> The object modification
time is a timestamp which indicates the time of the last modification of
an object.
The time is updated when any object header message changes according to
the system clock where the change was posted.
- </P>
+ </p>
- <P class=item><B>Format of Data:</B>
+ <p class="item"><b>Format of Data:</b>
<div align=center>
<table class=format>
<caption>
@@ -13230,8 +13233,8 @@ TABLE.list TD { border:none; }
<tr>
<td>Version</td>
- <td><P>The version number is used for changes in the format of Object Modification Time
- and is described here:</P>
+ <td><p>The version number is used for changes in the format of Object Modification Time
+ and is described here:</p>
<table class=list>
<tr>
<th width="30%">Version</th>
@@ -13254,28 +13257,28 @@ TABLE.list TD { border:none; }
<tr>
<td>Seconds After UNIX Epoch</td>
- <td><P>A 32-bit unsigned integer value that stores the number of
+ <td><p>A 32-bit unsigned integer value that stores the number of
seconds since 0 hours, 0 minutes, 0 seconds, January 1, 1970,
- Coordinated Universal Time.</P></td>
+ Coordinated Universal Time.</p></td>
</tr>
</table>
</div>
- </P>
+ </p>
<hr>
<h4><a name="BtreeKValuesMessage">Name: B-tree 'K' Values Message</a></h4>
- <P class=item><B>Header Message Type:</B> 0x0013 </P>
- <P class=item><B>Length:</B> Fixed </P>
- <P class=item><B>Status:</B> Optional, may not be repeated. </P>
+ <p class="item"><b>Header Message Type:</b> 0x0013 </p>
+ <p class="item"><b>Length:</b> Fixed </p>
+ <p class="item"><b>Status:</b> Optional, may not be repeated. </p>
- <P class=item><B>Description:</B>This message retrieves non-default 'K'
+ <p class="item"><b>Description:</b>This message retrieves non-default 'K'
values for internal and leaf nodes of a group or indexed storage
v1 B-trees. This message is <em>only</em> found in the
superblock extension.
- </P>
+ </p>
- <P class=item><B>Format of Data:</B>
+ <p class="item"><b>Format of Data:</b>
<div align=center>
<table class=format>
<caption>
@@ -13312,57 +13315,65 @@ TABLE.list TD { border:none; }
<tr>
<td>Version</td>
- <td><P>The version number for this message. This document describes
- version 0.</P>
+ <td><p>The version number for this message. This document describes
+ version 0.</p>
</td>
</tr>
<tr>
<td>Indexed Storage Internal Node K</td>
- <td><P>This is the node 'K' value for each internal node of an
+ <td><p>This is the node 'K' value for each internal node of an
indexed storage v1 B-tree. See the description of this field
in version 0 and 1 of the superblock as well the section on
v1 B-trees.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Group Internal Node K</td>
- <td><P>This is the node 'K' value for each internal node of a group
+ <td><p>This is the node 'K' value for each internal node of a group
v1 B-tree. See the description of this field in version 0 and
1 of the superblock as well as the section on v1 B-trees.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Group Leaf Node K</td>
- <td><P>This is the node 'K' value for each leaf node of a group v1
+ <td><p>This is the node 'K' value for each leaf node of a group v1
B-tree. See the description of this field in version 0 and 1
of the superblock as well as the section on v1 B-trees.
- </P>
+ </p>
</td>
</tr>
</table>
</div>
- </P>
+ </p>
<hr>
<h4><a name="DrvInfoMessage">Name: Driver Info Message</a></h4>
- <P class=item><B>Header Message Type:</B> 0x0014 </P>
- <P class=item><B>Length:</B> varies </P>
- <P class=item><B>Status:</B> Optional, may not be repeated. </P>
-
- <P class=item><B>Description:</B>This message contains information needed by the
- file driver to reopen a file
- (see description in <A href="#DriverInfo">File Driver Info</A>).
- This message is <em>only</em> found in the superblock extension.
- </P>
-
- <P class=item><B>Format of Data:</B>
+ <p class="item"><b>Header Message Type:</b> 0x0014 </p>
+ <p class="item"><b>Length:</b> varies </p>
+ <p class="item"><b>Status:</b> Optional, may not be repeated. </p>
+
+ <p class="item">
+ <b>Description:</b> This message contains information needed by the
+ file driver to reopen a file. This message is <em>only</em>
+ found in the superblock extension: see the
+ <a href="#SuperblockExt">
+ “Disk Format: Level 0C - Superblock Extension”</a>
+ section for more information. For more information on the fields
+ in the driver info message, see the
+ <a href="#DriverInfo">
+ “Disk Format : Level 0B - File Driver Info”</a>
+ section; those who use the multi and family file drivers will
+ find this section particularly helpful.
+ </p>
+
+ <p class="item"><b>Format of Data:</b>
<div align=center>
<table class=format>
<caption>
@@ -13406,49 +13417,49 @@ TABLE.list TD { border:none; }
<tr>
<td>Version</td>
- <td><P>The version number for this message. This document describes
- version 0.</P>
+ <td><p>The version number for this message. This document describes
+ version 0.</p>
</td>
</tr>
<tr>
<td>Driver Identification</td>
- <td><P>This is an eight-byte ASCII string without null termination which
+ <td><p>This is an eight-byte ASCII string without null termination which
identifies the driver.
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Driver Information Size</td>
- <td><P>The size in bytes of the <em>Driver Information</em> field of this
- message.</P>
+ <td><p>The size in bytes of the <em>Driver Information</em> field of this
+ message.</p>
</td>
</tr>
<tr>
<td>Driver Information</td>
- <td><P>Driver information is stored in a format defined by the file driver.</P>
+ <td><p>Driver information is stored in a format defined by the file driver.</p>
</td>
</tr>
</table>
</div>
- </P>
+ </p>
<hr>
<h4><a name="AinfoMessage">Name: Attribute Info Message</a></h4>
- <P class=item><B>Header Message Type:</B> 0x0015</P>
- <P class=item><B>Length:</B> varies </P>
- <P class=item><B>Status:</B> Optional, may not be repeated. </P>
+ <p class="item"><b>Header Message Type:</b> 0x0015</p>
+ <p class="item"><b>Length:</b> varies </p>
+ <p class="item"><b>Status:</b> Optional, may not be repeated. </p>
- <P class=item><B>Description:</B>This message stores information about the
+ <p class="item"><b>Description:</b>This message stores information about the
attributes on an object, such as the maximum creation index for
the attributes created and the location of the attribute storage when
the attributes are stored "densely".
- </P>
+ </p>
- <P class=item><B>Format of Data:</B>
+ <p class="item"><b>Format of Data:</b>
<div align=center>
<table class=format>
<caption>
@@ -13490,16 +13501,16 @@ TABLE.list TD { border:none; }
<tr>
<td>Version</td>
- <td><P>The version number for this message. This document describes
- version 0.</P>
+ <td><p>The version number for this message. This document describes
+ version 0.</p>
</td>
</tr>
<tr>
<td>Flags</td>
- <td><P>This is the attribute index information flag with the
+ <td><p>This is the attribute index information flag with the
following definition:
- </P>
+ </p>
<table class=list>
<tr>
<th width="30%">Bit</th>
@@ -13521,57 +13532,57 @@ TABLE.list TD { border:none; }
<td>Reserved</td>
</tr>
</table>
- </P>
+ </p>
</td>
</tr>
<tr>
<td>Maximum Creation Index</td>
- <td><P>The is the maximum creation order index value for the
- attributes on the object.</P>
- <P>This field is present if bit 0 of <em>Flags</em> is set.</P>
+ <td><p>The is the maximum creation order index value for the
+ attributes on the object.</p>
+ <p>This field is present if bit 0 of <em>Flags</em> is set.</p>
</td>
</tr>
<tr>
<td>Fractal Heap Address</td>
- <td><P>This is the address of the fractal heap to store dense
- attributes.</P>
+ <td><p>This is the address of the fractal heap to store dense
+ attributes.</p>
</td>
</tr>
<tr>
<td>Attribute Name v2 B-tree Address</td>
- <td><P>This is the address of the version 2 B-tree to index the
- names of densely stored attributes.</P>
+ <td><p>This is the address of the version 2 B-tree to index the
+ names of densely stored attributes.</p>
</td>
</tr>
<tr>
<td>Attribute Creation Order v2 B-tree Address</td>
- <td><P>This is the address of the version 2 B-tree to index the
- creation order of densely stored attributes.</P>
- <P>This field is present if bit 1 of <em>Flags</em> is set.</P>
+ <td><p>This is the address of the version 2 B-tree to index the
+ creation order of densely stored attributes.</p>
+ <p>This field is present if bit 1 of <em>Flags</em> is set.</p>
</td>
</tr>
</table>
</div>
- </P>
+ </p>
<hr>
<h4><a name="RefCountMessage">Name: Object Reference Count</a></h4>
- <P class=item><B>Header Message Type:</B> 0x0016 </P>
- <P class=item><B>Length:</B> fixed </P>
- <P class=item><B>Status:</B> Optional, may not be repeated. </P>
+ <p class="item"><b>Header Message Type:</b> 0x0016 </p>
+ <p class="item"><b>Length:</b> fixed </p>
+ <p class="item"><b>Status:</b> Optional, may not be repeated. </p>
- <P class=item><B>Description:</B>This message stores the number of hard
+ <p class="item"><b>Description:</b>This message stores the number of hard
links (in groups or objects) pointing to an object (i.e. its
<em>reference count</em>).
- </P>
+ </p>
- <P class=item><B>Format of Data:</B>
+ <p class="item"><b>Format of Data:</b>
<div align=center>
<table class=format>
<caption>
@@ -13606,29 +13617,29 @@ TABLE.list TD { border:none; }
<tr>
<td>Version</td>
- <td><P>The version number for this message. This document describes
- version 0.</P>
+ <td><p>The version number for this message. This document describes
+ version 0.</p>
</td>
</tr>
<tr>
<td>Reference Count</td>
- <td><P>The unsigned 32-bit integer is the reference count for the
+ <td><p>The unsigned 32-bit integer is the reference count for the
object. This message is only present in "version 2" (or later)
object headers, and if not present those object header versions,
the reference count for the object is assumed to be 1.
- </P>
+ </p>
</td>
</tr>
</table>
</div>
- </P>
+ </p>
<hr>
<h3><a name="DataStorage">Disk Format: Level 2B - Data Object Data Storage</a></h3>
-<P>The data for an object is stored separately from its header
+<p>The data for an object is stored separately from its header
information in the file and may not actually be located in the HDF5 file
itself if the header indicates that the data is stored externally. The
information for each record in the object is stored according to the
@@ -13636,24 +13647,24 @@ TABLE.list TD { border:none; }
Multi-dimensional array data is stored in C order, i.e. the
"last" dimension changes fastest.
-<P>Data whose elements are composed of atomic datatypes are stored in IEEE
+<p>Data whose elements are composed of atomic datatypes are stored in IEEE
format, unless they are specifically defined as being stored in a different
machine format with the architecture-type information from the datatype
header message. This means that each architecture will need to [potentially]
byte-swap data values into the internal representation for that particular
machine.
-<P> Data with a variable-length datatype is stored in the global heap
+<p> Data with a variable-length datatype is stored in the global heap
of the HDF5 file. Global heap identifiers are stored in the
data object storage.
-<P>Data whose elements are composed of reference datatypes are stored in
+<p>Data whose elements are composed of reference datatypes are stored in
several different ways depending on the particular reference type involved.
Object pointers are just stored as the offset of the object header being
pointed to with the size of the pointer being the same number of bytes as
offsets in the file.
-<P>Dataset region references are stored as a heap-ID which points to the
+<p>Dataset region references are stored as a heap-ID which points to the
following information within the file-heap: an offset of the object pointed
to, number-type information (same format as header message), dimensionality
information (same format as header message), sub-set start and end
@@ -13661,18 +13672,18 @@ TABLE.list TD { border:none; }
names (i.e. a [pointer to the] string indicating the first field included
and a [pointer to the] string name for the last field).
-<P>Data of a compound datatype is stored as a contiguous stream of the items
+<p>Data of a compound datatype is stored as a contiguous stream of the items
in the structure, with each item formatted according to its datatype.
<hr>
<h3><a name="Appendix">Appendix</a></h3>
-<P>Definitions of various terms used in this document.
-</P>
+<p>Definitions of various terms used in this document.
+</p>
-<P>The <A name="UndefinedAddress">"undefined address"</A> for a file is a
+<p>The <A name="UndefinedAddress">"undefined address"</a> for a file is a
file address with all bits set, i.e. <code>0xffff...ff</code>.
-<P>The <A name="UnlimitedDim">"unlimited size"</A> for a size is a
+<p>The <A name="UnlimitedDim">"unlimited size"</a> for a size is a
value with all bits set, i.e. <code>0xffff...ff</code>.
<!-- #BeginLibraryItem "/ed_libs/NavBar_ADevG.lbi" -->
@@ -13694,28 +13705,12 @@ value with all bits set, i.e. <code>0xffff...ff</code>.
</table>
</center>
<hr>
-<!-- #EndLibraryItem --><!-- #BeginLibraryItem "/ed_libs/Footer.lbi" -->
-<address>
-<table width="100%" border="0">
- <tr valign="top">
- <td align="left">
- <address>
- The HDF Group Help Desk: <img src="Graphics/help.png" align=top height=16>
- <br>
- Describes HDF5 Release 1.8.13, May 2014.
- </address>
- </td><td width="5%"> </td>
- <td align="right">
- <a href="Copyright.html">Copyright</a> by
- <a href="http://www.hdfgroup.org">The HDF Group</a>
- <br>
- and the Board of Trustees of the University of Illinois
- </td>
- </tr>
-</table>
-</address>
-<!-- #EndLibraryItem --><!-- hhmts start -->
-Last modified: 12 January 2012
+<!-- #EndLibraryItem -->
+
+<?php include("./ed_libs/Footer.htm"); ?>
+
+<!-- hhmts start -->
+Last modified: 21 October 2014
<!-- hhmts end -->
</body>
diff --git a/html/H5.intro.html b/html/H5.intro.html
index 29149a2..0badd60 100644
--- a/html/H5.intro.html
+++ b/html/H5.intro.html
@@ -3137,30 +3137,10 @@ For the example codes, see
</table>
</center>
<hr>
-<!-- #EndLibraryItem --><address>
-
-<!-- #BeginLibraryItem "/ed_libs/Footer.lbi" -->
-<address>
-<table width="100%" border="0">
- <tr valign="top">
- <td align="left">
- <address>
- The HDF Group Help Desk: <img src="Graphics/help.png" align=top height=16>
- <br>
- Describes HDF5 Release 1.8.13, May 2014.
- </address>
- </td><td width="5%"> </td>
- <td align="right">
- <a href="Copyright.html">Copyright</a> by
- <a href="http://www.hdfgroup.org">The HDF Group</a>
- <br>
- and the Board of Trustees of the University of Illinois
- </td>
- </tr>
-</table>
-</address>
<!-- #EndLibraryItem -->
+<?php include("./ed_libs/Footer.htm"); ?>
+
Last modified: 6 February 2006
<br>
Links updated: 17 June 2010
diff --git a/html/HL/H5TB_Spec.html b/html/HL/H5TB_Spec.html
index 768859b..7b315bb 100644
--- a/html/HL/H5TB_Spec.html
+++ b/html/HL/H5TB_Spec.html
@@ -237,9 +237,9 @@ and the
and examples</a>.
<hr>
- <address>
- The HDF Group Help Desk: <img src="../Graphics/help.png" align=top height=16>
- </address>
+
+<?php include("../ed_libs/Footer2.htm"); ?>
+
Last modified: May 13, 2002<br>
Last modified: January 18, 2012 <i>(Corrected links only.)</i><br>
diff --git a/html/HL/RM_H5DS.html b/html/HL/RM_H5DS.html
index 9a594c1..e750a31 100755
--- a/html/HL/RM_H5DS.html
+++ b/html/HL/RM_H5DS.html
@@ -868,11 +868,14 @@ In the
</table>
</center>
<hr>
-<!-- #EndLibraryItem --><SCRIPT LANGUAGE="JAVASCRIPT">
+<!-- #EndLibraryItem -->
+
+<?php include("../ed_libs/Footer2.htm"); ?>
+
+<SCRIPT LANGUAGE="JAVASCRIPT">
<!--
document.writeln(' \
<address> \
- THG Help Desk: <img src="../Graphics/help.png" align=top height=16> <br> \
Last modified: 10 February 2013 <br> \
</address> \
');
diff --git a/html/HL/RM_H5IM.html b/html/HL/RM_H5IM.html
index ec9ccc1..c896f7e 100755
--- a/html/HL/RM_H5IM.html
+++ b/html/HL/RM_H5IM.html
@@ -980,11 +980,14 @@ In the
</table>
</center>
<hr>
-<!-- #EndLibraryItem --><SCRIPT LANGUAGE="JAVASCRIPT">
+<!-- #EndLibraryItem -->
+
+<?php include("../ed_libs/Footer2.htm"); ?>
+
+<SCRIPT LANGUAGE="JAVASCRIPT">
<!--
document.writeln(' \
<address> \
- THG Help Desk: <img src="../Graphics/help.png" align=top height=16> <br> \
Last modified: 20 October 2011<br> \
</address> \
');
diff --git a/html/HL/RM_H5LT.html b/html/HL/RM_H5LT.html
index 9306527..c6a39e2 100755
--- a/html/HL/RM_H5LT.html
+++ b/html/HL/RM_H5LT.html
@@ -3488,11 +3488,14 @@ In the
</table>
</center>
<hr>
-<!-- #EndLibraryItem --><SCRIPT LANGUAGE="JAVASCRIPT">
+<!-- #EndLibraryItem -->
+
+<?php include("../ed_libs/Footer2.htm"); ?>
+
+<SCRIPT LANGUAGE="JAVASCRIPT">
<!--
document.writeln('\
<address> \
- THG Help Desk: <img src="../Graphics/help.png" align=top height=16> <br> \
Last modified: 29 January 2013<br> \
</address> \
');
diff --git a/html/HL/RM_H5PT.html b/html/HL/RM_H5PT.html
index 341d8ba..bf54b07 100755
--- a/html/HL/RM_H5PT.html
+++ b/html/HL/RM_H5PT.html
@@ -713,11 +713,14 @@ In the
</table>
</center>
<hr>
-<!-- #EndLibraryItem --><SCRIPT LANGUAGE="JAVASCRIPT">
+<!-- #EndLibraryItem -->
+
+<?php include("../ed_libs/Footer2.htm"); ?>
+
+<SCRIPT LANGUAGE="JAVASCRIPT">
<!--
document.writeln(' \
<address> \
- THG Help Desk: <img src="../Graphics/help.png" align=top height=16> <br> \
Last modified: 12 February 2013 <br> \
</address> \
');
diff --git a/html/HL/RM_H5PT_c++.html b/html/HL/RM_H5PT_c++.html
index 206c9d7..2c68dfb 100755
--- a/html/HL/RM_H5PT_c++.html
+++ b/html/HL/RM_H5PT_c++.html
@@ -436,11 +436,14 @@ In the
</table>
</center>
<hr>
-<!-- #EndLibraryItem --><SCRIPT LANGUAGE="JAVASCRIPT">
+<!-- #EndLibraryItem -->
+
+<?php include("../ed_libs/Footer2.htm"); ?>
+
+<SCRIPT LANGUAGE="JAVASCRIPT">
<!--
document.writeln(' \
<address> \
- THG Help Desk: <img src="../Graphics/help.png" align=top height=16> <br> \
Last modified: 4 February 2010 <br> \
</address> \
');
diff --git a/html/HL/RM_H5TB.html b/html/HL/RM_H5TB.html
index 11cf3b1..da705c2 100755
--- a/html/HL/RM_H5TB.html
+++ b/html/HL/RM_H5TB.html
@@ -86,28 +86,27 @@ In the
<h2>HDF5 Table API Reference</h2>
-<p>The HDF5 Table API defines a standard
-storage for HDF5 datasets that are indented to be interpreted as tables. A table
-is defined as a collection of records whose values are stored in fixed-length
-fields. All records have the same structure and all values in each field have
-the same data type. </p>
-
-<p>The following functions are part of the HDF5 Table API. </p>
-
-<p><strong>Programming Hints:</strong>
-
- <p>
- To use any of these functions or subroutines, you must first include
- the relevant include file (C) or module (Fortran) in your application.
- <p>
- The following line includes the HDF5 Table package, H5TB,
- in C applications:
- <br><code>
- #include "hdf5_hl.h"</code>
- <p>
- This line includes the H5TB module in Fortran applications:
- <br><code>
- use h5tb</code>
+<p>The HDF5 Table API defines a standard
+storage for HDF5 datasets that are intended to be interpreted as tables.
+A table is defined as a collection of records whose values are stored
+in fixed-length fields. All records have the same structure, and all
+values in each field have the same data type.</p>
+
+<p>The following functions are part of the HDF5 Table API.</p>
+
+<p><strong>Programming Hints:</strong></p>
+
+<p>To use any of these functions or subroutines, you must first include
+the relevant include file (C) or module (Fortran) in your application.</p>
+
+<p>The following line includes the HDF5 Table package, H5TB, in C
+applications:</p>
+
+<p><code> #include "hdf5_hl.h"</code></p>
+
+<p>The following line includes the H5TB module in Fortran applications:</p>
+
+<p><code> use h5tb</code></p>
<p><strong>The C Interfaces:</strong>
@@ -1208,11 +1207,13 @@ end subroutine h5tbdelete_field_f
<hr>
+
+<?php include("../ed_libs/Footer2.htm"); ?>
+
<SCRIPT LANGUAGE="JAVASCRIPT">
<!--
document.writeln(' \
<address> \
- THG Help Desk: <img src="../Graphics/help.png" align=top height=16> <br> \
Last modified: 20 October 2011<br> \
</address> \
');
diff --git a/html/HL/RM_HDF5Optimized.html b/html/HL/RM_HDF5Optimized.html
index 4bbe1e3..ee9ea2f 100755
--- a/html/HL/RM_HDF5Optimized.html
+++ b/html/HL/RM_HDF5Optimized.html
@@ -432,11 +432,13 @@ if(H5Dread(dataset, H5T_NATIVE_LONG, H5S_ALL, H5S_ALL, H5P_DEFAULT,
<hr>
+
+<?php include("../ed_libs/Footer-THGonly2.htm"); ?>
+
<SCRIPT LANGUAGE="JAVASCRIPT">
<!--
document.writeln(' \
<address> \
- THG Help Desk: <img src="../Graphics/help.png" align=top height=16> <br> \
Last modified: 28 February 2013<br> \
</address> \
');
diff --git a/html/HL/index.html b/html/HL/index.html
index 0520a7b..d909493 100644
--- a/html/HL/index.html
+++ b/html/HL/index.html
@@ -190,11 +190,14 @@ along with the HDF5 Library.
</table>
</center>
<hr>
-<!-- #EndLibraryItem --><SCRIPT LANGUAGE="JAVASCRIPT">
+<!-- #EndLibraryItem -->
+
+<?php include("../ed_libs/Footer2.htm"); ?>
+
+<SCRIPT LANGUAGE="JAVASCRIPT">
<!--
document.writeln(' \
<address> \
- THG Help Desk: <img src="../Graphics/help.png" align=top height=16> <br> \
Last modified: 29 October 2013 <br> \
</address> \
');
diff --git a/html/Intro/IntroExamples.html b/html/Intro/IntroExamples.html
index bb627a4..d9b3f75 100644
--- a/html/Intro/IntroExamples.html
+++ b/html/Intro/IntroExamples.html
@@ -2104,29 +2104,9 @@ main(void)
</table>
</center>
<hr>
-<!-- #EndLibraryItem --><address>
-
-<!-- #BeginLibraryItem "/ed_libs/Footer.lbi" -->
-<address>
-<table width="100%" border="0">
- <tr valign="top">
- <td align="left">
- <address>
- The HDF Group Help Desk: <img src="../Graphics/help.png" align=top height=16>
- <br>
- Describes HDF5 Release 1.8.13, May 2014.
- </address>
- </td><td width="5%"> </td>
- <td align="right">
- <a href="../Copyright.html">Copyright</a> by
- <a href="http://www.hdfgroup.org">The HDF Group</a>
- <br>
- and the Board of Trustees of the University of Illinois
- </td>
- </tr>
-</table>
-</address>
<!-- #EndLibraryItem -->
+
+<?php include("../ed_libs/Footer2.htm"); ?>
Last modified: 3 August 2004
diff --git a/html/RM/APICompatMacros.html b/html/RM/APICompatMacros.html
index 2aeb582..8a5712d 100644
--- a/html/RM/APICompatMacros.html
+++ b/html/RM/APICompatMacros.html
@@ -813,25 +813,11 @@ In the
</table>
</center>
<hr>
-<!-- #EndLibraryItem --><!-- #BeginLibraryItem "/ed_libs/Footer-THGonly.lbi" -->
-<address>
-<table width="100%" border="0">
- <tr valign="top">
- <td align="left">
- <address>
- The HDF Group Help Desk: <img src="../Graphics/help.png" align=top height=16>
- <br>
- Describes HDF5 Release 1.8.13, May 2014.
- </address>
- </td><td width="5%"> </td>
- <td align="right">
- <a href="../Copyright.html">Copyright</a> by
- <a href="http://www.hdfgroup.org">The HDF Group</a>
- </td>
- </tr>
-</table>
-</address>
-<!-- #EndLibraryItem --><SCRIPT LANGUAGE="JAVASCRIPT">
+<!-- #EndLibraryItem -->
+
+<?php include("../ed_libs/Footer-THGonly2.htm"); ?>
+
+<SCRIPT LANGUAGE="JAVASCRIPT">
<!--
document.writeln("Last modified: 13 January 2012");
-->
diff --git a/html/RM/CollectiveCalls.html b/html/RM/CollectiveCalls.html
index 6442f7f..8f641fd 100644
--- a/html/RM/CollectiveCalls.html
+++ b/html/RM/CollectiveCalls.html
@@ -1969,28 +1969,14 @@ In the
</table>
</center>
<hr>
-<!-- #EndLibraryItem --><!-- #BeginLibraryItem "/ed_libs/Footer-THGonly.lbi" -->
-<address>
-<table width="100%" border="0">
- <tr valign="top">
- <td align="left">
- <address>
- The HDF Group Help Desk: <img src="../Graphics/help.png" align=top height=16>
- <br>
- Describes HDF5 Release 1.8.13, May 2014.
- </address>
- </td><td width="5%"> </td>
- <td align="right">
- <a href="../Copyright.html">Copyright</a> by
- <a href="http://www.hdfgroup.org">The HDF Group</a>
- </td>
- </tr>
-</table>
-</address>
-<!-- #EndLibraryItem --></body>
+<!-- #EndLibraryItem -->
+
+<?php include("../ed_libs/Footer-THGonly2.htm"); ?>
+
<SCRIPT LANGUAGE="JAVASCRIPT">
<!--
document.writeln("Last modified: 8 May 2013");
-->
</SCRIPT>
+</body>
</html>
diff --git a/html/RM/H5A/H5Acreate.htm b/html/RM/H5A/H5Acreate.htm
index aef3b16..0fe98f6 100644
--- a/html/RM/H5A/H5Acreate.htm
+++ b/html/RM/H5A/H5Acreate.htm
@@ -24,7 +24,7 @@
<dl>
<dt><div align=right><font color=999999 size=-1><i>
- Last modified: 28 August 2012</i></font></div>
+ Last modified: 9 October 2014</i></font></div></dt>
<dt><strong>Name:</strong> <a name="Annot-Create">H5Acreate</a>
<dt><strong>Signature:</strong>
@@ -170,6 +170,16 @@ SUBROUTINE h5acreate_f(loc_id, name, type_id, space_id, attr_id, hdferr, &
! list identifier
END SUBROUTINE h5acreate_f
</pre>
+
+
+ <dt><strong>See Also:</a></strong></dt>
+ <dd>
+ <a href="http://www.hdfgroup.org/HDF5/doc/Advanced/UsingIdentifiers/index.html">
+ “Using Identifiers”</a>
+ </dd>
+
+
+
<p>
<dt><strong>History:</strong>
<dd><table width="90%">
diff --git a/html/RM/H5A/H5Acreate2.htm b/html/RM/H5A/H5Acreate2.htm
index 8b34dcb..963ab1b 100644
--- a/html/RM/H5A/H5Acreate2.htm
+++ b/html/RM/H5A/H5Acreate2.htm
@@ -24,8 +24,7 @@
<dl>
<dt><div align=right><font color=999999 size=-1><i>
- Last modified: 12 October 2012
- </i></font></div>
+ Last modified: 9 October 2014</i></font></div></dt>
<dt><strong>Name:</strong> <a name="Annot-Create2">H5Acreate2</a>
<dt><strong>Signature:</strong>
@@ -132,9 +131,15 @@
<p>
<dt><strong>See Also:</strong>
+ <dd><a href="RM_H5T.html#Datatype-SetSize"><code>H5Tset_size</code></a></dd>
<dd>“<a href="RM_H5T.html#CreateVLString">Creating
- variable-length string datatypes</a>”
- <dd><a href="RM_H5T.html#Datatype-SetSize"><code>H5Tset_size</code></a>
+ variable-length string datatypes</a>” </dd>
+ <dd>
+ <a href="http://www.hdfgroup.org/HDF5/doc/Advanced/UsingIdentifiers/index.html">
+ “Using Identifiers”</a>
+ </dd>
+
+
<p>
<dt><strong>History:</strong>
diff --git a/html/RM/H5A/H5Acreate_by_name.htm b/html/RM/H5A/H5Acreate_by_name.htm
index 79d63ec..a784af4 100644
--- a/html/RM/H5A/H5Acreate_by_name.htm
+++ b/html/RM/H5A/H5Acreate_by_name.htm
@@ -21,7 +21,13 @@
<!-- NEW PAGE -->
<!-- HEADER RIGHT "H5Acreate_by_name" -->
<hr>
-<dl>
+<dl>
+
+
+ <dt><div align=right><font color=999999 size=-1><i>
+ Last modified: 9 October 2014</i></font></div></dt>
+
+
<dt><strong>Name:</strong> <a name="Annot-CreateByName">H5Acreate_by_name</a>
<dt><strong>Signature:</strong>
<dd><em>hid_t</em> <code>H5Acreate_by_name</code>(
@@ -157,6 +163,14 @@ END SUBROUTINE h5acreate_by_name_f
<img src="Graphics/Java.gif">
<img src="Graphics/C++.gif">
-->
+
+ <dt><strong>See Also:</a></strong></dt>
+ <dd>
+ <a href="http://www.hdfgroup.org/HDF5/doc/Advanced/UsingIdentifiers/index.html">
+ “Using Identifiers”</a>
+ </dd>
+
+
<p>
<dt><strong>History:</strong>
<dd><table width="90%">
diff --git a/html/RM/H5A/H5Aget_type.htm b/html/RM/H5A/H5Aget_type.htm
index abb2592..87b8a0b 100644
--- a/html/RM/H5A/H5Aget_type.htm
+++ b/html/RM/H5A/H5Aget_type.htm
@@ -21,12 +21,19 @@
<!-- NEW PAGE -->
<!-- HEADER RIGHT "H5Aget_type" -->
<hr>
-<dl>
-<dt><strong>Name:</strong> <a name="Annot-GetType">H5Aget_type</a>
-<dt><strong>Signature:</strong>
- <dd><em>hid_t</em> <code>H5Aget_type</code>(<em>hid_t</em> <code>attr_id</code>)
-<dt><strong>Purpose:</strong>
- <dd>Gets an attribute datatype.
+<dl>
+
+ <dt><div align=right><font color=999999 size=-1><i>
+ Last modified: 9 October 2014</i></font></div></dt>
+
+<dt><strong>Name:</strong> <a name="Annot-GetType">H5Aget_type</a></dt>
+
+<dt><strong>Signature:</strong></dt>
+ <dd><em>hid_t</em> <code>H5Aget_type</code>(<em>hid_t</em> <code>attr_id</code>)</dd>
+ <br />
+<dt><strong>Purpose:</strong></dt>
+ <dd>Gets an attribute datatype.</dd><br />
+
<dt><strong>Description:</strong>
<dd><code>H5Aget_type</code> retrieves a copy of the datatype
for an attribute.
@@ -37,16 +44,18 @@
return datatype, then the datatype is closed.
<p>
The datatype identifier returned from this function must be
- released with <code>H5Tclose</code> or resource leaks will develop.
+ released with <code>H5Tclose</code> or resource leaks will develop.
+ </dd>
<dt><strong>Parameters:</strong>
<ul><table>
<tr>
<td valign="top"><em>hid_t</em> <code>attr_id </code></td>
<td valign="top">IN: Identifier of an attribute.</td></tr>
- </table></ul>
+ </table></ul><br />
<dt><strong>Returns:</strong>
<dd>Returns a datatype identifier if successful;
- otherwise returns a negative value.
+ otherwise returns a negative value.</dd>
+ <br />
<dt><strong>Fortran90 Interface:</strong> h5aget_type_f
<dd>
<pre>
@@ -57,8 +66,15 @@ SUBROUTINE h5aget_type_f(attr_id, type_id, hdferr)
INTEGER, INTENT(OUT) :: hdferr ! Error code:
! 0 on success and -1 on failure
END SUBROUTINE h5aget_type_f
- </pre>
-
+ </pre></dd>
+
+ <dt><strong>See Also:</a></strong></dt>
+ <dd>
+ <a href="http://www.hdfgroup.org/HDF5/doc/Advanced/UsingIdentifiers/index.html">
+ “Using Identifiers”</a>
+ </dd>
+
+
<!--<dt><strong>Non-C API(s):</strong>
<dd>
diff --git a/html/RM/H5A/H5Aopen.htm b/html/RM/H5A/H5Aopen.htm
index f765fc0..4c750c2 100644
--- a/html/RM/H5A/H5Aopen.htm
+++ b/html/RM/H5A/H5Aopen.htm
@@ -24,8 +24,7 @@
<dl>
<dt><div align=right><font color=999999 size=-1><i>
- Last modified: 24 February 2010
- </i></font></div>
+ Last modified: 9 October 2014</i></font></div></dt>
<dt><strong>Name:</strong> <a name="Annot-Open">H5Aopen</a>
<dt><strong>Signature:</strong>
@@ -95,6 +94,13 @@ SUBROUTINE h5aopen_f(obj_id, attr_name, attr_id, hdferr, aapl_id)
! Attribute access property list
END SUBROUTINE h5aopen_f
</pre>
+
+ <dt><strong>See Also:</a></strong></dt>
+ <dd>
+ <a href="http://www.hdfgroup.org/HDF5/doc/Advanced/UsingIdentifiers/index.html">
+ “Using Identifiers”</a>
+ </dd>
+
<p>
<dt><strong>History:</strong>
diff --git a/html/RM/H5A/H5Aopen_by_idx.htm b/html/RM/H5A/H5Aopen_by_idx.htm
index c1aa316..299f8ff 100644
--- a/html/RM/H5A/H5Aopen_by_idx.htm
+++ b/html/RM/H5A/H5Aopen_by_idx.htm
@@ -24,8 +24,7 @@
<dl>
<dt><div align=right><font color=999999 size=-1><i>
- Last modified: 24 February 2010
- </i></font></div>
+ Last modified: 9 October 2014</i></font></div></dt>
<dt><strong>Name:</strong> <a name="Annot-OpenByIdx">H5Aopen_by_idx</a>
<dt><strong>Signature:</strong>
@@ -160,6 +159,14 @@ SUBROUTINE h5aopen_by_idx_f(loc_id, obj_name, idx_type, order, n, attr_id, &
! Link access property list
END SUBROUTINE h5aopen_by_idx_f
</pre>
+
+
+ <dt><strong>See Also:</a></strong></dt>
+ <dd>
+ <a href="http://www.hdfgroup.org/HDF5/doc/Advanced/UsingIdentifiers/index.html">
+ “Using Identifiers”</a>
+ </dd>
+
<p>
<dt><strong>History:</strong>
diff --git a/html/RM/H5A/H5Aopen_by_name.htm b/html/RM/H5A/H5Aopen_by_name.htm
index 02ba4aa..d2d06e6 100644
--- a/html/RM/H5A/H5Aopen_by_name.htm
+++ b/html/RM/H5A/H5Aopen_by_name.htm
@@ -23,8 +23,7 @@
<hr>
<dl>
<dt><div align=right><font color=999999 size=-1><i>
- Last modified: 24 July 2009
- </i></font></div>
+ Last modified: 9 October 2014</i></font></div></dt>
<dt><strong>Name:</strong> <a name="Annot-OpenByName">H5Aopen_by_name</a>
<dt><strong>Signature:</strong>
@@ -135,6 +134,14 @@ SUBROUTINE h5aopen_by_name_f(loc_id, obj_name, attr_name, attr_id, hdferr, &
! Link access property list identifier
END SUBROUTINE
</pre>
+
+ <dt><strong>See Also:</a></strong></dt>
+ <dd>
+ <a href="http://www.hdfgroup.org/HDF5/doc/Advanced/UsingIdentifiers/index.html">
+ “Using Identifiers”</a>
+ </dd>
+
+
<p>
<dt><strong>History:</strong>
<dd><table width="90%">
@@ -147,7 +154,10 @@ END SUBROUTINE
<td valign="top">1.8.0</td>
<td valign="top">
Function introduced in this release.</td></tr>
- </table>
+ </table>
+
+
+
</dl>
diff --git a/html/RM/H5A/H5Aread.htm b/html/RM/H5A/H5Aread.htm
index 1c2ce4e..71d5303 100644
--- a/html/RM/H5A/H5Aread.htm
+++ b/html/RM/H5A/H5Aread.htm
@@ -24,7 +24,7 @@
<dl>
<dt><div align=right><font color=999999 size=-1><i>
- Last modified: 27 September 2011
+ Last modified: 16 September 2014
</i></font></div>
<dt><strong>Name:</strong> <a name="Annot-Read">H5Aread</a>
@@ -47,11 +47,10 @@
<p>
Datatype conversion takes place at the time of a read or write
and is automatic. See the
- <a href="../H5.user/Datatypes.html#Datatypes-DataConversion">Data Conversion</a>
- section of <cite>The Data Type Interface (H5T)</cite> in the
- <cite>HDF5 User's Guide</cite> for a discussion of
- data conversion, including the range of conversions currently
- supported by the HDF5 libraries.
+ <a href="../UG/UG_frame11Datatypes.html#Dtransfer">
+ “Data Transfer: Datatype Conversion and Selection”</a>
+ section in the “HDF5 Datatypes” chapter of the
+ <cite>HDF5 User's Guide</cite> for a discussion of data conversion.
<p>
<dt><strong>Parameters:</strong>
diff --git a/html/RM/H5A/H5Awrite.htm b/html/RM/H5A/H5Awrite.htm
index bec741e..f2c7efc 100644
--- a/html/RM/H5A/H5Awrite.htm
+++ b/html/RM/H5A/H5Awrite.htm
@@ -24,7 +24,7 @@
<dl>
<dt><div align=right><font color=999999 size=-1><i>
- Last modified: 12 October 2012
+ Last modified: 16 September 2014
</i></font></div>
<dt><strong>Name:</strong> <a name="Annot-Write">H5Awrite</a>
@@ -55,13 +55,12 @@
and “<a href="RM_H5T.html#CreateVLString">Creating
variable-length string datatypes</a>.”
<p>
- Datatype conversion takes place at the time of a read or write
- and is automatic. See the
- <a href="../H5.user/Datatypes.html#Datatypes-DataConversion">Data Conversion</a>
- section of <cite>The Data Type Interface (H5T)</cite> in the
- <cite>HDF5 User's Guide</cite> for a discussion of
- data conversion, including the range of conversions currently
- supported by the HDF5 libraries.
+ Datatype conversion takes place at the time of a read or write
+ and is automatic. See the
+ <a href="../UG/UG_frame11Datatypes.html#Dtransfer">
+ “Data Transfer: Datatype Conversion and Selection”</a>
+ section in the “HDF5 Datatypes” chapter of the
+ <cite>HDF5 User's Guide</cite> for a discussion of data conversion.
<p>
<dt><strong>Parameters:</strong>
diff --git a/html/RM/H5D/H5Dcreate.htm b/html/RM/H5D/H5Dcreate.htm
index 82f5a91..e0b6015 100644
--- a/html/RM/H5D/H5Dcreate.htm
+++ b/html/RM/H5D/H5Dcreate.htm
@@ -24,7 +24,7 @@
<dl>
<dt><div align=right><font color=999999 size=-1><i>
- Last modified: 28 August 2012</i></font></div>
+ Last modified: 9 October 2014</i></font></div></dt>
<dt><strong>Name:</strong> <a name="Dataset-Create">H5Dcreate</a>
<p>
@@ -132,7 +132,16 @@ SUBROUTINE h5dcreate_f(loc_id, name, type_id, space_id, dset_id, &
INTEGER(HID_T), OPTIONAL, INTENT(IN) :: dapl_id
! Dataset access property list
END SUBROUTINE h5dcreate_f
-</pre>
+</pre>
+
+ <dt><strong>See Also:</a></strong></dt>
+ <dd>
+ <a href="http://www.hdfgroup.org/HDF5/doc/Advanced/UsingIdentifiers/index.html">
+ “Using Identifiers”</a>
+ </dd>
+
+
+
<p>
<dt><strong>History:</strong>
<dd><table width="90%">
diff --git a/html/RM/H5D/H5Dcreate2.htm b/html/RM/H5D/H5Dcreate2.htm
index 7750566..86b50c8 100644
--- a/html/RM/H5D/H5Dcreate2.htm
+++ b/html/RM/H5D/H5Dcreate2.htm
@@ -23,12 +23,12 @@
<hr>
<dl>
-<dt><div align=right><font color=999999 size=-1><i>
- Last modified: 12 October 2012
- </i></font></div>
+ <dt><div align=right><font color=999999 size=-1><i>
+ Last modified: 9 October 2014</i></font></div></dt>
- <dt><strong>Name:</strong> <a name="Dataset-Create2">H5Dcreate2</a>
- <dt><strong>Signature:</strong>
+ <dt><strong>Name:</strong> <a name="Dataset-Create2">H5Dcreate2</a></dt>
+ <br />
+ <dt><strong>Signature:</strong></dt>
<dd><em>hid_t</em> <code>H5Dcreate2</code>(
<em>hid_t</em> <code>loc_id</code>,
<em>const char *</em><code>name</code>,
@@ -37,14 +37,14 @@
<em>hid_t</em> <code>lcpl_id</code>,
<em>hid_t</em> <code>dcpl_id</code>,
<em>hid_t</em> <code>dapl_id</code>
- )
+ )</dd>
<p>
<dt><strong>Purpose:</strong>
- <dd>Creates a new dataset and links it into the file.
+ <dd>Creates a new dataset and links it into the file.</dd>
<p>
- <dt><strong>Description:</strong>
+ <dt><strong>Description:</strong></dt>
<dd><code>H5Dcreate2</code> creates a new dataset named
<code>name</code> at the location specified by
<code>loc_id</code>, and associates constant and initial
@@ -137,15 +137,19 @@
otherwise returns a negative value.
<p>
- <dt><strong>See Also:</strong>
- <dd>“<a href="RM_H5T.html#CreateVLString">Creating
- variable-length string datatypes</a>”
- <dd><a href="RM_H5T.html#Datatype-SetSize"><code>H5Tset_size</code></a>
-
- <p>
<dt><strong>Fortran90 Interface:</strong> See listing under <a href="RM_H5D.html#Dataset-Create"><code>H5Dcreate</code></a>.
<dd>
+ <p>
+ <dt><strong>See Also:</strong>
+ <dd><a href="RM_H5T.html#Datatype-SetSize"><code>H5Tset_size</code></a></dd>
+ <dd>“<a href="RM_H5T.html#CreateVLString">Creating
+ variable-length string datatypes</a>”</dd>
+ <dd>
+ <a href="http://www.hdfgroup.org/HDF5/doc/Advanced/UsingIdentifiers/index.html">
+ “Using Identifiers”</a></dd>
+
+
<p>
<dt><strong>History:</strong>
<dd><table width="90%">
diff --git a/html/RM/H5D/H5Dcreate_anon.htm b/html/RM/H5D/H5Dcreate_anon.htm
index dca870d..8b4778c 100644
--- a/html/RM/H5D/H5Dcreate_anon.htm
+++ b/html/RM/H5D/H5Dcreate_anon.htm
@@ -23,9 +23,10 @@
<hr>
<dl>
<dt><div align=right><font color=999999 size=-1><i>
- Last modified: 26 August 2013</i></font></div>
+ Last modified: 9 October 2014</i></font></div></dt>
-<dt><strong>Name:</strong> <a name="Dataset-CreateAnon">H5Dcreate_anon</a>
+<dt><strong>Name:</strong> <a name="Dataset-CreateAnon">H5Dcreate_anon</a></dt>
+<br />
<dt><strong>Signature:</strong>
<dd><em>hid_t </em><code>H5Dcreate_anon</code>(
<em>hid_t </em><code>loc_id</code>,
@@ -137,9 +138,11 @@ END SUBROUTINE h5dcreate_anon_f
<p>
<dt><strong>See Also:</strong>
- <dd><a href="RM_H5O.html#Object-Link"><code>H5Olink</code></a>
- <br>
- <a href="RM_H5D.html#Dataset-Create"><code>H5Dcreate</code></a>
+ <dd><a href="RM_H5O.html#Object-Link"><code>H5Olink</code></a></dd>
+ <dd><a href="RM_H5D.html#Dataset-Create"><code>H5Dcreate</code></a></dd>
+ <dd>
+ <a href="http://www.hdfgroup.org/HDF5/doc/Advanced/UsingIdentifiers/index.html">
+ “Using Identifiers”</a></dd>
<p>
<dt><strong>History:</strong>
diff --git a/html/RM/H5D/H5Dget_access_plist.htm b/html/RM/H5D/H5Dget_access_plist.htm
index 1eb60d6..4344add 100644
--- a/html/RM/H5D/H5Dget_access_plist.htm
+++ b/html/RM/H5D/H5Dget_access_plist.htm
@@ -24,7 +24,7 @@
<dl>
<dt><div align=right><font color=999999 size=-1><i>
- Last modified: 28 August 2012</i></font></div>
+ Last modified: 9 October 2014</i></font></div></dt>
<dt><strong>Name:</strong> <a name="Dataset-GetAccessPlist">H5Dget_access_plist</a>
<p>
@@ -99,7 +99,11 @@ dapl_id = H5Dget_access_plist(dataset_id);
<dd>“Dataset Access Properties” in the
“<a href="RM_H5P.html">H5P: Property List Interface</a>”
chapter of the
- <a href="RM_H5Front.html"><cite>HDF5 Reference Manual</cite></a>
+ <a href="RM_H5Front.html"><cite>HDF5 Reference Manual</cite></a></dd>
+ <dd>
+ <a href="http://www.hdfgroup.org/HDF5/doc/Advanced/UsingIdentifiers/index.html">
+ “Using Identifiers”</a></dd>
+
<p>
<dt><strong>History:</strong>
diff --git a/html/RM/H5D/H5Dget_create_plist.htm b/html/RM/H5D/H5Dget_create_plist.htm
index aa0c9a8..985d679 100644
--- a/html/RM/H5D/H5Dget_create_plist.htm
+++ b/html/RM/H5D/H5Dget_create_plist.htm
@@ -21,30 +21,39 @@
<!-- NEW PAGE -->
<!-- HEADER RIGHT "H5Dget_create_plist" -->
<hr>
-<dl>
-<dt><strong>Name:</strong> <a name="Dataset-GetCreatePlist">H5Dget_create_plist</a>
-<dt><strong>Signature:</strong>
+<dl>
+ <dt><div align=right><font color=999999 size=-1><i>
+ Last modified: 9 October 2014</i></font></div></dt>
+
+<dt><strong>Name:</strong> <a name="Dataset-GetCreatePlist">H5Dget_create_plist</a></dt>
+<br />
+<dt><strong>Signature:</strong></dt>
<dd><em>hid_t </em><code>H5Dget_create_plist</code>(<em>hid_t </em><code>dataset_id</code>
- )
-<dt><strong>Purpose:</strong>
+ )</dd>
+<br />
+<dt><strong>Purpose:</strong></dt>
<dd>Returns an identifier for a copy of the
- dataset creation property list for a dataset.
-<dt><strong>Description:</strong>
+ dataset creation property list for a dataset.</dd>
+<br />
+<dt><strong>Description:</strong></dt>
<dd><code>H5Dget_create_plist</code> returns an identifier for a
copy of the dataset creation property list associated
with the dataset specified by <code>dataset_id</code>.
<p>
The creation property list identifier should be released with
- <a href="RM_H5P.html#Property-Close"><code>H5Pclose</code></a>.
-<dt><strong>Parameters:</strong>
+ <a href="RM_H5P.html#Property-Close"><code>H5Pclose</code></a>.</dd>
+
+<dt><strong>Parameters:</strong></dt>
<ul><table>
<tr>
<td valign="top"><em>hid_t</em> <code>dataset_id </code></td>
<td valign="top">IN: Identifier of the dataset to query.</td></tr>
</table></ul>
-<dt><strong>Returns:</strong>
+<br />
+<dt><strong>Returns:</strong></dt>
<dd>Returns a dataset creation property list identifier if successful;
- otherwise returns a negative value.
+ otherwise returns a negative value.</dd>
+<br />
<dt><strong>Fortran90 Interface:</strong> h5dget_create_plist_f
<dd>
<pre>
@@ -56,9 +65,14 @@ SUBROUTINE h5dget_create_plist_f(dataset_id, creation_id, hdferr)
INTEGER, INTENT(OUT) :: hdferr ! Error code
! 0 on success and -1 on failure
END SUBROUTINE h5dget_create_plist_f
-
</pre>
-
+
+ <dt><strong>See Also:</a></strong></dt>
+ <dd>
+ <a href="http://www.hdfgroup.org/HDF5/doc/Advanced/UsingIdentifiers/index.html">
+ “Using Identifiers”</a></dd>
+
+
<!--<dt><strong>Non-C API(s):</strong>
<dd>
diff --git a/html/RM/H5D/H5Dget_space.htm b/html/RM/H5D/H5Dget_space.htm
index 6e7b1ae..16ca54e 100644
--- a/html/RM/H5D/H5Dget_space.htm
+++ b/html/RM/H5D/H5Dget_space.htm
@@ -24,7 +24,7 @@
<dl>
<dt><div align=right><font color=999999 size=-1><i>
-Last modified: 28 August 2012</i></font></div>
+ Last modified: 9 October 2014</i></font></div></dt>
<dt><strong>Name:</strong> <a name="Dataset-GetSpace">H5Dget_space</a>
<p>
@@ -71,7 +71,13 @@ SUBROUTINE h5dget_space_f(dataset_id, dataspace_id, hdferr)
INTEGER, INTENT(OUT) :: hdferr ! Error code
! 0 on success and -1 on failure
END SUBROUTINE h5dget_space_f
- </pre>
-
+ </pre>
+
+ <dt><strong>See Also:</a></strong></dt>
+ <dd>
+ <a href="http://www.hdfgroup.org/HDF5/doc/Advanced/UsingIdentifiers/index.html">
+ “Using Identifiers”</a></dd>
+
+
</dl>
diff --git a/html/RM/H5D/H5Dget_type.htm b/html/RM/H5D/H5Dget_type.htm
index 4476513..cc352d6 100644
--- a/html/RM/H5D/H5Dget_type.htm
+++ b/html/RM/H5D/H5Dget_type.htm
@@ -23,7 +23,7 @@
<hr>
<dl>
<dt><div align=right><font color=999999 size=-1><i>
-Last modified: 28 August 2012</i></font></div>
+Last modified: 9 October 2014</i></font></div></dt>
<dt><strong>Name:</strong> <a name="Dataset-GetType">H5Dget_type</a>
<p>
@@ -70,8 +70,15 @@ SUBROUTINE h5dget_type_f(dataset_id, datatype_id, hdferr)
INTEGER, INTENT(OUT) :: hdferr ! Error code
! 0 on success and -1 on failure
END SUBROUTINE h5dget_type_f
- </pre>
-
+ </pre>
+
+ <dt><strong>See Also:</a></strong></dt>
+ <dd>
+ <a href="http://www.hdfgroup.org/HDF5/doc/Advanced/UsingIdentifiers/index.html">
+ “Using Identifiers”</a></dd>
+
+
+
<!--<dt><strong>Non-C API(s):</strong>
<dd>
diff --git a/html/RM/H5D/H5Dopen.htm b/html/RM/H5D/H5Dopen.htm
index 31793c0..66da810 100644
--- a/html/RM/H5D/H5Dopen.htm
+++ b/html/RM/H5D/H5Dopen.htm
@@ -23,7 +23,7 @@
<hr>
<dl>
<dt><div align=right><font color=999999 size=-1><i>
- Last modified: 28 August 2012</i></font></div>
+ Last modified: 9 October 2014</i></font></div></dt>
<dt><strong>Name:</strong> <a name="Dataset-Open">H5Dopen</a>
@@ -118,7 +118,14 @@ SUBROUTINE h5dopen_f(loc_id, name, dset_id, hdferr, dapl_id)
! Dataset access property list
END SUBROUTINE h5dopen_f
</pre>
-<!-- NEW PAGE -->
+<!-- NEW PAGE -->
+
+ <dt><strong>See Also:</a></strong></dt>
+ <dd>
+ <a href="http://www.hdfgroup.org/HDF5/doc/Advanced/UsingIdentifiers/index.html">
+ “Using Identifiers”</a></dd>
+
+
<p>
<dt><strong>History:</strong>
<dd><table width="90%">
diff --git a/html/RM/H5D/H5Dopen2.htm b/html/RM/H5D/H5Dopen2.htm
index e31df37..64d3fab 100644
--- a/html/RM/H5D/H5Dopen2.htm
+++ b/html/RM/H5D/H5Dopen2.htm
@@ -21,19 +21,24 @@
<!-- NEW PAGE -->
<!-- HEADER RIGHT "H5Dopen2" -->
<hr>
-<dl>
- <dt><strong>Name:</strong> <a name="Dataset-Open2">H5Dopen2</a>
- <dt><strong>Signature:</strong>
+<dl>
+
+ <dt><div align=right><font color=999999 size=-1><i>
+ Last modified: 9 October 2014</i></font></div></dt>
+
+ <dt><strong>Name:</strong> <a name="Dataset-Open2">H5Dopen2</a></dt>
+ <br />
+ <dt><strong>Signature:</strong></dt>
<dd><em>hid_t</em> <code>H5Dopen2</code>(
<em>hid_t</em> <code>loc_id</code>,
<em>const char *</em><code>name</code>,
<em>hid_t</em> <code>dapl_id</code>
- )
+ )</dd>
<p>
- <dt><strong>Purpose:</strong>
- <dd>Opens an existing dataset.
+ <dt><strong>Purpose:</strong></dt>
+ <dd>Opens an existing dataset.</dd>
<p>
- <dt><strong>Description:</strong>
+ <dt><strong>Description:</strong></dt>
<dd><code>H5Dopen2</code> opens the existing dataset specified by
a location identifier and name, <code>loc_id</code>
and <code>name</code>, respectively.
@@ -42,9 +47,9 @@
provides information regarding access to the dataset.
<p>
To conserve and release resources, the dataset should be
- closed when access is no longer required.
+ closed when access is no longer required.</dd>
<p>
- <dt><strong>Parameters:</strong>
+ <dt><strong>Parameters:</strong></dt>
<dd><table>
<tr>
<td valign="top"><em>hid_t</em> <code>loc_id</code>
@@ -61,18 +66,24 @@
</td>
<td valign="top">IN: Dataset access property list
</td></tr>
- </table>
+ </table></dd>
<p>
- <dt><strong>Returns:</strong>
+ <dt><strong>Returns:</strong></dt>
<dd>Returns a dataset identifier if successful;
- otherwise returns a negative value.
+ otherwise returns a negative value.</dd>
<p>
- <dt><strong>Fortran90 Interface:</strong> See listing under <a href="RM_H5D.html#Dataset-Open"><code>H5Dopen</code></a>.
- <dd>
- <pre>
- </pre>
+ <dt><strong>Fortran90 Interface:</strong></dt>
+ <dd>See listing under <a href="RM_H5D.html#Dataset-Open"><code>H5Dopen</code></a>.</dd>
+ <br />
+
+ <dt><strong>See Also:</a></strong></dt>
+ <dd>
+ <a href="http://www.hdfgroup.org/HDF5/doc/Advanced/UsingIdentifiers/index.html">
+ “Using Identifiers”</a></dd>
+
+
<p>
- <dt><strong>History:</strong>
+ <dt><strong>History:</strong></dt>
<dd><table width="90%">
<tr>
<td valign="top" align="left" width="10%">
@@ -83,7 +94,7 @@
<td valign="top">1.8.0</td>
<td valign="top">
Function introduced in this release.</td></tr>
- </table>
+ </table></dd>
</dl>
diff --git a/html/RM/H5D/H5Dread.htm b/html/RM/H5D/H5Dread.htm
index b334b35..198cbaf 100644
--- a/html/RM/H5D/H5Dread.htm
+++ b/html/RM/H5D/H5Dread.htm
@@ -24,7 +24,7 @@
<dl>
<dt><div align=right><font color=999999 size=-1><i>
- Last modified: 4 November 2011
+ Last modified: 16 September 2014
</i></font></div>
<dt><strong>Name:</strong> <a name="Dataset-Read">H5Dread</a>
@@ -161,14 +161,12 @@
<code>xfer_plist_id</code> can be the constant <code>H5P_DEFAULT</code>.
in which case the default data transfer properties are used.
<p>
- Data is automatically converted from the file datatype
- and dataspace to the memory datatype and dataspace
- at the time of the read. See the
- <a href="../H5.user/Datatypes.html#Datatypes-DataConversion">Data Conversion</a>
- section of <cite>The Data Type Interface (H5T)</cite> in the
- <cite>HDF5 User's Guide</cite> for a discussion of
- data conversion, including the range of conversions currently
- supported by the HDF5 libraries.
+ Datatype conversion takes place at the time of a read or write
+ and is automatic. See the
+ <a href="../UG/UG_frame11Datatypes.html#Dtransfer">
+ “Data Transfer: Datatype Conversion and Selection”</a>
+ section in the “HDF5 Datatypes” chapter of the
+ <cite>HDF5 User's Guide</cite> for a discussion of data conversion.
<p>
<dt><strong>Parameters:</strong>
<dd><table>
diff --git a/html/RM/H5D/H5Dwrite.htm b/html/RM/H5D/H5Dwrite.htm
index 8f3c895..4a2fd39 100644
--- a/html/RM/H5D/H5Dwrite.htm
+++ b/html/RM/H5D/H5Dwrite.htm
@@ -24,7 +24,7 @@
<dl>
<dt><div align=right><font color=999999 size=-1><i>
- Last modified: 12 October 2012
+ Last modified: 16 September 2014
</i></font></div>
<dt><strong>Name:</strong> <a name="Dataset-Write">H5Dwrite</a>
@@ -169,14 +169,12 @@
Writing to an dataset will fail if the HDF5 file was
not opened with write access permissions.
<p>
- Data is automatically converted from the memory datatype
- and dataspace to the file datatype and dataspace
- at the time of the write. See the
- <a href="../H5.user/Datatypes.html#Datatypes-DataConversion">Data Conversion</a>
- section of <cite>The Data Type Interface (H5T)</cite> in the
- <cite>HDF5 User's Guide</cite> for a discussion of
- data conversion, including the range of conversions currently
- supported by the HDF5 libraries.
+ Datatype conversion takes place at the time of a read or write
+ and is automatic. See the
+ <a href="../UG/UG_frame11Datatypes.html#Dtransfer">
+ “Data Transfer: Datatype Conversion and Selection”</a>
+ section in the “HDF5 Datatypes” chapter of the
+ <cite>HDF5 User's Guide</cite> for a discussion of data conversion.
<p>
If the dataset's space allocation time is set to
<code>H5D_ALLOC_TIME_LATE</code> or <code>H5D_ALLOC_TIME_INCR</code>
diff --git a/html/RM/H5E/H5Ecreate_msg.htm b/html/RM/H5E/H5Ecreate_msg.htm
index c3b6360..9ab674d 100644
--- a/html/RM/H5E/H5Ecreate_msg.htm
+++ b/html/RM/H5E/H5Ecreate_msg.htm
@@ -23,7 +23,7 @@
<hr>
<dl>
<dt><div align=right><font color=999999 size=-1><i>
- Last modified: 28 August 2012</i></font></div>
+ Last modified: 9 October 2014</i></font></div></dt>
<dt><strong>Name:</strong> <a name="Error-CreateMsg">H5Ecreate_msg</a>
<p>
@@ -66,8 +66,15 @@
<dd>Returns a message identifier on success;
otherwise returns a negative value.
<p>
- <dt><strong>Fortran90 Interface:</strong>
- <dd>None.
+ <dt><strong>Fortran90 Interface:</strong></dt>
+ <dd>None</dd>
+ <br />
+ <dt><strong>See Also:</a></strong></dt>
+ <dd>
+ <a href="http://www.hdfgroup.org/HDF5/doc/Advanced/UsingIdentifiers/index.html">
+ “Using Identifiers”</a></dd>
+
+
<p>
<dt><strong>History:</strong>
<dd><table width="90%">
diff --git a/html/RM/H5E/H5Ecreate_stack.htm b/html/RM/H5E/H5Ecreate_stack.htm
index 7a78c95..fa2d27d 100644
--- a/html/RM/H5E/H5Ecreate_stack.htm
+++ b/html/RM/H5E/H5Ecreate_stack.htm
@@ -23,34 +23,42 @@
<hr>
<dl>
<dt><div align=right><font color=999999 size=-1><i>
- Last modified: 28 August 2012</i></font></div>
+ Last modified: 9 October 2014</i></font></div></dt>
- <dt><strong>Name:</strong> <a name="Error-CreateStack">H5Ecreate_stack</a>
+ <dt><strong>Name:</strong>
+ <a name="Error-CreateStack">H5Ecreate_stack</a></dt>
<p>
- <dt><strong>Signature:</strong>
- <dd><em>hid_t</em> <code>H5Ecreate_stack</code>(<em>void</em>)
+ <dt><strong>Signature:</strong></dt>
+ <dd><em>hid_t</em> <code>H5Ecreate_stack</code>(<em>void</em>)</dd>
<p>
- <dt><strong>Purpose:</strong>
- <dd>Creates a new empty error stack.
+ <dt><strong>Purpose:</strong></dt>
+ <dd>Creates a new empty error stack.</dd>
<p>
- <dt><strong>Description:</strong>
+ <dt><strong>Description:</strong></dt>
<dd><code>H5Ecreate_stack</code> creates a new empty error stack
and returns the new stack’s identifier.
<p>Use <code>H5Eclose_stack</code> to close the error stack identifier
- returned by this function.</p>
+ returned by this function.</p></dd>
<p>
- <dt><strong>Parameters:</strong>
+ <dt><strong>Parameters:</strong></dt>
<ul><table>
- <tr><td>None.</td></tr>
- </table></ul>
+ <tr><td>None</td></tr>
+ </table></ul>
<p>
- <dt><strong>Returns:</strong>
- <dd>Returns an error stack identifier on success;
- otherwise returns a negative value.
+ <dt><strong>Returns:</strong></dt>
+ <dd>Returns an error stack identifier on success;
+ otherwise returns a negative value.</dd>
<p>
- <dt><strong>Fortran90 Interface:</strong>
- <dd>None.
+ <dt><strong>Fortran90 Interface:</strong></dt>
+ <dd>None</dd>
+ <br />
+ <dt><strong>See Also:</a></strong></dt>
+ <dd>
+ <a href="http://www.hdfgroup.org/HDF5/doc/Advanced/UsingIdentifiers/index.html">
+ “Using Identifiers”</a></dd>
+
+
<p>
<dt><strong>History:</strong>
<dd><table width="90%">
diff --git a/html/RM/H5F/H5Fcreate.htm b/html/RM/H5F/H5Fcreate.htm
index a5d4bde..e433131 100644
--- a/html/RM/H5F/H5Fcreate.htm
+++ b/html/RM/H5F/H5Fcreate.htm
@@ -23,10 +23,10 @@
<hr>
<dl>
<dt><div align=right><font color=999999 size=-1><i>
- Last modified: 15 May 2009
- </i></font></div>
+ Last modified: 9 October 2014</i></font></div></dt>
-<dt><strong>Name:</strong> <a name="File-Create">H5Fcreate</a>
+<dt><strong>Name:</strong> <a name="File-Create">H5Fcreate</a></dt>
+<br />
<dt><strong>Signature:</strong>
<dd><em>hid_t </em><code>H5Fcreate</code>(
<em>const char *</em><code>name</code>,
@@ -180,6 +180,13 @@ SUBROUTINE h5fcreate_f(name, access_flags, file_id, hdferr, &
! H5P_DEFAULT_F
END SUBROUTINE h5fcreate_f
</pre>
+
+ <dt><strong>See Also:</a></strong></dt>
+ <dd>
+ <a href="http://www.hdfgroup.org/HDF5/doc/Advanced/UsingIdentifiers/index.html">
+ “Using Identifiers”</a></dd>
+
+
<p>
<dt><strong>History:</strong>
<dd><table width="90%">
diff --git a/html/RM/H5F/H5Fget_access_plist.htm b/html/RM/H5F/H5Fget_access_plist.htm
index 54f3b26..78d5d6e 100644
--- a/html/RM/H5F/H5Fget_access_plist.htm
+++ b/html/RM/H5F/H5Fget_access_plist.htm
@@ -21,7 +21,12 @@
<!-- NEW PAGE -->
<!-- HEADER RIGHT "H5Fget_access_plist" -->
<hr>
-<dl>
+<dl>
+
+<dt><div align=right><font color=999999 size=-1><i>
+ Last modified: 16 September 2014
+ </i></font></div>
+
<dt><strong>Name:</strong> <a name="File-GetAccessPlist">H5Fget_access_plist</a>
<dt><strong>Signature:</strong>
<dd><em>hid_t </em><code>H5Fget_access_plist</code>(<em>hid_t</em> <code>file_id</code>)
@@ -31,13 +36,14 @@
<dd><code>H5Fget_access_plist</code> returns the
file access property list identifier of the specified file.
<p>
- See "File Access Properties" in
+ See “File Access Properties” in
<a href="RM_H5P.html">H5P: Property List Interface</a>
in this reference manual and
- "File Access Property Lists"
- in <a href="../H5.user/Files.html"><cite>Files</cite></a> in the
- <cite>HDF5 User's Guide</cite> for
- additional information and related functions.
+ “File Access Properties”
+ in
+ <a href="../UG/UG_frame08TheFile.html#FileAccessProperties">
+ “The HDF5 File”</a> chapter in the
+ <cite>HDF5 User's Guide</cite> for more information.
<dt><strong>Parameters:</strong>
<ul><table>
<tr>
diff --git a/html/RM/H5F/H5Fget_create_plist.htm b/html/RM/H5F/H5Fget_create_plist.htm
index 2d01191..a8b2f86 100644
--- a/html/RM/H5F/H5Fget_create_plist.htm
+++ b/html/RM/H5F/H5Fget_create_plist.htm
@@ -21,7 +21,12 @@
<!-- NEW PAGE -->
<!-- HEADER RIGHT "H5Fget_create_plist" -->
<hr>
-<dl>
+<dl>
+
+<dt><div align=right><font color=999999 size=-1><i>
+ Last modified: 16 September 2014
+ </i></font></div>
+
<dt><strong>Name:</strong> <a name="File-GetCreatePlist">H5Fget_create_plist</a>
<dt><strong>Signature:</strong>
<dd><em>hid_t </em><code>H5Fget_create_plist</code>(<em>hid_t</em> <code>file_id</code>
@@ -34,13 +39,14 @@
used to create this file. This function is useful for
duplicating properties when creating another file.
<p>
- See "File Creation Properties" in
+ See “File Creation Properties” in
<a href="RM_H5P.html">H5P: Property List Interface</a>
in this reference manual and
- "File Creation Properties"
- in <a href="../H5.user/Files.html"><cite>Files</cite></a> in the
- <cite>HDF5 User's Guide</cite> for
- additional information and related functions.
+ “File Creation Properties”
+ in
+ <a href="../UG/UG_frame08TheFile.html#FileCreationProperties">
+ “The HDF5 File”</a> chapter in the
+ <cite>HDF5 User's Guide</cite> for more information.
<p>
The creation property list identifier should be released with
<a href="RM_H5P.html#Property-Close"><code>H5Pclose</code></a>.
diff --git a/html/RM/H5F/H5Fopen.htm b/html/RM/H5F/H5Fopen.htm
index 8f5b825..a306f9a 100644
--- a/html/RM/H5F/H5Fopen.htm
+++ b/html/RM/H5F/H5Fopen.htm
@@ -23,10 +23,10 @@
<hr>
<dl>
<dt><div align=right><font color=999999 size=-1><i>
- Last modified: 18 June 2013
- </i></font></div>
+ Last modified: 9 October 2014</i></font></div></dt>
-<dt><strong>Name:</strong> <a name="File-Open">H5Fopen</a>
+<dt><strong>Name:</strong> <a name="File-Open">H5Fopen</a></dt>
+<br />
<dt><strong>Signature:</strong>
<dd><em>hid_t </em><code>H5Fopen</code>(
<em>const char *</em><code>name</code>,
@@ -121,7 +121,7 @@
<dd><table>
<tr>
<td valign="top"><em>const char *</em><code>name </code></td>
- <td valign="top">IN: Name of the file to be created.</td></tr>
+ <td valign="top">IN: Name of the file to be opened.</td></tr>
<tr>
<td valign="top"><em>unsigned</em> <code>flags</code></td>
<td valign="top">IN: File access flags. Allowable values are:
@@ -177,6 +177,12 @@ SUBROUTINE h5fopen_f(name, access_flags, file_id, hdferr, &
! identifier
END SUBROUTINE h5fopen_f
</pre>
+
+ <dt><strong>See Also:</a></strong></dt>
+ <dd>
+ <a href="http://www.hdfgroup.org/HDF5/doc/Advanced/UsingIdentifiers/index.html">
+ “Using Identifiers”</a></dd>
+
</dl>
diff --git a/html/RM/H5F/H5Freopen.htm b/html/RM/H5F/H5Freopen.htm
index 90660c9..d80a9fa 100644
--- a/html/RM/H5F/H5Freopen.htm
+++ b/html/RM/H5F/H5Freopen.htm
@@ -21,14 +21,22 @@
<!-- NEW PAGE -->
<!-- HEADER RIGHT "H5Freopen" -->
<hr>
-<dl>
-<dt><strong>Name:</strong> <a name="File-Reopen">H5Freopen</a>
-<dt><strong>Signature:</strong>
+<dl>
+
+<dt><div align=right><font color=999999 size=-1><i>
+Last modified: 9 October 2014</i></font></div></dt>
+
+
+<dt><strong>Name:</strong> <a name="File-Reopen">H5Freopen</a></dt>
+<br />
+<dt><strong>Signature:</strong></dt>
<dd><em>hid_t </em><code>H5Freopen</code>(<em>hid_t</em> <code>file_id</code>
- )
-<dt><strong>Purpose:</strong>
- <dd>Returns a new identifier for a previously-opened HDF5 file.
-<dt><strong>Description:</strong>
+ )</dd>
+<br />
+<dt><strong>Purpose:</strong></dt>
+ <dd>Returns a new identifier for a previously-opened HDF5 file.</dd>
+<br />
+<dt><strong>Description:</strong></dt>
<dd><code>H5Freopen</code> returns a new file identifier for an
already-open HDF5 file, as specified by <code>file_id</code>.
Both identifiers share caches and other information.
@@ -44,18 +52,21 @@
<code> H5Freopen (file_id) </code> to reopen it.
<p>
The new file identifier should be closed by calling
- <code>H5Fclose</code> when it is no longer needed.
-<dt><strong>Parameters:</strong>
+ <code>H5Fclose</code> when it is no longer needed.</dd>
+<br />
+<dt><strong>Parameters:</strong></dt>
<ul><table>
<tr>
<td valign="top"><em>hid_t</em> <code>file_id </code></td>
<td valign="top">IN: Identifier of a file for which an additional identifier
is required.</td></tr>
</table></ul>
-<dt><strong>Returns:</strong>
+<br />
+<dt><strong>Returns:</strong></dt>
<dd>Returns a new file identifier if successful;
- otherwise returns a negative value.
-<dt><strong>Fortran90 Interface:</strong> h5freopen_f
+ otherwise returns a negative value.</dd>
+<br />
+<dt><strong>Fortran90 Interface:</strong> h5freopen_f</dt>
<dd>
<pre>
SUBROUTINE h5freopen_f(file_id, new_file_id, hdferr)
@@ -65,7 +76,14 @@ SUBROUTINE h5freopen_f(file_id, new_file_id, hdferr)
INTEGER, INTENT(OUT) :: hdferr ! Error code
! 0 on success and -1 on failure
END SUBROUTINE h5freopen_f
- </pre>
+ </pre></dd>
+
+ <dt><strong>See Also:</a></strong></dt>
+ <dd>
+ <a href="http://www.hdfgroup.org/HDF5/doc/Advanced/UsingIdentifiers/index.html">
+ “Using Identifiers”</a></dd>
+
+
<!--<dt><strong>Non-C API(s):</strong>
<dd>
diff --git a/html/RM/H5G/H5Gcreate.htm b/html/RM/H5G/H5Gcreate.htm
index 395faa0..91631a3 100644
--- a/html/RM/H5G/H5Gcreate.htm
+++ b/html/RM/H5G/H5Gcreate.htm
@@ -24,11 +24,12 @@
<dl>
<dt><div align=right><font color=999999 size=-1><i>
- Last modified: 28 August 2012</i></font></div>
+ Last modified: 9 October 2014</i></font></div></dt>
- <dt><strong>Name:</strong> <a name="Group-Create">H5Gcreate</a>
- <dt><strong>Signatures:</strong>
+ <dt><strong>Name:</strong> <a name="Group-Create">H5Gcreate</a></dt>
+ <br />
+ <dt><strong>Signatures:</strong></dt>
<dd>
<table width=95%>
<tr><td width=80% align=left valign=top>
@@ -166,8 +167,15 @@ SUBROUTINE h5gcreate_f(loc_id, name, grp_id, hdferr, &
INTEGER(HID_T), OPTIONAL, INTENT(IN) :: gapl_id
! Property list for group access
END SUBROUTINE h5gcreate_f
- </pre>
-
+ </pre>
+
+
+ <dt><strong>See Also:</a></strong></dt>
+ <dd>
+ <a href="http://www.hdfgroup.org/HDF5/doc/Advanced/UsingIdentifiers/index.html">
+ “Using Identifiers”</a></dd>
+
+
<p>
<dt><strong>History:</strong>
<dd><table width="90%">
diff --git a/html/RM/H5G/H5Gcreate2.htm b/html/RM/H5G/H5Gcreate2.htm
index c8f2062..bc3e5dc 100644
--- a/html/RM/H5G/H5Gcreate2.htm
+++ b/html/RM/H5G/H5Gcreate2.htm
@@ -24,11 +24,11 @@
<dl>
<dt><div align=right><font color=999999 size=-1><i>
- Last modified: 25 July 2012
- </i></font></div>
+ Last modified: 9 October 2014</i></font></div></dt>
- <dt><strong>Name:</strong> <a name="Group-Create2">H5Gcreate2</a>
- <dt><strong>Signature:</strong>
+ <dt><strong>Name:</strong> <a name="Group-Create2">H5Gcreate2</a></dt>
+ <br />
+ <dt><strong>Signature:</strong></dt>
<dd><em>hid_t</em> <code>H5Gcreate2</code>(
<em>hid_t</em> <code>loc_id</code>,
<em>const char *</em><code>name</code>,
@@ -103,14 +103,18 @@
</td></tr>
</table>
<p>
- <dt><strong>Returns:</strong>
+ <dt><strong>Returns:</strong></dt>
<dd>Returns a group identifier if successful;
- otherwise returns a negative value.
+ otherwise returns a negative value.</dd>
<p>
- <dt><strong>Fortran90 Interface:</strong>
+ <dt><strong>Fortran90 Interface:</strong></dt>
<dd>See listing under
- <a href="RM_H5G.html#Group-Create"><code>H5Gcreate</code></a>.
-
+ <a href="RM_H5G.html#Group-Create"><code>H5Gcreate</code></a>.</dd>
+ <br />
+ <dt><strong>See Also:</a></strong></dt>
+ <dd>
+ <a href="http://www.hdfgroup.org/HDF5/doc/Advanced/UsingIdentifiers/index.html">
+ “Using Identifiers”</a></dd>
<p>
<dt><strong>History:</strong>
<dd><table width="90%">
diff --git a/html/RM/H5G/H5Gcreate_anon.htm b/html/RM/H5G/H5Gcreate_anon.htm
index c61a1ff..fb6f4c6 100644
--- a/html/RM/H5G/H5Gcreate_anon.htm
+++ b/html/RM/H5G/H5Gcreate_anon.htm
@@ -24,11 +24,12 @@
<dl>
<dt><div align=right><font color=999999 size=-1><i>
- Last modified: 23 August 2013</i></font></div>
+ Last modified: 9 October 2014</i></font></div></dt>
- <dt><strong>Name:</strong> <a name="Group-CreateAnon">H5Gcreate_anon</a>
- <dt><strong>Signature:</strong>
+ <dt><strong>Name:</strong> <a name="Group-CreateAnon">H5Gcreate_anon</a></dt>
+ <br />
+ <dt><strong>Signature:</strong></dt>
<dd><em>hid_t </em><code>H5Gcreate_anon</code>(
<em>hid_t </em><code>loc_id</code>,
<em>hid_t </em><code>gcpl_id</code>,
@@ -132,9 +133,12 @@ END SUBROUTINE h5gcreate_anon_f
<p>
<dt><strong>See Also:</strong>
- <dd><a href="RM_H5O.html#Object-Link"><code>H5Olink</code></a>
- <br>
- <a href="RM_H5G.html#Group-Create1"><code>H5Gcreate1</code></a>
+ <dd><a href="RM_H5G.html#Group-Create"><code>H5Gcreate</code></a></dd>
+ <dd><a href="RM_H5O.html#Object-Link"><code>H5Olink</code></a></dd>
+ <dd>
+ <a href="http://www.hdfgroup.org/HDF5/doc/Advanced/UsingIdentifiers/index.html">
+ “Using Identifiers”</a></dd>
+
<p>
<dt><strong>History:</strong>
diff --git a/html/RM/H5G/H5Gget_objinfo.htm b/html/RM/H5G/H5Gget_objinfo.htm
index b639a62..17e2753 100644
--- a/html/RM/H5G/H5Gget_objinfo.htm
+++ b/html/RM/H5G/H5Gget_objinfo.htm
@@ -72,7 +72,7 @@
<pre>
typedef struct H5G_stat_t {
unsigned long fileno[2];
- haddr_t objno[2];
+ unsigned long objno[2];
unsigned nlink;
H5G_obj_t type;
time_t mtime;
diff --git a/html/RM/H5G/H5Gopen.htm b/html/RM/H5G/H5Gopen.htm
index 5394c70..d8c6bf1 100644
--- a/html/RM/H5G/H5Gopen.htm
+++ b/html/RM/H5G/H5Gopen.htm
@@ -25,11 +25,12 @@
<dt><div align=right><font color=999999 size=-1><i>
- Last modified: 28 August 2012</i></font></div>
+ Last modified: 9 October 2014</i></font></div></dt>
- <dt><strong>Name:</strong> <a name="Group-Open">H5Gopen</a>
- <dt><strong>Signature:</strong>
+ <dt><strong>Name:</strong> <a name="Group-Open">H5Gopen</a></dt>
+ <br />
+ <dt><strong>Signature:</strong></dt>
<dd><em>hid_t </em><code>H5Gopen</code>(
<em>hid_t</em> <code>loc_id</code>,
<em>const char *</em><code>name</code>
@@ -122,6 +123,11 @@ SUBROUTINE h5gopen_f(loc_id, name, grp_id, hdferr, gapl_id)
! Group access property list identifier
END SUBROUTINE h5gopen_f
</pre>
+
+ <dt><strong>See Also:</a></strong></dt>
+ <dd>
+ <a href="http://www.hdfgroup.org/HDF5/doc/Advanced/UsingIdentifiers/index.html">
+ “Using Identifiers”</a></dd>
<!-- NEW PAGE -->
<p>
diff --git a/html/RM/H5G/H5Gopen2.htm b/html/RM/H5G/H5Gopen2.htm
index 988f259..baa119e 100644
--- a/html/RM/H5G/H5Gopen2.htm
+++ b/html/RM/H5G/H5Gopen2.htm
@@ -24,11 +24,11 @@
<dl>
<dt><div align=right><font color=999999 size=-1><i>
- Last modified: 17 August 2010
- </i></font></div>
+ Last modified: 9 October 2014</i></font></div></dt>
- <dt><strong>Name:</strong> <a name="Group-Open2">H5Gopen2</a>
- <dt><strong>Signature:</strong>
+ <dt><strong>Name:</strong> <a name="Group-Open2">H5Gopen2</a></dt>
+ <br />
+ <dt><strong>Signature:</strong></dt>
<dd><em>hid_t </em><code>H5Gopen2</code>(
<em>hid_t </em><code>loc_id</code>,
<em>const char * </em><code>name</code>,
@@ -84,11 +84,18 @@
otherwise returns a negative value.
<p>
- <dt><strong>Fortran90 Interface:</strong>
- See listing under <a href="RM_H5G.html#Group-Open"><code>H5Gopen</code></a>.
+ <dt><strong>Fortran90 Interface:</strong></dt>
+ <dd>See listing under
+ <a href="RM_H5G.html#Group-Open"><code>H5Gopen</code></a>.</dd>
+ <br />
+ <dt><strong>See Also:</a></strong></dt>
+ <dd>
+ <a href="http://www.hdfgroup.org/HDF5/doc/Advanced/UsingIdentifiers/index.html">
+ “Using Identifiers”</a></dd>
+
<p>
- <dt><strong>History:</strong>
+ <dt><strong>History:</strong></dt>
<dd><table width="90%">
<tr>
<td valign="top" align="left" width="10%">
diff --git a/html/RM/H5I/H5Isearch.htm b/html/RM/H5I/H5Isearch.htm
index 7eccbd1..b5b8baf 100644
--- a/html/RM/H5I/H5Isearch.htm
+++ b/html/RM/H5I/H5Isearch.htm
@@ -25,7 +25,7 @@
<dt><div align=right><font color=999999 size=-1><i>
- Last modified: 24 August 2012
+ Last modified: 18 September 2014
</i></font></div>
@@ -42,7 +42,7 @@
<dd>Finds the memory referred to by an ID within the given ID type
such that some criterion is satisfied.
<dt><strong>Description:</strong>
- <dd><code>H5Isearch</code> searches through a give ID type
+ <dd><code>H5Isearch</code> searches through a given ID type
to find an object that satisfies the criteria
defined by <code>func</code>.
If such an object is found,
@@ -56,24 +56,32 @@
The <code>type</code> parameter is the identifier for
the ID type which is to be searched.
This identifier must have been created by a call to
- <code>H5Iregister_type</code>.
-
+ <code>H5Iregister_type</code>.
<p>
The parameter <code>func</code> is a function pointer to a function
which takes three parameters.
- The first parameter is a <em>void *</em>.
- It will be a pointer the object to be tested.
+ The first parameter is a <em>void *</em> and
+ will be a pointer to the object to be tested.
This is the same object that was placed in storage
using <code>H5Iregister</code>.
- The second parameter is a <em>hid_t</em>.
- It is the ID of the object to be tested.
+ The second parameter is a <em>hid_t</em> and
+ is the ID of the object to be tested.
The last parameter is a <em>void *</em>.
This is the <code>key</code> parameter
- and can be used however the user finds helpful.
- Or it can simply be ignored if it is not needed.
+ and can be used however the user finds helpful,
+ or it can be ignored if it is not needed.
<code>func</code> returns 0 if the object it is testing
does not pass its criteria. A non-zero value should be
- returned if the object does pass its criteria.
+ returned if the object does pass its criteria.
+ <code>H5I_search__func_t</code> is defined in H5Ipublic.h and
+ is shown below.
+
+<dir>
+<pre>
+typedef int (*H5I_search_func_t)(<i>void</i> *obj, <i>hid_t</i> id, <i>void</i> *key);
+</pre>
+</dir>
+
<p>
The <code>key</code> parameter will be passed to the
@@ -123,7 +131,7 @@
<dd>Returns a pointer to the object which satisfies the search function
on success, <code>NULL</code> on failure.
<dt><strong>Fortran90 Interface:</strong>
- <dd>This function is not supported in FORTRAN 90.
+ <dd>None.
<!--<dt><strong>Non-C API(s):</strong>
<dd>
diff --git a/html/RM/H5L/H5Ldelete.htm b/html/RM/H5L/H5Ldelete.htm
index 835edab..25323e8 100644
--- a/html/RM/H5L/H5Ldelete.htm
+++ b/html/RM/H5L/H5Ldelete.htm
@@ -22,6 +22,11 @@
<!-- HEADER RIGHT "H5Ldelete" -->
<hr>
<dl>
+
+<dt><div align=right><font color=999999 size=-1><i>
+ Last modified: 16 September 2014
+ </i></font></div>
+
<dt><strong>Name:</strong> <a name="Link-Delete">H5Ldelete</a>
<dt><strong>Signature:</strong>
<dd><em>herr_t </em><code>H5Ldelete</code>(
@@ -51,13 +56,6 @@
Objects which are open are not removed until all identifiers to
the object are closed.
<p>
- Note that space identified as freespace is available for re-use
- only as long as the file remains open; once a file has been
- closed, the HDF5 library loses track of freespace. See
- “<a href="../H5.user/Performance.html#Freespace">Freespace
- Management</a>” in “Performace Analysis and
- Issues” for further details.
- <p>
<dt><strong>Warning:</strong>
<dd>Exercise caution in the use of <code>H5Ldelete</code>;
if the link being removed is on the only path leading to an
diff --git a/html/RM/H5L/H5Lget_info.htm b/html/RM/H5L/H5Lget_info.htm
index 1225dd0..3e7d38c 100644
--- a/html/RM/H5L/H5Lget_info.htm
+++ b/html/RM/H5L/H5Lget_info.htm
@@ -24,7 +24,7 @@
<dl>
<dt><div align=right><font color=999999 size=-1><i>
- Last modified: 11 January 2010
+ Last modified: 24 September 2014
</i></font></div>
<dt><strong>Name:</strong> <a name="Link-GetInfo">H5Lget_info</a>
@@ -147,6 +147,9 @@
UTF-8 Unicode encoding
</td></tr>
</table>
+ This value is set with
+ <a href="RM_H5P.html#Property-SetCharEncoding">
+ <code>H5Pset_char_encoding</code></a>.
<p>
<code>address</code> and <code>val_size</code> are returned
for hard and symbolic links, respectively.
diff --git a/html/RM/H5L/H5Literate.htm b/html/RM/H5L/H5Literate.htm
index 99b3e9b..4c67c79 100644
--- a/html/RM/H5L/H5Literate.htm
+++ b/html/RM/H5L/H5Literate.htm
@@ -23,7 +23,7 @@
<hr>
<dl>
<dt><div align=right><font color=999999 size=-1><i>
- Last modified: 24 August 2012
+ Last modified: 26 September 2014
</i></font></div>
<dt><strong>Name:</strong> <a name="Link-Iterate">H5Literate</a>
@@ -230,6 +230,19 @@
<dd>
<?php include("H5L/h5literate_f_F03.htm"); ?>
+
+
+ <br />
+ <dt><strong>Programming Note for Fortran Developers:</strong>
+ <dd>
+ <p>The integer type of the callback function must match the C
+ integer type. Therefore, for portability, all Fortran callback
+ functions used by <code>h5literate_f</code> should be declared as
+ <code>INTEGER(KIND=C_INT)</code>.
+ </p></dd>
+
+
+
<p>
<dt><strong>History:</strong>
diff --git a/html/RM/H5L/H5Literate_by_name.htm b/html/RM/H5L/H5Literate_by_name.htm
index 645e6bc..8116936 100644
--- a/html/RM/H5L/H5Literate_by_name.htm
+++ b/html/RM/H5L/H5Literate_by_name.htm
@@ -23,7 +23,7 @@
<hr>
<dl>
<dt><div align=right><font color=999999 size=-1><i>
- Last modified: 24 August 2012
+ Last modified: 26 September 2014
</i></font></div>
<dt><strong>Name:</strong> <a name="Link-IterateByName">H5Literate_by_name</a>
@@ -208,11 +208,22 @@
the library, or the first negative value returned by an operator.
<p>
- <dt><strong>Fortran2003 Interface:</strong> h5literate_f
+ <dt><strong>Fortran2003 Interface:</strong> h5literate_by_name_f
<dd>
<?php include("H5L/h5literate_by_name_f_F03.htm"); ?>
+
+ <br />
+ <dt><strong>Programming Note for Fortran Developers:</strong>
+ <dd>
+ <p>The integer type of the callback function must match the C
+ integer type. Therefore, for portability, all Fortran callback
+ functions used by <code>h5literate_by_name_f</code> should be declared as
+ <code>INTEGER(KIND=C_INT)</code>.
+ </p></dd>
+
+
<p>
<dt><strong>History:</strong>
<dd><table width="90%">
diff --git a/html/RM/H5O/H5Oget_info.htm b/html/RM/H5O/H5Oget_info.htm
index a4a91ef..487983f 100644
--- a/html/RM/H5O/H5Oget_info.htm
+++ b/html/RM/H5O/H5Oget_info.htm
@@ -24,7 +24,7 @@
<dl>
<dt><div align=right><font color=999999 size=-1><i>
- Last modified: 15 April 2013
+ Last modified: 17 September 2014
</i></font></div>
<dt><strong>Name:</strong> <a name="Object-GetInfo">H5Oget_info</a>
@@ -110,6 +110,8 @@ typedef enum H5O_type_t {
/* be last!) */
} H5O_type_t;
</pre>
+ <p>Note that <code>object_id</code> refers only to the types
+ specified by <code>H5O_type_t</code>.</p>
</dir>
<br />
<p>
@@ -151,7 +153,8 @@ typedef struct H5O_hdr_info_t {
<dd><table>
<tr>
<td valign="top"><em>hid_t</em> <code>object_id</code></td>
- <td valign="top">IN: Identifier for target object</td></tr>
+ <td valign="top">IN: Identifier for object of type specified
+ by <code>H5O_type_t</code></td></tr>
<tr>
<td valign="top"><em>H5O_info_t *</em><code>object_info </code></td>
<td valign="top">OUT: Buffer in which to return object
diff --git a/html/RM/H5O/H5Oopen.htm b/html/RM/H5O/H5Oopen.htm
index f282687..48838f6 100644
--- a/html/RM/H5O/H5Oopen.htm
+++ b/html/RM/H5O/H5Oopen.htm
@@ -24,10 +24,10 @@
<dl>
<dt><div align=right><font color=999999 size=-1><i>
- Last modified: 10 April 2013
- </i></font></div>
+ Last modified: 14 October 2014</i></font></div></dt>
- <dt><strong>Name:</strong> <a name="Object-Open">H5Oopen</a>
+ <dt><strong>Name:</strong> <a name="Object-Open">H5Oopen</a></dt>
+ <br />
<dt><strong>Signature:</strong>
<dd><em>hid_t </em><code>H5Oopen</code>(
<em>hid_t </em><code>loc_id</code>,
@@ -39,7 +39,8 @@
<dd>Opens an object in an HDF5 file by location identifier and path name.
<p></p>
<dt><strong>Description:</strong>
- <dd><code>H5Oopen</code> opens a group, dataset, or named datatype
+ <dd><code>H5Oopen</code> opens a group, dataset, or
+ committed (named) datatype
specified by a location, <code>loc_id</code>, and a path name,
<code>name</code>, in an HDF5 file.
<p>
@@ -100,8 +101,14 @@
<dd>
<?php include("H5O/h5oopen_f_F90.htm"); ?>
-
-<p></p>
+
+<br />
+ <dt><strong>See Also:</a></strong></dt>
+ <dd>
+ <a href="http://www.hdfgroup.org/HDF5/doc/Advanced/UsingIdentifiers/index.html">
+ “Using Identifiers”</a></dd>
+
+<br />
<dt><strong>History:</strong>
<dd><table width="90%">
<tr>
diff --git a/html/RM/H5O/H5Oopen_by_addr.htm b/html/RM/H5O/H5Oopen_by_addr.htm
index 600cb1b..a999a3a 100644
--- a/html/RM/H5O/H5Oopen_by_addr.htm
+++ b/html/RM/H5O/H5Oopen_by_addr.htm
@@ -24,10 +24,11 @@
<dl>
<dt><div align=right><font color=999999 size=-1><i>
- Last modified: 10 April 2013
- </i></font></div>
+ Last modified: 14 October 2014</i></font></div></dt>
- <dt><strong>Name:</strong> <a name="Object-OpenByAddr">H5Oopen_by_addr</a>
+ <dt><strong>Name:</strong> <a name="Object-OpenByAddr">H5Oopen_by_addr</a>
+ </dt>
+ <br />
<dt><strong>Signature:</strong>
<dd><em>hid_t </em><code>H5Oopen_by_addr</code>(
<em>hid_t </em><code>loc_id</code>,
@@ -41,7 +42,8 @@
<p></p>
<dt><strong>Description:</strong>
<dd>
- <code>H5Oopen_by_addr</code> opens a group, dataset, or named datatype
+ <code>H5Oopen_by_addr</code> opens a group, dataset, or
+ committed (named) datatype
using its address within an HDF5 file, <code>addr</code>.
The resulting opened object is identical to an object opened with
<code>H5Oopen</code> and should be closed with <code>H5Oclose</code>
@@ -125,8 +127,14 @@
<dd>
<?php include("H5O/h5oopen_by_addr_f_F90.htm"); ?>
-
-<p></p>
+
+<br />
+ <dt><strong>See Also:</a></strong></dt>
+ <dd>
+ <a href="http://www.hdfgroup.org/HDF5/doc/Advanced/UsingIdentifiers/index.html">
+ “Using Identifiers”</a></dd>
+
+<br />
<dt><strong>History:</strong>
<dd><table width="90%">
<tr>
diff --git a/html/RM/H5O/H5Oopen_by_idx.htm b/html/RM/H5O/H5Oopen_by_idx.htm
index 2414070..742a928 100644
--- a/html/RM/H5O/H5Oopen_by_idx.htm
+++ b/html/RM/H5O/H5Oopen_by_idx.htm
@@ -24,8 +24,7 @@
<dl>
<dt><div align=right><font color=999999 size=-1><i>
- Last modified: 10 April 2013
- </i></font></div>
+ Last modified: 14 October 2014</i></font></div></dt>
<dt><strong>Name:</strong> <a name="Object-OpenByIdx">H5Oopen_by_idx</a>
<p></p>
@@ -122,8 +121,15 @@
<dd>
<?php include("H5O/h5oopen_by_idx_f_F90.htm"); ?>
+
+ <br />
+ <dt><strong>See Also:</a></strong></dt>
+ <dd>
+ <a href="http://www.hdfgroup.org/HDF5/doc/Advanced/UsingIdentifiers/index.html">
+ “Using Identifiers”</a></dd>
+
- <p>
+ <br />
<dt><strong>History:</strong>
<dd><table width="90%">
<tr>
diff --git a/html/RM/H5P/H5Pcreate.htm b/html/RM/H5P/H5Pcreate.htm
index b80ec75..261e23a 100644
--- a/html/RM/H5P/H5Pcreate.htm
+++ b/html/RM/H5P/H5Pcreate.htm
@@ -24,21 +24,21 @@
<dl>
<dt><div align=right><font color=999999 size=-1><i>
- Last modified: 26 March 2014
- </i></font></div>
+ Last modified: 9 October 2014</i></font></div></dt>
- <dt><strong>Name:</strong> <a name="Property-Create">H5Pcreate</a>
- <dt><strong>Signature:</strong>
+ <dt><strong>Name:</strong> <a name="Property-Create">H5Pcreate</a></dt>
+ <br />
+ <dt><strong>Signature:</strong></dt>
<dd><em>hid_t </em><code>H5Pcreate</code>(
<em>hid_t</em> <code>cls_id</code>
- )
+ )</dd>
- <p></p>
- <dt><strong>Purpose:</strong>
- <dd>Creates a new property list as an instance of a property list class.
+ <br />
+ <dt><strong>Purpose:</strong></dt>
+ <dd>Creates a new property list as an instance of a property list class.</dd>
- <p></p>
- <dt><strong>Description:</strong>
+ <br />
+ <dt><strong>Description:</strong></dt>
<dd><code>H5Pcreate</code> creates a new property list as an instance of
some property list class. The new property list is initialized
with default values for the specified class. The classes are as
@@ -138,22 +138,22 @@
<code>H5Pclose</code>;
otherwise, errors are likely to occur.
- <p></p>
- <dt><strong>Parameters:</strong>
+ <br />
+ <dt><strong>Parameters:</strong></dt>
<dd><table>
<tr>
<td valign="top"><em>hid_t</em> <code>cls_id </code></td>
<td valign="top">IN: The class of the property list to create.</td></tr>
</table></dd>
- <p></p>
+ <br />
<!-- NEW PAGE -->
- <dt><strong>Returns:</strong>
+ <dt><strong>Returns:</strong></dt>
<dd>Returns a property list identifier (<code>plist</code>) if successful;
- otherwise Fail (-1).
+ otherwise Fail (-1).</dd>
- <p></p>
- <dt><strong>Fortran90 Interface:</strong> h5pcreate_f
+ <br />
+ <dt><strong>Fortran90 Interface:</strong> h5pcreate_f</dt>
<dd>
<pre>
SUBROUTINE h5pcreate_f(classtype, prp_id, hdferr)
@@ -170,9 +170,15 @@ SUBROUTINE h5pcreate_f(classtype, prp_id, hdferr)
INTEGER, INTENT(OUT) :: hdferr ! Error code
! 0 on success and -1 on failure
END SUBROUTINE h5pcreate_f
- </pre>
+ </pre></dd>
+
+ <dt><strong>See Also:</a></strong></dt>
+ <dd>
+ <a href="http://www.hdfgroup.org/HDF5/doc/Advanced/UsingIdentifiers/index.html">
+ “Using Identifiers”</a></dd>
+
- <p></p>
+ <br />
<dt><strong>History:</strong>
<dd><table width="90%">
<tr>
diff --git a/html/RM/H5P/H5Pget_char_encoding.htm b/html/RM/H5P/H5Pget_char_encoding.htm
index 2c4d32f..1075d60 100644
--- a/html/RM/H5P/H5Pget_char_encoding.htm
+++ b/html/RM/H5P/H5Pget_char_encoding.htm
@@ -24,14 +24,14 @@
<dl>
<dt><div align=right><font color=999999 size=-1><i>
- Last modified: 27 March 2014
+ Last modified: 24 September 2014
</i></font></div>
<dt><strong>Name:</strong> <a name="Property-GetCharEncoding">H5Pget_char_encoding</a>
<dt><strong>Signature:</strong>
<dd><em>herr_t </em><code>H5Pget_char_encoding</code>(
<em>hid_t </em><code>plist_id</code>,
- <em>H5T_cset_t</em> <code>encoding</code>
+ <em>H5T_cset_t*</em> <code>encoding</code>
)
<p>
@@ -101,6 +101,19 @@ SUBROUTINE h5pget_char_encoding_f(plist_id, encoding, hdferr)
! 0 on success and -1 on failure
END SUBROUTINE h5pget_char_encoding_f
</pre>
+
+
+ <dt><strong>See Also:</a></strong></dt>
+ <dd><a href="RM_H5P.html#Property-SetCharEncoding">
+ <code>H5Pset_char_encoding</code></a></dd>
+
+ <dd>
+ <a href="http://www.hdfgroup.org/HDF5/doc/Advanced/UsingUnicode/index.html">
+ “Using UTF-8 Encoding in HDF5 Applications”</a>
+ </dd>
+
+
+
<p>
<dt><strong>History:</strong>
diff --git a/html/RM/H5P/H5Pget_core_write_tracking.htm b/html/RM/H5P/H5Pget_core_write_tracking.htm
index 0af354e..83c5fe5 100644
--- a/html/RM/H5P/H5Pget_core_write_tracking.htm
+++ b/html/RM/H5P/H5Pget_core_write_tracking.htm
@@ -51,21 +51,21 @@
<dt><strong>Purpose:</strong></dt>
<dd>Gets information about the write tracking feature used by the
- Core VFD.</dd>
+ core VFD.</dd>
<br />
<dt><strong>Description:</strong></dt>
- <dd>When a file is created or opened for writing using the Core
+ <dd>When a file is created or opened for writing using the core
virtual file driver (VFD) with the backing store option turned on,
the VFD can be configured to track changes to the file and only
write out the modified bytes. To avoid a large number of small
writes, the changes can be aggregated into pages of a user-specified
- size. The Core VFD is also known as the Memory VFD. The driver
+ size. The core VFD is also known as the memory VFD. The driver
identifier is <code>H5FD_CORE</code>.</dd>
<br />
<dt><strong>Notes:</strong></dt>
- <dd>This function is only for use with the Core VFD and must be used
+ <dd>This function is only for use with the core VFD and must be used
after the call to <code>H5Pset_fapl_core</code>. It is an error to
use this function with any other VFD.
diff --git a/html/RM/H5P/H5Pset_cache.htm b/html/RM/H5P/H5Pset_cache.htm
index f3ab9fa..dc9b330 100644
--- a/html/RM/H5P/H5Pset_cache.htm
+++ b/html/RM/H5P/H5Pset_cache.htm
@@ -23,51 +23,65 @@
<hr>
<dl>
<dt><div align=right><font color=999999 size=-1><i>
- Last modified: 15 April 2009
- </i></font></div>
+ Last modified: 22 July 2014
+ </i></font></div></dt>
- <dt><strong>Name:</strong> <a name="Property-SetCache">H5Pset_cache</a>
- <dt><strong>Signature:</strong>
- <dd><em>herr_t</em> <code>H5Pset_cache</code>(
- <em>hid_t</em> <code>plist_id</code>,
- <em>int</em> <code>mdc_nelmts</code>,
- <em>size_t</em> <code>rdcc_nelmts</code>,
- <em>size_t</em> <code>rdcc_nbytes</code>,
- <em>double</em> <code>rdcc_w0</code>
- )
+ <dt><strong>Name:</strong> <a name="Property-SetCache">H5Pset_cache</a>
+ </dt>
+ <br />
+ <dt><strong>Signature:</strong></dt>
+ <dd><code><em>herr_t</em> H5Pset_cache(<em>hid_t</em> plist_id,
+ <em>int</em> mdc_nelmts,
+ <em>size_t</em> rdcc_nslots,
+ <em>size_t</em> rdcc_nbytes,
+ <em>double</em> rdcc_w0)</code></dd>
+
- <p>
- <dt><strong>Purpose:</strong>
- <dd>Sets the raw data chunk cache parameters.
-
- <p>
- <dt><strong>Description:</strong>
+ <br />
+ <dt><strong>Purpose:</strong></dt>
+ <dd>Sets the raw data chunk cache parameters.</dd>
+
+ <br />
+ <dt><strong>Motivation:</strong></dt>
+ <dd>
+ Setting raw data chunk cache parameters can be done with
+ <code>H5Pset_cache</code>, <code>H5Pset_chunk_cache</code>, or
+ a combination of both. <code>H5Pset_cache</code> is used to adjust
+ the chunk cache parameters for all datasets via a global setting for
+ the file, and <code>H5Pset_chunk_cache</code> is used to adjust
+ the chunk cache parameters for individual datasets. When both are
+ used, parameters set with <code>H5Pset_chunk_cache</code>
+ will override any parameters set with <code>H5Pset_cache</code>.
+
+ <p>Optimum chunk cache parameters may vary widely depending on
+ different data layout and access patterns. For datasets with low
+ performance requirements for example, changing the cache settings
+ can save memory. </dd>
+
+ <dt><strong>Description:</strong></dt>
<dd><code>H5Pset_cache</code> sets
the number of elements, the total number of bytes, and
- the preemption policy value in the raw data chunk cache.
- <p>
- The <em>plist_id</em> is a file access property list.
+ the preemption policy value for all datasets in a file on the
+ file’s file access property list.
+
<p>
- The number of elements (objects) in the raw data chunk cache
- is <em>rdcc_nelmts</em>.
- The total size of the raw data chunk cache and the preemption policy
- are <em>rdcc_nbytes</em> and <em>rdcc_w0</em>, respectively.
+ The raw data chunk cache inserts chunks into the cache by first
+ computing a hash value using the address of a chunk and then by
+ using that hash value as the chunk’s index into the table
+ of cached chunks. In other words, the size of this hash table
+ and the number of possible hash values is determined by the
+ <code>rdcc_nslots</code> parameter. If a different chunk in the
+ cache has the same hash value, a collision will occur, which will
+ reduce efficiency. If inserting the chunk into the cache would
+ cause the cache to be too big, then the cache will be pruned
+ according to the <code>rdcc_w0</code> parameter. </p>
+
<p>
- Any (or all) of the <code>H5Pget_cache</code> pointer arguments
- may be null pointers.
- <p>
- The <em>rdcc_w0</em> value should be between 0 and 1 inclusive and
- indicates how much chunks that have been fully read are
- favored for preemption. A value of zero means fully read
- chunks are treated no differently than other chunks (the
- preemption is strictly LRU) while a value of one means fully
- read chunks are always preempted before other chunks.
- <p>
- The <code>*mdc_nelmts</code> parameter is no longer used;
- any value passed in that parameter is ignored.
-
- <p>
- <dt><strong>Note:</strong>
+ The <code>mdc_nelmts</code> parameter is no longer used;
+ any value passed in that parameter will be ignored.</p></dd>
+
+
+ <dt><strong>Note:</strong></dt>
<dd>Raw dataset chunk caching is not currently supported when using the
MPI I/O and MPI POSIX file drivers in read/write mode; see
<a href="#Property-SetFaplMpio"><code>H5Pset_fapl_mpio</code></a> and
@@ -78,63 +92,103 @@
and <code>H5Pset_cache</code> will have no effect on performance.
<p>
Raw dataset chunk caching is supported when these drivers are
- used in read-only mode.
+ used in read-only mode.</p></dd>
- <p>
- <dt><strong>Parameters:</strong>
- <dd><table>
+ <br />
+ <dt><strong>Parameters:</strong></dt>
+ <dd><table width="95%">
<tr>
- <td valign="top"><em>hid_t</em> <code>plist_id</code></td>
- <td valign="top">IN: Identifier of the file access property
- list.</td></tr>
+ <td valign="top" width="15%"><code><em>hid_t</em>
+ plist_id</code></td>
+ <td valign="top" width="85%">IN: File access property list
+ identifier.</td></tr>
<tr>
- <td valign="top"><em>int</em> <code>mdc_nelmts</code></td>
+ <td valign="top"><code><em>int</em> mdc_nelmts</code></td>
<td valign="top">IN: <i>No longer used;
any value passed is ignored.</i></td></tr>
<tr>
- <td valign="top"><em>size_t</em> <code>rdcc_nelmts</code></td>
- <td valign="top">IN: Number of elements (objects) in the raw data
- chunk cache.</td></tr>
+ <td valign="top"><code><em>size_t</em> rdcc_nslots</code></td>
+ <td valign="top">IN: The number of chunk slots in the raw
+ data chunk cache for this dataset. Increasing this value
+ reduces the number of cache collisions, but slightly
+ increases the memory used. Due to the hashing strategy,
+ this value should ideally be a prime number. As a rule of
+ thumb, this value should be at least 10 times the number
+ of chunks that can fit in <code>rdcc_nbytes</code> bytes.
+ For maximum performance, this value should be set
+ approximately 100 times that number of chunks. The default
+ value is 521.</td></tr>
<tr>
- <td valign="top"><em>size_t</em> <code>rdcc_nbytes </code></td>
- <td valign="top">IN: Total size of the raw data chunk cache,
- in bytes.</td></tr>
+ <td valign="top"><code><em>size_t</em> rdcc_nbytes</code></td>
+ <td valign="top">IN: Total size of the raw data chunk cache
+ in bytes. The default size is 1 MB per dataset.</td></tr>
<tr>
- <td valign="top"><em>double</em> <code>rdcc_w0</code></td>
- <td valign="top">IN: Preemption policy.</td></tr>
- </table>
+ <td valign="top"><code><em>double</em> rdcc_w0</code></td>
+ <td valign="top">IN: The chunk preemption policy for all
+ datasets. This must be between 0 and 1 inclusive and
+ indicates the weighting according to which chunks which
+ have been fully read or written are penalized when
+ determining which chunks to flush from cache. A value of
+ 0 means fully read or written chunks are treated no
+ differently than other chunks (the preemption is strictly
+ LRU) while a value of 1 means fully read or written chunks
+ are always preempted before other chunks. If your application
+ only reads or writes data once, this can be safely set to 1.
+ Otherwise, this should be set lower depending on how often
+ you re-read or re-write the same data.
+ <br /><br />
+ The default value is 0.75. If the value passed is
+ <code>H5D_CHUNK_CACHE_W0_DEFAULT</code>, then the property
+ will not be set on <code>dapl_id</code>, and the parameter
+ will come from the file access property list. </td></tr>
+ </table></dd>
<p>
- <dt><strong>Returns:</strong>
+ <dt><strong>Returns:</strong></dt>
<dd>Returns a non-negative value if successful;
- otherwise returns a negative value.
+ otherwise returns a negative value.</dd>
- <p>
- <dt><strong>Fortran90 Interface:</strong> h5pset_cache_f
+ <br />
+ <dt><strong>Fortran90 Interface:</strong> h5pset_cache_f</dt>
<dd>
<pre>
-SUBROUTINE h5pset_cache_f(prp_id, mdc_nelmts,rdcc_nelmts, rdcc_nbytes, rdcc_w0, hdferr)
+SUBROUTINE h5pset_cache_f(prp_id, mdc_nelmts, rdcc_nslots, rdcc_nbytes, rdcc_w0, hdferr)
IMPLICIT NONE
INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier
- INTEGER, INTENT(IN) :: mdc_nelmts ! Number of elements (objects)
- ! in the meta data cache
- INTEGER(SIZE_T), INTENT(IN) :: rdcc_nelmts ! Number of elements (objects)
- ! in the meta data cache
+ INTEGER, INTENT(IN) :: mdc_nelmts ! No longer used; any value passed
+ ! is ignored.
+ INTEGER(SIZE_T), INTENT(IN) :: rdcc_nslots ! The number of chunk slots
+ ! in the raw data chunk cache.
INTEGER(SIZE_T), INTENT(IN) :: rdcc_nbytes ! Total size of the raw data
- ! chunk cache, in bytes
+ ! chunk cache in bytes.
REAL, INTENT(IN) :: rdcc_w0 ! Preemption policy
INTEGER, INTENT(OUT) :: hdferr ! Error code
! 0 on success and -1 on failure
END SUBROUTINE h5pset_cache_f
</pre>
+
+<dt><strong>See Also:</strong></dt>
+ <dd><a href="RM_H5P.html#Property-GetCache">
+ <code>H5Pget_cache</code></a>
+ <br />
+ <a href="RM_H5P.html#Property-SetChunkCache">
+ <code>H5Pset_chunk_cache</code></a>
+ <br />
+ <a href="http://www.hdfgroup.org/HDF5/doc/Advanced/Chunking/index.html">
+ “Chunking in HDF5”</a>
+ </dd>
+ <br />
+
+
+
- <dt><strong>History:</strong>
+ <dt><strong>History:</strong></dt>
<ul><table width="90%">
<tr>
<td valign="top" align="left" width="10%">
<strong>Release</strong> </td>
<td valign="top" align="left">
- <strong>Change</strong></td>
+ <strong>Change</strong></td></tr>
<tr>
<td valign="top">1.8.0</td>
<td valign="top">
@@ -158,5 +212,7 @@ END SUBROUTINE h5pset_cache_f
<td valign="top"> </td></tr>
</table></ul>
</dl>
-
+<br />
+<br />
+<br />
diff --git a/html/RM/H5P/H5Pset_char_encoding.htm b/html/RM/H5P/H5Pset_char_encoding.htm
index 70e7d1a..fd03e28 100644
--- a/html/RM/H5P/H5Pset_char_encoding.htm
+++ b/html/RM/H5P/H5Pset_char_encoding.htm
@@ -24,7 +24,7 @@
<dl>
<dt><div align=right><font color=999999 size=-1><i>
- Last modified: 27 March 2014
+ Last modified: 24 September 2014
</i></font></div>
<dt><strong>Name:</strong> <a name="Property-SetCharEncoding">H5Pset_char_encoding</a>
@@ -71,7 +71,13 @@
will be encoded using the UTF-8 character set.
Similarly, names of attributes created with the
attribute creation property list <code>plist_id</code>
- will be encoded as UTF-8.
+ will be encoded as UTF-8.
+ <p>
+ ASCII and UTF-8 Unicode are the only currently supported
+ character encodings. Extended ASCII encodings (for example, ISO
+ 8859) are not supported. This encoding policy is not enforced by
+ the HDF5 Library. Using encodings other than ASCII and UTF-8 can
+ lead to compatibility and usability problems.
<p>
Note that <code>H5Pset_char_encoding</code>
sets the character set used for an HDF5 link or attribute name while
@@ -111,6 +117,16 @@ SUBROUTINE h5pset_char_encoding_f(plist_id, encoding, hdferr)
! 0 on success and -1 on failure
END SUBROUTINE h5pset_char_encoding_f
</pre></dd>
+
+
+
+ <dt><strong>See Also:</a></strong></dt>
+ <dd>
+ <a href="http://www.hdfgroup.org/HDF5/doc/Advanced/UsingUnicode/index.html">
+ “Using UTF-8 Encoding in HDF5 Applications”</a>
+ </dd>
+
+
<p>
<dt><strong>History:</strong>
diff --git a/html/RM/H5P/H5Pset_chunk_cache.htm b/html/RM/H5P/H5Pset_chunk_cache.htm
index feea4c6..c19a374 100644
--- a/html/RM/H5P/H5Pset_chunk_cache.htm
+++ b/html/RM/H5P/H5Pset_chunk_cache.htm
@@ -24,7 +24,7 @@
<dl>
<dt><div align=right><font color=999999 size=-1><i>
- Last modified: 11 November 2011
+ Last modified: 4 November 2014
</i></font></div>
<dt><strong>Name:</strong> <a name="Property-SetChunkCache">H5Pset_chunk_cache</a>
@@ -43,13 +43,14 @@
<p>
<dt><strong>Motivation:</strong>
- <dd><code>H5Pset_chunk_cache</code>
- is used to adjust the chunk cache parameters on a per-dataset basis, as
- opposed to a global setting for the file. The optimum chunk cache
- parameters vary wildly with different data layout and access patterns, so
- for optimal performance they must be set individually for each dataset.
- It may also be beneficial to reduce the size of the chunk cache for
- datasets whose performance is not important in order to save memory space.
+ <dd><code>H5Pset_chunk_cache</code> is used to adjust the chunk
+ cache parameters on a per-dataset basis, as opposed to a global
+ setting for the file using <code>H5Pset_cache</code>. The optimum
+ chunk cache parameters may vary widely with different data layout
+ and access patterns, so for optimal performance they must be set
+ individually for each dataset. It may also be beneficial to reduce
+ the size of the chunk cache for datasets whose performance is not
+ important in order to save memory space.
<p>
<dt><strong>Description:</strong>
@@ -129,20 +130,68 @@
</td></tr>
</table>
- <p>
- <dt><strong>Returns:</strong>
+ <br />
+ <dt><strong>Returns:</strong></dt>
<dd>Returns a non-negative value if successful;
- otherwise returns a negative value.
+ otherwise returns a negative value.</dd>
- <p>
- <dt><strong>Example Usage:</strong>
+ <br />
+ <dt><strong>Example Usage:</strong></dt>
<dd>The following code sets the chunk cache to use a hash table with 12421
elements and a maximum size of 16 MB, while using the preemption policy
- specified for the entire file:
+ specified for the entire file:<br />
<dir><pre>
<code>H5Pset_chunk_cache(dapl_id, 12421, 16*1024*1024, H5D_CHUNK_CACHE_W0_DEFAULT);</code>
-</pre></dir>
+</pre></dir></dd>
+
+
+
+
+<dt><strong>Usage Notes:</strong>
+ <dd>The chunk cache size is a property for accessing a dataset and
+ is not stored with a dataset or a file. To guarantee
+ the same chunk cache settings each time <code>H5Dopen</code> is
+ called, call <code>H5Dopen</code> with a dataset
+ access property list (<code>H5Dopen(<em>hid_t</em> loc_id,
+ <em>const char</em> *name, <em>hid_t</em> dapl_id))</code> where
+ the chunk cache size is set by calling <code>H5Pset_chunk_cache</code>
+ for that property list. The property list can be used for multiple
+ accesses in the same application. <br /><br />
+
+ For files where the same chunk cache size will be appropriate for
+ all or most datasets, <code>H5Pset_cache</code> can be called with
+ a file access property list to set the chunk cache size for accessing
+ all datasets in the file. <br /><br />
+
+ Both methods can be used in combination, in which case the chunk cache
+ size set by <code>H5Pset_cache</code> will apply except for specific
+ datasets where <code>H5Dopen</code> is called with dataset property
+ list with the chunk cache size set by <code>H5Pset_chunk_cache</code>.
+ <br /><br />
+ In the absence of any cache settings, <code>H5Dopen</code> will by
+ default create a 1 MB chunk cache for the opened dataset. If this
+ size happens to be appropriate, no call will be needed to either
+ function to set the chunk cache size.<br /><br />
+
+ It is also possible that a change in access pattern for later access
+ to a dataset will change the appropriate chunk cache size. For more
+ detailed information on chunks, chunk caching, and performance
+ pitfalls, see
+ <a href="http://www.hdfgroup.org/HDF5/doc/Advanced/Chunking/index.html">
+ “Chunking in HDF5”</a>.
+
+
+
+
+ </dd>
+
+
+
+<br />
+
+
+
<dt><strong>Fortran90 Interface:</strong> h5pset_chunk_cache_f
<dd>
<pre>
@@ -163,12 +212,16 @@ END SUBROUTINE h5pset_chunk_cache_f
</pre>
<p>
- <dt><strong>See Also:</strong>
+ <dt><strong>See Also:</strong></dt>
<dd><a href="RM_H5P.html#Property-GetChunkCache">
- <code>H5Pget_chunk_cache</code></a>,
-
+ <code>H5Pget_chunk_cache</code></a>
+ <br />
<a href="RM_H5P.html#Property-SetCache">
- <code>H5Pset_cache</code></a>
+ <code>H5Pset_cache</code></a>
+ <br />
+ <a href="http://www.hdfgroup.org/HDF5/doc/Advanced/Chunking/index.html">
+ “Chunking in HDF5”</a>
+ </dd>
<p>
<p>
@@ -190,5 +243,8 @@ END SUBROUTINE h5pset_chunk_cache_f
</tr>
</table>
</dl>
+<br />
+<br />
+<br />
diff --git a/html/RM/H5P/H5Pset_core_write_tracking.htm b/html/RM/H5P/H5Pset_core_write_tracking.htm
index 50ecaf6..320c206 100644
--- a/html/RM/H5P/H5Pset_core_write_tracking.htm
+++ b/html/RM/H5P/H5Pset_core_write_tracking.htm
@@ -35,111 +35,138 @@
<dl>
<dt><div align="right"><font color="999999" size="-1"><i>
- Last modified: 2 May 2014
+ Last modified: 13 August 2014
</i></font></div></dt>
- <br />
+<p>
<dt><strong>Name:</strong>
<a name="Property-SetCoreWriteTracking">H5Pset_core_write_tracking</a></dt>
- <br />
+<p>
<dt><strong>Signature:</strong></dt>
- <dd><code><em>herr_t</em> H5Pset_core_write_tracking(<em>hid_t</em>
- fapl_id, <em>hbool_t</em> is_enabled, <em>size_t</em>
- page_size)</code></dd>
- <br />
-
+ <dd><code><em>herr_t</em> H5Pset_core_write_tracking(
+ <em>hid_t</em> fapl_id,
+ <em>hbool_t</em> is_enabled,
+ <em>size_t</em> page_size
+ )</code>
+ </dd>
+
+<p>
<dt><strong>Purpose:</strong></dt>
- <dd>Sets information about the write tracking feature used by the
- Core VFD.</dd>
- <br />
+ <dd>Sets write tracking information for core driver,
+ <code>H5FD_CORE</code>.
+ </dd>
+<p>
<dt><strong>Description:</strong></dt>
- <dd>When a file is created or opened for writing using the Core
- virtual file driver (VFD) with the backing store option turned on,
- the VFD can be configured to track changes to the file and only
- write out the modified bytes. To avoid a large number of small
- writes, the changes can be aggregated into pages of a user-specified
- size. The Core VFD is also known as the Memory VFD. The driver
- identifier is <code>H5FD_CORE</code>.
-
- <p>Setting the <code>page_size</code> parameter to zero will turn
- off tracking and cause the entire file to be written out to storage
- when closed.</p>
-
- <p>Setting the <code>page_size</code> parameter to 1 will enable
- tracking but with no paging.</p></dd>
- <br />
+ <dd>
+ When a file is created or opened for writing using the
+ core virtual file driver (VFD) with the backing store option turned on,
+ the core driver can be configured to track changes to the file
+ and write out only the modified bytes.
+ </p>
+ <p>
+ This write tracking feature is enabled and disabled with
+ <code>is_enabled</code>.
+ The default setting is that write tracking is disabled, or off.
+ </p>
+ <p>
+ To avoid a large number of small writes, changes can be
+ aggregated into pages of a user-specified size, <code>page_size</code>.
+ </p>
+ <p>
+ Setting <code>page_size</code> to <code>1</code> enables
+ tracking with no page aggregation.
+ </p>
+ <p>
+ The backing store option is set via the function
+ <a href="#Property-SetFaplCore"><code>H5Pset_fapl_core</code></a>.
+ </p>
+ </dd>
+<p>
<dt><strong>Notes:</strong></dt>
- <dd>Write tracking is turned off by default.
-
- <p>This function is only for use with the Core VFD and must be used
- after the call to <code>H5Pset_fapl_core</code>. It is an error to
- use this function with any other VFD.</p>
-
- <p>It is an error to use this function when the backing store flag
+ <dd>
+ This function is only for use with the core VFD and must be used
+ after the call to <code>H5Pset_fapl_core</code>.
+ It is an error to use this function with any other VFD.
+ </p>
+ <p>
+ It is an error to use this function when the backing store flag
has not been set using <code>H5Pset_fapl_core</code>.
-
- <p>This function only applies to the backing store write operation
+ </p>
+ <p>
+ This function only applies to the backing store write operation
which typically occurs when the file is flushed or closed. This
- function has no relationship to the increment parameter passed to
- <code>H5Pset_fapl_core</code>.</p>
-
- <p>For optimum performance, the <code>page_size</code> parameter
- should be a power of two.</p>
-
- <p>It is considered an error to set the page size to 0.</p></dd>
- <br />
+ function has no relationship to the <code>increment</code> parameter
+ passed to <code>H5Pset_fapl_core</code>.
+ </p>
+ <p>
+ For optimum performance, the <code>page_size</code> parameter
+ should be a power of two.
+ </p>
+ <p>
+ <p>It is an error to set the page size to 0.
+ </p>
+ </dd>
+<p>
<dt><strong>Parameters:</strong></dt>
<dd>
<table width="100%">
- <tr valign="bottom">
- <td width="17%"><code><em>hid_t</em> fapl_id</code></td>
- <td width="83%">IN: File access property list identifier.</td></tr>
- <tr valign="bottom">
- <td><code><em>hbool_t</em> is_enabled</code></td>
- <td>IN: Whether the feature is enabled.</td></tr>
- <tr valign="bottom">
- <td><code><em>size_t</em> page_size</code></td>
- <td>IN: Size, in bytes, of write aggregation pages.</td></tr>
+ <tr valign="top">
+ <td width="17%"><code><em>hid_t</em> fapl_id</code></td>
+ <td width="83%">IN: File access property list identifier.</td></tr>
+ <tr valign="top">
+ <td><code><em>hbool_t</em> is_enabled </code></td>
+ <td>IN: Boolean value specifying whether feature is enabled.
+ </td></tr>
+ <tr valign="top">
+ <td><code><em>size_t</em> page_size</code></td>
+ <td>IN: Positive integer specifying size, in bytes,
+ of write aggregation pages.
+ <br />
+ Value of <code>1</code> (one) enables tracking with no paging.
+ </td></tr>
</table>
</dd>
- <br />
+<p>
<dt><strong>Returns:</strong></dt>
<dd>Returns a non-negative value if successful.
- Otherwise returns a negative value.</dd>
- <br />
+ Otherwise returns a negative value.
+ </dd>
+<p>
<dt><strong>Fortran Interface:</strong></dt>
<dd>None</dd>
- <br />
+<p>
<dt><strong>See Also:</strong></dt>
<dd>
<a href="#Property-GetCoreWriteTracking"><code>
H5Pget_core_write_tracking</code></a>
</dd>
- <br />
+<p>
<dt><strong>History:</strong></dt>
-<dd><table width="100%">
- <tr>
- <td valign="top" align="left" width="10%">
- <strong>Release</strong></td>
- <td valign="top" align="left" width="90%">
- <strong>Change</strong></td></tr>
- <tr>
- <td valign="top">1.8.13</td>
- <td valign="top">
- C function introduced with this release. </td></tr>
+ <dd><table width="100%">
+ <tr>
+ <td valign="top" align="left" width="10%">
+ <strong>Release</strong></td>
+ <td valign="top" align="left" width="90%">
+ <strong>Change</strong></td></tr>
+ <tr>
+ <td valign="top">1.8.13</td>
+ <td valign="top">
+ C function introduced with this release. </td></tr>
+ <tr>
+ <td valign="top">1.8.14</td>
+ <td valign="top">
+ C function modified in this release to return error
+ if <code>page_size</code> is set to <code>0</code> (zero).
+ </td></tr>
</table></dd>
</dl>
-<br />
-<br />
-<br />
-
diff --git a/html/RM/H5P/H5Pset_fapl_multi.htm b/html/RM/H5P/H5Pset_fapl_multi.htm
index d0b0bc3..49cbac7 100644
--- a/html/RM/H5P/H5Pset_fapl_multi.htm
+++ b/html/RM/H5P/H5Pset_fapl_multi.htm
@@ -21,8 +21,15 @@
<!-- NEW PAGE -->
<!-- HEADER RIGHT "H5Pset_fapl_multi" -->
<hr>
-<dl>
- <dt><strong>Name:</strong> <a name="Property-SetFaplMulti">H5Pset_fapl_multi</a>
+<dl>
+
+ <dt><div align=right><font color=999999 size=-1><i>
+ Last modified: 14 October 2014</i></font></div></dt>
+
+
+ <dt><strong>Name:</strong>
+ <a name="Property-SetFaplMulti">H5Pset_fapl_multi</a></dt>
+
<dt><strong>Signature:</strong>
<dd><em>herr_t</em> <code>H5Pset_fapl_multi</code>(
<em>hid_t</em> <code>fapl_id</code>,
@@ -103,7 +110,20 @@
</dir></dd>
<!-- NEW PAGE -->
<dt><code>memb_addr</code>
- <dd>The default value is <code>HADDR_UNDEF</code> for each element.
+ <dd>The default setting is that the address space is equally
+ divided among all of the elements:
+ <dir>
+ <pre>
+H5FD_MEM_SUPER -> 0 * (HADDR_MAX/6)
+H5FD_MEM_BTREE -> 1 * (HADDR_MAX/6)
+H5FD_MEM_DRAW -> 2 * (HADDR_MAX/6)
+H5FD_MEM_GHEAP -> 3 * (HADDR_MAX/6)
+H5FD_MEM_LHEAP -> 4 * (HADDR_MAX/6)
+H5FD_MEM_OHDR -> 5 * (HADDR_MAX/6)
+ </pre>
+ </dir>
+
+ </dd>
</dl>
</dir>
<dt><strong>Parameters:</strong>
diff --git a/html/RM/H5R/H5Rdereference.htm b/html/RM/H5R/H5Rdereference.htm
index 06b26f2..e23d3a8 100644
--- a/html/RM/H5R/H5Rdereference.htm
+++ b/html/RM/H5R/H5Rdereference.htm
@@ -24,9 +24,11 @@
<dl>
<dt><div align=right><font color=999999 size=-1><i>
- Last modified: 11 March 2013</i></font></div>
+ Last modified: 14 October 2014</i></font></div></dt>
-<dt><strong>Name:</strong> <a name="Reference-Dereference">H5Rdereference</a>
+<dt><strong>Name:</strong> <a name="Reference-Dereference">H5Rdereference</a>
+</dt>
+<br />
<dt><strong>Signature:</strong>
<dd><em>hid_t</em> <code>H5Rdereference</code>(
<em>hid_t</em> <code>obj_id</code>,
@@ -102,8 +104,14 @@
<?php include("H5R/h5rdereference_f_F03.htm"); ?>
-
-<p></p>
+
+ <br />
+ <dt><strong>See Also:</a></strong></dt>
+ <dd>
+ <a href="http://www.hdfgroup.org/HDF5/doc/Advanced/UsingIdentifiers/index.html">
+ “Using Identifiers”</a></dd>
+
+<br />
<dt><strong>History:</strong>
<dd><table width="90%">
<tr>
diff --git a/html/RM/H5R/H5Rget_region.htm b/html/RM/H5R/H5Rget_region.htm
index 08e3b9d..0ced9f8 100644
--- a/html/RM/H5R/H5Rget_region.htm
+++ b/html/RM/H5R/H5Rget_region.htm
@@ -24,10 +24,12 @@
<dl>
<dt><div align=right><font color=999999 size=-1><i>
- Last modified: 29 August 2012</i></font></div>
+ Last modified: 14 October 2014</i></font></div></dt>
-<dt><strong>Name:</strong> <a name="Reference-GetRegion">H5Rget_region</a>
+<dt><strong>Name:</strong> <a name="Reference-GetRegion">H5Rget_region</a>
+</dt>
+<br />
<dt><strong>Signature:</strong>
<dd><em>hid_t</em> <code>H5Rget_region</code>(
<em>hid_t</em> <code>loc_id</code>,
@@ -96,5 +98,13 @@ SUBROUTINE h5rget_region_f(obj_id, ref, space_id, hdferr)
END SUBROUTINE h5rget_region_f
</pre>
+
+ <dt><strong>See Also:</a></strong></dt>
+ <dd>
+ <a href="http://www.hdfgroup.org/HDF5/doc/Advanced/UsingIdentifiers/index.html">
+ “Using Identifiers”</a></dd>
+
+
+
</dl>
diff --git a/html/RM/H5S/H5Screate.htm b/html/RM/H5S/H5Screate.htm
index 94bbd83..0b24505 100644
--- a/html/RM/H5S/H5Screate.htm
+++ b/html/RM/H5S/H5Screate.htm
@@ -24,7 +24,7 @@
<dl>
<dt><div align=right><font color=999999 size=-1><i>
-Last modified: 29 August 2012</i></font></div>
+ Last modified: 14 October 2014</i></font></div></dt>
<dt><strong>Name:</strong> <a name="Dataspace-Create">H5Screate</a>
@@ -98,6 +98,13 @@ SUBROUTINE h5screate_f(classtype, space_id, hdferr)
! 0 on success and -1 on failure
END SUBROUTINE h5screate_f
</pre>
+
+
+ <dt><strong>See Also:</a></strong></dt>
+ <dd>
+ <a href="http://www.hdfgroup.org/HDF5/doc/Advanced/UsingIdentifiers/index.html">
+ “Using Identifiers”</a></dd>
+
</dl>
diff --git a/html/RM/H5S/H5Screate_simple.htm b/html/RM/H5S/H5Screate_simple.htm
index a97b0b6..6e5eb61 100644
--- a/html/RM/H5S/H5Screate_simple.htm
+++ b/html/RM/H5S/H5Screate_simple.htm
@@ -24,10 +24,11 @@
<dl>
<dt><div align=right><font color=999999 size=-1><i>
- Last modified: 28 March 2013
- </i></font></div>
+ Last modified: 14 October 2014</i></font></div></dt>
-<dt><strong>Name:</strong> <a name="Dataspace-CreateSimple">H5Screate_simple</a>
+<dt><strong>Name:</strong>
+<a name="Dataspace-CreateSimple">H5Screate_simple</a></dt>
+<br />
<dt><strong>Signature:</strong>
<dd><em>hid_t</em> <code>H5Screate_simple</code>(
<em>int</em> <code>rank</code>,
@@ -118,6 +119,13 @@ SUBROUTINE h5screate_simple_f(rank, dims, space_id, hdferr, maxdims)
! dimension sizes
END SUBROUTINE h5screate_simple_f
</pre>
+
+ <dt><strong>See Also:</a></strong></dt>
+ <dd>
+ <a href="http://www.hdfgroup.org/HDF5/doc/Advanced/UsingIdentifiers/index.html">
+ “Using Identifiers”</a></dd>
+
+
</dl>
diff --git a/html/RM/H5T/H5Tarray_create2.htm b/html/RM/H5T/H5Tarray_create2.htm
index 2be4cbc..a358da8 100644
--- a/html/RM/H5T/H5Tarray_create2.htm
+++ b/html/RM/H5T/H5Tarray_create2.htm
@@ -31,7 +31,7 @@
<dd><em>hid_t</em> <code>H5Tarray_create2</code>(
<em>hid_t</em> <code>base_type_id</code>,
<em>unsigned</em> <code>rank</code>,
- <em>const hsize_t</em> <code>dims[/*rank*/]</code>,
+ <em>const hsize_t</em> <code>dims[/*rank*/]</code>
)
<p>
<dt><strong>Purpose:</strong>
diff --git a/html/RM/H5T/H5Tcopy.htm b/html/RM/H5T/H5Tcopy.htm
index 4ab39f6..75cb6a5 100644
--- a/html/RM/H5T/H5Tcopy.htm
+++ b/html/RM/H5T/H5Tcopy.htm
@@ -23,11 +23,11 @@
<hr>
<dl>
-<dt><div align=right><font color=999999 size=-1><i>
- Last modified: 11 October 2012
- </i></font></div>
+<dt><div align=right><font color=999999 size=-1><i>
+Last modified: 14 October 2014</i></font></div></dt>
-<dt><strong>Name:</strong> <a name="Datatype-Copy">H5Tcopy</a>
+<dt><strong>Name:</strong> <a name="Datatype-Copy">H5Tcopy</a></dt>
+<br />
<dt><strong>Signature:</strong>
<dd><em>hid_t </em><code>H5Tcopy</code>(
<em>hid_t </em><code>dtype_id</code>
@@ -139,6 +139,11 @@ SUBROUTINE h5tcopy_f(type_id, new_type_id, hdferr)
! 0 on success and -1 on failure
END SUBROUTINE h5tcopy_f
</pre>
+
+ <dt><strong>See Also:</a></strong></dt>
+ <dd>
+ <a href="http://www.hdfgroup.org/HDF5/doc/Advanced/UsingIdentifiers/index.html">
+ “Using Identifiers”</a></dd>
</dl>
diff --git a/html/RM/H5T/H5Tcreate.htm b/html/RM/H5T/H5Tcreate.htm
index d33267c..2a06fe2 100644
--- a/html/RM/H5T/H5Tcreate.htm
+++ b/html/RM/H5T/H5Tcreate.htm
@@ -23,11 +23,11 @@
<hr>
<dl>
-<dt><div align=right><font color=999999 size=-1><i>
- Last modified: 16 August 2013
- </i></font></div>
+<dt><div align=right><font color=999999 size=-1><i>
+Last modified: 14 October 2014</i></font></div></dt>
-<dt><strong>Name:</strong> <a name="Datatype-Create">H5Tcreate</a>
+<dt><strong>Name:</strong> <a name="Datatype-Create">H5Tcreate</a></dt>
+<br />
<dt><strong>Signature:</strong>
<dd><em>hid_t </em><code>H5Tcreate</code>(
<em>H5T_class_t </em><code>class</code>,
@@ -136,8 +136,13 @@ SUBROUTINE h5tcreate_f(class, size, type_id, hdferr)
! 0 on success and -1 on failure
END SUBROUTINE h5tcreate_f
</pre>
+
+ <dt><strong>See Also:</a></strong></dt>
+ <dd>
+ <a href="http://www.hdfgroup.org/HDF5/doc/Advanced/UsingIdentifiers/index.html">
+ “Using Identifiers”</a></dd>
-<p>
+<br />
<dt><strong>History:</strong>
<dd><table width="90%">
<tr>
diff --git a/html/RM/H5T/H5Tdecode.htm b/html/RM/H5T/H5Tdecode.htm
index f34f94a..e3c3e29 100644
--- a/html/RM/H5T/H5Tdecode.htm
+++ b/html/RM/H5T/H5Tdecode.htm
@@ -24,10 +24,10 @@
<dl>
<dt><div align=right><font color=999999 size=-1><i>
-Last modified: 29 August 2012</i></font></div>
+Last modified: 14 October 2014</i></font></div></dt>
-<dt><strong>Name:</strong> <a name="Datatype-Decode">H5Tdecode</a>
-<p></p>
+<dt><strong>Name:</strong> <a name="Datatype-Decode">H5Tdecode</a></dt>
+<br />
<dt><strong>Signature:</strong>
<dd><em>hid_t</em> <code>H5Tdecode</code>
(<em>unsigned char *</em><code>buf</code>)
@@ -74,5 +74,10 @@ SUBROUTINE h5tdecode_f(buf, obj_id, hdferr)
! 0 on success and -1 on failure
END SUBROUTINE h5tdecode_f
</pre></dd>
+
+<dt><strong>See Also:</a></strong></dt>
+ <dd>
+ <a href="http://www.hdfgroup.org/HDF5/doc/Advanced/UsingIdentifiers/index.html">
+ “Using Identifiers”</a></dd>
</dl>
diff --git a/html/RM/H5T/H5Tget_class.htm b/html/RM/H5T/H5Tget_class.htm
index 511845a..43aad61 100644
--- a/html/RM/H5T/H5Tget_class.htm
+++ b/html/RM/H5T/H5Tget_class.htm
@@ -24,7 +24,7 @@
<dl>
<dt><div align=right><font color=999999 size=-1><i>
- Last modified: 18 August 2010
+ Last modified: 5 August 2014
</i></font></div>
<dt><strong>Name:</strong> <a name="Datatype-GetClass">H5Tget_class</a>
@@ -90,19 +90,22 @@ SUBROUTINE h5tget_class_f(type_id, class, hdferr)
! H5T_NO_CLASS_F
! H5T_INTEGER_F
! H5T_FLOAT_F
-<!--
- ! H5T_TIME_F
--->
! H5T_STRING_F
! H5T_BITFIELD_F
! H5T_OPAQUE_F
! H5T_COMPOUND_F
! H5T_REFERENCE_F
- ! H5T_ENUM_F
+ ! H5T_ENUM_F
+ ! H5T_VLEN_F
+ ! H5T_ARRAY_F
INTEGER, INTENT(OUT) :: hdferr ! Error code
! 0 on success and -1 on failure
END SUBROUTINE h5tget_class_f
</pre>
+<!-- H5T_TIME_F is also not supported and not included in the
+list of datatype classes for the Fortran subroutine. See the
+comments for H5T_TIME above.
+<!-- ! H5T_TIME_F -->
</dl>
diff --git a/html/RM/H5T/H5Tget_cset.htm b/html/RM/H5T/H5Tget_cset.htm
index ba2332c..b74eaa2 100644
--- a/html/RM/H5T/H5Tget_cset.htm
+++ b/html/RM/H5T/H5Tget_cset.htm
@@ -24,7 +24,7 @@
<dl>
<dt><div align=right><font color=999999 size=-1><i>
- Last modified: 18 August 2010
+ Last modified: 24 September 2014
</i></font></div>
<dt><strong>Name:</strong> <a name="Datatype-GetCset">H5Tget_cset</a>
@@ -85,6 +85,19 @@ SUBROUTINE h5tget_cset_f(type_id, cset, hdferr)
END SUBROUTINE h5tget_cset_f
</pre>
+
+
+ <dt><strong>See Also:</a></strong></dt>
+ <dd><a href="RM_H5T.html#Datatype-SetCset">
+ <code>H5Tset_cset</code></a></dd>
+
+ <dd>
+ <a href="http://www.hdfgroup.org/HDF5/doc/Advanced/UsingUnicode/index.html">
+ “Using UTF-8 Encoding in HDF5 Applications”</a>
+ </dd>
+
+
+
<p />
<dt><strong>History:</strong>
<dd><table width="90%">
diff --git a/html/RM/H5T/H5Tget_member_type.htm b/html/RM/H5T/H5Tget_member_type.htm
index d764827..b7962df 100644
--- a/html/RM/H5T/H5Tget_member_type.htm
+++ b/html/RM/H5T/H5Tget_member_type.htm
@@ -23,11 +23,12 @@
<hr>
<dl>
-<dt><div align=right><font color=999999 size=-1><i>
- Last modified: 18 August 2010
- </i></font></div>
+<dt><div align=right><font color=999999 size=-1><i>
+Last modified: 14 October 2014</i></font></div></dt>
-<dt><strong>Name:</strong> <a name="Datatype-GetMemberType">H5Tget_member_type</a>
+<dt><strong>Name:</strong>
+<a name="Datatype-GetMemberType">H5Tget_member_type</a></dt>
+<br />
<dt><strong>Signature:</strong>
<dd><em>hid_t</em> <code>H5Tget_member_type</code>(
<em>hid_t </em><code>dtype_id</code>,
@@ -74,8 +75,13 @@ SUBROUTINE h5tget_member_type_f(type_id, field_idx, datatype, hdferr)
INTEGER, INTENT(OUT) :: hdferr ! Error code
END SUBROUTINE h5tget_member_type_f
</pre>
+
+<dt><strong>See Also:</a></strong></dt>
+ <dd>
+ <a href="http://www.hdfgroup.org/HDF5/doc/Advanced/UsingIdentifiers/index.html">
+ “Using Identifiers”</a></dd>
-<p>
+<br />
<dt><strong>History</strong>:
<dd><table width="90%">
<tr>
diff --git a/html/RM/H5T/H5Tget_size.htm b/html/RM/H5T/H5Tget_size.htm
index ebb895f..cf81658 100644
--- a/html/RM/H5T/H5Tget_size.htm
+++ b/html/RM/H5T/H5Tget_size.htm
@@ -24,7 +24,7 @@
<dl>
<dt><div align=right><font color=999999 size=-1><i>
- Last modified: 18 August 2010
+ Last modified: 17 July 2014
</i></font></div>
<dt><strong>Name:</strong> <a name="Datatype-GetSize">H5Tget_size</a>
@@ -40,6 +40,32 @@
<p>
<dt><strong>Description:</strong>
<dd><code>H5Tget_size</code> returns the size of a datatype in bytes.
+ </p>
+ <p>
+ For atomic datatypes, array datatypes, compound datatypes,
+ and other datatypes of a constant size,
+ the returned value is the size of the actual datatype in bytes.
+ </p>
+ <p>
+ For variable-length string datatypes
+ (see “<a href="#CreateVLString">Creating variable-length string
+ datatypes</a>”),
+ the returned value is the size of the pointer to the actual string,
+ or <code>sizeof(char *)</code>.
+ This function does not return the size of actual
+ variable-length string data.
+ </p>
+ <p>
+ For variable-length sequence datatypes
+ (see
+ <!-- <code>H5T_VLEN</code> and -->
+ <a href="#Datatype-VLCreate"><code>H5Tvlen_create</code></a>),
+ the returned value is the size of the <code>hvl_t</code> struct,
+ or <code>sizeof(hvl_t)</code>.
+ The <code>hvl_t</code> struct contains a pointer to the actual data
+ and a size value.
+ This function does not return the size of actual
+ variable-length sequence data.
<p>
<dt><strong>Parameters:</strong>
diff --git a/html/RM/H5T/H5Tget_super.htm b/html/RM/H5T/H5Tget_super.htm
index fcaeea9..79de4f5 100644
--- a/html/RM/H5T/H5Tget_super.htm
+++ b/html/RM/H5T/H5Tget_super.htm
@@ -25,11 +25,11 @@
<dt><div align=right><font color=999999 size=-1><i>
-Last modified: 29 August 2012</i></font></div>
+Last modified: 14 October 2014</i></font></div></dt>
-<dt><strong>Name:</strong> <a name="Datatype-GetSuper">H5Tget_super</a>
-<p></p>
+<dt><strong>Name:</strong> <a name="Datatype-GetSuper">H5Tget_super</a></dt>
+<br />
<dt><strong>Signature:</strong>
<dd><em>hid_t</em> <code>H5Tget_super</code>(
<em>hid_t</em> <code>dtype_id</code>
@@ -77,6 +77,11 @@ SUBROUTINE h5tget_super_f(type_id, base_type_id, hdferr)
! 0 on success and -1 on failure
END SUBROUTINE h5tget_super_f
</pre>
+
+<dt><strong>See Also:</a></strong></dt>
+ <dd>
+ <a href="http://www.hdfgroup.org/HDF5/doc/Advanced/UsingIdentifiers/index.html">
+ “Using Identifiers”</a></dd>
</dl>
diff --git a/html/RM/H5T/H5Topen.htm b/html/RM/H5T/H5Topen.htm
index 1412ecc..b65d95a 100644
--- a/html/RM/H5T/H5Topen.htm
+++ b/html/RM/H5T/H5Topen.htm
@@ -24,10 +24,10 @@
<dl>
<dt><div align=right><font color=999999 size=-1><i>
- Last modified: 29 August 2012</i></font></div>
+ Last modified: 14 October 2014</i></font></div></dt>
- <dt><strong>Name:</strong> <a name="Datatype-Open">H5Topen</a>
- <p></p>
+ <dt><strong>Name:</strong> <a name="Datatype-Open">H5Topen</a></dt>
+ <br />
<dt><strong>Signature:</strong>
<dd><em>hid_t</em> <code>H5Topen</code>(
<em>hid_t</em> <code>loc_id</code>,
@@ -41,7 +41,7 @@
)
<p>
<dt><strong>Purpose:</strong>
- <dd>Opens a named datatype.
+ <dd>Opens a committed (named) datatype.
<p>
<dt><strong>Description:</strong>
<dd><code>H5Topen</code> is a macro that is mapped to either
@@ -119,7 +119,12 @@ SUBROUTINE h5topen_f(loc_id, name, type_id, hdferr, tapl_id)
END SUBROUTINE h5topen_f
</pre></dd>
<!-- NEW PAGE -->
- <p>
+
+ <dt><strong>See Also:</a></strong></dt>
+ <dd>
+ <a href="http://www.hdfgroup.org/HDF5/doc/Advanced/UsingIdentifiers/index.html">
+ “Using Identifiers”</a></dd>
+ <br />
<dt><strong>History:</strong>
<dd><table width="90%">
<tr>
diff --git a/html/RM/H5T/H5Topen2.htm b/html/RM/H5T/H5Topen2.htm
index 34449d1..6973c7f 100644
--- a/html/RM/H5T/H5Topen2.htm
+++ b/html/RM/H5T/H5Topen2.htm
@@ -21,7 +21,12 @@
<!-- NEW PAGE -->
<!-- HEADER RIGHT "H5Topen2" -->
<hr>
-<dl>
+<dl>
+
+<dt><div align=right><font color=999999 size=-1><i>
+Last modified: 14 October 2014</i></font></div></dt>
+
+
<dt><strong>Name:</strong> <a name="Datatype-Open2">H5Topen2</a>
<dt><strong>Signature:</strong>
<dd><em>hid_t</em> <code>H5Topen2</code>(
@@ -31,17 +36,17 @@
)
<p>
<dt><strong>Purpose:</strong>
- <dd>Opens a named datatype.
+ <dd>Opens a committed (named) datatype.
<p>
<dt><strong>Description:</strong>
- <dd><code>H5Topen2</code> opens a named datatype at the location
- specified by <code>loc_id</code> and returns an identifier
- for the datatype. <code>loc_id</code> is either a file or
- group identifier. The identifier should eventually be closed
- by calling <code>H5Tclose</code> to release resources.
- <p>
- The named datatype is opened with the datatype access property list
- <code>tapl_id</code>.
+ <dd><code>H5Topen2</code> opens a committed datatype at the
+ location specified by <code>loc_id</code> and returns an identifier
+ for the datatype. <code>loc_id</code> is either a file or
+ group identifier. The identifier should eventually be closed
+ by calling <code>H5Tclose</code> to release resources.
+ <p>
+ The committed datatype is opened with the datatype access property list
+ <code>tapl_id</code>.
<p>
<dt><strong>Parameters:</strong>
<ul><table>
@@ -59,11 +64,13 @@
</table></ul>
<p>
<dt><strong>Returns:</strong>
- <dd>Returns a named datatype identifier if successful;
+ <dd>Returns a committed datatype identifier if successful;
otherwise returns a negative value.
<p>
-<dt><strong>Fortran90 Interface:</strong> See listing under <a href="RM_H5T.html#Datatype-Open"><code>H5Topen</code></a>.
-
+<dt><strong>Fortran90 Interface:</strong> See listing under
+<a href="RM_H5T.html#Datatype-Open"><code>H5Topen</code></a>.</dt>
+
+<br />
<!--<dt><strong>Non-C API(s):</strong>
<dd>
@@ -71,7 +78,13 @@
<img src="Graphics/Java.gif">
<img src="Graphics/C++.gif">
-->
-<p>
+
+ <dt><strong>See Also:</a></strong></dt>
+ <dd>
+ <a href="http://www.hdfgroup.org/HDF5/doc/Advanced/UsingIdentifiers/index.html">
+ “Using Identifiers”</a></dd>
+
+<br />
<dt><strong>History:</strong>
<ul><table width="90%">
<tr>
diff --git a/html/RM/H5T/H5Tregister.htm b/html/RM/H5T/H5Tregister.htm
index 4c3602a..fee0583 100644
--- a/html/RM/H5T/H5Tregister.htm
+++ b/html/RM/H5T/H5Tregister.htm
@@ -24,7 +24,7 @@
<dl>
<dt><div align=right><font color=999999 size=-1><i>
- Last modified: 30 August 2013
+ Last modified: 16 September 2014
</i></font></div>
<dt><strong>Name:</strong> <a name="Datatype-Register">H5Tregister</a>
@@ -95,13 +95,6 @@
<em>hbool_t *</em><code>recalc</code>,
<em>void *</em><code>priv</code>)</pre>
</dir>
- <p>
- The <code>H5T_conv_t</code> parameters and
- the elements of the <code>H5T_cdata_t</code> struct
- are described more fully in this
- “<a href="../H5.user/Datatypes.html#Datatypes-DataConversion"
- target="WinUG">Data Conversion</a>” discussion.
-
<p>
<dt><strong>Programming Note for C++ Developers Using C Functions:</strong>
diff --git a/html/RM/H5T/H5Tset_cset.htm b/html/RM/H5T/H5Tset_cset.htm
index 121e208..e66f5d6 100644
--- a/html/RM/H5T/H5Tset_cset.htm
+++ b/html/RM/H5T/H5Tset_cset.htm
@@ -24,7 +24,7 @@
<dl>
<dt><div align=right><font color=999999 size=-1><i>
- Last modified: 24 June 2013
+ Last modified: 24 September 2014
</i></font></div>
<dt><strong>Name:</strong> <a name="Datatype-SetCset">H5Tset_cset</a>
@@ -61,6 +61,12 @@
<code>dtype_id</code> is set to <td><code>H5T_CSET_UTF8</code>,
string or character data of datatype <code>dtype_id</code>
will be encoded using the UTF-8 Unicode character set.
+ <p>
+ ASCII and UTF-8 Unicode are the only currently supported
+ character encodings. Extended ASCII encodings (for example, ISO
+ 8859) are not supported. This encoding policy is not enforced by
+ the HDF5 Library. Using encodings other than ASCII and UTF-8 can
+ lead to compatibility and usability problems.
<p>
Note that <code>H5Tset_cset</code> sets the character set for
a character or string datatype while
@@ -99,8 +105,20 @@ SUBROUTINE h5tset_cset_f(type_id, cset, hdferr)
INTEGER, INTENT(OUT) :: hdferr ! Error code
END SUBROUTINE h5tset_cset_f
</pre>
+
+
+
+ <dt><strong>See Also:</a></strong></dt>
+ <dd>
+ <a href="http://www.hdfgroup.org/HDF5/doc/Advanced/UsingUnicode/index.html">
+ “Using UTF-8 Encoding in HDF5 Applications”</a>
+ </dd>
+
+
+
+
-<p />
+<br />
<dt><strong>History:</strong>
<dd><table width="90%">
<tr>
diff --git a/html/RM/PredefDTypes.html b/html/RM/PredefDTypes.html
index c8f826d..e664a13 100644
--- a/html/RM/PredefDTypes.html
+++ b/html/RM/PredefDTypes.html
@@ -555,27 +555,11 @@ In the
</table>
</center>
<hr>
-<!-- #EndLibraryItem --><!-- #BeginLibraryItem "/ed_libs/Footer.lbi" -->
-<address>
-<table width="100%" border="0">
- <tr valign="top">
- <td align="left">
- <address>
- The HDF Group Help Desk: <img src="../Graphics/help.png" align=top height=16>
- <br>
- Describes HDF5 Release 1.8.13, May 2014.
- </address>
- </td><td width="5%"> </td>
- <td align="right">
- <a href="../Copyright.html">Copyright</a> by
- <a href="http://www.hdfgroup.org">The HDF Group</a>
- <br>
- and the Board of Trustees of the University of Illinois
- </td>
- </tr>
-</table>
-</address>
-<!-- #EndLibraryItem --><SCRIPT LANGUAGE="JAVASCRIPT">
+<!-- #EndLibraryItem -->
+
+<?php include("../ed_libs/Footer2.htm"); ?>
+
+<SCRIPT LANGUAGE="JAVASCRIPT">
<!--
document.writeln("Last modified: 24 January 2013");
-->
diff --git a/html/RM/RM_H5.html b/html/RM/RM_H5.html
index 875a78f..38bf71c 100644
--- a/html/RM/RM_H5.html
+++ b/html/RM/RM_H5.html
@@ -263,30 +263,13 @@ In the
</table>
</center>
<hr>
-<!-- #EndLibraryItem --><!-- #BeginLibraryItem "/ed_libs/Footer.lbi" -->
-<address>
-<table width="100%" border="0">
- <tr valign="top">
- <td align="left">
- <address>
- The HDF Group Help Desk: <img src="../Graphics/help.png"
- align="top" height="16">
- <br>
- Describes HDF5 Release 1.8.13, May 2014.
- </address>
- </td><td width="5%"> </td>
- <td align="right">
- <a href="../Copyright.html">Copyright</a> by
- <a href="http://www.hdfgroup.org">The HDF Group</a>
- <br>
- and the Board of Trustees of the University of Illinois
- </td>
- </tr>
-</table>
-</address>
-<!-- #EndLibraryItem --><SCRIPT LANGUAGE="JAVASCRIPT">
+<!-- #EndLibraryItem -->
+
+<?php include("../ed_libs/Footer2.htm"); ?>
+
+<SCRIPT LANGUAGE="JAVASCRIPT">
<!--
-document.writeln("Last modified: 22 April 2014");
+document.writeln("Last modified: 23 April 2014");
-->
</SCRIPT>
diff --git a/html/RM/RM_H5A.html b/html/RM/RM_H5A.html
index 0ee99d8..028967b 100644
--- a/html/RM/RM_H5A.html
+++ b/html/RM/RM_H5A.html
@@ -274,8 +274,9 @@ to indicate a particular type of dataset with supplemental datasets
is located in the group. How small is "small" is not defined by the
library and is up to the user’s interpretation.
<p>
-See <a href="../H5.user/Attributes.html"><cite>Attributes</cite></a> in the
-<a href="../H5.user.html"><cite>HDF5 User's Guide</cite></a> for further information.
+See <a href="../UG/UG_frame13Attributes.html">
+“HDF5 Attributes”</a>
+in the <cite>HDF5 User's Guide</cite> for more information.
<!-- --- --- --- --- --- --- --- --- --- --- --- -->
@@ -379,29 +380,13 @@ In the
</table>
</center>
<hr>
-<!-- #EndLibraryItem --><!-- #BeginLibraryItem "/ed_libs/Footer.lbi" -->
-<address>
-<table width="100%" border="0">
- <tr valign="top">
- <td align="left">
- <address>
- The HDF Group Help Desk: <img src="../Graphics/help.png" align=top height=16>
- <br>
- Describes HDF5 Release 1.8.13, May 2014.
- </address>
- </td><td width="5%"> </td>
- <td align="right">
- <a href="../Copyright.html">Copyright</a> by
- <a href="http://www.hdfgroup.org">The HDF Group</a>
- <br>
- and the Board of Trustees of the University of Illinois
- </td>
- </tr>
-</table>
-</address>
-<!-- #EndLibraryItem --><html><SCRIPT LANGUAGE="JAVASCRIPT">
+<!-- #EndLibraryItem -->
+
+<?php include("../ed_libs/Footer2.htm"); ?>
+
+<SCRIPT LANGUAGE="JAVASCRIPT">
<!--
-document.writeln("Last modified: 2 April 2013");
+document.writeln("Last modified: 9 October 2014");
-->
</SCRIPT>
diff --git a/html/RM/RM_H5D.html b/html/RM/RM_H5D.html
index 8475352..42764fc 100644
--- a/html/RM/RM_H5D.html
+++ b/html/RM/RM_H5D.html
@@ -329,29 +329,13 @@ In the
</table>
</center>
<hr>
-<!-- #EndLibraryItem --><!-- #BeginLibraryItem "/ed_libs/Footer.lbi" -->
-<address>
-<table width="100%" border="0">
- <tr valign="top">
- <td align="left">
- <address>
- The HDF Group Help Desk: <img src="../Graphics/help.png" align=top height=16>
- <br>
- Describes HDF5 Release 1.8.13, May 2014.
- </address>
- </td><td width="5%"> </td>
- <td align="right">
- <a href="../Copyright.html">Copyright</a> by
- <a href="http://www.hdfgroup.org">The HDF Group</a>
- <br>
- and the Board of Trustees of the University of Illinois
- </td>
- </tr>
-</table>
-</address>
-<!-- #EndLibraryItem --><SCRIPT LANGUAGE="JAVASCRIPT">
+<!-- #EndLibraryItem -->
+
+<?php include("../ed_libs/Footer2.htm"); ?>
+
+<SCRIPT LANGUAGE="JAVASCRIPT">
<!--
-document.writeln("Last modified: 26 August 2013");
+document.writeln("Last modified: 9 October 2014");
-->
</SCRIPT>
diff --git a/html/RM/RM_H5E.html b/html/RM/RM_H5E.html
index 75e1064..ff94df7 100644
--- a/html/RM/RM_H5E.html
+++ b/html/RM/RM_H5E.html
@@ -365,29 +365,13 @@ In the
</table>
</center>
<hr>
-<!-- #EndLibraryItem --><!-- #BeginLibraryItem "/ed_libs/Footer.lbi" -->
-<address>
-<table width="100%" border="0">
- <tr valign="top">
- <td align="left">
- <address>
- The HDF Group Help Desk: <img src="../Graphics/help.png" align=top height=16>
- <br>
- Describes HDF5 Release 1.8.13, May 2014.
- </address>
- </td><td width="5%"> </td>
- <td align="right">
- <a href="../Copyright.html">Copyright</a> by
- <a href="http://www.hdfgroup.org">The HDF Group</a>
- <br>
- and the Board of Trustees of the University of Illinois
- </td>
- </tr>
-</table>
-</address>
-<!-- #EndLibraryItem --><SCRIPT LANGUAGE="JAVASCRIPT">
+<!-- #EndLibraryItem -->
+
+<?php include("../ed_libs/Footer2.htm"); ?>
+
+<SCRIPT LANGUAGE="JAVASCRIPT">
<!--
-document.writeln("Last modified: 21 September 2012");
+document.writeln("Last modified: 9 October 2014");
-->
</SCRIPT>
diff --git a/html/RM/RM_H5F.html b/html/RM/RM_H5F.html
index d5e195f..13a7a95 100644
--- a/html/RM/RM_H5F.html
+++ b/html/RM/RM_H5F.html
@@ -331,29 +331,13 @@ In the
</table>
</center>
<hr>
-<!-- #EndLibraryItem --><!-- #BeginLibraryItem "/ed_libs/Footer.lbi" -->
-<address>
-<table width="100%" border="0">
- <tr valign="top">
- <td align="left">
- <address>
- The HDF Group Help Desk: <img src="../Graphics/help.png" align=top height=16>
- <br>
- Describes HDF5 Release 1.8.13, May 2014.
- </address>
- </td><td width="5%"> </td>
- <td align="right">
- <a href="../Copyright.html">Copyright</a> by
- <a href="http://www.hdfgroup.org">The HDF Group</a>
- <br>
- and the Board of Trustees of the University of Illinois
- </td>
- </tr>
-</table>
-</address>
-<!-- #EndLibraryItem --><SCRIPT LANGUAGE="JAVASCRIPT">
+<!-- #EndLibraryItem -->
+
+<?php include("../ed_libs/Footer2.htm"); ?>
+
+<SCRIPT LANGUAGE="JAVASCRIPT">
<!--
-document.writeln("Last modified: 2 May 2014");
+document.writeln("Last modified: 9 October 2014");
-->
</SCRIPT>
diff --git a/html/RM/RM_H5Front.html b/html/RM/RM_H5Front.html
index 064d627..7c510dc 100644
--- a/html/RM/RM_H5Front.html
+++ b/html/RM/RM_H5Front.html
@@ -479,30 +479,14 @@ In the
</table>
</center>
<hr>
-<!-- #EndLibraryItem --><!-- #BeginLibraryItem "/ed_libs/Footer.lbi" -->
-<address>
-<table width="100%" border="0">
- <tr valign="top">
- <td align="left">
- <address>
- The HDF Group Help Desk: <img src="../Graphics/help.png" align=top height=16>
- <br>
- Describes HDF5 Release 1.8.13, May 2014.
- </address>
- </td><td width="5%"> </td>
- <td align="right">
- <a href="../Copyright.html">Copyright</a> by
- <a href="http://www.hdfgroup.org">The HDF Group</a>
- <br>
- and the Board of Trustees of the University of Illinois
- </td>
- </tr>
-</table>
-</address>
-<!-- #EndLibraryItem --><table width="100%" border="0"> <tr valign="top"> <td align="left">
+<!-- #EndLibraryItem -->
+
+<?php include("../ed_libs/Footer2.htm"); ?>
+
+<table width="100%" border="0"> <tr valign="top"> <td align="left">
<SCRIPT LANGUAGE="JAVASCRIPT">
<!--
-document.writeln("Last modified: 14 May 2014");
+document.writeln("Last modified: 13 November 2014");
-->
</SCRIPT>
</td></tr></table>
diff --git a/html/RM/RM_H5G.html b/html/RM/RM_H5G.html
index 9b2454a..0131a70 100644
--- a/html/RM/RM_H5G.html
+++ b/html/RM/RM_H5G.html
@@ -338,29 +338,13 @@ In the
</table>
</center>
<hr>
-<!-- #EndLibraryItem --><!-- #BeginLibraryItem "/ed_libs/Footer.lbi" -->
-<address>
-<table width="100%" border="0">
- <tr valign="top">
- <td align="left">
- <address>
- The HDF Group Help Desk: <img src="../Graphics/help.png" align=top height=16>
- <br>
- Describes HDF5 Release 1.8.13, May 2014.
- </address>
- </td><td width="5%"> </td>
- <td align="right">
- <a href="../Copyright.html">Copyright</a> by
- <a href="http://www.hdfgroup.org">The HDF Group</a>
- <br>
- and the Board of Trustees of the University of Illinois
- </td>
- </tr>
-</table>
-</address>
-<!-- #EndLibraryItem --><SCRIPT LANGUAGE="JAVASCRIPT">
+<!-- #EndLibraryItem -->
+
+<?php include("../ed_libs/Footer2.htm"); ?>
+
+<SCRIPT LANGUAGE="JAVASCRIPT">
<!--
-document.writeln("Last modified: 23 August 2013");
+document.writeln("Last modified: 9 October 2014");
-->
</SCRIPT>
diff --git a/html/RM/RM_H5I.html b/html/RM/RM_H5I.html
index 7affeb8..d12f530 100644
--- a/html/RM/RM_H5I.html
+++ b/html/RM/RM_H5I.html
@@ -288,29 +288,13 @@ In the
</table>
</center>
<hr>
-<!-- #EndLibraryItem --><!-- #BeginLibraryItem "/ed_libs/Footer.lbi" -->
-<address>
-<table width="100%" border="0">
- <tr valign="top">
- <td align="left">
- <address>
- The HDF Group Help Desk: <img src="../Graphics/help.png" align=top height=16>
- <br>
- Describes HDF5 Release 1.8.13, May 2014.
- </address>
- </td><td width="5%"> </td>
- <td align="right">
- <a href="../Copyright.html">Copyright</a> by
- <a href="http://www.hdfgroup.org">The HDF Group</a>
- <br>
- and the Board of Trustees of the University of Illinois
- </td>
- </tr>
-</table>
-</address>
-<!-- #EndLibraryItem --><SCRIPT LANGUAGE="JAVASCRIPT">
+<!-- #EndLibraryItem -->
+
+<?php include("../ed_libs/Footer2.htm"); ?>
+
+<SCRIPT LANGUAGE="JAVASCRIPT">
<!--
-document.writeln("Last modified: 24 August 2012");
+document.writeln("Last modified: 18 September 2014");
-->
</SCRIPT>
diff --git a/html/RM/RM_H5L.html b/html/RM/RM_H5L.html
index e187374..51df921 100644
--- a/html/RM/RM_H5L.html
+++ b/html/RM/RM_H5L.html
@@ -331,29 +331,13 @@ In the
</table>
</center>
<hr>
-<!-- #EndLibraryItem --><!-- #BeginLibraryItem "/ed_libs/Footer.lbi" -->
-<address>
-<table width="100%" border="0">
- <tr valign="top">
- <td align="left">
- <address>
- The HDF Group Help Desk: <img src="../Graphics/help.png" align=top height=16>
- <br>
- Describes HDF5 Release 1.8.13, May 2014.
- </address>
- </td><td width="5%"> </td>
- <td align="right">
- <a href="../Copyright.html">Copyright</a> by
- <a href="http://www.hdfgroup.org">The HDF Group</a>
- <br>
- and the Board of Trustees of the University of Illinois
- </td>
- </tr>
-</table>
-</address>
-<!-- #EndLibraryItem --><SCRIPT LANGUAGE="JAVASCRIPT">
+<!-- #EndLibraryItem -->
+
+<?php include("../ed_libs/Footer2.htm"); ?>
+
+<SCRIPT LANGUAGE="JAVASCRIPT">
<!--
-document.writeln("Last modified: 19 September 2013");
+document.writeln("Last modified: 26 September 2014");
-->
</SCRIPT>
diff --git a/html/RM/RM_H5O.html b/html/RM/RM_H5O.html
index fca46a1..7b04fb5 100644
--- a/html/RM/RM_H5O.html
+++ b/html/RM/RM_H5O.html
@@ -335,29 +335,13 @@ In the
</table>
</center>
<hr>
-<!-- #EndLibraryItem --><!-- #BeginLibraryItem "/ed_libs/Footer.lbi" -->
-<address>
-<table width="100%" border="0">
- <tr valign="top">
- <td align="left">
- <address>
- The HDF Group Help Desk: <img src="../Graphics/help.png" align=top height=16>
- <br>
- Describes HDF5 Release 1.8.13, May 2014.
- </address>
- </td><td width="5%"> </td>
- <td align="right">
- <a href="../Copyright.html">Copyright</a> by
- <a href="http://www.hdfgroup.org">The HDF Group</a>
- <br>
- and the Board of Trustees of the University of Illinois
- </td>
- </tr>
-</table>
-</address>
-<!-- #EndLibraryItem --><SCRIPT LANGUAGE="JAVASCRIPT">
+<!-- #EndLibraryItem -->
+
+<?php include("../ed_libs/Footer2.htm"); ?>
+
+<SCRIPT LANGUAGE="JAVASCRIPT">
<!--
-document.writeln("Last modified: 26 August 2013");
+document.writeln("Last modified: 14 October 2014");
-->
</SCRIPT>
diff --git a/html/RM/RM_H5P.html b/html/RM/RM_H5P.html
index 3c6509b..4e0bc24 100644
--- a/html/RM/RM_H5P.html
+++ b/html/RM/RM_H5P.html
@@ -3743,29 +3743,13 @@ In the
</table>
</center>
<hr>
-<!-- #EndLibraryItem --><!-- #BeginLibraryItem "/ed_libs/Footer.lbi" -->
-<address>
-<table width="100%" border="0">
- <tr valign="top">
- <td align="left">
- <address>
- The HDF Group Help Desk: <img src="../Graphics/help.png" align=top height=16>
- <br>
- Describes HDF5 Release 1.8.13, May 2014.
- </address>
- </td><td width="5%"> </td>
- <td align="right">
- <a href="../Copyright.html">Copyright</a> by
- <a href="http://www.hdfgroup.org">The HDF Group</a>
- <br>
- and the Board of Trustees of the University of Illinois
- </td>
- </tr>
-</table>
-</address>
-<!-- #EndLibraryItem --><SCRIPT LANGUAGE="JAVASCRIPT">
+<!-- #EndLibraryItem -->
+
+<?php include("../ed_libs/Footer2.htm"); ?>
+
+<SCRIPT LANGUAGE="JAVASCRIPT">
<!--
-document.writeln("Last modified: 6 May 2014");
+document.writeln("Last modified: 4 November 2014");
-->
</SCRIPT>
diff --git a/html/RM/RM_H5R.html b/html/RM/RM_H5R.html
index 6f07fdf..a0dc7bb 100644
--- a/html/RM/RM_H5R.html
+++ b/html/RM/RM_H5R.html
@@ -259,29 +259,13 @@ In the
</table>
</center>
<hr>
-<!-- #EndLibraryItem --><!-- #BeginLibraryItem "/ed_libs/Footer.lbi" -->
-<address>
-<table width="100%" border="0">
- <tr valign="top">
- <td align="left">
- <address>
- The HDF Group Help Desk: <img src="../Graphics/help.png" align=top height=16>
- <br>
- Describes HDF5 Release 1.8.13, May 2014.
- </address>
- </td><td width="5%"> </td>
- <td align="right">
- <a href="../Copyright.html">Copyright</a> by
- <a href="http://www.hdfgroup.org">The HDF Group</a>
- <br>
- and the Board of Trustees of the University of Illinois
- </td>
- </tr>
-</table>
-</address>
-<!-- #EndLibraryItem --><SCRIPT LANGUAGE="JAVASCRIPT">
+<!-- #EndLibraryItem -->
+
+<?php include("../ed_libs/Footer2.htm"); ?>
+
+<SCRIPT LANGUAGE="JAVASCRIPT">
<!--
-document.writeln("Last modified: 19 July 2013");
+document.writeln("Last modified: 14 October 2014");
-->
</SCRIPT>
diff --git a/html/RM/RM_H5S.html b/html/RM/RM_H5S.html
index 5132e58..2febffd 100644
--- a/html/RM/RM_H5S.html
+++ b/html/RM/RM_H5S.html
@@ -355,29 +355,13 @@ In the
</table>
</center>
<hr>
-<!-- #EndLibraryItem --><!-- #BeginLibraryItem "/ed_libs/Footer.lbi" -->
-<address>
-<table width="100%" border="0">
- <tr valign="top">
- <td align="left">
- <address>
- The HDF Group Help Desk: <img src="../Graphics/help.png" align=top height=16>
- <br>
- Describes HDF5 Release 1.8.13, May 2014.
- </address>
- </td><td width="5%"> </td>
- <td align="right">
- <a href="../Copyright.html">Copyright</a> by
- <a href="http://www.hdfgroup.org">The HDF Group</a>
- <br>
- and the Board of Trustees of the University of Illinois
- </td>
- </tr>
-</table>
-</address>
-<!-- #EndLibraryItem --><SCRIPT LANGUAGE="JAVASCRIPT">
+<!-- #EndLibraryItem -->
+
+<?php include("../ed_libs/Footer2.htm"); ?>
+
+<SCRIPT LANGUAGE="JAVASCRIPT">
<!--
-document.writeln("Last modified: 28 March 2013");
+document.writeln("Last modified: 14 October 2014");
-->
</SCRIPT>
diff --git a/html/RM/RM_H5T.html b/html/RM/RM_H5T.html
index 6970468..000042e 100644
--- a/html/RM/RM_H5T.html
+++ b/html/RM/RM_H5T.html
@@ -431,8 +431,11 @@ A <em>data point</em> is an instance of a <em>datatype</em>,
level; all other classes are compound.
<p>
-See <a href="../H5.user/Datatypes.html"><cite>The Datatype Interface (H5T)</cite></a>
-in the <cite>HDF5 User's Guide</cite> for further information, including a complete list of all supported datatypes.
+See <a href="../UG/UG_frame11Datatypes.html">
+“HDF5 Datatypes”</a>
+in the <cite>HDF5 User's Guide</cite> for more information.
+
+
<!-- NEW PAGE -->
<!-- HEADER RIGHT " " -->
@@ -580,29 +583,13 @@ In the
</table>
</center>
<hr>
-<!-- #EndLibraryItem --><!-- #BeginLibraryItem "/ed_libs/Footer.lbi" -->
-<address>
-<table width="100%" border="0">
- <tr valign="top">
- <td align="left">
- <address>
- The HDF Group Help Desk: <img src="../Graphics/help.png" align=top height=16>
- <br>
- Describes HDF5 Release 1.8.13, May 2014.
- </address>
- </td><td width="5%"> </td>
- <td align="right">
- <a href="../Copyright.html">Copyright</a> by
- <a href="http://www.hdfgroup.org">The HDF Group</a>
- <br>
- and the Board of Trustees of the University of Illinois
- </td>
- </tr>
-</table>
-</address>
-<!-- #EndLibraryItem --><SCRIPT LANGUAGE="JAVASCRIPT">
+<!-- #EndLibraryItem -->
+
+<?php include("../ed_libs/Footer2.htm"); ?>
+
+<SCRIPT LANGUAGE="JAVASCRIPT">
<!--
-document.writeln("Last modified: 7 April 2014");
+document.writeln("Last modified: 14 October 2014");
-->
</SCRIPT>
diff --git a/html/RM/RM_H5Z.html b/html/RM/RM_H5Z.html
index 3d4558d..c34d52c 100644
--- a/html/RM/RM_H5Z.html
+++ b/html/RM/RM_H5Z.html
@@ -282,27 +282,11 @@ In the
</table>
</center>
<hr>
-<!-- #EndLibraryItem --><!-- #BeginLibraryItem "/ed_libs/Footer.lbi" -->
-<address>
-<table width="100%" border="0">
- <tr valign="top">
- <td align="left">
- <address>
- The HDF Group Help Desk: <img src="../Graphics/help.png" align=top height=16>
- <br>
- Describes HDF5 Release 1.8.13, May 2014.
- </address>
- </td><td width="5%"> </td>
- <td align="right">
- <a href="../Copyright.html">Copyright</a> by
- <a href="http://www.hdfgroup.org">The HDF Group</a>
- <br>
- and the Board of Trustees of the University of Illinois
- </td>
- </tr>
-</table>
-</address>
-<!-- #EndLibraryItem --><SCRIPT LANGUAGE="JAVASCRIPT">
+<!-- #EndLibraryItem -->
+
+<?php include("../ed_libs/Footer2.htm"); ?>
+
+<SCRIPT LANGUAGE="JAVASCRIPT">
<!--
document.writeln("Last modified: 2 July 2013");
-->
diff --git a/html/RM/Tools.html b/html/RM/Tools.html
index 8dcf257..35e3a6a 100644
--- a/html/RM/Tools.html
+++ b/html/RM/Tools.html
@@ -323,30 +323,13 @@ In the
</table>
</center>
<hr>
-<!-- #EndLibraryItem --><!-- #BeginLibraryItem "/ed_libs/Footer.lbi" -->
-<address>
-<table width="100%" border="0">
- <tr valign="top">
- <td align="left">
- <address>
- The HDF Group Help Desk: <img src="../Graphics/help.png" align=top height=16>
- <br>
- Describes HDF5 Release 1.8.13, May 2014.
- </address>
- </td><td width="5%"> </td>
- <td align="right">
- <a href="../Copyright.html">Copyright</a> by
- <a href="http://www.hdfgroup.org">The HDF Group</a>
- <br>
- and the Board of Trustees of the University of Illinois
- </td>
- </tr>
-</table>
-</address>
-<!-- #EndLibraryItem --><dl>
- <dt><dt><SCRIPT LANGUAGE="JAVASCRIPT">
+<!-- #EndLibraryItem -->
+
+<?php include("../ed_libs/Footer2.htm"); ?>
+
+<SCRIPT LANGUAGE="JAVASCRIPT">
<!--
-document.writeln("Last modified: 23 October 2013");
+document.writeln("Last modified: 29 April 2014");
-->
</SCRIPT>
diff --git a/html/RM/Tools/h5diff.htm b/html/RM/Tools/h5diff.htm
index 29ec5b5..66ce745 100644
--- a/html/RM/Tools/h5diff.htm
+++ b/html/RM/Tools/h5diff.htm
@@ -23,7 +23,7 @@
<hr>
<dl>
<dt><div align=right><font color=999999 size=-1><i>
- Last modified: 22 August 2012
+ Last modified: 29 April 2014
</i></font></div>
<dt><strong>Tool Name:</strong> <a name="Tools-Diff">h5diff</a>
diff --git a/html/TechNotes.html b/html/TechNotes.html
index cdb1ef2..3f4580f 100644
--- a/html/TechNotes.html
+++ b/html/TechNotes.html
@@ -41,7 +41,7 @@ HDF5 Special Topics and Technical Notes
<!--
And in this document,
-HDF5 Technical Notes
+HDF5 Special Topics and Technical Notes
<br>
<a href="TechNotes/FreeLists.html">Memory Management and Free Lists</a>
-->
@@ -97,7 +97,7 @@ HDF5 Technical Notes
</td></tr>
<tr><td valign=top>
-<a href="TechNotes/Version.html">HDF5 Library Version Numbers</a>
+<a href="TechNotes/Version.html">HDF5 Library Release Version Numbers</a>
</td><td> </td><td valign=top colspan="3">
A description of HDF5 release version numbers
</td></tr>
@@ -107,7 +107,7 @@ HDF5 Technical Notes
Digitally Signing HDF5 Releases</a>
</td><td> </td><td valign=top colspan="3">
Explanation of what MD5 checksums and PGP signatures are and why and
- how to apply them to HDF5 releases.
+ how to apply them to HDF5 releases
<!--
</td><td> </td><td valign=top><font size="-1">
19 Sep 2005</font>
@@ -118,7 +118,7 @@ HDF5 Technical Notes
<a href="TechNotes/Automake.html">Automake Use Cases</a>
</td><td> </td><td valign=top colspan="3">
Simple explanations of how to make some common changes to
- HDF5’s Automake-generated Makefiles.am.
+ HDF5’s Automake-generated Makefiles.am
<!--
</td><td> </td><td valign=top><font size="-1">
22 Sep 2005</font>
@@ -128,7 +128,7 @@ HDF5 Technical Notes
<tr><td valign=top>
<a href="TechNotes/Daily_Test_Explained.htm">Daily Test Explained</a>
</td><td> </td><td valign=top colspan="3">
- An explanation of the Daily Testing for HDF software conducted.
+ An explanation of the Daily Testing for HDF software conducted
<!--
</td><td> </td><td valign=top><font size="-1">
28 Oct 2002</font>
@@ -144,7 +144,7 @@ HDF5 Technical Notes
</td><td> </td><td valign=top colspan="3">
A description of various aspects of using variable-length datatypes
- in HDF5.
+ in HDF5
<!--
</td><td> </td><td valign=top><font size="-1">
9 Sep 2003</font>
@@ -162,13 +162,12 @@ HDF5 Technical Notes
<h3>Technical Notes and Historical Notes</h3>
- These documents are retained they shed light on HDF5’s
- design and development history;
- many were working papers for the original HDF5 design process.
- <p>
- Where available, the most recent update of the technical content
- of a document is listed in the right-hand column.
- These documents are not actively maintained and may be out of date.
+ These documents are retained because they shed light on HDF5’s
+ design and development history; many were working papers for the
+ original HDF5 design process. Where available, the date of the most
+ recent update of the technical content of a document is listed in
+ the right-hand column. These documents are not actively maintained
+ and may be out of date.
</td></tr>
<!--
@@ -271,14 +270,14 @@ HDF5 Technical Notes
Testing the Chunked Layout of HDF5</a>
</td><td> </td><td valign=top>
A white paper discussing the motivation to implement raw data chunking
- in the HDF5 library
+ in the HDF5 Library
</td><td> </td><td valign=top><font size="-1">
30 Jan 1997</font>
</td></tr>
<tr><td valign=top><a href="TechNotes/LibMaint.html">Library Maintenance</a>
</td><td> </td><td valign=top>
- A discussion of HDF5 library maintenance issues
+ A discussion of HDF5 Library maintenance issues
</td><td> </td><td valign=top><font size="-1">
15 Oct 1999</font>
</td></tr>
@@ -292,8 +291,8 @@ HDF5 Technical Notes
<tr><td valign=top><a href="TechNotes/NamingScheme.html">Naming Schemes</a>
</td><td> </td><td valign=top>
- A discussion of naming schemes for HDF5 library modules, functions,
- datatypes, etc.
+ A discussion of naming schemes for HDF5 Library modules, functions,
+ datatypes, and other elements
</td><td> </td><td valign=top><font size="-1">
5 Aug 1997</font>
</td></tr>
@@ -302,7 +301,7 @@ HDF5 Technical Notes
<a href="TechNotes/ThreadSafeLibrary.html">Thread Safe HDF5 Library
Implementation</a>
</td><td> </td><td valign=top>
- A report on the implementation of a thread safe HDF5 library.
+ A report on the implementation of a thread safe HDF5 Library
</td><td> </td><td valign=top><font size="-1">
27 Sep 2000</font>
</td></tr>
@@ -310,7 +309,7 @@ HDF5 Technical Notes
<tr><td valign=top>
<a href="TechNotes/openmp-hdf5.html">Using HDF5 with OpenMP</a>
</td><td> </td><td valign=top>
- A short report on using HDF5 with OpenMP.
+ A short report on using HDF5 with OpenMP
</td><td> </td><td valign=top><font size="-1">
28 Nov 2000 </font>
</td></tr>
@@ -320,7 +319,7 @@ HDF5 Technical Notes
</td><td> </td><td valign=top>
Descriptions of the HDF5 knobs and controls, such as the
environment variables and settings that control the functionality
- of the HDF5 libraries and tools.
+ of the HDF5 libraries and tools
</td><td> </td><td valign=top><font size="-1">
11 Dec 2000</font>
</td></tr>
@@ -328,7 +327,7 @@ HDF5 Technical Notes
<tr><td valign=top>
<a href="TechNotes/TestReview.html">Test Review</a>
</td><td> </td><td valign=top>
- Results of reviewing tests for API functions.
+ Results of reviewing tests for API functions
</td><td> </td><td valign=top><font size="-1">
11 Nov 2002</font>
</td></tr>
@@ -337,7 +336,7 @@ HDF5 Technical Notes
<a href="TechNotes/Basic_perform.html">Basic Performance Tools</a>
</td><td> </td><td valign=top>
A description of the three basic performance tools (chunk, iopipe,
- overhead).
+ overhead)
</td><td> </td><td valign=top><font size="-1">
4 Jun 2003</font>
</td></tr>
@@ -346,7 +345,7 @@ HDF5 Technical Notes
<a href="TechNotes/ReservedFileSpace.html">Reserved File Address Space</a>
</td><td> </td><td valign=top>
A description of HDF5’s internal system for ensuring that files
- stay within their address space.
+ stay within their address space
</td><td> </td><td valign=top><font size="-1">
28 Sep 2006</font>
</td></tr>
@@ -354,7 +353,7 @@ HDF5 Technical Notes
<tr><td valign=top><a href="TechNotes/DataTransformReport.htm">Data Transform
Report</a>
</td><td> </td><td valign=top>
- Report of the data transform implementation.
+ Report of the data transform implementation
</td><td> </td><td valign=top><font size="-1">
10 Dec 2004</font>
</td></tr>
@@ -393,31 +392,11 @@ HDF5 Technical Notes
</table>
</center>
<hr>
-<!-- #EndLibraryItem --><address>
-
-<!-- #BeginLibraryItem "/ed_libs/Footer.lbi" -->
-<address>
-<table width="100%" border="0">
- <tr valign="top">
- <td align="left">
- <address>
- The HDF Group Help Desk: <img src="Graphics/help.png" align=top height=16>
- <br>
- Describes HDF5 Release 1.8.13, May 2014.
- </address>
- </td><td width="5%"> </td>
- <td align="right">
- <a href="Copyright.html">Copyright</a> by
- <a href="http://www.hdfgroup.org">The HDF Group</a>
- <br>
- and the Board of Trustees of the University of Illinois
- </td>
- </tr>
-</table>
-</address>
<!-- #EndLibraryItem -->
-Last modified: 14 September 2012
+<?php include("./ed_libs/Footer.htm"); ?>
+
+Last modified: 6 November 2014
diff --git a/html/TechNotes/VFL.html b/html/TechNotes/VFL.html
index d9ece7f..30a854a 100644
--- a/html/TechNotes/VFL.html
+++ b/html/TechNotes/VFL.html
@@ -1600,6 +1600,11 @@ file(s). Thus, in general the mapping must be known before the file superblock
can be read. However, the user usually knows enough about the mapping for the
superblock to be readable and once the superblock is read the library can fill
in the missing parts of the mapping.
-<P><HR><P>
+<P><HR>
+
+<?php include("../ed_libs/Footer2.htm"); ?>
+
+<P>
+
</BODY>
</HTML>
diff --git a/html/TechNotes/VFLfunc.html b/html/TechNotes/VFLfunc.html
index de24360..34c9697 100644
--- a/html/TechNotes/VFLfunc.html
+++ b/html/TechNotes/VFLfunc.html
@@ -78,9 +78,11 @@ herr_t <font color=red>H5FDflush</font></font>(H5FD_t *file, unsigned closing);
===========================================
+
+<?php include("../ed_libs/Footer2.htm"); ?>
+
Last modified: 31 July 2008
-THG Help Desk: 'help' at hdfgroup.org
</pre>
</body>
diff --git a/html/TechNotes/Version.html b/html/TechNotes/Version.html
index df5835b..36c4101 100644
--- a/html/TechNotes/Version.html
+++ b/html/TechNotes/Version.html
@@ -1,7 +1,7 @@
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
<head>
-<title>TechNote: HDF5 Library Version Numbers</title>
+<title>TechNote: HDF5 Library Release Version Numbers</title>
<!--( Begin styles definition )=====================================-->
<link href="../UG/ed_styles/NewUGelect.css" rel="stylesheet" type="text/css">
@@ -28,9 +28,30 @@
<body>
<div align="center">
-<h1>HDF5 Library Version Numbers</h1>
+<h1>HDF5 Library Release Version Numbers</h1>
</div>
+<br />
+<h2>Contents</h2>
+
+<ul>
+<li><a href="#Introduction">Introduction</a></li>
+<li><a href="#Definitions">Definitions</a></li>
+<li><a href="#TrunkReleaseBranchesFeatureBranches">The Trunk, Release Branches, and Feature Branches</a></li>
+<li><a href="#VersionSupportFromTheLibrary">Version Support from the Library</a></li>
+<li><a href="#UseCases">Use Cases</a></li>
+<ul>
+<li><a href="#ApplicationVersionChecking">Application Version Checking</a></li>
+<li><a href="#ConditionalInclusions">Conditional Inclusions or Exclusions Based on the Version</a></li>
+<li><a href="#SpecifyingAFormat">Specifying a Format</a></li>
+</ul>
+<li><a href="#SharedLibraryVersionNumbers">Shared Library Version Numbers</a></li>
+</ul>
+
+
+
+<br />
+<h2><a name="Introduction">Introduction</a></h2>
<p>HDF5 software is updated on a regular basis. These updates, known
as releases, range in scope and size from small to large. Some updates
may only fix bugs, and some updates may require a change in the format
@@ -38,6 +59,16 @@
information about the kinds of changes made in the updates. This Tech
Note describes what the version numbers mean.</p>
+ <p>Note that this document describes release version numbers for the
+ HDF5 Library. For more information, see the
+ <a href="#SharedLibraryVersionNumbers">“Shared Library Version
+ Numbers”</a> section at the end of this document.</p>
+
+
+
+<br />
+<h2><a name="Definitions">Definitions</h2>
+
<p>Each software release of the HDF5 Library is labeled with a version
number. The version number is a set of three integers written as HDF5-1.2.3,
HDF5 version 1.2 release 3, or HDF5 Release 1.2.3. The version number
@@ -87,7 +118,8 @@
-<h2>1. The Trunk, Release Branches, and Feature Branches</h2>
+<br />
+<h2><a name="TrunkReleaseBranchesFeatureBranches">The Trunk, Release Branches, and Feature Branches</h2>
<p>The HDF Group uses a version control system to manage the HDF5
project. Within the system, a trunk and branches are used to track
@@ -166,7 +198,8 @@
-<h2>2. Version Support from the Library</h2>
+<br />
+<h2><a name="VersionSupportFromTheLibrary">Version Support from the Library</h2>
<p>The library provides macros and functions to query and check
version numbers.</p>
@@ -254,12 +287,13 @@
<cite>HDF5 Reference Manual</cite></a>. </p>
-<h2>3. Use Cases</h2>
+<br />
+<h2><a name="UseCases">Use Cases</h2>
<p>The purpose of this section is to describe how some of the version
functions, macros, and constants might be used. </p>
-<h3>3.1. Application Version Checking</h3>
+<h3><a name="ApplicationVersionChecking">Application Version Checking</h3>
<p>Suppose first that a developer builds an application that will read
from and write to an HDF5 file. When the application is compiled, a
@@ -281,7 +315,7 @@
then it can use the <code>H5get_libversion</code> and
<code>H5check_version</code> function calls. </p>
-<h3>3.2. Conditional Inclusions or Exclusions Based on the Version</h3>
+<h3><a name="ConditionalInclusions">Conditional Inclusions or Exclusions Based on the Version</h3>
<p>The <code>H5_VERSION_GE</code> and <code>H5_VERSION_LE</code> version
macros compare the version of the HDF5 Library being used against the
@@ -294,7 +328,7 @@
1.8.0 or greater, or it could use <code>H5Gunlink</code> if the library
version is less than 1.8.0. </p>
-<h3>3.3. Specifying a Format</h3>
+<h3><a name="SpecifyingAFormat">Specifying a Format</h3>
<p>Suppose a data file has three datasets. It is possible that the three
datasets were added to the data file with applications using different
versions of HDF5. The different versions could be 1.4.5, 1.6.10, and
@@ -308,14 +342,35 @@
want all data written to the file in the future to be in a 1.8 format
rather than 1.6 or 1.4. </p>
+
+
+<br />
+<h2><a name="SharedLibraryVersionNumbers">Shared Library Version
+Numbers</a></h2>
+
+<p>HDF5 shared libraries utilize the
+<a href="http://www.gnu.org/software/libtool/manual/libtool.html#Versioning">
+libtool versioning system</a> in order to indicate interface
+compatibility between maintenance releases of HDF5. While we always
+attempt to maintain interface compatibility between minor maintenance
+release versions of HDF5, if we are forced to break interface
+compatibility in order to resolve a critical defect within the
+library, then the library interface version attached to the shared
+libraries for a given release will be incremented accordingly.</p>
+
+<p>Please note that this libtool version number for interface
+compatibility is unrelated to the HDF5 release version for a given
+release.</p>
+
+
+
<br />
<hr />
-<pre>
-The HDF Group Help Desk: <img src="../Graphics/help.png" align=top height=14>
-Last modified: 30 October 1998
-Last modified: 27 March 2007 (Help Desk contact only)
-Last modified: 9 June 2011
-</pre>
+<p>The HDF Group Help Desk:
+<img src="../Graphics/help.png" align="top" height="14"></p>
+
+<p>Last modified: 6 November 2014</p>
+
<br /><br /><br />
</body>
</html>
diff --git a/html/UG/13_Attributes.html b/html/UG/13_Attributes.html
index 50171f7..ba0fee9 100755
--- a/html/UG/13_Attributes.html
+++ b/html/UG/13_Attributes.html
@@ -699,8 +699,8 @@ that can be used with property lists (H5P functions) are listed below.</p>
<p>HDF5 attributes are sometimes discussed as name/value pairs
in the form <code>name=value</code>.</p>
-<p>An attribute’s name is a null-terminated ASCII character string.
- Each attribute attached to an object has a unique name.
+<p>An attribute’s name is a null-terminated ASCII or UTF-8
+character string. Each attribute attached to an object has a unique name.
</p>
<p>The value portion of the attribute contains
diff --git a/html/UG/14_PropertyLists.html b/html/UG/14_PropertyLists.html
index 9ea3109..abab6d1 100755
--- a/html/UG/14_PropertyLists.html
+++ b/html/UG/14_PropertyLists.html
@@ -168,7 +168,7 @@ Access properties\
</div>
-<!-- ==== REDACTED FOR REVIEW &/OR PUBLICATION ====
+<!-- ??????? REDACTED FOR REVIEW &/OR PUBLICATION ???????
<font color="red">
<i>
@@ -187,7 +187,7 @@ This document will answer the following questions:
</i>
</font>
-===== END REDACTION ============== -->
+??????? END REDACTION ??????? ??????? -->
@@ -197,14 +197,15 @@ This document will answer the following questions:
<p>
HDF5 properties and property lists make it possible to shape or modify
- an HDF5 file, group, or object, or even an I/O stream, in a number of ways.
+ an HDF5 file, group, dataset, attribute, committed datatype,
+ or even an I/O stream, in a number of ways.
For example, you can do any of the following:
<ul>
- <li>Create a chunked dataset.</li>
<li>Customize the storage layout of a file to suit
a project or task.</li>
+ <li>Create a chunked dataset.</li>
<li>Apply compression or filters to raw data.</li>
- <li>use either ASCII or UTF-8 character encodings.</li>
+ <li>Use either ASCII or UTF-8 character encodings.</li>
<li>Create missing groups on the fly.</li>
<li>Switch between serial and parallel I/O.</li>
<li>Create consistency within a single file or
@@ -215,7 +216,7 @@ This document will answer the following questions:
while others make a file more compact;
some speed the reading or writing of data
while others enable more record-keeping at a per-object level.
- HDF5 offers nearly a hundred specific properties that can be used
+ HDF5 offers nearly one hundred specific properties that can be used
in literally thousands of combinations to maximize the usability
of HDF5-stored data.
@@ -223,8 +224,8 @@ This document will answer the following questions:
</p>
<p>
-<!-- ==== REDACTED FOR REVIEW &/OR PUBLICATION ====
- ==== Restart on Introduction ====
+<!-- ??????? REDACTED FOR REVIEW &/OR PUBLICATION ???????
+ ??????? Restart on Introduction ???????
HDF5 properties and property lists make it possible to shape or modify
an HDF5 file, group, or object, or even an I/O stream, in a number of ways.
@@ -242,9 +243,9 @@ This document will answer the following questions:
</p>
<p>
-===== END REDACTION ============== -->
+??????? END REDACTION ?????????????? -->
- More prosaically,
+ At the most basic level,
<a name="PListEcosystem"> </a>
@@ -254,53 +255,31 @@ This document will answer the following questions:
<td align="center">
<hr color="green" size="3"/>
<img src="Images/PropListEcosystem.png" width="150"
- alt="Graphic illustration of property list ecosystem">
+ alt="Graphic illustration of HDF5’s property environment">
</td>
</tr>
<tr><td><hr color="green" size="1" /></td></tr>
<tr valign="top">
<td align="left" width="200">
<b>Figure 1.
- The HDF5 property list ecosystem</b>
+ The HDF5 property environment</b>
<hr color="green" size="3"/></td>
</tr>
</table>
</td></tr></table>
- a property list is a collection of name/value pairs that can be
+ a property list is a collection of properties,
+ represented by name/value pairs that can be
passed to various HDF5 functions, usually modifying default settings.
- Certain kinds of property lists can be created by one application
- and used by an application that later operates on the same file.
- A property list may contain separate values for each of several
- properties, or characteristics, of an object;
- without property lists, each of these values would have to be
- passed to each function as a separate parameter.
- </p>
- <p>
- For instance, a file creation operation needs to know several
- things about a file, such as the size of the user-block at the
- beginning of the file, or the sizes of various file data structures.
- Bundling this information in a property list simplifies the
- interface by reducing the number of parameters to the function
- <code>H5Fcreate</code>.
- </p>
- <p>
- One can think of the basic HDF5 property list classes as templates
- for building the property lists that you will use in an
- application.
- </p>
- <p>
- HDF5 property lists and the property list interface
- (<a href="../RM/RM_H5P.html">H5P</a>) provide a mechanism for
- storing characteristics of objects in an HDF5 file and economically
- passing them around in an HDF5 application.
- In this capacity, property lists significantly reduce
- the burden of additional function parameters in the rest of
- the HDF5 application programming interface (the HDF5 API).
- Another advantage of property lists is that features can often
- be added to HDF5 by adding only property list functions to the API;
- all other requirements of the feature can be accomplished internally
- to the library.
+ A property list inherits a set of properties and values from
+ a property list class.
+ But that statement hardly provides a complete picture;
+ in the rest of this section and in the next section,
+ “Property List Classes, Property Lists, and Properties”,
+ we will discuss these things in much more detail.
+ After reading that material, the reader should have a reasonably
+ complete understanding of how properties and property lists can
+ be used in HDF5 applications.
<br />
</p>
@@ -323,14 +302,22 @@ This document will answer the following questions:
The discussions and function listings in this chapter focus on
general property operations,
object and link properties,
- generic properties,
and related functions.
</p>
<p>
+ File, group, dataset, datatype, and attribute properties
+ are discussed in the chapters devoted to those features,
+<!--
+ are discussed in the chapters devoted to those features;
+ generic property operations are an advanced feature and are
+ beyond the scope of this guide.
+ </p>
+ <p>
Property lists and property list functions that apply only to
specific types of HDF5 objects are generally listed and discussed
- in the chapter discussing those objects, where that information
- will be most convenient to users.
+ in the chapter discussing those objects,
+-->
+ where that information will be most convenient to users.
For example, the <a href="10_Datasets.html">Datasets</a> chapter
discusses dataset creation property lists and functions,
dataset access property lists and functions, and
@@ -338,6 +325,10 @@ This document will answer the following questions:
This chapter does not duplicate those discussions.
</p>
<p>
+ Generic property operations are an advanced feature and are
+ beyond the scope of this guide.
+ </p>
+ <p>
This chapter assumes an understanding of the following chapters
of this <cite>HDF5 User’s Guide</cite>:
<ul>
@@ -352,59 +343,57 @@ This document will answer the following questions:
<a name="PListHierarchy">
-<h3 class="pagebefore">10.2. Properties, Property Lists, and
- Property List Classes</h3>
+<h3 class="pagebefore">10.2. Property List Classes, Property Lists,
+ and Properties
+ </h3>
</a>
- As illustrated in <a href="#PListEcosystem">Figure 1</a> above,
- the property list environment in a three-level hierarchy:
- <ul>
- <li>Property list classes</li>
- <li>Property lists</li>
- <li>Properties</li>
- </ul>
</p>
<p>
- A <i>property list class</i> defines the roles that property lists
- of that class can play.
- This is accomplished by means of a property list template that
- includes all properties that are valid in that class.
- In that template, each property is set to its default value.
- </p>
- <p>
- A <i>property list</i> is a collection of related properties
- that are used together in specific circumstances.
- A new property list created from a property list class inherits
- the properties of the property list class
- and each property’s default value.
- A fresh dataset creation property list, for example,
- includes HDF5 properties relevant to the creation of a new dataset.
+ HDF5 property lists and the property list interface
+ (<a href="../RM/RM_H5P.html">H5P</a>) provide a mechanism for
+ storing characteristics of objects in an HDF5 file and economically
+ passing them around in an HDF5 application.
+ In this capacity, property lists significantly reduce the burden of
+ additional function parameters throughout the HDF5 API.
+ Another advantage of property lists is that features can often
+ be added to HDF5 by adding only property list functions to the API;
+ this is particularly true when all other requirements of the feature
+ can be accomplished internally to the library.
</p>
<p>
- The preset default property values are intended to be reasonable
- for general use cases, so an application can often use the
- property list without further modification.
- On the other hand, adjusting these settings is a routine action
- as there are many reasons for an application to do so.
+ For instance, a file creation operation needs to know several
+ things about a file, such as the size of the user-block
+ or the sizes of various file data structures.
+ Bundling this information as a property list simplifies the
+ interface by reducing the number of parameters to the function
+ <code>H5Fcreate</code>.
</p>
<p>
- A <i>property</i> is the basic element of the property list hierarchy
- (the <i>atomic</i> element, if you will). Properties control things
- like access rights to a file, the storage layout of a dataset, or
- whether missing intervening groups will be automatically created
- when a new object is created.
+ As illustrated in <a href="#PListEcosystem">the figure above</a>,
+ the HDF5 property environment is a three-level hierarchy:
+ <ul>
+ <li>Property list classes</li>
+ <li>Property lists</li>
+ <li>Properties</li>
+ </ul>
</p>
<p>
- </p>
-
+ The following subsections discuss property list classes, property lists,
+ and properties in more detail.
+
+<a name="PListClassesTable"> </a>
+ </p>
<a name="PListClasses">
<h4 class="pagebefore">10.2.1. Property List Classes</h4>
</a>
- HDF5 offers several classes of property lists,
- as listed in the table below.
- <a name="T1_PListClasses"> </a>
+ A <i>property list class</i> defines the roles that property lists
+ of that class can play.
+ Each class includes all properties that are valid for that class with
+ each property set to its default value.
+ HDF5 offers a property lists class for each of the following situations.
<p />
<table border="0">
@@ -414,22 +403,25 @@ This document will answer the following questions:
<tr><td> </td>
<td colspan="4"><hr color="green" size="3" /></td></tr>
<tr align="left" valign="bottom">
- <th width="5%"> </th>
+ <th> </th>
<th colspan="2">Property List Class
<hr color="green" size="1" />
</th>
- <th> </th>
- <th>Notes
+ <th><code> </code></th>
+ <th>For further discussion
<hr color="green" size="1" />
</th>
</tr>
<tr align="left" valign="top">
- <td> </td>
+ <td width="5%"> </td>
<td>File creation (<small>FCPL</small>)</td>
<td><code>H5P_FILE_CREATE</code> </td>
<td> </td>
- <td>Discussed in
- “<a href="08_TheFile.html">The HDF5 File</a>”.
+ <td width="50%" rowspan="2"><font size=-1>
+ See various sections of
+ “<a href="UG_frame08TheFile.html" target="_TOP">The
+ HDF5 File</a>” chapter.
+ </font>
</td>
</tr>
<tr align="left" valign="top">
@@ -437,31 +429,32 @@ This document will answer the following questions:
<td>File access (<small>FAPL</small>)</td>
<td><code>H5P_FILE_ACCESS</code> </td>
<td> </td>
- <td>Discussed in
- “<a href="08_TheFile.html">The HDF5 File</a>”.
- </td>
</tr>
<tr align="left" valign="top">
<td> </td>
<td>File mount (<small>FMPL</small>)</td>
<td><code>H5P_FILE_MOUNT</code> </td>
<td> </td>
- <td>
+ <td><font size=-1>
Used only as <code>H5P_DEFAULT</code>
(see <a href="#H5P_FILE_MOUNT">footnote 1</a>).
+ </font>
</td>
</tr>
+ <tr><td> </td>
+ <td colspan="2"><hr color="green" size="1" /></td>
+ <td> </td>
+ <td colspan="1"><hr color="green" size="1" /></td></tr>
<tr align="left" valign="top">
<td> </td>
<td>Object creation (<small>OCPL</small>)</td>
<td><code>H5P_OBJECT_CREATE</code> </td>
<td> </td>
- <td>
-
- <!--
- Discussed below in
- “<a href="">__</a>”.
- -->
+ <td rowspan="2"><font size=-1>
+ See table of
+ <a href="#ObjectPropFunctions">object property functions</a>
+ below.
+ </font>
</td>
</tr>
<tr align="left" valign="top">
@@ -469,21 +462,21 @@ This document will answer the following questions:
<td>Object copy (<small>OCPYPL</small>)</td>
<td><code>H5P_OBJECT_COPY</code> </td>
<td> </td>
- <td>
-
- <!--
- Discussed below in
- “<a href="">__</a>”.
- -->
- </td>
</tr>
+ <tr><td> </td>
+ <td colspan="2"><hr color="green" size="1" /></td>
+ <td> </td>
+ <td colspan="1"><hr color="green" size="1" /></td></tr>
<tr align="left" valign="top">
<td> </td>
<td>Group creation (<small>GCPL</small>)</td>
<td><code>H5P_GROUP_CREATE</code> </td>
<td> </td>
- <td>Discussed in
- “<a href="09_Groups.html">HDF5 Groups</a>”.
+ <td rowspan="2"><font size="-1">
+ See “Programming Model” section of
+ “<a href="UG_frame09Groups.html" target="_TOP">HDF5
+ Groups</a>” chapter.
+ </font>
</td>
</tr>
<tr align="left" valign="top">
@@ -491,22 +484,23 @@ This document will answer the following questions:
<td>Group access (<small>GAPL</small>)</td>
<td><code>H5P_GROUP_ACCESS</code> </td>
<td> </td>
- <td>Discussed in
- “<a href="09_Groups.html">HDF5 Groups</a>”.
- </td>
</tr>
+ <tr><td> </td>
+ <td colspan="2"><hr color="green" size="1" /></td>
+ <td> </td>
+ <td colspan="1"><hr color="green" size="1" /></td></tr>
<tr align="left" valign="top">
<td> </td>
<td>Link creation (<small>LCPL</small>)</td>
<td><code>H5P_LINK_CREATE</code> </td>
<td> </td>
- <td>
-
- <!--
- Discussed below in the
- <a href="#LinkCreationTable">link creation property
- functions</a> table.
- -->
+ <td rowspan="2"><font size=-1>
+ See examples in
+ “<a href="#ProgModel">Programming Model</a>”
+ section in this chapter and the table of
+ <a href="#LinkCreationTable">link creation property functions</a>
+ below.
+ </font>
</td>
</tr>
<tr align="left" valign="top">
@@ -514,21 +508,21 @@ This document will answer the following questions:
<td>Link access (<small>LAPL</small>)</td>
<td><code>H5P_LINK_ACCESS</code> </td>
<td> </td>
- <td>
-
- <!--
- Discussed below in
- “<a href="">__</a>”.
- -->
- </td>
</tr>
+ <tr><td> </td>
+ <td colspan="2"><hr color="green" size="1" /></td>
+ <td> </td>
+ <td colspan="1"><hr color="green" size="1" /></td></tr>
<tr align="left" valign="top">
<td> </td>
<td>Dataset creation (<small>DCPL</small>)</td>
<td><code>H5P_DATASET_CREATE</code> </td>
<td> </td>
- <td>Discussed in
- “<a href="10_Datasets.html">HDF5 Datasets</a>”.
+ <td rowspan="3"><font size=-1>
+ See “Programming Model” section of
+ “<a href="UG_frame10Datasets.html" target="_TOP">HDF5
+ Datasets</a>” chapter.
+ </font>
</td>
</tr>
<tr align="left" valign="top">
@@ -536,26 +530,27 @@ This document will answer the following questions:
<td>Dataset access (<small>DAPL</small>)</td>
<td><code>H5P_DATASET_ACCESS</code> </td>
<td> </td>
- <td>Discussed in
- “<a href="10_Datasets.html">HDF5 Datasets</a>”.
- </td>
</tr>
<tr align="left" valign="top">
<td> </td>
<td>Dataset transfer (<small>DXPL</small>)</td>
<td><code>H5P_DATASET_XFER</code> </td>
<td> </td>
- <td>Discussed in
- “<a href="10_Datasets.html">HDF5 Datasets</a>”.
- </td>
</tr>
+ <tr><td> </td>
+ <td colspan="2"><hr color="green" size="1" /></td>
+ <td> </td>
+ <td colspan="1"><hr color="green" size="1" /></td></tr>
<tr align="left" valign="top">
<td> </td>
<td>Datatype creation (<small>TCPL</small>)</td>
<td><code>H5P_DATATYPE_CREATE</code> </td>
<td> </td>
- <td>Discussed in
- “<a href="11_Datatypes.html">HDF5 Datatypes</a>”.
+ <td rowspan="2"><font size=-1>
+ See various sections of
+ “<a href="UG_frame11Datatypes.html" target="_TOP">HDF5
+ Datatypes</a>” chapter.
+ </font>
</td>
</tr>
<tr align="left" valign="top">
@@ -563,31 +558,45 @@ This document will answer the following questions:
<td>Datatype access (<small>TAPL</small>)</td>
<td><code>H5P_DATATYPE_ACCESS</code> </td>
<td> </td>
- <td>Discussed in
- “<a href="11_Datatypes.html">HDF5 Datatypes</a>”.
- </td>
</tr>
+ <tr><td> </td>
+ <td colspan="2"><hr color="green" size="1" /></td>
+ <td> </td>
+ <td colspan="1"><hr color="green" size="1" /></td></tr>
<tr align="left" valign="top">
<td> </td>
<td>String creation (<small>STRCPL</small>)</td>
<td><code>H5P_STRING_CREATE</code> </td>
<td> </td>
- <td>Discussed in
- “<a href="10_Datasets.html">HDF5 Datasets</a>”
+ <td><font size=-1>
+ See “Programming Model” sections of
+ “<a href="UG_frame10Datasets.html" target="_TOP">HDF5
+ Datasets</a>”
and
- “<a href="11_Datatypes.html">HDF5 Datatypes</a>”.
+ “<a href="UG_frame11Datatypes.html" target="_TOP">HDF5
+ Datatypes</a>” chapters.
+ </font>
</td>
</tr>
+ <tr><td> </td>
+ <td colspan="2"><hr color="green" size="1" /></td>
+ <td> </td>
+ <td colspan="1"><hr color="green" size="1" /></td></tr>
<tr align="left" valign="top">
<td> </td>
<td>Attribute creation (<small>ACPL</small>)<code> </code></td>
<td><code>H5P_ATTRIBUTE_CREATE</code> </td>
<td> </td>
- <td>Discussed in
- “<a href="13_Attributes.html">HDF5 Attributes</a>”.
+ <td><font size=-1>
+ See “Working with Attributes”
+ (or “Attribute Usage”) section of
+ “<a href="UG_frame13Attributes.html" target="_TOP">HDF5
+ Attributes</a>” chapter.
+ </font>
</td>
</tr>
+<!-- ??????? ??????? -->
<!-- DISCUSSION OF H5P_ROOT will not be included in the chapter. -->
<!-- Yes, it's the root of the property list structure, but there's not -->
<!-- much (maybe nothing?) interesting that the user can do with it. -->
@@ -598,12 +607,13 @@ This document will answer the following questions:
<!-- -->
<!-- To clean up the public interface, Quincey may move H5P_ROOT out of -->
<!-- H5Ppublic.h. -->
+<!-- ??????? ??????? -->
<!--
<tr align="left" valign="top">
<td> </td>
- <td>No property list class </td>
+ <td>No property list class</td>
<td><code>H5P_ROOT</code> </td>
<td> </td>
<td>Represents the root of the property list class hierarchy.</td>
@@ -630,8 +640,19 @@ This document will answer the following questions:
<p>
- The following figure graphically presents the inheritance hierarchy
- of HDF5’s property list classes.
+ The “HDF5 property list class inheritance hierarchy”
+ figure, immediately following, illustrates the
+ inheritance hierarchy of HDF5’s property list classes.
+ Properties are defined at the root of the HDF5 property environment
+ (“Property List Class Root” in the figure below).
+ Property list classes then inherit properties from that root,
+ either directly or indirectly through a parent class.
+ In every case, a property list class inherits only the properties
+ relevant to its role.
+ For example, the object creation property list class (OCPL)
+ inherits all properties that are relevant to the creation of
+ any object while the group creation property list class (GCPL)
+ inherits only those properties that are relevant to group creation.
</p>
<p>
@@ -648,43 +669,62 @@ This document will answer the following questions:
<tr valign="top">
<td align="left">
<b>Figure 2. HDF5 property list class inheritance hierarchy</b>
- <br />
<font size="-1">
- Entries above in <u>black</u> are property list classes that
- are directly accessible through the programming interface;
- entries in <font color="888888"><u>gray</u></font> are HDF5
- internal entities and are not user-accessible.
+ <br />
+ Property list classes displayed above in <u>black</u> are
+ directly accessible through the programming interface;
+ the root of the property environment and the STRCPL and OCPL
+ property list classes, in <font color="888888"><u>gray</u></font>
+ above, are not user-accessible.
<br />
The red <i>empty set</i> symbol (<font color="red">∅</font>)
- below <small>FMPL</small> indicates that the file mount property
- list class is an empty class; that is, it has no settable properties
+ indicates that the file mount property list class
+ (<small>FMPL</small>) is an empty class;
+ that is, it has no settable properties
(see <a href="#H5P_FILE_MOUNT">footnote 1</a>).
- </font>
+ <br />
+ Abbreviations used in this figure are defined in the preceding
+ table, “Property list classes in HDF5”.
+ </font>
<hr color="green" size="3"/>
</td>
</tr>
</table>
+<!-- ??????? REDACTED as "certainly out of place" ??????? -->
+<!-- ??????? and "probably repetitious". ???????
</p>
<p>
To illustrate the inheritance diagrammed above,
- consider the following prose example
- (coding examples appear in later sections of this chapter):
+ consider the following example:
Before creating an HDF5 dataset, you will need to determine the
creation properties the dataset must have.
- That is, you must establish the dataset’s DCPL.
+ That is, you must establish the dataset’s dataset creation
+ property list (DCPL).
This DCPL will be derived from the dataset creation property list class
and will inherit all of the appropriate properties, each set to a
default value.
If necessary, you may then change any of those default values
- in the new DCPL with the appropriate H5P calls, such as
- <code>H5Pset_layout</code> and <code>H5Pset_chunk</code>.
- You can now use the newly-created and modified DCPL to create
+ in the new DCPL with the appropriate H5P calls;
+ <code>H5Pset_layout</code> and <code>H5Pset_chunk</code> calls,
+ for example, would set up dataset chunking.
+ You can then use the newly-created and modified DCPL to create
any dataset that has the same creation property requirements.
+ </p>
+ <p>
+ Code examples appear in later sections of this chapter
+ and in other chapters where properties and property lists are
+ discussed in the context of specific objects.
+ For example, properties and property lists relevant to datasets are
+ discussed in the “Programming Model” section
+ of the “<a href="UG_frame10Datasets.html" target="_TOP">HDF5
+ Datasets</a>” chapter
+ in this <cite>HDF5 User’s Guide</cite>.
+ ??????? END REDACTION ??????? -->
-<!-- ==== REDACTED FOR REVIEW &/OR PUBLICATION ====
- ==== AS BEING REDUNDANT IN THE CURRENT DISCUSSION. ====
- ==== THEY MAY, HOWEVER, BE USEFUL ELSEWHERE. ====
+<!-- ??????? REDACTED FOR REVIEW &/OR PUBLICATION ???????
+ ??????? AS BEING REDUNDANT IN THE CURRENT DISCUSSION. ???????
+ ??????? THEY MAY, HOWEVER, BE USEFUL ELSEWHERE. ???????
<font color="AAAAAA">
</p>
<p>
@@ -713,34 +753,49 @@ This document will answer the following questions:
In fact, applications do not generally have any knowledge
of access properties used in the past.
</font>
-==== ==== -->
+
+??????? ??????? -->
</p>
<a name="PropertyLists">
<h4 class="pagebefore">10.2.2. Property Lists</h4>
</a>
- A <i>property list</i> is a container holding a collection of
- name/value pairs specifying a set of properties that are always
- used together.
- A property list contains information for one to many properties.
+ A <i>property list</i> is a collection of related properties
+ that are used together in specific circumstances.
+ A new property list created from a property list class inherits
+ the properties of the property list class
+ and each property’s default value.
+ A fresh dataset creation property list, for example, includes
+ all of the HDF5 properties relevant to the creation of a new dataset.
</p>
<p>
- A new property list is derived from a property list class.
- When a property list is created, it contains all of the properties
- that are relevant to the parent property list class
- with each property set to its default value.
+ Property lists are implemented as containers holding a collection of
+ name/value pairs.
+ Each pair specifies a property name and a value for the property.
+ A property list usually contains information for one to many properties.
</p>
<p>
- An HDF5 property list is a mechanism for passing values into
- HDF5 Library calls. Property lists were created to allow HDF5 calls
- to be extended with the equivalent of new parameters without changing
- the actual API or breaking existing code.
- The <i>call by value</i> nature of property lists means that
- property lists can be copied, reused, and discarded with ease.
+ HDF5’s default property values are designed to be
+ reasonable for general use cases. Therefore, an application can
+ often use a property list without modification.
+ On the other hand, adjusting property list settings is a routine action
+ and there are many reasons for an application to do so.
</p>
<p>
- Property lists can also be freely reused to create consistency.
+ A new property list may either be derived from a property list class
+ or copied from an existing property list.
+ When a property list is created from a property list class,
+ it contains all the properties that are relevant to the class,
+ with each property set to its default value.
+ A new property list created by copying an existing property list
+ will contain the same properties and property values as the
+ original property list.
+ In either case, the property values can be changed as needed through
+ the HDF5 API.
+ </p>
+ <p>
+ Property lists can be freely reused to create consistency.
For example, a single set of file, group, and dataset
creation property lists might be created at the beginning of a
project and used to create hundreds, thousands, even millions, of
@@ -748,6 +803,9 @@ This document will answer the following questions:
project’s life.
When such consistency is important to a project, this is an
economical means of providing it.
+
+<!-- ??????? REDACTED ??????? -->
+<!-- ??????? as the statement seems not to be useful. ???????
</p>
<p>
Note that the HDF5 property list functions generate fully populated
@@ -756,6 +814,8 @@ This document will answer the following questions:
If customized properties and property lists are required by an
application or project, they can be created through the use HDF5’s
<a href="#GenericPLists">generic property</a> functionality.
+ ??????? END REDACTION ??????? -->
+
</p>
@@ -763,9 +823,14 @@ This document will answer the following questions:
<h4 class="pagebefore">10.2.3. Properties</h4>
</a>
- HDF5 <i>properties</i> each describe a specific characteristic
- of an object or aspect of its access or creation.
- Examples include the following:</p>
+ A <i>property</i> is the basic element of the property list hierarchy.
+ HDF5 offers nearly one hundred properties controlling things ranging
+ from file access rights,
+ to the storage layout of a dataset,
+ through optimizing the use of a parallel computing environment.
+ </p>
+ <p>
+ Further examples include the following:</p>
<table border="0">
<tr valign="bottom" align="left">
@@ -778,7 +843,7 @@ This document will answer the following questions:
</tr>
<tr valign="top">
<td> </td>
- <td>Specify the driver to be used to open to a file</td>
+ <td>Specify the driver to be used to open a file</td>
<td> </td>
<td>A <small>POSIX</small> driver or an MPI IO driver</td>
<td> </td>
@@ -797,7 +862,7 @@ This document will answer the following questions:
<td>Specify whether to record key times associated with an
object</td>
<td> </td>
- <td>Creation time and last-modified time</td>
+ <td>Creation time and/or last-modified time</td>
<td> </td>
<td>OCPL</td>
</tr>
@@ -814,20 +879,13 @@ This document will answer the following questions:
</p>
<p>
- A property can be used in many property lists while a property list
- must belong to exactly one property list class.
- </p>
- <p>
- As stated above, each property is initialized with a default value.
+ Each property is initialized with a default value.
For each property, there are one or more dedicated <code>H5Pset_*</code>
calls that can be used to change that value.
</p>
<p>
-<!--
<b><i>Creation, access, and transfer properties:</i></b>
--->
- <b><i>Creation and access properties:</i></b>
<br>
Properties fall into one of several major categories:
creation properties, access properties, and transfer properties.
@@ -835,14 +893,16 @@ This document will answer the following questions:
<p>
<i>Creation properties</i> control <i>permanent</i> object
characteristics. These characteristics must be established when an
- object is created and are <i>immutable</i>;
- they cannot change through the life of the object.
+ object is created, cannot change through the life of the object
+ (they are <i>immutable</i>), and the property setting usually has a
+ permanent presence in the file.
+
</p>
<p>
Examples of creation properties include:
<ul>
<li>Whether a dataset is stored in a compact, contiguous,
- or chunked layout.
+ or chunked layout
</p>
<p>
The default for this dataset creation property
@@ -858,7 +918,7 @@ This document will answer the following questions:
</p>
<p>
A compact layout is suitable only for very small datasets
- as the raw data is stored in the object header.
+ because the raw data is stored in the object header.
<!--
Some datasets, when analyzed later in their lifetime,
will be accessed by means of hyperslabs or subsetting;
@@ -884,7 +944,7 @@ Things you can do with chunked but not contiguous datasets:
-->
</li>
<li>Creation of intermediate groups when adding an object
- to an HDF5 file.
+ to an HDF5 file
</p>
<p>
This link creation property
@@ -897,18 +957,24 @@ Things you can do with chunked but not contiguous datasets:
group in the path exists, and create those that do not,
before creating the new object; if any group is missing,
the create operation will fail.
+
+<!-- ??????? REDACTED ??????? -->
+<!-- ??????? as not necessarily helpful ???????
+<!-- ??????? and potentially confusing. ???????
</p>
<p>
Note that this property is an exception to the general rule.
It is a creation property not because it is immutable
but because it is used only in the creation process.
+ ??????? END REDACTION ??????? -->
+
</li>
<li>Whether an HDF5 file is a single file
- or a set of tightly related files that form a virtual HDF5 file.
+ or a set of tightly related files that form a virtual HDF5 file
</p>
<p>
- Several file creation properties enable the application
- to select one of several available file layouts.
+ Certain file creation properties enable the application
+ to select one of several file layouts.
Examples of the available layouts include
a standard <small>POSIX</small>-compliant layout
(<code>H5Pset_fapl_sec2</code>),
@@ -921,6 +987,14 @@ Things you can do with chunked but not contiguous datasets:
File</a>” chapter of this <cite>HDF5 User’s
Guide</cite>.
</li>
+ <li>To enable error detection when creating a dataset
+ <p>
+ In settings where data integrity is vulnerable,
+ it may be desirable to set checksumming when datasets are created
+ (<code>H5Pset_fletcher32</code>). A subsequent application will
+ then have a means to verify data integrity when reading the
+ dataset.
+ </li>
</ul>
</p>
@@ -951,11 +1025,48 @@ Things you can do with chunked but not contiguous datasets:
</p>
<p>
-<!-- ==== REDACTED FOR REVIEW & PUBLICATION ====
- ==== Questions for QK: ====
- ==== Only 2 DAPL calls? (1 get, 1 set) ====
- ==== All others are labelled DXPL. ====
- ==== Yet opaque to me why there are both types. ====
+ <i>Transfer properties</i> apply only to datasets and
+ control <i>transient</i> aspects of data I/O.
+ These characteristics may change with the circumstances under which
+ data is accessed.
+ </p>
+ <p>
+ Examples of dataset trasfer properties include:
+ <ul>
+ <li>To enable error detection when reading a dataset
+ <p>
+ If checksumming has been set on a dataset
+ (with <code>H5Pset_fletcher32</code>,
+ in the dataset creation prpertiy list),
+ an application reading that dataset can choose whether
+ check for data integrity (<code>H5Pset_edc_check</code>).
+ </li>
+ <li>Various properties to optimize chunked data I/O on
+ parallel computing systems
+ <p>
+ HDF5 provides several properties for tuning I/O of
+ chunked datasets in a parallel computing environment
+ (<code>H5Pset_dxpl_mpio_chunk_opt</code>,
+ <code>H5Pset_dxpl_mpio_chunk_opt_num</code>,
+ <code>H5Pset_dxpl_mpio_chunk_opt_ratio</code>, and
+ <code>H5Pget_mpio_actual_chunk_opt_mode</code>).
+ <p>
+ Optimal settings differ
+ due to the characteristics of a computing environment
+ and due to an application’s data access patterns;
+ even when working with the same file, these settings might
+ change for every application and every platform.
+ </li>
+ </ul>
+
+ </p>
+ <p>
+
+<!-- ??????? REDACTED FOR REVIEW & PUBLICATION ???????
+ ??????? Questions for QK: ???????
+ ??????? Only 2 DAPL calls? (1 get, 1 set) ???????
+ ??????? All others are labelled DXPL. ???????
+ ??????? Yet opaque to me why there are both types. ???????
<i>Dataset transfer properties:</i>
@@ -967,7 +1078,7 @@ Similar discussion of DXPLs.
</p>
<p>
-===== END REDACTION ============== -->
+??????? END REDACTION ??????? ??????? -->
@@ -1000,8 +1111,8 @@ Similar discussion of DXPLs.
-<!-- ==== REDACTED FOR REVIEW &/OR PUBLICATION ====
- ==== Restart on Introduction ====
+<!-- ??????? REDACTED FOR REVIEW &/OR PUBLICATION ???????
+ ??????? Restart on Introduction ???????
<p>
@@ -1058,7 +1169,7 @@ Similar discussion of DXPLs.
<h4>10.3.3. Using Property Lists</h4>
-===== END REDACTION ============== -->
+??????? END REDACTION ??????? ??????? -->
</i>
@@ -1142,7 +1253,7 @@ Similar discussion of DXPLs.
property values.
<p>
A list of valid classes appears above in
- “<a href="#T1_PListClasses">Table 1: Property List Classes
+ “<a href="#PListClassesTable">Table 1: Property List Classes
in HDF5</a>”.
</dd>
<dt><code>dcplB_id = H5Pcopy (dcplA_id)</code>;
@@ -1204,7 +1315,7 @@ Similar discussion of DXPLs.
<p>
Since <code>dcplA_id</code> specifies a chunked layout,
we must also set the number of dimensions and the size of the chunks.
- Th example below specifies that datasets created with
+ The example below specifies that datasets created with
<code>dcplA_id</code> will be 3-dimensional and
that the chunk size will be 100 in each dimension:
<dir>
@@ -1376,8 +1487,9 @@ Similar discussion of DXPLs.
these <code>H5Pget_</code> calls will return the property’s
default value.
-<!-- ==== REDACTED FOR REVIEW &/OR PUBLICATION ====
- ==== REMOVE H5Piterate DISCUSSION; GENERIC PROP FUNCTIONS BEYOND SCOPE ====
+<!-- ??????? REDACTED FOR REVIEW &/OR PUBLICATION ???????
+ ??????? REMOVE H5Piterate DISCUSSION; GENERIC PROP ???????
+ ??????? FUNCTIONS BEYOND SCOPE ???????
</p>
<p>
A more comprehensive approach is to perform a
@@ -1388,7 +1500,7 @@ Similar discussion of DXPLs.
The application can then assess each property (or property list)
that is of interest. Further discussion of this function
is beyond the current scope of this document.
-===== END REDACTION ============== -->
+??????? END REDACTION ??????? ??????? -->
</p>
@@ -1422,7 +1534,7 @@ Similar discussion of DXPLs.
The application could then use the returned property list identifier
to analyze the property settings.
-<!-- ==== REDACTED FOR REVIEW & PUBLICATION ====
+<!-- ??????? REDACTED FOR REVIEW & PUBLICATION ???????
<font color="red">
<i>
@@ -1435,11 +1547,11 @@ If never or exceedingly rare, this can be dropped.
</i>
</font>
-===== END REDACTION ============== -->
+??????? END REDACTION ??????? ??????? -->
-<!-- ==== REDACTED FOR REVIEW &/OR PUBLICATION ====
- ==== This is a 1.10 feature. ====
+<!-- ??????? REDACTED FOR REVIEW &/OR PUBLICATION ???????
+ ??????? This is a 1.10 feature. ???????
<a name="EncodeDecodePList">
<h5 class="pagebefore">10.3.3.4. Encode and Decode Property Lists</h5>
@@ -1457,11 +1569,11 @@ anticipated to be HDF5 Release 1.10.
</i>
</font>
-===== END REDACTION ============== -->
+??????? END REDACTION ??????? ??????? -->
-<!-- ==== REDACTED FOR REVIEW &/OR PUBLICATION ====
+<!-- ??????? REDACTED FOR REVIEW &/OR PUBLICATION ???????
<a name="GeneralPListOps">
<h3 class="pagebefore">10.4. General Property List Operations</h3>
@@ -1502,15 +1614,15 @@ anticipated to be HDF5 Release 1.10.
“<a href="../Advanced/UsingUnicode/index.html">Using UTF-8 Encoding
in HDF5 Applications</a>”.
-===== END REDACTION ============== -->
+??????? END REDACTION ??????? ??????? -->
-<!-- ==== REDACTED FOR REVIEW &/OR PUBLICATION ====
- ==== Section isn't quite right. ====
- ==== ====
- ==== Is there an actual OCPL? ====
- ==== Is is it always a DCPL or GCPL? ====
- ==== and possibly TCPL? ====
+<!-- ??????? REDACTED FOR REVIEW &/OR PUBLICATION ???????
+ ??????? Section isn't quite right. ???????
+ ??????? ???????
+ ??????? Is there an actual OCPL? ???????
+ ??????? Is is it always a DCPL or GCPL? ???????
+ ??????? and possibly TCPL? ???????
<a name="Object+LinkOps">
@@ -1550,7 +1662,7 @@ anticipated to be HDF5 Release 1.10.
can be used in any call that accepts an object copy property list.
</p>
-===== END REDACTION ============== -->
+??????? END REDACTION ??????? ??????? -->
<a name="GenericPLists">
@@ -1558,34 +1670,36 @@ anticipated to be HDF5 Release 1.10.
User-defined Properties</h3>
</a>
- HDF5’s generic property functions provide tools for
+ HDF5’s generic property interface provides tools for
managing the entire property hierarchy and for the creation
and management of user-defined property lists and properties.
- The generic property functions also enable an application or a
+ This interface also makes it possible for an application or a
driver to create, modify, and manage custom properties,
property lists, and property list classes.
- A comprehensive list of generic property functions appears
- below in the
- <a href="#GenericPropFunctions">generic property list functions</a>
- table.
- <p>
- </p>
- Property names beginning with ‘<code>H5</code>’
- are reserved for HDF5 Library use and should not be used for
- user-defined properties.
+ A comprehensive list of functions for this interface appears under
+ “<a href="../RM/RM_H5P.html#GenericPropFuncs" target="_TOP">Generic
+ Property Operations (Advanced)</a>” in the
+ “<a href="../RM/RM_H5P.html" target="_TOP">H5P: Property List
+ Interface</a>” section of the
+ <a href="../RM/RM_H5Front.html" target="_TOP"><cite>HDF5 Reference
+ Manual</cite></a>.
<p>
</p>
- Beyond these comments and the
- <a href="#GenericPropFunctions">function listing</a>
- below, discussions of HDF5’s generic property interface
- and user-defined properties and property lists are beyond
- the current scope of this document.
+ Further discussion of HDF5’s generic property interface
+ and user-defined properties and property lists
+ is beyond the scope of this document.
+
+<!-- ??????? REDACTED FOR REVIEW &/OR PUBLICATION ???????
+ ??????? BEGIN MORE SERIOUS Generic Properties TEXT ???????
+ ??????? But it's beyond scope for this version ???????
-<!-- ==== REDACTED FOR REVIEW &/OR PUBLICATION ====
- ===== BEGIN MORE SERIOUS Generic Properties TEXT ============
- ===== But it's beyond scope for this version ============
+ <p>
+ </p>
+ Property names beginning with ‘<code>H5</code>’
+ are reserved for HDF5 Library use and should not be used for
+ user-defined properties.
</p>
<p>
HDF5’s generic property functions provide a general foundation
@@ -1731,16 +1845,16 @@ a better sense of how they can be used.
</font>
<br>
-===== END "beyond scope" Generic Properties discussion ==============
-===== END REDACTION ============== -->
+??????? END "beyond scope" Generic Properties discussion ??????? ???????
+??????? END REDACTION ??????? ??????? -->
</p>
-<!-- ==== REDACTED FOR REVIEW &/OR PUBLICATION ====
- ====== MASK UNUSED TEMPLATES ======
+<!-- ??????? REDACTED FOR REVIEW &/OR PUBLICATION ???????
+ ??????? MASK UNUSED TEMPLATES ???????
<a name="CodeSnip">
<h3 class="pagebefore">10.6. Code Snippets</h3>
@@ -1830,8 +1944,8 @@ specify a driver, so the default driver,
</p>
</dir>
-===== END UNUSED TEMPLATES MASK =====
-===== END REDACTION ============== -->
+??????? END UNUSED TEMPLATES MASK ???????
+??????? END REDACTION ??????? -->
<!-- NEW PAGE -->
@@ -1929,9 +2043,10 @@ specify a driver, so the default driver,
<p>
+ <a name="ObjectPropFunctions">
Object property functions can be used with several kinds of objects.
+ </a>
- <a name="ObjectPropFunctions"> </a>
</p>
<p>
@@ -2229,10 +2344,19 @@ specify a driver, so the default driver,
<p>
+<!-- ??????? GENERIC PROPERTY OPERATIONS TABLE REMOVED FROM UG ??????? -->
+<!-- ??????? Property Lists CHAPTER (UG/14_PropertyLists.html) ??????? -->
+<!-- ??????? AND CORRESPONDING TEXT REDUCED IN FAVOR OF ??????? -->
+<!-- ??????? EVENTUAL (AND AS YET UNSCUEDULED) DOCUMENT ??????? -->
+<!-- ??????? SEPARATELY DOCUMENTING GENERIC PROPERTY OPS. ??????? -->
+<!-- ??????? THIS WILL PROBABLY BE AN "ADVANCED TOPIC". ??????? -->
+<!-- ??????? 9 July 2014 ??????? -->
+
+<!-- ??????? SEE hdf5doc/trunk/sandbox/GenericProperties/. ???????
+
Generic property functions allow an application to create
properties, property lists, and property list classes
beyond those provided by HDF5.
- <a name="GenericPropFunctions"> </a>
Beyond this function listing and the
<a href="#GenericPLists">generic and user-defined properties</a>
section above, discussions of HDF5’s generic property interface
@@ -2473,6 +2597,8 @@ specify a driver, so the default driver,
</table>
</p>
+-->
+<!-- ??????? END OF REMOVED GENERIC PROPERTY OPERATIONS TABLE. ??????? -->
<a name="AddlPListResources">
@@ -2551,7 +2677,7 @@ specify a driver, so the default driver,
The in-memory file image feature of HDF5 uses property lists
in a manner that differs substantially from their use elsewhere in HDF5.
- Whose who plan to use in-memory file images must study “<a href=
+ Those who plan to use in-memory file images must study “<a href=
"../Advanced/FileImageOperations/HDF5FileImageOperations.pdf">File
Image Operations</a>” (PDF) in the
<a href="../Advanced.html"><cite>Advanced Topics in HDF5</cite></a>
@@ -2648,8 +2774,8 @@ specify a driver, so the default driver,
-<!-- ==== REDACTED FOR REVIEW &/OR PUBLICATION ====
- ==== NOT RELEVANT TO THE USER PUBLICATION =========
+<!-- ??????? REDACTED FOR REVIEW &/OR PUBLICATION ???????
+ ??????? NOT RELEVANT TO THE USER PUBLICATION ???????
<p>
<u>Additional writing resources:</u>
</p>
@@ -2679,7 +2805,7 @@ May be useful if a Parallel I/O example is included.
</font>
</p>
-===== END REDACTION ============== -->
+??????? END REDACTION ??????? ??????? -->
diff --git a/html/UG/17_Additional.html b/html/UG/17_Additional.html
index c6340b2..8abc894 100755
--- a/html/UG/17_Additional.html
+++ b/html/UG/17_Additional.html
@@ -66,7 +66,7 @@
<tr>
<td valign="top">
- <a href="http://www.hdfgroup.org/ftp/HDF5/examples/examples-by-api/">
+ <a href="http://www.hdfgroup.org/HDF5/examples/">
HDF5 Examples</a></td>
<td> </td>
<td valign="top">Code examples by API.
@@ -231,7 +231,7 @@
<p> To see code examples by API, go to the <cite>HDF5 Examples</cite>
page at this address:
- <pre> http://www.hdfgroup.org/ftp/HDF5/examples/examples-by-api/
+ <pre> http://www.hdfgroup.org/HDF5/examples/
</pre></p>
<p> For more information on how to manage the metadata cache and how
to configure it for better performance, go to the <cite>Metadata
@@ -975,7 +975,7 @@ readers (ie, it's not on the web site)
but it doesn't seem to work with the electronic page. I'm keeping this
paragraph commented out. --
<p> The page “<a href=
- "http://www.hdfgroup.org/ftp/HDF5/examples/examples-by-api/api18-c.html">
+ "http://www.hdfgroup.org/HDF5/examples/api18-c.html">
HDF5 Examples by API</a>” lists many code examples that are
regularly tested with the HDF5 Library. Several illustrate the
use of chunking in HDF5, particularly “Read/Write Chunked
diff --git a/html/UG/UG_UpdateStatus.html b/html/UG/UG_UpdateStatus.html
index 2929357..c1adcb0 100644
--- a/html/UG/UG_UpdateStatus.html
+++ b/html/UG/UG_UpdateStatus.html
@@ -7,7 +7,34 @@
<h1 align="center">HDF5 User’s Guide Update Status</h1>
+<p>No major changes have been made to the <cite>HDF5 User’s
+Guide</cite> for HDF5 Release 1.8.14. </p>
+
+<p>The main updates made for the 1.8.13 release are the following:</p>
+ <ul>
+ <li>The “Properties and Property Lists in HDF5”
+ chapter was added. This chapter gives a general overview of
+ how property lists are used by the HDF5 Library.</li>
+ <li>The
+ <a href="../Advanced/FreeingMemory/FreeingMemoryAllocatedByTheHdf5Library.pdf">
+ <em>Freeing Memory Allocated by the HDF5 Library</em></a>
+ topic was added to the “Additional Resources” chapter.
+ This topic describes how inconsistent memory management can
+ cause heap corruption or resource leaks and possible solutions.</li>
+ <li>The
+ <a href="../Advanced/ModifiedRegionWrites/ModifiedRegionWrites.pdf">
+ <em>Modified Region Writes</em></a> topic was added to the
+ “Additional Resources” chapter. This topic describes
+ how to set write operations for in-memory files so that only
+ modified regions are written to storage. This feature is
+ available when the Core (Memory) VFD is used.</li>
+
+ </ul>
+
+
+<!--
<br />
+
<p>The <cite>HDF5 User’s Guide</cite> has been updated
for HDF5 Release 1.8.13. These updates have been made since the 1.8.12
version of this document was published in November 2013.</p>
@@ -32,13 +59,14 @@ version of this document was published in November 2013.</p>
available when the Core (Memory) VFD is used.</li>
</ul>
+-->
<p>We welcome feedback on the documentation. Please send your comments to
<a href="mailto:docs at hdfgroup.org"><code>docs at hdfgroup.org</code></a>.
</p>
<br />
<div align="left"><font color="999999" size="-1"><i>
- Last modified: 9 May 2014
+ Last modified: 28 October 2014
</i></font></div>
diff --git a/html/UG/UG_front.html b/html/UG/UG_front.html
index 626b91f..21c2c43 100644
--- a/html/UG/UG_front.html
+++ b/html/UG/UG_front.html
@@ -17,9 +17,9 @@
<h1>HDF5 User's Guide</h1>
<br>
<br>
-<h3>HDF5 Release 1.8.13
+<h3>HDF5 Release 1.8.14
<br>
- <br>May 2014</h3>
+ <br>November 2014</h3>
<hr>
diff --git a/html/UG/UG_nav00.html b/html/UG/UG_nav00.html
index c245abb..24db297 100644
--- a/html/UG/UG_nav00.html
+++ b/html/UG/UG_nav00.html
@@ -3,14 +3,15 @@
<body bgcolor="d2e6ef">
+
<!--
<A HREF="READ1ST.HTML" Target="RdFirstWin"
onClick="window.open("READ1ST.HTML","RdFirstWin","toolbar=0,location=0,directories=0,status=0,menubar=0,scrollbars=yes,resizable=1,width=500,height=250,titlebar=yes")">
<IMG SRC="GRAPHICS/READ1ST.GIF" BORDER=0 ALT="Read this first!"></A>
-->
-<font size=-1>
-<br>
+<font size="-1">
+<br />
<!-- editingComment
<div align=right>
( <a href="UG_nav01.html">Expand TOC</a> )
@@ -18,34 +19,34 @@
-->
<a href="UG_front.html" TARGET="CONTENT">Title Page</a>
-<br>
+<br />
<a href="../Copyright.html" TARGET="CONTENT">Copyright</a>
<!-- editingComment
-<br>
+<br />
(<a href="../H5_UG_Outline.pdf" TARGET="CONTENT">Complete outline</a>)
-<br>
-<br>
+<br />
+<br />
(<a href="UG_feedback.html" TARGET="CONTENT">Feedback</a>)
-<br>
+<br />
(<a href="http://www.hdfgroup.uiuc.edu/HDF5/doc_dev_snapshot/index.html#H5_NewUG" TARGET="CONTENT">doc_dev_snapshot</a>)
-->
</font>
-<hr>
-<hr>
+<hr />
+<hr />
<!--
-<a href="UG_front.html" TARGET="CONTENT"><IMG SRC="GRAPHICS/COVER.GIF" BORDER=0 ALT="HDF5 UG title page"></a><br>
+<a href="UG_front.html" TARGET="CONTENT"><IMG SRC="GRAPHICS/COVER.GIF" BORDER=0 ALT="HDF5 UG title page"></a><br />
-->
<div align="center">
-<b>HDF5 User's Guide<br>Table of Contents</b>
-<br>
+<b>HDF5 User's Guide<br />Table of Contents</b>
+<br />
<!--
- <a href="UG_UseWith18.html" TARGET="CONTENT"><font size=-1><i>Using this Guide with 1.8.x</i></font></a>
-<br>
+ <a href="UG_UseWith18.html" TARGET="CONTENT"><font size="-1"><i>Using this Guide with 1.8.x</i></font></a>
+<br />
-->
<a href="UG_UpdateStatus.html" TARGET="CONTENT"><font size="-1">
<i>Update Status</i></font></a>
@@ -53,214 +54,217 @@
<p>
<!-- editingComment
- <font color=#555555>
+ <font color="#555555">
<a href="01_Intro.html" TARGET="CONTENT">Introduction</a>
</font>
- <br>
+ <br />
-->
<b>I. The Broad View</b>
<font color="#555555">
<!-- editingComment
- <br>
+ <br />
<a href="02_WhatIs.html" TARGET="CONTENT">What is HDF5?</a>
-->
- <br>
+ <br />
<a href="UG_frame03DataModel.html" TARGET="_TOP">Data Model &</a>
- <br>
+ <br />
<a href="UG_frame03DataModel.html" TARGET="_TOP">File Structure</a>
- <br>
+ <br />
<a href="UG_frame04ProgModel.html" TARGET="_TOP">HDF5 Library &</a>
- <br>
+ <br />
<a href="UG_frame04ProgModel.html" TARGET="_TOP">Programming Model</a>
</font>
-<br>
-<b>II. Using HDF5 —<br>
+<br />
+<b>II. Using HDF5 —<br />
The Specifics</b>
-
+ <font color="#555555">
<!-- editingComment
- <br>
+ <br />
<a href="05_Quick.html" TARGET="CONTENT">Quick Start</a>
- <br>
+ <br />
<a href="06_Naming.html" TARGET="CONTENT">API Struture &</a>
- <br>
+ <br />
<a href="06_Naming.html" TARGET="CONTENT">Naming Conventions</a>
- <br>
+ <br />
<a href="07_DocSet.html" TARGET="CONTENT">Document Set</a>
-->
- <br>
+ <br />
<a href="UG_frame08TheFile.html" TARGET="_TOP">The File</a>
- <br>
+ <br />
<a href="UG_frame09Groups.html" TARGET="_TOP">Groups</a>
- <br>
+ <br />
<a href="UG_frame10Datasets.html" TARGET="_TOP">Datasets</a>
- <br>
+ <br />
+
<a href="UG_frame11Datatypes.html" TARGET="_TOP">Datatypes</a>
- <br>
+ <br />
<a href="UG_frame12Dataspaces.html" TARGET="_TOP">Dataspaces &</a>
- <br>
+ <br />
<a href="UG_frame12Dataspaces.html" TARGET="_TOP">Partial I/O</a>
- <br>
+ <br />
<a href="UG_frame13Attributes.html" TARGET="_TOP">Attributes</a>
- <br>
+ <br />
<a href="UG_frame13ErrorHandling.html" TARGET="_TOP">Error Handling</a>
- <br>
+ <br />
<a href="UG_frame14PropertyLists.html" TARGET="_TOP">Property Lists</a>
<!--
- <br>
+ <br />
Images & Palettes
- <br>
+ <br />
Discarding Objects
- <br>
+ <br />
<a href="17_Filters.html" TARGET="CONTENT">Filters</a>
- <br>
+ <br />
Miscellaneous
-->
<!-- editingComment
- <br>
+ <br />
<a href="http://www.hdfgroup.uiuc.edu/HDF5/doc_dev_snapshot/H5_NewUG/DRAFTS/VFL-clip-020924DRAFT.pdf" TARGET="CONTENT">VFL</a> (early clip)
-->
</font>
<br />
<b>III. <a href="UG_frame17SpecialTopics.html" TARGET="_TOP">Additional Resources</a>
</b><br />
-<b>IV. <a href="http://www.hdfgroup.org/ftp/HDF5/examples/examples-by-api/"
+<b>IV. <a href="http://www.hdfgroup.org/HDF5/examples/"
TARGET="CONTENT">Code Examples</a></b><br />
<!--
- <font color=#555555>
- <br>
+ <font color="#555555">
+ <br />
<a href="UG_frame17SpecialTopics.html" TARGET="_TOP">Special Topics</a>
-->
<!-- NEED TO WRITE PER CH, CREATE UG_frame18Performance.html, AND LINK IT IN
- <br>
+ <br />
<a href="18_Performance.html" TARGET="CONTENT">Performance</a>
- <br>
+ <br />
<a href="UG_frame18Performance.html" TARGET="_TOP">Performance</a>
- <br>
- <a href="../ddl.html" TARGET="H5DocWin">DDL in BNF</a><br>
+ <br />
+ <a href="../ddl.html" TARGET="H5DocWin">DDL in BNF</a><br />
- <a href="../ddl.html" TARGET="H5DocWin">for HDF5</a><br>
+ <a href="../ddl.html" TARGET="H5DocWin">for HDF5</a><br />
- <a href="99_SelectedPassages.html" TARGET="CONTENT">Selected Passages</a><br>
- <br>
+ <a href="99_SelectedPassages.html" TARGET="CONTENT">Selected Passages</a><br />
+ <br />
Higher Levels
- <br>
+ <br />
<a href="20_Parallel.html" TARGET="CONTENT">Parallel Environments</a>
- <br>
+ <br />
Parallel Environments
- <br>
+ <br />
(in progress)
-->
<!--
- <br>
- <br>
+ <br />
+ <br />
Non-C Languages
- <br>
+ <br />
<a href="http://www.hdfgroup.uiuc.edu/HDF5/doc_dev_snapshot/H5_NewUG/DRAFTS/H5UG-Cpplus-001221.pdf" TARGET="CONTENT">C++ User Notes</a>
- <br>
+ <br />
<a href="23_DDL.html" TARGET="CONTENT">DDL in BNF</a>
- <br>
+ <br />
<a href="24_XML-DTD.html" TARGET="CONTENT">XML DTD</a>
--->
</font>
+-->
<!--
-<br>
+<br />
<b>IV. Tools</b>
- <font color=#555555>
- <br>
+ <font color="#555555">
+ <br />
<a href="xx_xxx.html" TARGET="CONTENT">h5ls</a>
- <br>
+ <br />
<a href="xx_xxx.html" TARGET="CONTENT">h5dump</a>
- <br>
+ <br />
<a href="xx_xxx.html" TARGET="CONTENT">h5repart</a>
- <br>
+ <br />
<a href="xx_xxx.html" TARGET="CONTENT">h5toh4</a>
- <br>
+ <br />
<a href="xx_xxx.html" TARGET="CONTENT">h4toh5</a>
- <br>
+ <br />
<a href="xx_xxx.html" TARGET="CONTENT">Java Tools</a>
- <br>
+ <br />
<a href="xx_xxx.html" TARGET="CONTENT">XML Tools</a>
</font>
-->
<!--
-<br>
+<br />
<b>Appendices</b>
- <font color=#555555>
- <br>
+ <font color="#555555">
+ <br />
<a href="99_Glossary.html" TARGET="CONTENT">Glossary</a>
- <br>
+ <br />
<a href="99_Glossary.html" TARGET="CONTENT">Glossary</a>
- <br>
+ <br />
<a href="99_PredefDTypes.html" TARGET="CONTENT">Predefined Datatypes</a>
- <br>
+ <br />
H4-to-H5 Mapping
- <br>
+ <br />
H5-to-H4 Mapping
- <br>
+ <br />
<a href="99_TechSupport.html" TARGET="CONTENT">Technical Support</a>
- <br>
+ <br />
</font>
-->
-<hr>
+<hr />
<!-- FOR USE WITH ELECTRONIC VERSION ----------------------------------->
<!-- <small><i>Printable
<a href="http://www.hdfgroup.org/HDF5/doc/PSandPDF/HDF5_UsersGuide.PDF" TARGET="CONTENT">PDF</a>
of this User’s Guide</i></small>
-<hr>
+<hr />
-->
<!-- FOR USE WITH ELECTRONIC VERSION ----------------------------------->
<div align="center">
<b>Other HDF5 documents</b>
</div>
-<br>
+<br />
-<a href="../index.html" TARGET="H5DocWin">Full HDF5 doc set</a> for<br>
+<a href="../index.html" TARGET="H5DocWin">Full HDF5 doc set</a> for<br />
- the current release<br>
+ the current release<br />
-<a href="../H5.intro.html" TARGET="H5DocWin"><cite>Introduction to HDF5</cite></a><br>
+<a href="../H5.intro.html" TARGET="H5DocWin"><cite>Introduction to HDF5</cite></a><br />
-<a href="../RM/RM_H5Front.html" TARGET="H5DocWin"><cite>HDF5 Reference</cite></a><br>
+<a href="../RM/RM_H5Front.html" TARGET="H5DocWin"><cite>HDF5 Reference</cite></a><br />
- <a href="../RM/RM_H5Front.html" TARGET="H5DocWin"><cite>Manual</cite></a><br>
+ <a href="../RM/RM_H5Front.html" TARGET="H5DocWin"><cite>Manual</cite></a><br />
-<a href="../H5.user.html" TARGET="H5DocWin"><cite>HDF5 Release 1.4.5</cite></a><br>
+<a href="../H5.user.html" TARGET="H5DocWin"><cite>HDF5 Release 1.4.5</cite></a><br />
<a href="../H5.user.html" TARGET="H5DocWin"><cite>User's Guide</cite></a>
-<hr>
-<hr>
+<hr />
+<hr />
<font size="-2" face="tahoma,arial,sans-serif">
</font>
<font size="-2" face="tahoma,arial,sans-serif"><SCRIPT LANGUAGE="JAVASCRIPT">
<!--
-document.writeln("Last modified: 14 May 2014");
+document.writeln("Last modified: 28 October 2014");
-->
</SCRIPT>
</font>
+
+
</body>
</html>
diff --git a/html/UG/UG_nav03DataModel.html b/html/UG/UG_nav03DataModel.html
index f9cadf5..4fcf614 100755
--- a/html/UG/UG_nav03DataModel.html
+++ b/html/UG/UG_nav03DataModel.html
@@ -12,8 +12,8 @@
<IMG SRC="GRAPHICS/READ1ST.GIF" BORDER=0 ALT="Read this first!"></A>
-->
-<font size=-1>
-<br>
+<font size="-1">
+<br />
<!-- editingComment
<div align=right>
( <a href="UG_nav01.html">Expand TOC</a> )
@@ -21,247 +21,254 @@
-->
<a href="UG_front.html" TARGET="CONTENT">Title Page</a>
-<br>
+<br />
<a href="../Copyright.html" TARGET="CONTENT">Copyright</a>
<!-- editingComment
-<br>
+<br />
(<a href="../H5_UG_Outline.pdf" TARGET="CONTENT">Complete outline</a>)
-<br>
-<br>
+<br />
+<br />
(<a href="UG_feedback.html" TARGET="CONTENT">Feedback</a>)
-<br>
+<br />
(<a href="http://www.hdfgroup.uiuc.edu/HDF5/doc_dev_snapshot/index.html#H5_NewUG" TARGET="CONTENT">doc_dev_snapshot</a>)
-->
</font>
-<hr>
-<hr>
+<hr />
+<hr />
<!--
-<a href="UG_front.html" TARGET="CONTENT"><IMG SRC="GRAPHICS/COVER.GIF" BORDER=0 ALT="HDF5 UG title page"></a><br>
+<a href="UG_front.html" TARGET="CONTENT"><IMG SRC="GRAPHICS/COVER.GIF" BORDER=0 ALT="HDF5 UG title page"></a><br />
-->
<div align="center">
-<b>HDF5 User's Guide<br>Table of Contents</b>
- <br>
- <a href="UG_UpdateStatus.html" TARGET="CONTENT"><font size=-1><i>Update Status</i></font></a>
+<b>HDF5 User's Guide<br />Table of Contents</b>
+ <br />
+ <a href="UG_UpdateStatus.html" TARGET="CONTENT"><font size="-1"><i>Update Status</i></font></a>
</div>
<p>
<!-- editingComment
- <font color=#555555>
+ <font color="#555555">
<a href="01_Intro.html" TARGET="CONTENT">Introduction</a>
</font>
- <br>
+ <br />
-->
<b>I. The Broad View</b>
- <font color=#555555>
+ <font color="#555555">
<!-- editingComment
- <br>
+ <br />
<a href="02_WhatIs.html" TARGET="CONTENT">What is HDF5?</a>
-->
- <br>
+ <br />
<a href="UG_frame03DataModel.html" TARGET="_TOP">Data Model &</a>
- <br>
+ <br />
<a href="UG_frame03DataModel.html" TARGET="_TOP">File Structure</a>
<font size="-1">
- <br>
+ <br />
<a href="03_DataModel.html#Intro" TARGET="CONTENT">
Introduction</a>
- <br>
+ <br />
<a href="03_DataModel.html#AbstractDMod" TARGET="CONTENT">
Abstract Model</a>
- <br>
+ <br />
<a href="03_DataModel.html#SModel" TARGET="CONTENT">
Storage Model</a>
- <br>
+ <br />
<a href="03_DataModel.html#Structure" TARGET="CONTENT">
File Structure</a>
</font>
- <br>
+ <br />
<a href="UG_frame04ProgModel.html" TARGET="_TOP">HDF5 Library &</a>
- <br>
+ <br />
<a href="UG_frame04ProgModel.html" TARGET="_TOP">Programming Model</a>
</font>
-<br>
-<b>II. Using HDF5 —<br>
+<br />
+<b>II. Using HDF5 —<br />
The Specifics</b>
- <font color=#555555>
- <br>
+ <font color="#555555">
+ <br />
<!-- editingComment
<a href="05_Quick.html" TARGET="CONTENT">Quick Start</a>
- <br>
+ <br />
<a href="06_Naming.html" TARGET="CONTENT">API Struture &</a>
- <br>
+ <br />
<a href="06_Naming.html" TARGET="CONTENT">Naming Conventions</a>
- <br>
+ <br />
<a href="07_DocSet.html" TARGET="CONTENT">Document Set</a>
- <br>
+ <br />
-->
<a href="UG_frame08TheFile.html" TARGET="_TOP">The File</a>
- <br>
+ <br />
<a href="UG_frame09Groups.html" TARGET="_TOP">Groups</a>
- <br>
+<!-- <a href="UG_frame09Groups.html" TARGET="_TOP">Groups and Links</a>
+-->
+ <br />
<a href="UG_frame10Datasets.html" TARGET="_TOP">Datasets</a>
- <br>
+ <br />
+<!--
+ <a href="UG_frameObjectsIdentifiers.html" TARGET="_TOP">Objects and
+ Identifiers</a>
+ <br />
+-->
<a href="UG_frame11Datatypes.html" TARGET="_TOP">Datatypes</a>
- <br>
+ <br />
<a href="UG_frame12Dataspaces.html" TARGET="_TOP">Dataspaces &</a>
- <br>
+ <br />
<a href="UG_frame12Dataspaces.html" TARGET="_TOP">Partial I/O</a>
- <br>
+ <br />
<a href="UG_frame13Attributes.html" TARGET="_TOP">Attributes</a>
- <br>
+ <br />
<a href="UG_frame13ErrorHandling.html" TARGET="_TOP">Error Handling</a>
- <br>
+ <br />
<a href="UG_frame14PropertyLists.html" TARGET="_TOP">Property Lists</a>
<!--
- <br>
+ <br />
Images & Palettes
- <br>
+ <br />
Discarding Objects
- <br>
+ <br />
<a href="17_Filters.html" TARGET="CONTENT">Filters</a>
- <br>
+ <br />
Miscellaneous
-->
<!-- editingComment
- <br>
+ <br />
<a href="http://www.hdfgroup.uiuc.edu/HDF5/doc_dev_snapshot/H5_NewUG/DRAFTS/VFL-clip-020924DRAFT.pdf" TARGET="CONTENT">VFL</a> (early clip)
-->
</font>
-<br>
+<br />
<b>III. <a href="UG_frame17SpecialTopics.html" TARGET="_TOP">Additional Resources</a>
</b><br />
-<b>IV. <a href="http://www.hdfgroup.org/ftp/HDF5/examples/examples-by-api/"
+<b>IV. <a href="http://www.hdfgroup.org/HDF5/examples/"
TARGET="CONTENT">Code Examples</a></b><br />
- <font color=#555555>
+ <font color="#555555">
<!-- NEED TO WRITE PER CH, CREATE UG_frame18Performance.html, AND LINK IT IN
- <br>
+ <br />
<a href="UG_frame18Performance.html" TARGET="_TOP">Performance</a>
- <br>
+ <br />
<a href="UG_frame17SpecialTopics.html" TARGET="_TOP">Special Topics</a>
- <br>
- <a href="../ddl.html" TARGET="H5DocWin">DDL in BNF</a><br>
+ <br />
+ <a href="../ddl.html" TARGET="H5DocWin">DDL in BNF</a><br />
- <a href="../ddl.html" TARGET="H5DocWin">for HDF5</a><br>
+ <a href="../ddl.html" TARGET="H5DocWin">for HDF5</a><br />
- <a href="99_SelectedPassages.html" TARGET="CONTENT">Selected Passages</a><br>
- <br>
+ <a href="99_SelectedPassages.html" TARGET="CONTENT">Selected Passages</a><br />
+ <br />
Higher Levels
- <br>
+ <br />
<a href="20_Parallel.html" TARGET="CONTENT">Parallel Environments</a>
-->
<!-- editingComment
- <br>
+ <br />
Parallel Environments
- <br>
+ <br />
(in progress)
-->
<!--
- <br>
+ <br />
<a href="21_Perform.html" TARGET="CONTENT">Performance</a>
- <br>
+ <br />
Non-C Languages
-->
<!-- editingComment
- <br>
+ <br />
<a href="http://www.hdfgroup.uiuc.edu/HDF5/doc_dev_snapshot/H5_NewUG/DRAFTS/H5UG-Cpplus-001221.pdf" TARGET="CONTENT">C++ User Notes</a>
-->
<!--
- <br>
+ <br />
<a href="23_DDL.html" TARGET="CONTENT">DDL in BNF</a>
- <br>
+ <br />
<a href="24_XML-DTD.html" TARGET="CONTENT">XML DTD</a>
-->
</font>
<!--
-<br>
+<br />
<b>IV. Tools</b>
- <font color=#555555>
- <br>
+ <font color="#555555">
+ <br />
<a href="xx_xxx.html" TARGET="CONTENT">h5ls</a>
- <br>
+ <br />
<a href="xx_xxx.html" TARGET="CONTENT">h5dump</a>
- <br>
+ <br />
<a href="xx_xxx.html" TARGET="CONTENT">h5repart</a>
- <br>
+ <br />
<a href="xx_xxx.html" TARGET="CONTENT">h5toh4</a>
- <br>
+ <br />
<a href="xx_xxx.html" TARGET="CONTENT">h4toh5</a>
- <br>
+ <br />
<a href="xx_xxx.html" TARGET="CONTENT">Java Tools</a>
- <br>
+ <br />
<a href="xx_xxx.html" TARGET="CONTENT">XML Tools</a>
</font>
-->
<!--
-<br>
+<br />
<b>Appendices</b>
- <font color=#555555>
- <br>
+ <font color="#555555">
+ <br />
<a href="99_Glossary.html" TARGET="CONTENT">Glossary</a>
- <br>
+ <br />
<a href="99_Glossary.html" TARGET="CONTENT">Glossary</a>
- <br>
+ <br />
<a href="99_PredefDTypes.html" TARGET="CONTENT">Predefined Datatypes</a>
- <br>
+ <br />
H4-to-H5 Mapping
- <br>
+ <br />
H5-to-H4 Mapping
- <br>
+ <br />
<a href="99_TechSupport.html" TARGET="CONTENT">Technical Support</a>
- <br>
+ <br />
</font>
-->
-<hr>
+<hr />
<!-- FOR USE WITH ELECTRONIC VERSION ----------------------------------->
<!-- <small><i>Printable
<a href="http://www.hdfgroup.org/HDF5/doc/PSandPDF/HDF5_UsersGuide.PDF" TARGET="CONTENT">PDF</a>
of this User’s Guide</i></small>
-<hr>
+<hr />
-->
<!-- FOR USE WITH ELECTRONIC VERSION ----------------------------------->
<div align="center">
<b>Other HDF5 documents</b>
</div>
-<br>
+<br />
-<a href="../index.html" TARGET="H5DocWin">Full HDF5 doc set</a> for<br>
+<a href="../index.html" TARGET="H5DocWin">Full HDF5 doc set</a> for<br />
- the current release<br>
+ the current release<br />
-<a href="../H5.intro.html" TARGET="H5DocWin"><cite>Introduction to HDF5</cite></a><br>
+<a href="../H5.intro.html" TARGET="H5DocWin"><cite>Introduction to HDF5</cite></a><br />
-<a href="../RM/RM_H5Front.html" TARGET="H5DocWin"><cite>HDF5 Reference</cite></a><br>
+<a href="../RM/RM_H5Front.html" TARGET="H5DocWin"><cite>HDF5 Reference</cite></a><br />
- <a href="../RM/RM_H5Front.html" TARGET="H5DocWin"><cite>Manual</cite></a><br>
+ <a href="../RM/RM_H5Front.html" TARGET="H5DocWin"><cite>Manual</cite></a><br />
-<a href="../H5.user.html" TARGET="H5DocWin"><cite>HDF5 Release 1.4.5</cite></a><br>
+<a href="../H5.user.html" TARGET="H5DocWin"><cite>HDF5 Release 1.4.5</cite></a><br />
<a href="../H5.user.html" TARGET="H5DocWin"><cite>User's Guide</cite></a>
-<hr>
+<hr />
</body>
</html>
diff --git a/html/UG/UG_nav04ProgModel.html b/html/UG/UG_nav04ProgModel.html
index 0cc4f9d..5e71758 100755
--- a/html/UG/UG_nav04ProgModel.html
+++ b/html/UG/UG_nav04ProgModel.html
@@ -12,8 +12,8 @@
<IMG SRC="GRAPHICS/READ1ST.GIF" BORDER=0 ALT="Read this first!"></A>
-->
-<font size=-1>
-<br>
+<font size="-1">
+<br />
<!-- editingComment
<div align=right>
( <a href="UG_nav01.html">Expand TOC</a> )
@@ -21,278 +21,285 @@
-->
<a href="UG_front.html" TARGET="CONTENT">Title Page</a>
-<br>
+<br />
<a href="../Copyright.html" TARGET="CONTENT">Copyright</a>
<!-- editingComment
-<br>
+<br />
(<a href="../H5_UG_Outline.pdf" TARGET="CONTENT">Complete outline</a>)
-<br>
-<br>
+<br />
+<br />
(<a href="UG_feedback.html" TARGET="CONTENT">Feedback</a>)
-<br>
+<br />
(<a href="http://www.hdfgroup.uiuc.edu/HDF5/doc_dev_snapshot/index.html#H5_NewUG" TARGET="CONTENT">doc_dev_snapshot</a>)
-->
</font>
-<hr>
-<hr>
+<hr />
+<hr />
<!--
-<a href="UG_front.html" TARGET="CONTENT"><IMG SRC="GRAPHICS/COVER.GIF" BORDER=0 ALT="HDF5 UG title page"></a><br>
+<a href="UG_front.html" TARGET="CONTENT"><IMG SRC="GRAPHICS/COVER.GIF" BORDER=0 ALT="HDF5 UG title page"></a><br />
-->
<div align="center">
-<b>HDF5 User's Guide<br>Table of Contents</b>
- <br>
- <a href="UG_UpdateStatus.html" TARGET="CONTENT"><font size=-1><i>Update Status</i></font></a>
+<b>HDF5 User's Guide<br />Table of Contents</b>
+ <br />
+ <a href="UG_UpdateStatus.html" TARGET="CONTENT"><font size="-1"><i>Update Status</i></font></a>
</div>
<p>
<!-- editingComment
- <font color=#555555>
+ <font color="#555555">
<a href="01_Intro.html" TARGET="CONTENT">Introduction</a>
</font>
- <br>
+ <br />
-->
<b>I. The Broad View</b>
- <font color=#555555>
+ <font color="#555555">
<!-- editingComment
- <br>
+ <br />
<a href="02_WhatIs.html" TARGET="CONTENT">What is HDF5?</a>
-->
- <br>
+ <br />
<a href="UG_frame03DataModel.html" TARGET="_TOP">Data Model &</a>
- <br>
+ <br />
<a href="UG_frame03DataModel.html" TARGET="_TOP">File Structure</a>
- <br>
+ <br />
<a href="UG_frame04ProgModel.html" TARGET="_TOP">HDF5 Library &</a>
- <br>
+ <br />
<a href="UG_frame04ProgModel.html" TARGET="_TOP">Programming Model</a>
<font size="-1">
- <br>
+ <br />
<a href="04_ProgModel.html#Intro" TARGET="CONTENT">
Introduction</a>
- <br>
+ <br />
<a href="04_ProgModel.html#ProgModel" TARGET="CONTENT">
Programming Model</a>
- <br>
+ <br />
<a href="04_ProgModel.html#CreateFile" TARGET="CONTENT">
Create File</a>
- <br>
+ <br />
<a href="04_ProgModel.html#CreateDataset" TARGET="CONTENT">
Create Dataset</a>
- <br>
+ <br />
<a href="04_ProgModel.html#CloseObject" TARGET="CONTENT">
Close Objects</a>
- <br>
+ <br />
<a href="04_ProgModel.html#WriteRead" TARGET="CONTENT">
Write/Read</a>
- <br>
+ <br />
<a href="04_ProgModel.html#PartialWR" TARGET="CONTENT">
Partial Write/Read</a>
- <br>
+ <br />
<a href="04_ProgModel.html#GetInfo" TARGET="CONTENT">
Get Info</a>
- <br>
+ <br />
<a href="04_ProgModel.html#CreateCDType" TARGET="CONTENT">
Create Compound</a>
- <br>
+ <br />
<a href="04_ProgModel.html#CreateCDType" TARGET="CONTENT">
Datatype</a>
- <br>
+ <br />
<a href="04_ProgModel.html#ExtendChunked" TARGET="CONTENT">
Create Extendable or</a>
- <br>
+ <br />
<a href="04_ProgModel.html#ExtendChunked" TARGET="CONTENT">
Chunked Dataset</a>
- <br>
+ <br />
<a href="04_ProgModel.html#Groups" TARGET="CONTENT">
Work with Groups</a>
- <br>
+ <br />
<a href="04_ProgModel.html#Attrs" TARGET="CONTENT">
Work with Attributes</a>
- <br>
+ <br />
<a href="04_ProgModel.html#IOPipeline" TARGET="CONTENT">
Data Transfer Pipeline</a>
</font></font>
-<br>
-<b>II. Using HDF5 —<br>
+<br />
+<b>II. Using HDF5 —<br />
The Specifics</b>
- <font color=#555555>
- <br>
+ <font color="#555555">
+ <br />
<!-- editingComment
<a href="05_Quick.html" TARGET="CONTENT">Quick Start</a>
- <br>
+ <br />
<a href="06_Naming.html" TARGET="CONTENT">API Struture &</a>
- <br>
+ <br />
<a href="06_Naming.html" TARGET="CONTENT">Naming Conventions</a>
- <br>
+ <br />
<a href="07_DocSet.html" TARGET="CONTENT">Document Set</a>
- <br>
+ <br />
-->
<a href="UG_frame08TheFile.html" TARGET="_TOP">The File</a>
- <br>
+ <br />
<a href="UG_frame09Groups.html" TARGET="_TOP">Groups</a>
- <br>
+<!-- <a href="UG_frame09Groups.html" TARGET="_TOP">Groups and Links</a>
+-->
+ <br />
<a href="UG_frame10Datasets.html" TARGET="_TOP">Datasets</a>
- <br>
+ <br />
+<!--
+ <a href="UG_frameObjectsIdentifiers.html" TARGET="_TOP">Objects and
+ Identifiers</a>
+ <br />
+-->
<a href="UG_frame11Datatypes.html" TARGET="_TOP">Datatypes</a>
- <br>
+ <br />
<a href="UG_frame12Dataspaces.html" TARGET="_TOP">Dataspaces &</a>
- <br>
+ <br />
<a href="UG_frame12Dataspaces.html" TARGET="_TOP">Partial I/O</a>
- <br>
+ <br />
<a href="UG_frame13Attributes.html" TARGET="_TOP">Attributes</a>
- <br>
+ <br />
<a href="UG_frame13ErrorHandling.html" TARGET="_TOP">Error Handling</a>
- <br>
+ <br />
<a href="UG_frame14PropertyLists.html" TARGET="_TOP">Property Lists</a>
<!--
- <br>
+ <br />
Images & Palettes
- <br>
+ <br />
Discarding Objects
- <br>
+ <br />
<a href="17_Filters.html" TARGET="CONTENT">Filters</a>
- <br>
+ <br />
Miscellaneous
-->
<!-- editingComment
- <br>
+ <br />
<a href="http://www.hdfgroup.uiuc.edu/HDF5/doc_dev_snapshot/H5_NewUG/DRAFTS/VFL-clip-020924DRAFT.pdf" TARGET="CONTENT">VFL</a> (early clip)
-->
</font>
<br />
<b>III. <a href="UG_frame17SpecialTopics.html" TARGET="_TOP">Additional Resources</a>
</b><br />
-<b>IV. <a href="http://www.hdfgroup.org/ftp/HDF5/examples/examples-by-api/"
+<b>IV. <a href="http://www.hdfgroup.org/HDF5/examples/"
TARGET="CONTENT">Code Examples</a></b><br />
- <font color=#555555>
+ <font color="#555555">
<!-- NEED TO WRITE PER CH, CREATE UG_frame18Performance.html, AND LINK IT IN
- <br>
+ <br />
<a href="UG_frame18Performance.html" TARGET="_TOP">Performance</a>
- <br>
+ <br />
<a href="UG_frame17SpecialTopics.html" TARGET="_TOP">Special Topics</a>
- <br>
- <a href="../ddl.html" TARGET="H5DocWin">DDL in BNF</a><br>
+ <br />
+ <a href="../ddl.html" TARGET="H5DocWin">DDL in BNF</a><br />
- <a href="../ddl.html" TARGET="H5DocWin">for HDF5</a><br>
+ <a href="../ddl.html" TARGET="H5DocWin">for HDF5</a><br />
- <a href="99_SelectedPassages.html" TARGET="CONTENT">Selected Passages</a><br>
- <br>
+ <a href="99_SelectedPassages.html" TARGET="CONTENT">Selected Passages</a><br />
+ <br />
Higher Levels
- <br>
+ <br />
<a href="20_Parallel.html" TARGET="CONTENT">Parallel Environments</a>
-->
<!-- editingComment
- <br>
+ <br />
Parallel Environments
- <br>
+ <br />
(in progress)
-->
<!--
- <br>
+ <br />
<a href="21_Perform.html" TARGET="CONTENT">Performance</a>
- <br>
+ <br />
Non-C Languages
-->
<!-- editingComment
- <br>
+ <br />
<a href="http://www.hdfgroup.uiuc.edu/HDF5/doc_dev_snapshot/H5_NewUG/DRAFTS/H5UG-Cpplus-001221.pdf" TARGET="CONTENT">C++ User Notes</a>
-->
<!--
- <br>
+ <br />
<a href="23_DDL.html" TARGET="CONTENT">DDL in BNF</a>
- <br>
+ <br />
<a href="24_XML-DTD.html" TARGET="CONTENT">XML DTD</a>
-->
</font>
<!--
-<br>
+<br />
<b>IV. Tools</b>
- <font color=#555555>
- <br>
+ <font color="#555555">
+ <br />
<a href="xx_xxx.html" TARGET="CONTENT">h5ls</a>
- <br>
+ <br />
<a href="xx_xxx.html" TARGET="CONTENT">h5dump</a>
- <br>
+ <br />
<a href="xx_xxx.html" TARGET="CONTENT">h5repart</a>
- <br>
+ <br />
<a href="xx_xxx.html" TARGET="CONTENT">h5toh4</a>
- <br>
+ <br />
<a href="xx_xxx.html" TARGET="CONTENT">h4toh5</a>
- <br>
+ <br />
<a href="xx_xxx.html" TARGET="CONTENT">Java Tools</a>
- <br>
+ <br />
<a href="xx_xxx.html" TARGET="CONTENT">XML Tools</a>
</font>
-->
<!--
-<br>
+<br />
<b>Appendices</b>
- <font color=#555555>
- <br>
+ <font color="#555555">
+ <br />
<a href="99_Glossary.html" TARGET="CONTENT">Glossary</a>
- <br>
+ <br />
<a href="99_Glossary.html" TARGET="CONTENT">Glossary</a>
- <br>
+ <br />
<a href="99_PredefDTypes.html" TARGET="CONTENT">Predefined Datatypes</a>
- <br>
+ <br />
H4-to-H5 Mapping
- <br>
+ <br />
H5-to-H4 Mapping
- <br>
+ <br />
<a href="99_TechSupport.html" TARGET="CONTENT">Technical Support</a>
- <br>
+ <br />
</font>
-->
-<hr>
+<hr />
<!-- FOR USE WITH ELECTRONIC VERSION ----------------------------------->
<!-- <small><i>Printable
<a href="http://www.hdfgroup.org/HDF5/doc/PSandPDF/HDF5_UsersGuide.PDF" TARGET="CONTENT">PDF</a>
of this User’s Guide</i></small>
-<hr>
+<hr />
-->
<!-- FOR USE WITH ELECTRONIC VERSION ----------------------------------->
<div align="center">
<b>Other HDF5 documents</b>
</div>
-<br>
+<br />
-<a href="../index.html" TARGET="H5DocWin">Full HDF5 doc set</a> for<br>
+<a href="../index.html" TARGET="H5DocWin">Full HDF5 doc set</a> for<br />
- the current release<br>
+ the current release<br />
-<a href="../H5.intro.html" TARGET="H5DocWin"><cite>Introduction to HDF5</cite></a><br>
+<a href="../H5.intro.html" TARGET="H5DocWin"><cite>Introduction to HDF5</cite></a><br />
-<a href="../RM/RM_H5Front.html" TARGET="H5DocWin"><cite>HDF5 Reference</cite></a><br>
+<a href="../RM/RM_H5Front.html" TARGET="H5DocWin"><cite>HDF5 Reference</cite></a><br />
- <a href="../RM/RM_H5Front.html" TARGET="H5DocWin"><cite>Manual</cite></a><br>
+ <a href="../RM/RM_H5Front.html" TARGET="H5DocWin"><cite>Manual</cite></a><br />
-<a href="../H5.user.html" TARGET="H5DocWin"><cite>HDF5 Release 1.4.5</cite></a><br>
+<a href="../H5.user.html" TARGET="H5DocWin"><cite>HDF5 Release 1.4.5</cite></a><br />
<a href="../H5.user.html" TARGET="H5DocWin"><cite>User's Guide</cite></a>
-<hr>
+<hr />
</body>
</html>
diff --git a/html/UG/UG_nav08TheFile.html b/html/UG/UG_nav08TheFile.html
index de8e55c..42155b5 100755
--- a/html/UG/UG_nav08TheFile.html
+++ b/html/UG/UG_nav08TheFile.html
@@ -12,8 +12,8 @@
<IMG SRC="GRAPHICS/READ1ST.GIF" BORDER=0 ALT="Read this first!"></A>
-->
-<font size=-1>
-<br>
+<font size="-1">
+<br />
<!-- editingComment
<div align=right>
( <a href="UG_nav01.html">Expand TOC</a> )
@@ -21,268 +21,275 @@
-->
<a href="UG_front.html" TARGET="CONTENT">Title Page</a>
-<br>
+<br />
<a href="../Copyright.html" TARGET="CONTENT">Copyright</a>
<!-- editingComment
-<br>
+<br />
(<a href="../H5_UG_Outline.pdf" TARGET="CONTENT">Complete outline</a>)
-<br>
-<br>
+<br />
+<br />
(<a href="UG_feedback.html" TARGET="CONTENT">Feedback</a>)
-<br>
+<br />
(<a href="http://www.hdfgroup.uiuc.edu/HDF5/doc_dev_snapshot/index.html#H5_NewUG" TARGET="CONTENT">doc_dev_snapshot</a>)
-->
</font>
-<hr>
-<hr>
+<hr />
+<hr />
<!--
-<a href="UG_front.html" TARGET="CONTENT"><IMG SRC="GRAPHICS/COVER.GIF" BORDER=0 ALT="HDF5 UG title page"></a><br>
+<a href="UG_front.html" TARGET="CONTENT"><IMG SRC="GRAPHICS/COVER.GIF" BORDER=0 ALT="HDF5 UG title page"></a><br />
-->
<div align="center">
-<b>HDF5 User's Guide<br>Table of Contents</b>
- <br>
- <a href="UG_UpdateStatus.html" TARGET="CONTENT"><font size=-1><i>Update Status</i></font></a>
+<b>HDF5 User's Guide<br />Table of Contents</b>
+ <br />
+ <a href="UG_UpdateStatus.html" TARGET="CONTENT"><font size="-1"><i>Update Status</i></font></a>
</div>
<p>
<!-- editingComment
- <font color=#555555>
+ <font color="#555555">
<a href="01_Intro.html" TARGET="CONTENT">Introduction</a>
</font>
- <br>
+ <br />
-->
<b>I. The Broad View</b>
- <font color=#555555>
+ <font color="#555555">
<!-- editingComment
- <br>
+ <br />
<a href="02_WhatIs.html" TARGET="CONTENT">What is HDF5?</a>
-->
- <br>
+ <br />
<a href="UG_frame03DataModel.html" TARGET="_TOP">Data Model &</a>
- <br>
+ <br />
<a href="UG_frame03DataModel.html" TARGET="_TOP">File Structure</a>
- <br>
+ <br />
<a href="UG_frame04ProgModel.html" TARGET="_TOP">HDF5 Library &</a>
- <br>
+ <br />
<a href="UG_frame04ProgModel.html" TARGET="_TOP">Programming Model</a>
</font>
-<br>
-<b>II. Using HDF5 —<br>
+<br />
+<b>II. Using HDF5 —<br />
The Specifics</b>
- <font color=#555555>
- <br>
+ <font color="#555555">
+ <br />
<!-- editingComment
<a href="05_Quick.html" TARGET="CONTENT">Quick Start</a>
- <br>
+ <br />
<a href="06_Naming.html" TARGET="CONTENT">API Struture &</a>
- <br>
+ <br />
<a href="06_Naming.html" TARGET="CONTENT">Naming Conventions</a>
- <br>
+ <br />
<a href="07_DocSet.html" TARGET="CONTENT">Document Set</a>
- <br>
+ <br />
-->
<a href="UG_frame08TheFile.html" TARGET="_TOP">The File</a>
<font size="-1">
- <br>
+ <br />
<a href="08_TheFile.html#Intro" TARGET="CONTENT">
Introduction</a>
- <br>
+ <br />
<a href="08_TheFile.html#PModel" TARGET="CONTENT">
Programming Model</a>
- <br>
+ <br />
<a href="08_TheFile.html#H5Dump" TARGET="CONTENT">
<code>h5dump</code></a>
- <br>
+ <br />
<a href="08_TheFile.html#FuncSumms" TARGET="CONTENT">
Function Summaries</a>
- <br>
+ <br />
<a href="08_TheFile.html#CrOpen" TARGET="CONTENT">
Create/Open File</a>
- <br>
+ <br />
<a href="08_TheFile.html#Close" TARGET="CONTENT">
Close File</a>
- <br>
+ <br />
<a href="08_TheFile.html#PLists" TARGET="CONTENT">
File Property Lists</a>
- <br>
+ <br />
<a href="08_TheFile.html#Drivers" TARGET="CONTENT">
Storage Layouts</a>
- <br>
+ <br />
<a href="08_TheFile.html#Drivers" TARGET="CONTENT">
and Drivers</a>
- <br>
+ <br />
<a href="08_TheFile.html#Examples" TARGET="CONTENT">
Code Examples</a>
- <br>
+ <br />
<a href="08_TheFile.html#MountingFiles" TARGET="CONTENT">
Mounting Files</a>
</font>
- <br>
+ <br />
<a href="UG_frame09Groups.html" TARGET="_TOP">Groups</a>
- <br>
+<!-- <a href="UG_frame09Groups.html" TARGET="_TOP">Groups and Links</a>
+-->
+ <br />
<a href="UG_frame10Datasets.html" TARGET="_TOP">Datasets</a>
- <br>
+ <br />
+<!--
+ <a href="UG_frameObjectsIdentifiers.html" TARGET="_TOP">Objects and
+ Identifiers</a>
+ <br />
+-->
<a href="UG_frame11Datatypes.html" TARGET="_TOP">Datatypes</a>
- <br>
+ <br />
<a href="UG_frame12Dataspaces.html" TARGET="_TOP">Dataspaces &</a>
- <br>
+ <br />
<a href="UG_frame12Dataspaces.html" TARGET="_TOP">Partial I/O</a>
- <br>
+ <br />
<a href="UG_frame13Attributes.html" TARGET="_TOP">Attributes</a>
- <br>
+ <br />
<a href="UG_frame13ErrorHandling.html" TARGET="_TOP">Error Handling</a>
- <br>
+ <br />
<a href="UG_frame14PropertyLists.html" TARGET="_TOP">Property Lists</a>
<!--
- <br>
+ <br />
Images & Palettes
- <br>
+ <br />
Discarding Objects
- <br>
+ <br />
<a href="17_Filters.html" TARGET="CONTENT">Filters</a>
- <br>
+ <br />
Miscellaneous
-->
<!-- editingComment
- <br>
+ <br />
<a href="http://www.hdfgroup.uiuc.edu/HDF5/doc_dev_snapshot/H5_NewUG/DRAFTS/VFL-clip-020924DRAFT.pdf" TARGET="CONTENT">VFL</a> (early clip)
-->
</font>
<br />
<b>III. <a href="UG_frame17SpecialTopics.html" TARGET="_TOP">Additional Resources</a>
</b><br />
-<b>IV. <a href="http://www.hdfgroup.org/ftp/HDF5/examples/examples-by-api/"
+<b>IV. <a href="http://www.hdfgroup.org/HDF5/examples/"
TARGET="CONTENT">Code Examples</a></b><br />
- <font color=#555555>
+ <font color="#555555">
<!-- NEED TO WRITE PER CH, CREATE UG_frame18Performance.html, AND LINK IT IN
- <br>
+ <br />
<a href="UG_frame18Performance.html" TARGET="_TOP">Performance</a>
- <br>
+ <br />
<a href="UG_frame17SpecialTopics.html" TARGET="_TOP">Special Topics</a>
- <br>
- <a href="../ddl.html" TARGET="H5DocWin">DDL in BNF</a><br>
+ <br />
+ <a href="../ddl.html" TARGET="H5DocWin">DDL in BNF</a><br />
- <a href="../ddl.html" TARGET="H5DocWin">for HDF5</a><br>
+ <a href="../ddl.html" TARGET="H5DocWin">for HDF5</a><br />
- <a href="99_SelectedPassages.html" TARGET="CONTENT">Selected Passages</a><br>
- <br>
+ <a href="99_SelectedPassages.html" TARGET="CONTENT">Selected Passages</a><br />
+ <br />
Higher Levels
- <br>
+ <br />
<a href="20_Parallel.html" TARGET="CONTENT">Parallel Environments</a>
-->
<!-- editingComment
- <br>
+ <br />
Parallel Environments
- <br>
+ <br />
(in progress)
-->
<!--
- <br>
+ <br />
<a href="21_Perform.html" TARGET="CONTENT">Performance</a>
- <br>
+ <br />
Non-C Languages
-->
<!-- editingComment
- <br>
+ <br />
<a href="http://www.hdfgroup.uiuc.edu/HDF5/doc_dev_snapshot/H5_NewUG/DRAFTS/H5UG-Cpplus-001221.pdf" TARGET="CONTENT">C++ User Notes</a>
-->
<!--
- <br>
+ <br />
<a href="23_DDL.html" TARGET="CONTENT">DDL in BNF</a>
- <br>
+ <br />
<a href="24_XML-DTD.html" TARGET="CONTENT">XML DTD</a>
-->
</font>
<!--
-<br>
+<br />
<b>IV. Tools</b>
- <font color=#555555>
- <br>
+ <font color="#555555">
+ <br />
<a href="xx_xxx.html" TARGET="CONTENT">h5ls</a>
- <br>
+ <br />
<a href="xx_xxx.html" TARGET="CONTENT">h5dump</a>
- <br>
+ <br />
<a href="xx_xxx.html" TARGET="CONTENT">h5repart</a>
- <br>
+ <br />
<a href="xx_xxx.html" TARGET="CONTENT">h5toh4</a>
- <br>
+ <br />
<a href="xx_xxx.html" TARGET="CONTENT">h4toh5</a>
- <br>
+ <br />
<a href="xx_xxx.html" TARGET="CONTENT">Java Tools</a>
- <br>
+ <br />
<a href="xx_xxx.html" TARGET="CONTENT">XML Tools</a>
</font>
-->
<!--
-<br>
+<br />
<b>Appendices</b>
- <font color=#555555>
- <br>
+ <font color="#555555">
+ <br />
<a href="99_Glossary.html" TARGET="CONTENT">Glossary</a>
- <br>
+ <br />
<a href="99_Glossary.html" TARGET="CONTENT">Glossary</a>
- <br>
+ <br />
<a href="99_PredefDTypes.html" TARGET="CONTENT">Predefined Datatypes</a>
- <br>
+ <br />
H4-to-H5 Mapping
- <br>
+ <br />
H5-to-H4 Mapping
- <br>
+ <br />
<a href="99_TechSupport.html" TARGET="CONTENT">Technical Support</a>
- <br>
+ <br />
</font>
-->
-<hr>
+<hr />
<!-- FOR USE WITH ELECTRONIC VERSION ----------------------------------->
<!-- <small><i>Printable
<a href="http://www.hdfgroup.org/HDF5/doc/PSandPDF/HDF5_UsersGuide.PDF" TARGET="CONTENT">PDF</a>
of this User’s Guide</i></small>
-<hr>
+<hr />
-->
<!-- FOR USE WITH ELECTRONIC VERSION ----------------------------------->
<div align="center">
<b>Other HDF5 documents</b>
</div>
-<br>
+<br />
-<a href="../index.html" TARGET="H5DocWin">Full HDF5 doc set</a> for<br>
+<a href="../index.html" TARGET="H5DocWin">Full HDF5 doc set</a> for<br />
- the current release<br>
+ the current release<br />
-<a href="../H5.intro.html" TARGET="H5DocWin"><cite>Introduction to HDF5</cite></a><br>
+<a href="../H5.intro.html" TARGET="H5DocWin"><cite>Introduction to HDF5</cite></a><br />
-<a href="../RM/RM_H5Front.html" TARGET="H5DocWin"><cite>HDF5 Reference</cite></a><br>
+<a href="../RM/RM_H5Front.html" TARGET="H5DocWin"><cite>HDF5 Reference</cite></a><br />
- <a href="../RM/RM_H5Front.html" TARGET="H5DocWin"><cite>Manual</cite></a><br>
+ <a href="../RM/RM_H5Front.html" TARGET="H5DocWin"><cite>Manual</cite></a><br />
-<a href="../H5.user.html" TARGET="H5DocWin"><cite>HDF5 Release 1.4.5</cite></a><br>
+<a href="../H5.user.html" TARGET="H5DocWin"><cite>HDF5 Release 1.4.5</cite></a><br />
<a href="../H5.user.html" TARGET="H5DocWin"><cite>User's Guide</cite></a>
-<hr>
+<hr />
</body>
</html>
diff --git a/html/UG/UG_nav09Groups.html b/html/UG/UG_nav09Groups.html
index ffbb7ca..9347c70 100755
--- a/html/UG/UG_nav09Groups.html
+++ b/html/UG/UG_nav09Groups.html
@@ -12,8 +12,8 @@
<IMG SRC="GRAPHICS/READ1ST.GIF" BORDER=0 ALT="Read this first!"></A>
-->
-<font size=-1>
-<br>
+<font size="-1">
+<br />
<!-- editingComment
<div align=right>
( <a href="UG_nav01.html">Expand TOC</a> )
@@ -21,254 +21,254 @@
-->
<a href="UG_front.html" TARGET="CONTENT">Title Page</a>
-<br>
+<br />
<a href="../Copyright.html" TARGET="CONTENT">Copyright</a>
<!-- editingComment
-<br>
+<br />
(<a href="../H5_UG_Outline.pdf" TARGET="CONTENT">Complete outline</a>)
-<br>
-<br>
+<br />
+<br />
(<a href="UG_feedback.html" TARGET="CONTENT">Feedback</a>)
-<br>
+<br />
(<a href="http://www.hdfgroup.uiuc.edu/HDF5/doc_dev_snapshot/index.html#H5_NewUG" TARGET="CONTENT">doc_dev_snapshot</a>)
-->
</font>
-<hr>
-<hr>
+<hr />
+<hr />
<!--
-<a href="UG_front.html" TARGET="CONTENT"><IMG SRC="GRAPHICS/COVER.GIF" BORDER=0 ALT="HDF5 UG title page"></a><br>
+<a href="UG_front.html" TARGET="CONTENT"><IMG SRC="GRAPHICS/COVER.GIF" BORDER=0 ALT="HDF5 UG title page"></a><br />
-->
<div align="center">
-<b>HDF5 User's Guide<br>Table of Contents</b>
- <br>
- <a href="UG_UpdateStatus.html" TARGET="CONTENT"><font size=-1><i>Update Status</i></font></a>
+<b>HDF5 User's Guide<br />Table of Contents</b>
+ <br />
+ <a href="UG_UpdateStatus.html" TARGET="CONTENT"><font size="-1"><i>Update Status</i></font></a>
</div>
<p>
<!-- editingComment
- <font color=#555555>
+ <font color="#555555">
<a href="01_Intro.html" TARGET="CONTENT">Introduction</a>
</font>
- <br>
+ <br />
-->
<b>I. The Broad View</b>
- <font color=#555555>
+ <font color="#555555">
<!-- editingComment
- <br>
+ <br />
<a href="02_WhatIs.html" TARGET="CONTENT">What is HDF5?</a>
-->
- <br>
+ <br />
<a href="UG_frame03DataModel.html" TARGET="_TOP">Data Model &</a>
- <br>
+ <br />
<a href="UG_frame03DataModel.html" TARGET="_TOP">File Structure</a>
- <br>
+ <br />
<a href="UG_frame04ProgModel.html" TARGET="_TOP">HDF5 Library &</a>
- <br>
+ <br />
<a href="UG_frame04ProgModel.html" TARGET="_TOP">Programming Model</a>
</font>
-<br>
-<b>II. Using HDF5 —<br>
+<br />
+<b>II. Using HDF5 —<br />
The Specifics</b>
- <font color=#555555>
- <br>
+ <font color="#555555">
+ <br />
<!-- editingComment
<a href="05_Quick.html" TARGET="CONTENT">Quick Start</a>
- <br>
+ <br />
<a href="06_Naming.html" TARGET="CONTENT">API Struture &</a>
- <br>
+ <br />
<a href="06_Naming.html" TARGET="CONTENT">Naming Conventions</a>
- <br>
+ <br />
<a href="07_DocSet.html" TARGET="CONTENT">Document Set</a>
- <br>
+ <br />
-->
<a href="UG_frame08TheFile.html" TARGET="_TOP">The File</a>
- <br>
+ <br />
<a href="UG_frame09Groups.html" TARGET="_TOP">Groups</a>
<font size="-1">
- <br>
+ <br />
<a href="09_Groups.html#Intro" TARGET="CONTENT">
Introduction</a>
- <br>
+ <br />
<a href="09_Groups.html#DGroupObj" TARGET="CONTENT">
Description</a>
- <br>
+ <br />
<a href="09_Groups.html#H5Dump" TARGET="CONTENT">
<code>h5dump</code></a>
- <br>
+ <br />
<a href="09_Groups.html#GroupFuncSums" TARGET="CONTENT">
Function Summaries</a>
<!--
- <br>
+ <br />
<a href="09_Groups.html#GroupFuncSums" TARGET="CONTENT">H5G</a>
&
<a href="09_Groups.html#LinkFuncSums" TARGET="CONTENT">H5L</a>
-->
- <br>
+ <br />
<a href="09_Groups.html#ProgModel" TARGET="CONTENT">
Programming Model</a>
- <br>
+ <br />
<a href="09_Groups.html#DiscoverInfo" TARGET="CONTENT">
Object Info</a>
- <br>
+ <br />
<a href="09_Groups.html#DiscoverGrObjs" TARGET="CONTENT">
Objects in Group</a>
- <br>
+ <br />
<a href="09_Groups.html#DiscoverAll" TARGET="CONTENT">
All Objects in File</a>
- <br>
+ <br />
<a href="09_Groups.html#Examples" TARGET="CONTENT">
Examples</a>
</font>
- <br>
+ <br />
<a href="UG_frame10Datasets.html" TARGET="_TOP">Datasets</a>
- <br>
+ <br />
<a href="UG_frame11Datatypes.html" TARGET="_TOP">Datatypes</a>
- <br>
+ <br />
<a href="UG_frame12Dataspaces.html" TARGET="_TOP">Dataspaces &</a>
- <br>
+ <br />
<a href="UG_frame12Dataspaces.html" TARGET="_TOP">Partial I/O</a>
- <br>
+ <br />
<a href="UG_frame13Attributes.html" TARGET="_TOP">Attributes</a>
- <br>
+ <br />
<a href="UG_frame13ErrorHandling.html" TARGET="_TOP">Error Handling</a>
- <br>
+ <br />
<a href="UG_frame14PropertyLists.html" TARGET="_TOP">Property Lists</a>
</font>
<br />
<b>III. <a href="UG_frame17SpecialTopics.html" TARGET="_TOP">Additional Resources</a>
</b><br />
-<b>IV. <a href="http://www.hdfgroup.org/ftp/HDF5/examples/examples-by-api/"
+<b>IV. <a href="http://www.hdfgroup.org/HDF5/examples/"
TARGET="CONTENT">Code Examples</a></b><br />
- <font color=#555555>
+ <font color="#555555">
<!-- NEED TO WRITE PER CH, CREATE UG_frame18Performance.html, AND LINK IT IN
- <br>
+ <br />
<a href="UG_frame18Performance.html" TARGET="_TOP">Performance</a>
- <br>
+ <br />
<a href="UG_frame17SpecialTopics.html" TARGET="_TOP">Special Topics</a>
- <br>
- <a href="../ddl.html" TARGET="H5DocWin">DDL in BNF</a><br>
+ <br />
+ <a href="../ddl.html" TARGET="H5DocWin">DDL in BNF</a><br />
- <a href="../ddl.html" TARGET="H5DocWin">for HDF5</a><br>
+ <a href="../ddl.html" TARGET="H5DocWin">for HDF5</a><br />
- <a href="99_SelectedPassages.html" TARGET="CONTENT">Selected Passages</a><br>
- <br>
+ <a href="99_SelectedPassages.html" TARGET="CONTENT">Selected Passages</a><br />
+ <br />
Higher Levels
- <br>
+ <br />
<a href="20_Parallel.html" TARGET="CONTENT">Parallel Environments</a>
-->
<!-- editingComment
- <br>
+ <br />
Parallel Environments
- <br>
+ <br />
(in progress)
-->
<!--
- <br>
+ <br />
<a href="21_Perform.html" TARGET="CONTENT">Performance</a>
- <br>
+ <br />
Non-C Languages
-->
<!-- editingComment
- <br>
+ <br />
<a href="http://www.hdfgroup.uiuc.edu/HDF5/doc_dev_snapshot/H5_NewUG/DRAFTS/H5UG-Cpplus-001221.pdf" TARGET="CONTENT">C++ User Notes</a>
-->
<!--
- <br>
+ <br />
<a href="23_DDL.html" TARGET="CONTENT">DDL in BNF</a>
- <br>
+ <br />
<a href="24_XML-DTD.html" TARGET="CONTENT">XML DTD</a>
-->
</font>
<!--
-<br>
+<br />
<b>IV. Tools</b>
- <font color=#555555>
- <br>
+ <font color="#555555">
+ <br />
<a href="xx_xxx.html" TARGET="CONTENT">h5ls</a>
- <br>
+ <br />
<a href="xx_xxx.html" TARGET="CONTENT">h5dump</a>
- <br>
+ <br />
<a href="xx_xxx.html" TARGET="CONTENT">h5repart</a>
- <br>
+ <br />
<a href="xx_xxx.html" TARGET="CONTENT">h5toh4</a>
- <br>
+ <br />
<a href="xx_xxx.html" TARGET="CONTENT">h4toh5</a>
- <br>
+ <br />
<a href="xx_xxx.html" TARGET="CONTENT">Java Tools</a>
- <br>
+ <br />
<a href="xx_xxx.html" TARGET="CONTENT">XML Tools</a>
</font>
-->
<!--
-<br>
+<br />
<b>Appendices</b>
- <font color=#555555>
- <br>
+ <font color="#555555">
+ <br />
<a href="99_Glossary.html" TARGET="CONTENT">Glossary</a>
- <br>
+ <br />
<a href="99_Glossary.html" TARGET="CONTENT">Glossary</a>
- <br>
+ <br />
<a href="99_PredefDTypes.html" TARGET="CONTENT">Predefined Datatypes</a>
- <br>
+ <br />
H4-to-H5 Mapping
- <br>
+ <br />
H5-to-H4 Mapping
- <br>
+ <br />
<a href="99_TechSupport.html" TARGET="CONTENT">Technical Support</a>
- <br>
+ <br />
</font>
-->
-<hr>
+<hr />
<!-- FOR USE WITH ELECTRONIC VERSION ----------------------------------->
<!-- <small><i>Printable
<a href="http://www.hdfgroup.org/HDF5/doc/PSandPDF/HDF5_UsersGuide.PDF" TARGET="CONTENT">PDF</a>
of this User’s Guide</i></small>
-<hr>
+<hr />
-->
<!-- FOR USE WITH ELECTRONIC VERSION ----------------------------------->
<div align="center">
<b>Other HDF5 documents</b>
</div>
-<br>
+<br />
-<a href="../index.html" TARGET="H5DocWin">Full HDF5 doc set</a> for<br>
+<a href="../index.html" TARGET="H5DocWin">Full HDF5 doc set</a> for<br />
- the current release<br>
+ the current release<br />
-<a href="../H5.intro.html" TARGET="H5DocWin"><cite>Introduction to HDF5</cite></a><br>
+<a href="../H5.intro.html" TARGET="H5DocWin"><cite>Introduction to HDF5</cite></a><br />
-<a href="../RM/RM_H5Front.html" TARGET="H5DocWin"><cite>HDF5 Reference</cite></a><br>
+<a href="../RM/RM_H5Front.html" TARGET="H5DocWin"><cite>HDF5 Reference</cite></a><br />
- <a href="../RM/RM_H5Front.html" TARGET="H5DocWin"><cite>Manual</cite></a><br>
+ <a href="../RM/RM_H5Front.html" TARGET="H5DocWin"><cite>Manual</cite></a><br />
-<a href="../H5.user.html" TARGET="H5DocWin"><cite>HDF5 Release 1.4.5</cite></a><br>
+<a href="../H5.user.html" TARGET="H5DocWin"><cite>HDF5 Release 1.4.5</cite></a><br />
<a href="../H5.user.html" TARGET="H5DocWin"><cite>User's Guide</cite></a>
-<hr>
+<hr />
</body>
</html>
diff --git a/html/UG/UG_nav10Datasets.html b/html/UG/UG_nav10Datasets.html
index 162adee..7b00ec3 100755
--- a/html/UG/UG_nav10Datasets.html
+++ b/html/UG/UG_nav10Datasets.html
@@ -12,8 +12,8 @@
<IMG SRC="GRAPHICS/READ1ST.GIF" BORDER=0 ALT="Read this first!"></A>
-->
-<font size=-1>
-<br>
+<font size="-1">
+<br />
<!-- editingComment
<div align=right>
( <a href="UG_nav01.html">Expand TOC</a> )
@@ -21,262 +21,269 @@
-->
<a href="UG_front.html" TARGET="CONTENT">Title Page</a>
-<br>
+<br />
<a href="../Copyright.html" TARGET="CONTENT">Copyright</a>
<!-- editingComment
-<br>
+<br />
(<a href="../H5_UG_Outline.pdf" TARGET="CONTENT">Complete outline</a>)
-<br>
-<br>
+<br />
+<br />
(<a href="UG_feedback.html" TARGET="CONTENT">Feedback</a>)
-<br>
+<br />
(<a href="http://www.hdfgroup.uiuc.edu/HDF5/doc_dev_snapshot/index.html#H5_NewUG" TARGET="CONTENT">doc_dev_snapshot</a>)
-->
</font>
-<hr>
-<hr>
+<hr />
+<hr />
<!--
-<a href="UG_front.html" TARGET="CONTENT"><IMG SRC="GRAPHICS/COVER.GIF" BORDER=0 ALT="HDF5 UG title page"></a><br>
+<a href="UG_front.html" TARGET="CONTENT"><IMG SRC="GRAPHICS/COVER.GIF" BORDER=0 ALT="HDF5 UG title page"></a><br />
-->
<div align="center">
-<b>HDF5 User's Guide<br>Table of Contents</b>
- <br>
- <a href="UG_UpdateStatus.html" TARGET="CONTENT"><font size=-1><i>Update Status</i></font></a>
+<b>HDF5 User's Guide<br />Table of Contents</b>
+ <br />
+ <a href="UG_UpdateStatus.html" TARGET="CONTENT"><font size="-1"><i>Update Status</i></font></a>
</div>
<p>
<!-- editingComment
- <font color=#555555>
+ <font color="#555555">
<a href="01_Intro.html" TARGET="CONTENT">Introduction</a>
</font>
- <br>
+ <br />
-->
<b>I. The Broad View</b>
- <font color=#555555>
+ <font color="#555555">
<!-- editingComment
- <br>
+ <br />
<a href="02_WhatIs.html" TARGET="CONTENT">What is HDF5?</a>
-->
- <br>
+ <br />
<a href="UG_frame03DataModel.html" TARGET="_TOP">Data Model &</a>
- <br>
+ <br />
<a href="UG_frame03DataModel.html" TARGET="_TOP">File Structure</a>
- <br>
+ <br />
<a href="UG_frame04ProgModel.html" TARGET="_TOP">HDF5 Library &</a>
- <br>
+ <br />
<a href="UG_frame04ProgModel.html" TARGET="_TOP">Programming Model</a>
</font>
-<br>
-<b>II. Using HDF5 —<br>
+<br />
+<b>II. Using HDF5 —<br />
The Specifics</b>
- <font color=#555555>
- <br>
+ <font color="#555555">
+ <br />
<!-- editingComment
<a href="05_Quick.html" TARGET="CONTENT">Quick Start</a>
- <br>
+ <br />
<a href="06_Naming.html" TARGET="CONTENT">API Struture &</a>
- <br>
+ <br />
<a href="06_Naming.html" TARGET="CONTENT">Naming Conventions</a>
- <br>
+ <br />
<a href="07_DocSet.html" TARGET="CONTENT">Document Set</a>
- <br>
+ <br />
-->
<a href="UG_frame08TheFile.html" TARGET="_TOP">The File</a>
- <br>
+ <br />
<a href="UG_frame09Groups.html" TARGET="_TOP">Groups</a>
- <br>
+<!-- <a href="UG_frame09Groups.html" TARGET="_TOP">Groups and Links</a>
+-->
+ <br />
<a href="UG_frame10Datasets.html" TARGET="_TOP">Datasets</a>
<font size="-1">
- <br>
+ <br />
<a href="10_Datasets.html#Intro" TARGET="CONTENT">
Introduction</a>
- <br>
+ <br />
<a href="10_Datasets.html#FileFunctSums" TARGET="CONTENT">
Function Summaries</a>
- <br>
+ <br />
<a href="10_Datasets.html#PModel" TARGET="CONTENT">
Programming Model</a>
- <br>
+ <br />
<a href="10_Datasets.html#DTransfer" TARGET="CONTENT">
Data Transfer</a>
- <br>
+ <br />
<a href="10_Datasets.html#Allocation" TARGET="CONTENT">
Space Allocation</a>
- <br>
+ <br />
<a href="10_Datasets.html#UseFilters" TARGET="CONTENT">
Using Filters</a>
- <br>
+ <br />
<a href="10_Datasets.html#N-Bit" TARGET="CONTENT">
N-bit</a>
- <br>
+ <br />
<a href="10_Datasets.html#ScaleOffset" TARGET="CONTENT">
Scale-Offset</a>
- <br>
+ <br />
<a href="10_Datasets.html#Szip" TARGET="CONTENT">
Szip</a>
</font>
- <br>
+ <br />
+<!--
+ <a href="UG_frameObjectsIdentifiers.html" TARGET="_TOP">Objects and
+ Identifiers</a>
+ <br />
+-->
<a href="UG_frame11Datatypes.html" TARGET="_TOP">Datatypes</a>
- <br>
+ <br />
<a href="UG_frame12Dataspaces.html" TARGET="_TOP">Dataspaces &</a>
- <br>
+ <br />
<a href="UG_frame12Dataspaces.html" TARGET="_TOP">Partial I/O</a>
- <br>
+ <br />
<a href="UG_frame13Attributes.html" TARGET="_TOP">Attributes</a>
- <br>
+ <br />
<a href="UG_frame13ErrorHandling.html" TARGET="_TOP">Error Handling</a>
- <br>
+ <br />
<a href="UG_frame14PropertyLists.html" TARGET="_TOP">Property Lists</a>
<!--
- <br>
+ <br />
Images & Palettes
- <br>
+ <br />
Discarding Objects
- <br>
+ <br />
<a href="17_Filters.html" TARGET="CONTENT">Filters</a>
- <br>
+ <br />
Miscellaneous
-->
<!-- editingComment
- <br>
+ <br />
<a href="http://www.hdfgroup.uiuc.edu/HDF5/doc_dev_snapshot/H5_NewUG/DRAFTS/VFL-clip-020924DRAFT.pdf" TARGET="CONTENT">VFL</a> (early clip)
-->
</font>
<br />
<b>III. <a href="UG_frame17SpecialTopics.html" TARGET="_TOP">Additional Resources</a>
</b><br />
-<b>IV. <a href="http://www.hdfgroup.org/ftp/HDF5/examples/examples-by-api/"
+<b>IV. <a href="http://www.hdfgroup.org/HDF5/examples/"
TARGET="CONTENT">Code Examples</a></b><br />
- <font color=#555555>
+ <font color="#555555">
<!-- NEED TO WRITE PER CH, CREATE UG_frame18Performance.html, AND LINK IT IN
- <br>
+ <br />
<a href="UG_frame18Performance.html" TARGET="_TOP">Performance</a>
- <br>
+ <br />
<a href="UG_frame17SpecialTopics.html" TARGET="_TOP">Special Topics</a>
- <br>
- <a href="../ddl.html" TARGET="H5DocWin">DDL in BNF</a><br>
+ <br />
+ <a href="../ddl.html" TARGET="H5DocWin">DDL in BNF</a><br />
- <a href="../ddl.html" TARGET="H5DocWin">for HDF5</a><br>
+ <a href="../ddl.html" TARGET="H5DocWin">for HDF5</a><br />
- <a href="99_SelectedPassages.html" TARGET="CONTENT">Selected Passages</a><br>
- <br>
+ <a href="99_SelectedPassages.html" TARGET="CONTENT">Selected Passages</a><br />
+ <br />
Higher Levels
- <br>
+ <br />
<a href="20_Parallel.html" TARGET="CONTENT">Parallel Environments</a>
-->
<!-- editingComment
- <br>
+ <br />
Parallel Environments
- <br>
+ <br />
(in progress)
-->
<!--
- <br>
+ <br />
<a href="21_Perform.html" TARGET="CONTENT">Performance</a>
- <br>
+ <br />
Non-C Languages
-->
<!-- editingComment
- <br>
+ <br />
<a href="http://www.hdfgroup.uiuc.edu/HDF5/doc_dev_snapshot/H5_NewUG/DRAFTS/H5UG-Cpplus-001221.pdf" TARGET="CONTENT">C++ User Notes</a>
-->
<!--
- <br>
+ <br />
<a href="23_DDL.html" TARGET="CONTENT">DDL in BNF</a>
- <br>
+ <br />
<a href="24_XML-DTD.html" TARGET="CONTENT">XML DTD</a>
-->
</font>
<!--
-<br>
+<br />
<b>IV. Tools</b>
- <font color=#555555>
- <br>
+ <font color="#555555">
+ <br />
<a href="xx_xxx.html" TARGET="CONTENT">h5ls</a>
- <br>
+ <br />
<a href="xx_xxx.html" TARGET="CONTENT">h5dump</a>
- <br>
+ <br />
<a href="xx_xxx.html" TARGET="CONTENT">h5repart</a>
- <br>
+ <br />
<a href="xx_xxx.html" TARGET="CONTENT">h5toh4</a>
- <br>
+ <br />
<a href="xx_xxx.html" TARGET="CONTENT">h4toh5</a>
- <br>
+ <br />
<a href="xx_xxx.html" TARGET="CONTENT">Java Tools</a>
- <br>
+ <br />
<a href="xx_xxx.html" TARGET="CONTENT">XML Tools</a>
</font>
-->
<!--
-<br>
+<br />
<b>Appendices</b>
- <font color=#555555>
- <br>
+ <font color="#555555">
+ <br />
<a href="99_Glossary.html" TARGET="CONTENT">Glossary</a>
- <br>
+ <br />
<a href="99_Glossary.html" TARGET="CONTENT">Glossary</a>
- <br>
+ <br />
<a href="99_PredefDTypes.html" TARGET="CONTENT">Predefined Datatypes</a>
- <br>
+ <br />
H4-to-H5 Mapping
- <br>
+ <br />
H5-to-H4 Mapping
- <br>
+ <br />
<a href="99_TechSupport.html" TARGET="CONTENT">Technical Support</a>
- <br>
+ <br />
</font>
-->
-<hr>
+<hr />
<!-- FOR USE WITH ELECTRONIC VERSION ----------------------------------->
<!-- <small><i>Printable
<a href="http://www.hdfgroup.org/HDF5/doc/PSandPDF/HDF5_UsersGuide.PDF" TARGET="CONTENT">PDF</a>
of this User’s Guide</i></small>
-<hr>
+<hr />
-->
<!-- FOR USE WITH ELECTRONIC VERSION ----------------------------------->
<div align="center">
<b>Other HDF5 documents</b>
</div>
-<br>
+<br />
-<a href="../index.html" TARGET="H5DocWin">Full HDF5 doc set</a> for<br>
+<a href="../index.html" TARGET="H5DocWin">Full HDF5 doc set</a> for<br />
- the current release<br>
+ the current release<br />
-<a href="../H5.intro.html" TARGET="H5DocWin"><cite>Introduction to HDF5</cite></a><br>
+<a href="../H5.intro.html" TARGET="H5DocWin"><cite>Introduction to HDF5</cite></a><br />
-<a href="../RM/RM_H5Front.html" TARGET="H5DocWin"><cite>HDF5 Reference</cite></a><br>
+<a href="../RM/RM_H5Front.html" TARGET="H5DocWin"><cite>HDF5 Reference</cite></a><br />
- <a href="../RM/RM_H5Front.html" TARGET="H5DocWin"><cite>Manual</cite></a><br>
+ <a href="../RM/RM_H5Front.html" TARGET="H5DocWin"><cite>Manual</cite></a><br />
-<a href="../H5.user.html" TARGET="H5DocWin"><cite>HDF5 Release 1.4.5</cite></a><br>
+<a href="../H5.user.html" TARGET="H5DocWin"><cite>HDF5 Release 1.4.5</cite></a><br />
<a href="../H5.user.html" TARGET="H5DocWin"><cite>User's Guide</cite></a>
-<hr>
+<hr />
</body>
</html>
diff --git a/html/UG/UG_nav11Datatypes.html b/html/UG/UG_nav11Datatypes.html
index 98972c9..8c8492e 100755
--- a/html/UG/UG_nav11Datatypes.html
+++ b/html/UG/UG_nav11Datatypes.html
@@ -12,8 +12,8 @@
<IMG SRC="GRAPHICS/READ1ST.GIF" BORDER=0 ALT="Read this first!"></A>
-->
-<font size=-1>
-<br>
+<font size="-1">
+<br />
<!-- editingComment
<div align=right>
( <a href="UG_nav01.html">Expand TOC</a> )
@@ -21,270 +21,277 @@
-->
<a href="UG_front.html" TARGET="CONTENT">Title Page</a>
-<br>
+<br />
<a href="../Copyright.html" TARGET="CONTENT">Copyright</a>
<!-- editingComment
-<br>
+<br />
(<a href="../H5_UG_Outline.pdf" TARGET="CONTENT">Complete outline</a>)
-<br>
-<br>
+<br />
+<br />
(<a href="UG_feedback.html" TARGET="CONTENT">Feedback</a>)
-<br>
+<br />
(<a href="http://www.hdfgroup.uiuc.edu/HDF5/doc_dev_snapshot/index.html#H5_NewUG" TARGET="CONTENT">doc_dev_snapshot</a>)
-->
</font>
-<hr>
-<hr>
+<hr />
+<hr />
<!--
-<a href="UG_front.html" TARGET="CONTENT"><IMG SRC="GRAPHICS/COVER.GIF" BORDER=0 ALT="HDF5 UG title page"></a><br>
+<a href="UG_front.html" TARGET="CONTENT"><IMG SRC="GRAPHICS/COVER.GIF" BORDER=0 ALT="HDF5 UG title page"></a><br />
-->
<div align="center">
-<b>HDF5 User's Guide<br>Table of Contents</b>
- <br>
- <a href="UG_UpdateStatus.html" TARGET="CONTENT"><font size=-1><i>Update Status</i></font></a>
+<b>HDF5 User's Guide<br />Table of Contents</b>
+ <br />
+ <a href="UG_UpdateStatus.html" TARGET="CONTENT"><font size="-1"><i>Update Status</i></font></a>
</div>
<p>
<!-- editingComment
- <font color=#555555>
+ <font color="#555555">
<a href="01_Intro.html" TARGET="CONTENT">Introduction</a>
</font>
- <br>
+ <br />
-->
<b>I. The Broad View</b>
- <font color=#555555>
+ <font color="#555555">
<!-- editingComment
- <br>
+ <br />
<a href="02_WhatIs.html" TARGET="CONTENT">What is HDF5?</a>
-->
- <br>
+ <br />
<a href="UG_frame03DataModel.html" TARGET="_TOP">Data Model &</a>
- <br>
+ <br />
<a href="UG_frame03DataModel.html" TARGET="_TOP">File Structure</a>
- <br>
+ <br />
<a href="UG_frame04ProgModel.html" TARGET="_TOP">HDF5 Library &</a>
- <br>
+ <br />
<a href="UG_frame04ProgModel.html" TARGET="_TOP">Programming Model</a>
</font>
-<br>
-<b>II. Using HDF5 —<br>
+<br />
+<b>II. Using HDF5 —<br />
The Specifics</b>
- <font color=#555555>
- <br>
+ <font color="#555555">
+ <br />
<!-- editingComment
<a href="05_Quick.html" TARGET="CONTENT">Quick Start</a>
- <br>
+ <br />
<a href="06_Naming.html" TARGET="CONTENT">API Struture &</a>
- <br>
+ <br />
<a href="06_Naming.html" TARGET="CONTENT">Naming Conventions</a>
- <br>
+ <br />
<a href="07_DocSet.html" TARGET="CONTENT">Document Set</a>
- <br>
+ <br />
-->
<a href="UG_frame08TheFile.html" TARGET="_TOP">The File</a>
- <br>
+ <br />
<a href="UG_frame09Groups.html" TARGET="_TOP">Groups</a>
- <br>
+<!-- <a href="UG_frame09Groups.html" TARGET="_TOP">Groups and Links</a>
+-->
+ <br />
<a href="UG_frame10Datasets.html" TARGET="_TOP">Datasets</a>
- <br>
+ <br />
+<!--
+ <a href="UG_frameObjectsIdentifiers.html" TARGET="_TOP">Objects and
+ Identifiers</a>
+ <br />
+-->
<a href="UG_frame11Datatypes.html" TARGET="_TOP">Datatypes</a>
<font size="-1">
- <br>
+ <br />
<a href="11_Datatypes.html#Intro" TARGET="CONTENT">
Introduction</a>
- <br>
+ <br />
<a href="11_Datatypes.html#DtypesUsed" TARGET="CONTENT">
Datatype Usage</a>
- <br>
+ <br />
<a href="11_Datatypes.html#FileFunctSums" TARGET="CONTENT">
Function Summaries</a>
- <br>
+ <br />
<a href="11_Datatypes.html#Pmodel" TARGET="CONTENT">
Programming Model</a>
- <br>
+ <br />
<a href="11_Datatypes.html#NonNumDtypes" TARGET="CONTENT">
Non-numeric</a>
- <br>
+ <br />
<a href="11_Datatypes.html#NonNumDtypes" TARGET="CONTENT">
Datatypes</a>
- <br>
+ <br />
<a href="11_Datatypes.html#Fvalues" TARGET="CONTENT">
Fill Values</a>
- <br>
+ <br />
<a href="11_Datatypes.html#CCDtypes" TARGET="CONTENT">
Compound Datatypes</a>
- <br>
+ <br />
<a href="11_Datatypes.html#LCDtypeObj" TARGET="CONTENT">
Datatype Life Cycle</a>
- <br>
+ <br />
<a href="11_Datatypes.html#Dtransfer" TARGET="CONTENT">
Data Transfer</a>
- <br>
+ <br />
<a href="11_Datatypes.html#TextDescriptions" TARGET="CONTENT">
Text <–> Datatype</a>
- <br>
+ <br />
<a href="11_Datatypes.html#TextDescriptions" TARGET="CONTENT">
Conversions</a>
</font>
- <br>
+ <br />
<a href="UG_frame12Dataspaces.html" TARGET="_TOP">Dataspaces &</a>
- <br>
+ <br />
<a href="UG_frame12Dataspaces.html" TARGET="_TOP">Partial I/O</a>
- <br>
+ <br />
<a href="UG_frame13Attributes.html" TARGET="_TOP">Attributes</a>
- <br>
+ <br />
<a href="UG_frame13ErrorHandling.html" TARGET="_TOP">Error Handling</a>
- <br>
+ <br />
<a href="UG_frame14PropertyLists.html" TARGET="_TOP">Property Lists</a>
<!--
- <br>
+ <br />
Images & Palettes
- <br>
+ <br />
Discarding Objects
- <br>
+ <br />
<a href="17_Filters.html" TARGET="CONTENT">Filters</a>
- <br>
+ <br />
Miscellaneous
-->
<!-- editingComment
- <br>
+ <br />
<a href="http://www.hdfgroup.uiuc.edu/HDF5/doc_dev_snapshot/H5_NewUG/DRAFTS/VFL-clip-020924DRAFT.pdf" TARGET="CONTENT">VFL</a> (early clip)
-->
</font>
<br />
<b>III. <a href="UG_frame17SpecialTopics.html" TARGET="_TOP">Additional Resources</a>
</b><br />
-<b>IV. <a href="http://www.hdfgroup.org/ftp/HDF5/examples/examples-by-api/"
+<b>IV. <a href="http://www.hdfgroup.org/HDF5/examples/"
TARGET="CONTENT">Code Examples</a></b><br />
- <font color=#555555>
+ <font color="#555555">
<!-- NEED TO WRITE PER CH, CREATE UG_frame18Performance.html, AND LINK IT IN
- <br>
+ <br />
<a href="UG_frame18Performance.html" TARGET="_TOP">Performance</a>
- <br>
+ <br />
<a href="UG_frame17SpecialTopics.html" TARGET="_TOP">Special Topics</a>
- <br>
- <a href="../ddl.html" TARGET="H5DocWin">DDL in BNF</a><br>
+ <br />
+ <a href="../ddl.html" TARGET="H5DocWin">DDL in BNF</a><br />
- <a href="../ddl.html" TARGET="H5DocWin">for HDF5</a><br>
+ <a href="../ddl.html" TARGET="H5DocWin">for HDF5</a><br />
- <a href="99_SelectedPassages.html" TARGET="CONTENT">Selected Passages</a><br>
- <br>
+ <a href="99_SelectedPassages.html" TARGET="CONTENT">Selected Passages</a><br />
+ <br />
Higher Levels
- <br>
+ <br />
<a href="20_Parallel.html" TARGET="CONTENT">Parallel Environments</a>
-->
<!-- editingComment
- <br>
+ <br />
Parallel Environments
- <br>
+ <br />
(in progress)
-->
<!--
- <br>
+ <br />
<a href="21_Perform.html" TARGET="CONTENT">Performance</a>
- <br>
+ <br />
Non-C Languages
-->
<!-- editingComment
- <br>
+ <br />
<a href="http://www.hdfgroup.uiuc.edu/HDF5/doc_dev_snapshot/H5_NewUG/DRAFTS/H5UG-Cpplus-001221.pdf" TARGET="CONTENT">C++ User Notes</a>
-->
<!--
- <br>
+ <br />
<a href="23_DDL.html" TARGET="CONTENT">DDL in BNF</a>
- <br>
+ <br />
<a href="24_XML-DTD.html" TARGET="CONTENT">XML DTD</a>
-->
</font>
<!--
-<br>
+<br />
<b>IV. Tools</b>
- <font color=#555555>
- <br>
+ <font color="#555555">
+ <br />
<a href="xx_xxx.html" TARGET="CONTENT">h5ls</a>
- <br>
+ <br />
<a href="xx_xxx.html" TARGET="CONTENT">h5dump</a>
- <br>
+ <br />
<a href="xx_xxx.html" TARGET="CONTENT">h5repart</a>
- <br>
+ <br />
<a href="xx_xxx.html" TARGET="CONTENT">h5toh4</a>
- <br>
+ <br />
<a href="xx_xxx.html" TARGET="CONTENT">h4toh5</a>
- <br>
+ <br />
<a href="xx_xxx.html" TARGET="CONTENT">Java Tools</a>
- <br>
+ <br />
<a href="xx_xxx.html" TARGET="CONTENT">XML Tools</a>
</font>
-->
<!--
-<br>
+<br />
<b>Appendices</b>
- <font color=#555555>
- <br>
+ <font color="#555555">
+ <br />
<a href="99_Glossary.html" TARGET="CONTENT">Glossary</a>
- <br>
+ <br />
<a href="99_Glossary.html" TARGET="CONTENT">Glossary</a>
- <br>
+ <br />
<a href="99_PredefDTypes.html" TARGET="CONTENT">Predefined Datatypes</a>
- <br>
+ <br />
H4-to-H5 Mapping
- <br>
+ <br />
H5-to-H4 Mapping
- <br>
+ <br />
<a href="99_TechSupport.html" TARGET="CONTENT">Technical Support</a>
- <br>
+ <br />
</font>
-->
-<hr>
+<hr />
<!-- FOR USE WITH ELECTRONIC VERSION ----------------------------------->
<!-- <small><i>Printable
<a href="http://www.hdfgroup.org/HDF5/doc/PSandPDF/HDF5_UsersGuide.PDF" TARGET="CONTENT">PDF</a>
of this User’s Guide</i></small>
-<hr>
+<hr />
-->
<!-- FOR USE WITH ELECTRONIC VERSION ----------------------------------->
<div align="center">
<b>Other HDF5 documents</b>
</div>
-<br>
+<br />
-<a href="../index.html" TARGET="H5DocWin">Full HDF5 doc set</a> for<br>
+<a href="../index.html" TARGET="H5DocWin">Full HDF5 doc set</a> for<br />
- the current release<br>
+ the current release<br />
-<a href="../H5.intro.html" TARGET="H5DocWin"><cite>Introduction to HDF5</cite></a><br>
+<a href="../H5.intro.html" TARGET="H5DocWin"><cite>Introduction to HDF5</cite></a><br />
-<a href="../RM/RM_H5Front.html" TARGET="H5DocWin"><cite>HDF5 Reference</cite></a><br>
+<a href="../RM/RM_H5Front.html" TARGET="H5DocWin"><cite>HDF5 Reference</cite></a><br />
- <a href="../RM/RM_H5Front.html" TARGET="H5DocWin"><cite>Manual</cite></a><br>
+ <a href="../RM/RM_H5Front.html" TARGET="H5DocWin"><cite>Manual</cite></a><br />
-<a href="../H5.user.html" TARGET="H5DocWin"><cite>HDF5 Release 1.4.5</cite></a><br>
+<a href="../H5.user.html" TARGET="H5DocWin"><cite>HDF5 Release 1.4.5</cite></a><br />
<a href="../H5.user.html" TARGET="H5DocWin"><cite>User's Guide</cite></a>
-<hr>
+<hr />
</body>
</html>
diff --git a/html/UG/UG_nav12Dataspaces.html b/html/UG/UG_nav12Dataspaces.html
index cbc6a32..8d907c2 100755
--- a/html/UG/UG_nav12Dataspaces.html
+++ b/html/UG/UG_nav12Dataspaces.html
@@ -12,8 +12,8 @@
<IMG SRC="GRAPHICS/READ1ST.GIF" BORDER=0 ALT="Read this first!"></A>
-->
-<font size=-1>
-<br>
+<font size="-1">
+<br />
<!-- editingComment
<div align=right>
( <a href="UG_nav01.html">Expand TOC</a> )
@@ -21,258 +21,265 @@
-->
<a href="UG_front.html" TARGET="CONTENT">Title Page</a>
-<br>
+<br />
<a href="../Copyright.html" TARGET="CONTENT">Copyright</a>
<!-- editingComment
-<br>
+<br />
(<a href="../H5_UG_Outline.pdf" TARGET="CONTENT">Complete outline</a>)
-<br>
-<br>
+<br />
+<br />
(<a href="UG_feedback.html" TARGET="CONTENT">Feedback</a>)
-<br>
+<br />
(<a href="http://www.hdfgroup.uiuc.edu/HDF5/doc_dev_snapshot/index.html#H5_NewUG" TARGET="CONTENT">doc_dev_snapshot</a>)
-->
</font>
-<hr>
-<hr>
+<hr />
+<hr />
<!--
-<a href="UG_front.html" TARGET="CONTENT"><IMG SRC="GRAPHICS/COVER.GIF" BORDER=0 ALT="HDF5 UG title page"></a><br>
+<a href="UG_front.html" TARGET="CONTENT"><IMG SRC="GRAPHICS/COVER.GIF" BORDER=0 ALT="HDF5 UG title page"></a><br />
-->
<div align="center">
-<b>HDF5 User's Guide<br>Table of Contents</b>
- <br>
- <a href="UG_UpdateStatus.html" TARGET="CONTENT"><font size=-1><i>Update Status</i></font></a>
+<b>HDF5 User's Guide<br />Table of Contents</b>
+ <br />
+ <a href="UG_UpdateStatus.html" TARGET="CONTENT"><font size="-1"><i>Update Status</i></font></a>
</div>
<p>
<!-- editingComment
- <font color=#555555>
+ <font color="#555555">
<a href="01_Intro.html" TARGET="CONTENT">Introduction</a>
</font>
- <br>
+ <br />
-->
<b>I. The Broad View</b>
- <font color=#555555>
+ <font color="#555555">
<!-- editingComment
- <br>
+ <br />
<a href="02_WhatIs.html" TARGET="CONTENT">What is HDF5?</a>
-->
- <br>
+ <br />
<a href="UG_frame03DataModel.html" TARGET="_TOP">Data Model &</a>
- <br>
+ <br />
<a href="UG_frame03DataModel.html" TARGET="_TOP">File Structure</a>
- <br>
+ <br />
<a href="UG_frame04ProgModel.html" TARGET="_TOP">HDF5 Library &</a>
- <br>
+ <br />
<a href="UG_frame04ProgModel.html" TARGET="_TOP">Programming Model</a>
</font>
-<br>
-<b>II. Using HDF5 —<br>
+<br />
+<b>II. Using HDF5 —<br />
The Specifics</b>
- <font color=#555555>
- <br>
+ <font color="#555555">
+ <br />
<!-- editingComment
<a href="05_Quick.html" TARGET="CONTENT">Quick Start</a>
- <br>
+ <br />
<a href="06_Naming.html" TARGET="CONTENT">API Struture &</a>
- <br>
+ <br />
<a href="06_Naming.html" TARGET="CONTENT">Naming Conventions</a>
- <br>
+ <br />
<a href="07_DocSet.html" TARGET="CONTENT">Document Set</a>
- <br>
+ <br />
-->
<a href="UG_frame08TheFile.html" TARGET="_TOP">The File</a>
- <br>
+ <br />
<a href="UG_frame09Groups.html" TARGET="_TOP">Groups</a>
- <br>
+<!-- <a href="UG_frame09Groups.html" TARGET="_TOP">Groups and Links</a>
+-->
+ <br />
<a href="UG_frame10Datasets.html" TARGET="_TOP">Datasets</a>
- <br>
+ <br />
+<!--
+ <a href="UG_frameObjectsIdentifiers.html" TARGET="_TOP">Objects and
+ Identifiers</a>
+ <br />
+-->
<a href="UG_frame11Datatypes.html" TARGET="_TOP">Datatypes</a>
- <br>
+ <br />
<a href="UG_frame12Dataspaces.html" TARGET="_TOP">Dataspaces &</a>
- <br>
+ <br />
<a href="UG_frame12Dataspaces.html" TARGET="_TOP">Partial I/O</a>
<font size="-1">
- <br>
+ <br />
<a href="12_Dataspaces.html#Intro" TARGET="CONTENT">
Introduction</a>
- <br>
+ <br />
<a href="12_Dataspaces.html#DSpaceFunctSums" TARGET="CONTENT">
Function Summaries</a>
- <br>
+ <br />
<a href="12_Dataspaces.html#DefDataObjs" TARGET="CONTENT">
Dataspace Objects</a>
- <br>
+ <br />
<a href="12_Dataspaces.html#ProgModel" TARGET="CONTENT">
Programming Model</a>
- <br>
+ <br />
<a href="12_Dataspaces.html#DTransfer" TARGET="CONTENT">
Data Transfer</a>
- <br>
+ <br />
<a href="12_Dataspaces.html#DSelectTransfer" TARGET="CONTENT">
Selection Operations</a>
- <br>
+ <br />
<a href="12_Dataspaces.html#DRegions" TARGET="CONTENT">
Region References </a>
- <br>
+ <br />
<a href="12_Dataspaces.html#Programs" TARGET="CONTENT">
Sample programs</a>
</font>
- <br>
+ <br />
<a href="UG_frame13Attributes.html" TARGET="_TOP">Attributes</a>
- <br>
+ <br />
<a href="UG_frame13ErrorHandling.html" TARGET="_TOP">Error Handling</a>
- <br>
+ <br />
<a href="UG_frame14PropertyLists.html" TARGET="_TOP">Property Lists</a>
<!--
- <br>
+ <br />
Images & Palettes
- <br>
+ <br />
Discarding Objects
- <br>
+ <br />
<a href="17_Filters.html" TARGET="CONTENT">Filters</a>
- <br>
+ <br />
Miscellaneous
-->
<!-- editingComment
- <br>
+ <br />
<a href="http://www.hdfgroup.uiuc.edu/HDF5/doc_dev_snapshot/H5_NewUG/DRAFTS/VFL-clip-020924DRAFT.pdf" TARGET="CONTENT">VFL</a> (early clip)
-->
</font>
<br />
<b>III. <a href="UG_frame17SpecialTopics.html" TARGET="_TOP">Additional Resources</a>
</b><br />
-<b>IV. <a href="http://www.hdfgroup.org/ftp/HDF5/examples/examples-by-api/"
+<b>IV. <a href="http://www.hdfgroup.org/HDF5/examples/"
TARGET="CONTENT">Code Examples</a></b><br />
- <font color=#555555>
+ <font color="#555555">
<!-- NEED TO WRITE PER CH, CREATE UG_frame18Performance.html, AND LINK IT IN
- <br>
+ <br />
<a href="UG_frame18Performance.html" TARGET="_TOP">Performance</a>
- <br>
+ <br />
<a href="UG_frame17SpecialTopics.html" TARGET="_TOP">Special Topics</a>
- <br>
- <a href="../ddl.html" TARGET="H5DocWin">DDL in BNF</a><br>
+ <br />
+ <a href="../ddl.html" TARGET="H5DocWin">DDL in BNF</a><br />
- <a href="../ddl.html" TARGET="H5DocWin">for HDF5</a><br>
+ <a href="../ddl.html" TARGET="H5DocWin">for HDF5</a><br />
- <a href="99_SelectedPassages.html" TARGET="CONTENT">Selected Passages</a><br>
- <br>
+ <a href="99_SelectedPassages.html" TARGET="CONTENT">Selected Passages</a><br />
+ <br />
Higher Levels
- <br>
+ <br />
<a href="20_Parallel.html" TARGET="CONTENT">Parallel Environments</a>
-->
<!-- editingComment
- <br>
+ <br />
Parallel Environments
- <br>
+ <br />
(in progress)
-->
<!--
- <br>
+ <br />
<a href="21_Perform.html" TARGET="CONTENT">Performance</a>
- <br>
+ <br />
Non-C Languages
-->
<!-- editingComment
- <br>
+ <br />
<a href="http://www.hdfgroup.uiuc.edu/HDF5/doc_dev_snapshot/H5_NewUG/DRAFTS/H5UG-Cpplus-001221.pdf" TARGET="CONTENT">C++ User Notes</a>
-->
<!--
- <br>
+ <br />
<a href="23_DDL.html" TARGET="CONTENT">DDL in BNF</a>
- <br>
+ <br />
<a href="24_XML-DTD.html" TARGET="CONTENT">XML DTD</a>
-->
</font>
<!--
-<br>
+<br />
<b>IV. Tools</b>
- <font color=#555555>
- <br>
+ <font color="#555555">
+ <br />
<a href="xx_xxx.html" TARGET="CONTENT">h5ls</a>
- <br>
+ <br />
<a href="xx_xxx.html" TARGET="CONTENT">h5dump</a>
- <br>
+ <br />
<a href="xx_xxx.html" TARGET="CONTENT">h5repart</a>
- <br>
+ <br />
<a href="xx_xxx.html" TARGET="CONTENT">h5toh4</a>
- <br>
+ <br />
<a href="xx_xxx.html" TARGET="CONTENT">h4toh5</a>
- <br>
+ <br />
<a href="xx_xxx.html" TARGET="CONTENT">Java Tools</a>
- <br>
+ <br />
<a href="xx_xxx.html" TARGET="CONTENT">XML Tools</a>
</font>
-->
<!--
-<br>
+<br />
<b>Appendices</b>
- <font color=#555555>
- <br>
+ <font color="#555555">
+ <br />
<a href="99_Glossary.html" TARGET="CONTENT">Glossary</a>
- <br>
+ <br />
<a href="99_Glossary.html" TARGET="CONTENT">Glossary</a>
- <br>
+ <br />
<a href="99_PredefDTypes.html" TARGET="CONTENT">Predefined Datatypes</a>
- <br>
+ <br />
H4-to-H5 Mapping
- <br>
+ <br />
H5-to-H4 Mapping
- <br>
+ <br />
<a href="99_TechSupport.html" TARGET="CONTENT">Technical Support</a>
- <br>
+ <br />
</font>
-->
-<hr>
+<hr />
<!-- FOR USE WITH ELECTRONIC VERSION ----------------------------------->
<!-- <small><i>Printable
<a href="http://www.hdfgroup.org/HDF5/doc/PSandPDF/HDF5_UsersGuide.PDF" TARGET="CONTENT">PDF</a>
of this User’s Guide</i></small>
-<hr>
+<hr />
-->
<!-- FOR USE WITH ELECTRONIC VERSION ----------------------------------->
<div align="center">
<b>Other HDF5 documents</b>
</div>
-<br>
+<br />
-<a href="../index.html" TARGET="H5DocWin">Full HDF5 doc set</a> for<br>
+<a href="../index.html" TARGET="H5DocWin">Full HDF5 doc set</a> for<br />
- the current release<br>
+ the current release<br />
-<a href="../H5.intro.html" TARGET="H5DocWin"><cite>Introduction to HDF5</cite></a><br>
+<a href="../H5.intro.html" TARGET="H5DocWin"><cite>Introduction to HDF5</cite></a><br />
-<a href="../RM/RM_H5Front.html" TARGET="H5DocWin"><cite>HDF5 Reference</cite></a><br>
+<a href="../RM/RM_H5Front.html" TARGET="H5DocWin"><cite>HDF5 Reference</cite></a><br />
- <a href="../RM/RM_H5Front.html" TARGET="H5DocWin"><cite>Manual</cite></a><br>
+ <a href="../RM/RM_H5Front.html" TARGET="H5DocWin"><cite>Manual</cite></a><br />
-<a href="../H5.user.html" TARGET="H5DocWin"><cite>HDF5 Release 1.4.5</cite></a><br>
+<a href="../H5.user.html" TARGET="H5DocWin"><cite>HDF5 Release 1.4.5</cite></a><br />
<a href="../H5.user.html" TARGET="H5DocWin"><cite>User's Guide</cite></a>
-<hr>
+<hr />
</body>
</html>
diff --git a/html/UG/UG_nav13Attributes.html b/html/UG/UG_nav13Attributes.html
index 88c987d..59cbf5d 100755
--- a/html/UG/UG_nav13Attributes.html
+++ b/html/UG/UG_nav13Attributes.html
@@ -12,8 +12,8 @@
<IMG SRC="GRAPHICS/READ1ST.GIF" BORDER=0 ALT="Read this first!"></A>
-->
-<font size=-1>
-<br>
+<font size="-1">
+<br />
<!-- editingComment
<div align=right>
( <a href="UG_nav01.html">Expand TOC</a> )
@@ -21,249 +21,256 @@
-->
<a href="UG_front.html" TARGET="CONTENT">Title Page</a>
-<br>
+<br />
<a href="../Copyright.html" TARGET="CONTENT">Copyright</a>
<!-- editingComment
-<br>
+<br />
(<a href="../H5_UG_Outline.pdf" TARGET="CONTENT">Complete outline</a>)
-<br>
-<br>
+<br />
+<br />
(<a href="UG_feedback.html" TARGET="CONTENT">Feedback</a>)
-<br>
+<br />
(<a href="http://www.hdfgroup.uiuc.edu/HDF5/doc_dev_snapshot/index.html#H5_NewUG" TARGET="CONTENT">doc_dev_snapshot</a>)
-->
</font>
-<hr>
-<hr>
+<hr />
+<hr />
<!--
-<a href="UG_front.html" TARGET="CONTENT"><IMG SRC="GRAPHICS/COVER.GIF" BORDER=0 ALT="HDF5 UG title page"></a><br>
+<a href="UG_front.html" TARGET="CONTENT"><IMG SRC="GRAPHICS/COVER.GIF" BORDER=0 ALT="HDF5 UG title page"></a><br />
-->
<div align="center">
-<b>HDF5 User's Guide<br>Table of Contents</b>
- <br>
- <a href="UG_UpdateStatus.html" TARGET="CONTENT"><font size=-1><i>Update Status</i></font></a>
+<b>HDF5 User's Guide<br />Table of Contents</b>
+ <br />
+ <a href="UG_UpdateStatus.html" TARGET="CONTENT"><font size="-1"><i>Update Status</i></font></a>
</div>
<p>
<!-- editingComment
- <font color=#555555>
+ <font color="#555555">
<a href="01_Intro.html" TARGET="CONTENT">Introduction</a>
</font>
- <br>
+ <br />
-->
<b>I. The Broad View</b>
- <font color=#555555>
+ <font color="#555555">
<!-- editingComment
- <br>
+ <br />
<a href="02_WhatIs.html" TARGET="CONTENT">What is HDF5?</a>
-->
- <br>
+ <br />
<a href="UG_frame03DataModel.html" TARGET="_TOP">Data Model &</a>
- <br>
+ <br />
<a href="UG_frame03DataModel.html" TARGET="_TOP">File Structure</a>
- <br>
+ <br />
<a href="UG_frame04ProgModel.html" TARGET="_TOP">HDF5 Library &</a>
- <br>
+ <br />
<a href="UG_frame04ProgModel.html" TARGET="_TOP">Programming Model</a>
</font>
-<br>
-<b>II. Using HDF5 —<br>
+<br />
+<b>II. Using HDF5 —<br />
The Specifics</b>
- <font color=#555555>
- <br>
+ <font color="#555555">
+ <br />
<!-- editingComment
<a href="05_Quick.html" TARGET="CONTENT">Quick Start</a>
- <br>
+ <br />
<a href="06_Naming.html" TARGET="CONTENT">API Struture &</a>
- <br>
+ <br />
<a href="06_Naming.html" TARGET="CONTENT">Naming Conventions</a>
- <br>
+ <br />
<a href="07_DocSet.html" TARGET="CONTENT">Document Set</a>
- <br>
+ <br />
-->
<a href="UG_frame08TheFile.html" TARGET="_TOP">The File</a>
- <br>
+ <br />
<a href="UG_frame09Groups.html" TARGET="_TOP">Groups</a>
- <br>
+<!-- <a href="UG_frame09Groups.html" TARGET="_TOP">Groups and Links</a>
+-->
+ <br />
<a href="UG_frame10Datasets.html" TARGET="_TOP">Datasets</a>
- <br>
+ <br />
+<!--
+ <a href="UG_frameObjectsIdentifiers.html" TARGET="_TOP">Objects and
+ Identifiers</a>
+ <br />
+-->
<a href="UG_frame11Datatypes.html" TARGET="_TOP">Datatypes</a>
- <br>
+ <br />
<a href="UG_frame12Dataspaces.html" TARGET="_TOP">Dataspaces &</a>
- <br>
+ <br />
<a href="UG_frame12Dataspaces.html" TARGET="_TOP">Partial I/O</a>
- <br>
+ <br />
<a href="UG_frame13Attributes.html" TARGET="_TOP">Attributes</a>
<font size="-1">
- <br>
+ <br />
<a href="13_Attributes.html#Intro" TARGET="CONTENT">
Introduction</a>
- <br>
+ <br />
<a href="13_Attributes.html#Model" TARGET="CONTENT">
Programming Model</a>
- <br>
+ <br />
<a href="13_Attributes.html#Functions" TARGET="CONTENT">
Function Summaries</a>
- <br>
+ <br />
<a href="13_Attributes.html#Working1" TARGET="CONTENT">
Attribute Usage</a>
- <br>
+ <br />
<a href="13_Attributes.html#SpecIssues" TARGET="CONTENT">
Special Issues</a>
</font>
- <br>
+ <br />
<a href="UG_frame13ErrorHandling.html" TARGET="_TOP">Error Handling</a>
- <br>
+ <br />
<a href="UG_frame14PropertyLists.html" TARGET="_TOP">Property Lists</a>
<!--
- <br>
+ <br />
Images & Palettes
- <br>
+ <br />
Discarding Objects
- <br>
+ <br />
<a href="17_Filters.html" TARGET="CONTENT">Filters</a>
- <br>
+ <br />
Miscellaneous
-->
<!-- editingComment
- <br>
+ <br />
<a href="http://www.hdfgroup.uiuc.edu/HDF5/doc_dev_snapshot/H5_NewUG/DRAFTS/VFL-clip-020924DRAFT.pdf" TARGET="CONTENT">VFL</a> (early clip)
-->
</font>
<br />
<b>III. <a href="UG_frame17SpecialTopics.html" TARGET="_TOP">Additional Resources</a>
</b><br />
-<b>IV. <a href="http://www.hdfgroup.org/ftp/HDF5/examples/examples-by-api/"
+<b>IV. <a href="http://www.hdfgroup.org/HDF5/examples/"
TARGET="CONTENT">Code Examples</a></b><br />
- <font color=#555555>
+ <font color="#555555">
<!-- NEED TO WRITE PER CH, CREATE UG_frame18Performance.html, AND LINK IT IN
- <br>
+ <br />
<a href="UG_frame18Performance.html" TARGET="_TOP">Performance</a>
- <br>
+ <br />
<a href="UG_frame17SpecialTopics.html" TARGET="_TOP">Special Topics</a>
- <br>
- <a href="../ddl.html" TARGET="H5DocWin">DDL in BNF</a><br>
+ <br />
+ <a href="../ddl.html" TARGET="H5DocWin">DDL in BNF</a><br />
- <a href="../ddl.html" TARGET="H5DocWin">for HDF5</a><br>
+ <a href="../ddl.html" TARGET="H5DocWin">for HDF5</a><br />
- <a href="99_SelectedPassages.html" TARGET="CONTENT">Selected Passages</a><br>
- <br>
+ <a href="99_SelectedPassages.html" TARGET="CONTENT">Selected Passages</a><br />
+ <br />
Higher Levels
- <br>
+ <br />
<a href="20_Parallel.html" TARGET="CONTENT">Parallel Environments</a>
-->
<!-- editingComment
- <br>
+ <br />
Parallel Environments
- <br>
+ <br />
(in progress)
-->
<!--
- <br>
+ <br />
<a href="21_Perform.html" TARGET="CONTENT">Performance</a>
- <br>
+ <br />
Non-C Languages
-->
<!-- editingComment
- <br>
+ <br />
<a href="http://www.hdfgroup.uiuc.edu/HDF5/doc_dev_snapshot/H5_NewUG/DRAFTS/H5UG-Cpplus-001221.pdf" TARGET="CONTENT">C++ User Notes</a>
-->
<!--
- <br>
+ <br />
<a href="23_DDL.html" TARGET="CONTENT">DDL in BNF</a>
- <br>
+ <br />
<a href="24_XML-DTD.html" TARGET="CONTENT">XML DTD</a>
-->
</font>
<!--
-<br>
+<br />
<b>IV. Tools</b>
- <font color=#555555>
- <br>
+ <font color="#555555">
+ <br />
<a href="xx_xxx.html" TARGET="CONTENT">h5ls</a>
- <br>
+ <br />
<a href="xx_xxx.html" TARGET="CONTENT">h5dump</a>
- <br>
+ <br />
<a href="xx_xxx.html" TARGET="CONTENT">h5repart</a>
- <br>
+ <br />
<a href="xx_xxx.html" TARGET="CONTENT">h5toh4</a>
- <br>
+ <br />
<a href="xx_xxx.html" TARGET="CONTENT">h4toh5</a>
- <br>
+ <br />
<a href="xx_xxx.html" TARGET="CONTENT">Java Tools</a>
- <br>
+ <br />
<a href="xx_xxx.html" TARGET="CONTENT">XML Tools</a>
</font>
-->
<!--
-<br>
+<br />
<b>Appendices</b>
- <font color=#555555>
- <br>
+ <font color="#555555">
+ <br />
<a href="99_Glossary.html" TARGET="CONTENT">Glossary</a>
- <br>
+ <br />
<a href="99_Glossary.html" TARGET="CONTENT">Glossary</a>
- <br>
+ <br />
<a href="99_PredefDTypes.html" TARGET="CONTENT">Predefined Datatypes</a>
- <br>
+ <br />
H4-to-H5 Mapping
- <br>
+ <br />
H5-to-H4 Mapping
- <br>
+ <br />
<a href="99_TechSupport.html" TARGET="CONTENT">Technical Support</a>
- <br>
+ <br />
</font>
-->
-<hr>
+<hr />
<!-- FOR USE WITH ELECTRONIC VERSION ----------------------------------->
<!-- <small><i>Printable
<a href="http://www.hdfgroup.org/HDF5/doc/PSandPDF/HDF5_UsersGuide.PDF" TARGET="CONTENT">PDF</a>
of this User’s Guide</i></small>
-<hr>
+<hr />
-->
<!-- FOR USE WITH ELECTRONIC VERSION ----------------------------------->
<div align="center">
<b>Other HDF5 documents</b>
</div>
-<br>
+<br />
-<a href="../index.html" TARGET="H5DocWin">Full HDF5 doc set</a> for<br>
+<a href="../index.html" TARGET="H5DocWin">Full HDF5 doc set</a> for<br />
- the current release<br>
+ the current release<br />
-<a href="../H5.intro.html" TARGET="H5DocWin"><cite>Introduction to HDF5</cite></a><br>
+<a href="../H5.intro.html" TARGET="H5DocWin"><cite>Introduction to HDF5</cite></a><br />
-<a href="../RM/RM_H5Front.html" TARGET="H5DocWin"><cite>HDF5 Reference</cite></a><br>
+<a href="../RM/RM_H5Front.html" TARGET="H5DocWin"><cite>HDF5 Reference</cite></a><br />
- <a href="../RM/RM_H5Front.html" TARGET="H5DocWin"><cite>Manual</cite></a><br>
+ <a href="../RM/RM_H5Front.html" TARGET="H5DocWin"><cite>Manual</cite></a><br />
-<a href="../H5.user.html" TARGET="H5DocWin"><cite>HDF5 Release 1.4.5</cite></a><br>
+<a href="../H5.user.html" TARGET="H5DocWin"><cite>HDF5 Release 1.4.5</cite></a><br />
<a href="../H5.user.html" TARGET="H5DocWin"><cite>User's Guide</cite></a>
-<hr>
+<hr />
</body>
</html>
diff --git a/html/UG/UG_nav13ErrorHandling.html b/html/UG/UG_nav13ErrorHandling.html
index a5f26ad..948cba8 100755
--- a/html/UG/UG_nav13ErrorHandling.html
+++ b/html/UG/UG_nav13ErrorHandling.html
@@ -12,8 +12,8 @@
<IMG SRC="GRAPHICS/READ1ST.GIF" BORDER=0 ALT="Read this first!"></A>
-->
-<font size=-1>
-<br>
+<font size="-1">
+<br />
<!-- editingComment
<div align=right>
( <a href="UG_nav01.html">Expand TOC</a> )
@@ -21,258 +21,265 @@
-->
<a href="UG_front.html" TARGET="CONTENT">Title Page</a>
-<br>
+<br />
<a href="../Copyright.html" TARGET="CONTENT">Copyright</a>
<!-- editingComment
-<br>
+<br />
(<a href="../H5_UG_Outline.pdf" TARGET="CONTENT">Complete outline</a>)
-<br>
-<br>
+<br />
+<br />
(<a href="UG_feedback.html" TARGET="CONTENT">Feedback</a>)
-<br>
+<br />
(<a href="http://www.hdfgroup.uiuc.edu/HDF5/doc_dev_snapshot/index.html#H5_NewUG" TARGET="CONTENT">doc_dev_snapshot</a>)
-->
</font>
-<hr>
-<hr>
+<hr />
+<hr />
<!--
-<a href="UG_front.html" TARGET="CONTENT"><IMG SRC="GRAPHICS/COVER.GIF" BORDER=0 ALT="HDF5 UG title page"></a><br>
+<a href="UG_front.html" TARGET="CONTENT"><IMG SRC="GRAPHICS/COVER.GIF" BORDER=0 ALT="HDF5 UG title page"></a><br />
-->
<div align="center">
-<b>HDF5 User's Guide<br>Table of Contents</b>
- <br>
- <a href="UG_UpdateStatus.html" TARGET="CONTENT"><font size=-1><i>Update Status</i></font></a>
+<b>HDF5 User's Guide<br />Table of Contents</b>
+ <br />
+ <a href="UG_UpdateStatus.html" TARGET="CONTENT"><font size="-1"><i>Update Status</i></font></a>
</div>
<p>
<!-- editingComment
- <font color=#555555>
+ <font color="#555555">
<a href="01_Intro.html" TARGET="CONTENT">Introduction</a>
</font>
- <br>
+ <br />
-->
<b>I. The Broad View</b>
- <font color=#555555>
+ <font color="#555555">
<!-- editingComment
- <br>
+ <br />
<a href="02_WhatIs.html" TARGET="CONTENT">What is HDF5?</a>
-->
- <br>
+ <br />
<a href="UG_frame03DataModel.html" TARGET="_TOP">Data Model &</a>
- <br>
+ <br />
<a href="UG_frame03DataModel.html" TARGET="_TOP">File Structure</a>
- <br>
+ <br />
<a href="UG_frame04ProgModel.html" TARGET="_TOP">HDF5 Library &</a>
- <br>
+ <br />
<a href="UG_frame04ProgModel.html" TARGET="_TOP">Programming Model</a>
</font>
-<br>
-<b>II. Using HDF5 —<br>
+<br />
+<b>II. Using HDF5 —<br />
The Specifics</b>
- <font color=#555555>
- <br>
+ <font color="#555555">
+ <br />
<!-- editingComment
<a href="05_Quick.html" TARGET="CONTENT">Quick Start</a>
- <br>
+ <br />
<a href="06_Naming.html" TARGET="CONTENT">API Struture &</a>
- <br>
+ <br />
<a href="06_Naming.html" TARGET="CONTENT">Naming Conventions</a>
- <br>
+ <br />
<a href="07_DocSet.html" TARGET="CONTENT">Document Set</a>
- <br>
+ <br />
-->
<a href="UG_frame08TheFile.html" TARGET="_TOP">The File</a>
- <br>
+ <br />
<a href="UG_frame09Groups.html" TARGET="_TOP">Groups</a>
- <br>
+<!-- <a href="UG_frame09Groups.html" TARGET="_TOP">Groups and Links</a>
+-->
+ <br />
<a href="UG_frame10Datasets.html" TARGET="_TOP">Datasets</a>
- <br>
+ <br />
+<!--
+ <a href="UG_frameObjectsIdentifiers.html" TARGET="_TOP">Objects and
+ Identifiers</a>
+ <br />
+-->
<a href="UG_frame11Datatypes.html" TARGET="_TOP">Datatypes</a>
- <br>
+ <br />
<a href="UG_frame12Dataspaces.html" TARGET="_TOP">Dataspaces &</a>
- <br>
+ <br />
<a href="UG_frame12Dataspaces.html" TARGET="_TOP">Partial I/O</a>
- <br>
+ <br />
<a href="UG_frame13Attributes.html" TARGET="_TOP">Attributes</a>
- <br>
+ <br />
<a href="UG_frame13ErrorHandling.html" TARGET="_TOP">Error Handling</a>
<font size="-1">
- <br>
+ <br />
<a href="13_ErrorHandling.html#Intro" TARGET="CONTENT">
Introduction</a>
- <br>
+ <br />
<a href="13_ErrorHandling.html#ProgModel" TARGET="CONTENT">
Programming Model</a>
- <br>
+ <br />
<a href="13_ErrorHandling.html#ErrorHandling" TARGET="CONTENT">
Error Handling (H5E)</a>
- <br>
+ <br />
<a href="13_ErrorHandling.html#ErrorHandling" TARGET="CONTENT">
Function Summaries</a>
- <br>
+ <br />
<a href="13_ErrorHandling.html#BasicErrorHandling" TARGET="CONTENT">
Basic Error Handling</a>
- <br>
+ <br />
<a href="13_ErrorHandling.html#BasicErrorHandling" TARGET="CONTENT">
Operations</a>
- <br>
+ <br />
<a href="13_ErrorHandling.html#AdvancedErrorHandling" TARGET="CONTENT">
Advanced Error Handling</a>
- <br>
+ <br />
<a href="13_ErrorHandling.html#AdvancedErrorHandling" TARGET="CONTENT">
Operations</a>
</font>
- <br>
+ <br />
<a href="UG_frame14PropertyLists.html" TARGET="_TOP">Property Lists</a>
<!--
- <br>
+ <br />
Images & Palettes
- <br>
+ <br />
Discarding Objects
- <br>
+ <br />
<a href="17_Filters.html" TARGET="CONTENT">Filters</a>
- <br>
+ <br />
Miscellaneous
-->
<!-- editingComment
- <br>
+ <br />
<a href="http://www.hdfgroup.uiuc.edu/HDF5/doc_dev_snapshot/H5_NewUG/DRAFTS/VFL-clip-020924DRAFT.pdf" TARGET="CONTENT">VFL</a> (early clip)
-->
</font>
<br />
<b>III. <a href="UG_frame17SpecialTopics.html" TARGET="_TOP">Additional Resources</a>
</b><br />
-<b>IV. <a href="http://www.hdfgroup.org/ftp/HDF5/examples/examples-by-api/"
+<b>IV. <a href="http://www.hdfgroup.org/HDF5/examples/"
TARGET="CONTENT">Code Examples</a></b><br />
- <font color=#555555>
+ <font color="#555555">
<!-- NEED TO WRITE PER CH, CREATE UG_frame18Performance.html, AND LINK IT IN
- <br>
+ <br />
<a href="UG_frame18Performance.html" TARGET="_TOP">Performance</a>
- <br>
+ <br />
<a href="UG_frame17SpecialTopics.html" TARGET="_TOP">Special Topics</a>
- <br>
- <a href="../ddl.html" TARGET="H5DocWin">DDL in BNF</a><br>
+ <br />
+ <a href="../ddl.html" TARGET="H5DocWin">DDL in BNF</a><br />
- <a href="../ddl.html" TARGET="H5DocWin">for HDF5</a><br>
+ <a href="../ddl.html" TARGET="H5DocWin">for HDF5</a><br />
- <a href="99_SelectedPassages.html" TARGET="CONTENT">Selected Passages</a><br>
- <br>
+ <a href="99_SelectedPassages.html" TARGET="CONTENT">Selected Passages</a><br />
+ <br />
Higher Levels
- <br>
+ <br />
<a href="20_Parallel.html" TARGET="CONTENT">Parallel Environments</a>
-->
<!-- editingComment
- <br>
+ <br />
Parallel Environments
- <br>
+ <br />
(in progress)
-->
<!--
- <br>
+ <br />
<a href="21_Perform.html" TARGET="CONTENT">Performance</a>
- <br>
+ <br />
Non-C Languages
-->
<!-- editingComment
- <br>
+ <br />
<a href="http://www.hdfgroup.uiuc.edu/HDF5/doc_dev_snapshot/H5_NewUG/DRAFTS/H5UG-Cpplus-001221.pdf" TARGET="CONTENT">C++ User Notes</a>
-->
<!--
- <br>
+ <br />
<a href="23_DDL.html" TARGET="CONTENT">DDL in BNF</a>
- <br>
+ <br />
<a href="24_XML-DTD.html" TARGET="CONTENT">XML DTD</a>
-->
</font>
<!--
-<br>
+<br />
<b>IV. Tools</b>
- <font color=#555555>
- <br>
+ <font color="#555555">
+ <br />
<a href="xx_xxx.html" TARGET="CONTENT">h5ls</a>
- <br>
+ <br />
<a href="xx_xxx.html" TARGET="CONTENT">h5dump</a>
- <br>
+ <br />
<a href="xx_xxx.html" TARGET="CONTENT">h5repart</a>
- <br>
+ <br />
<a href="xx_xxx.html" TARGET="CONTENT">h5toh4</a>
- <br>
+ <br />
<a href="xx_xxx.html" TARGET="CONTENT">h4toh5</a>
- <br>
+ <br />
<a href="xx_xxx.html" TARGET="CONTENT">Java Tools</a>
- <br>
+ <br />
<a href="xx_xxx.html" TARGET="CONTENT">XML Tools</a>
</font>
-->
<!--
-<br>
+<br />
<b>Appendices</b>
- <font color=#555555>
- <br>
+ <font color="#555555">
+ <br />
<a href="99_Glossary.html" TARGET="CONTENT">Glossary</a>
- <br>
+ <br />
<a href="99_Glossary.html" TARGET="CONTENT">Glossary</a>
- <br>
+ <br />
<a href="99_PredefDTypes.html" TARGET="CONTENT">Predefined Datatypes</a>
- <br>
+ <br />
H4-to-H5 Mapping
- <br>
+ <br />
H5-to-H4 Mapping
- <br>
+ <br />
<a href="99_TechSupport.html" TARGET="CONTENT">Technical Support</a>
- <br>
+ <br />
</font>
-->
-<hr>
+<hr />
<!-- FOR USE WITH ELECTRONIC VERSION ----------------------------------->
<!-- <small><i>Printable
<a href="http://www.hdfgroup.org/HDF5/doc/PSandPDF/HDF5_UsersGuide.PDF" TARGET="CONTENT">PDF</a>
of this User’s Guide</i></small>
-<hr>
+<hr />
-->
<!-- FOR USE WITH ELECTRONIC VERSION ----------------------------------->
<div align="center">
<b>Other HDF5 documents</b>
</div>
-<br>
+<br />
-<a href="../index.html" TARGET="H5DocWin">Full HDF5 doc set</a> for<br>
+<a href="../index.html" TARGET="H5DocWin">Full HDF5 doc set</a> for<br />
- the current release<br>
+ the current release<br />
-<a href="../H5.intro.html" TARGET="H5DocWin"><cite>Introduction to HDF5</cite></a><br>
+<a href="../H5.intro.html" TARGET="H5DocWin"><cite>Introduction to HDF5</cite></a><br />
-<a href="../RM/RM_H5Front.html" TARGET="H5DocWin"><cite>HDF5 Reference</cite></a><br>
+<a href="../RM/RM_H5Front.html" TARGET="H5DocWin"><cite>HDF5 Reference</cite></a><br />
- <a href="../RM/RM_H5Front.html" TARGET="H5DocWin"><cite>Manual</cite></a><br>
+ <a href="../RM/RM_H5Front.html" TARGET="H5DocWin"><cite>Manual</cite></a><br />
-<a href="../H5.user.html" TARGET="H5DocWin"><cite>HDF5 Release 1.4.5</cite></a><br>
+<a href="../H5.user.html" TARGET="H5DocWin"><cite>HDF5 Release 1.4.5</cite></a><br />
<a href="../H5.user.html" TARGET="H5DocWin"><cite>User's Guide</cite></a>
-<hr>
+<hr />
</body>
</html>
diff --git a/html/UG/UG_nav14PropertyLists.html b/html/UG/UG_nav14PropertyLists.html
index ea5ed4a..5c4668b 100755
--- a/html/UG/UG_nav14PropertyLists.html
+++ b/html/UG/UG_nav14PropertyLists.html
@@ -12,8 +12,8 @@
<IMG SRC="GRAPHICS/READ1ST.GIF" BORDER=0 ALT="Read this first!"></A>
-->
-<font size=-1>
-<br>
+<font size="-1">
+<br />
<!-- editingComment
<div align=right>
( <a href="UG_nav01.html">Expand TOC</a> )
@@ -21,264 +21,263 @@
-->
<a href="UG_front.html" TARGET="CONTENT">Title Page</a>
-<br>
+<br />
<a href="../Copyright.html" TARGET="CONTENT">Copyright</a>
<!-- editingComment
-<br>
+<br />
(<a href="../H5_UG_Outline.pdf" TARGET="CONTENT">Complete outline</a>)
-<br>
-<br>
+<br />
+<br />
(<a href="UG_feedback.html" TARGET="CONTENT">Feedback</a>)
-<br>
+<br />
(<a href="http://www.hdfgroup.uiuc.edu/HDF5/doc_dev_snapshot/index.html#H5_NewUG" TARGET="CONTENT">doc_dev_snapshot</a>)
-->
</font>
-<hr>
-<hr>
+<hr />
+<hr />
<!--
-<a href="UG_front.html" TARGET="CONTENT"><IMG SRC="GRAPHICS/COVER.GIF" BORDER=0 ALT="HDF5 UG title page"></a><br>
+<a href="UG_front.html" TARGET="CONTENT"><IMG SRC="GRAPHICS/COVER.GIF" BORDER=0 ALT="HDF5 UG title page"></a><br />
-->
<div align="center">
-<b>HDF5 User's Guide<br>Table of Contents</b>
- <br>
- <a href="UG_UpdateStatus.html" TARGET="CONTENT"><font size=-1><i>Update Status</i></font></a>
+<b>HDF5 User's Guide<br />Table of Contents</b>
+ <br />
+ <a href="UG_UpdateStatus.html" TARGET="CONTENT"><font size="-1"><i>Update Status</i></font></a>
</div>
<p>
<!-- editingComment
- <font color=#555555>
+ <font color="#555555">
<a href="01_Intro.html" TARGET="CONTENT">Introduction</a>
</font>
- <br>
+ <br />
-->
<b>I. The Broad View</b>
- <font color=#555555>
+ <font color="#555555">
<!-- editingComment
- <br>
+ <br />
<a href="02_WhatIs.html" TARGET="CONTENT">What is HDF5?</a>
-->
- <br>
+ <br />
<a href="UG_frame03DataModel.html" TARGET="_TOP">Data Model &</a>
- <br>
+ <br />
<a href="UG_frame03DataModel.html" TARGET="_TOP">File Structure</a>
- <br>
+ <br />
<a href="UG_frame04ProgModel.html" TARGET="_TOP">HDF5 Library &</a>
- <br>
+ <br />
<a href="UG_frame04ProgModel.html" TARGET="_TOP">Programming Model</a>
</font>
-<br>
-<b>II. Using HDF5 —<br>
+<br />
+<b>II. Using HDF5 —<br />
The Specifics</b>
- <font color=#555555>
- <br>
+ <font color="#555555">
+ <br />
<!-- editingComment
<a href="05_Quick.html" TARGET="CONTENT">Quick Start</a>
- <br>
+ <br />
<a href="06_Naming.html" TARGET="CONTENT">API Struture &</a>
- <br>
+ <br />
<a href="06_Naming.html" TARGET="CONTENT">Naming Conventions</a>
- <br>
+ <br />
<a href="07_DocSet.html" TARGET="CONTENT">Document Set</a>
- <br>
+ <br />
-->
<a href="UG_frame08TheFile.html" TARGET="_TOP">The File</a>
- <br>
+ <br />
<a href="UG_frame09Groups.html" TARGET="_TOP">Groups</a>
- <br>
+<!-- <a href="UG_frame09Groups.html" TARGET="_TOP">Groups and Links</a>
+-->
+ <br />
<a href="UG_frame10Datasets.html" TARGET="_TOP">Datasets</a>
- <br>
+ <br />
<!--
<a href="UG_frameObjectsIdentifiers.html" TARGET="_TOP">Objects and
Identifiers</a>
- <br>
- <font size="-1">
- <i>(unpublished)</i></font>
- <br>
+ <br />
-->
<a href="UG_frame11Datatypes.html" TARGET="_TOP">Datatypes</a>
- <br>
+ <br />
<a href="UG_frame12Dataspaces.html" TARGET="_TOP">Dataspaces &</a>
- <br>
+ <br />
<a href="UG_frame12Dataspaces.html" TARGET="_TOP">Partial I/O</a>
- <br>
+ <br />
<a href="UG_frame13Attributes.html" TARGET="_TOP">Attributes</a>
- <br>
+ <br />
<a href="UG_frame13ErrorHandling.html" TARGET="_TOP">Error Handling</a>
- <br>
+ <br />
<a href="UG_frame14PropertyLists.html" TARGET="_TOP">Property Lists</a>
<font size="-1">
- <br>
+ <br />
<a href="14_PropertyLists.html#Intro" TARGET="CONTENT">
Introduction</a>
- <br>
+ <br />
<a href="14_PropertyLists.html#PListHierarchy" TARGET="CONTENT">
Properties, Lists, & Classes</a>
- <br>
+ <br />
<a href="14_PropertyLists.html#ProgModel" TARGET="CONTENT">
Programming Model</a>
- <br>
+ <br />
<a href="14_PropertyLists.html#GenericPLists" TARGET="CONTENT">
- Generic Operation &</a>
- <br>
+ Generic Operations &</a>
+ <br />
<a href="14_PropertyLists.html#GenericPLists" TARGET="CONTENT">
User-defined Properties</a>
- <br>
+ <br />
<a href="14_PropertyLists.html#FunctionSumms" TARGET="CONTENT">
Function Summaries</a>
- <br>
+ <br />
<a href="14_PropertyLists.html#AddlPListResources" TARGET="CONTENT">
Additional Resources</a>
</font>
<!--
- <br>
+ <br />
Images & Palettes
- <br>
+ <br />
Discarding Objects
- <br>
+ <br />
<a href="17_Filters.html" TARGET="CONTENT">Filters</a>
- <br>
+ <br />
Miscellaneous
-->
<!-- editingComment
- <br>
+ <br />
<a href="http://www.hdfgroup.uiuc.edu/HDF5/doc_dev_snapshot/H5_NewUG/DRAFTS/VFL-clip-020924DRAFT.pdf" TARGET="CONTENT">VFL</a> (early clip)
-->
</font>
<br />
<b>III. <a href="UG_frame17SpecialTopics.html" TARGET="_TOP">Additional Resources</a>
</b><br />
-<b>IV. <a href="http://www.hdfgroup.org/ftp/HDF5/examples/examples-by-api/"
+<b>IV. <a href="http://www.hdfgroup.org/HDF5/examples/"
TARGET="CONTENT">Code Examples</a></b><br />
- <font color=#555555>
+ <font color="#555555">
<!-- NEED TO WRITE PER CH, CREATE UG_frame18Performance.html, AND LINK IT IN
- <br>
+ <br />
<a href="UG_frame18Performance.html" TARGET="_TOP">Performance</a>
- <br>
+ <br />
<a href="UG_frame17SpecialTopics.html" TARGET="_TOP">Special Topics</a>
- <br>
- <a href="../ddl.html" TARGET="H5DocWin">DDL in BNF</a><br>
+ <br />
+ <a href="../ddl.html" TARGET="H5DocWin">DDL in BNF</a><br />
- <a href="../ddl.html" TARGET="H5DocWin">for HDF5</a><br>
+ <a href="../ddl.html" TARGET="H5DocWin">for HDF5</a><br />
- <a href="99_SelectedPassages.html" TARGET="CONTENT">Selected Passages</a><br>
- <br>
+ <a href="99_SelectedPassages.html" TARGET="CONTENT">Selected Passages</a><br />
+ <br />
Higher Levels
- <br>
+ <br />
<a href="20_Parallel.html" TARGET="CONTENT">Parallel Environments</a>
-->
<!-- editingComment
- <br>
+ <br />
Parallel Environments
- <br>
+ <br />
(in progress)
-->
<!--
- <br>
+ <br />
<a href="21_Perform.html" TARGET="CONTENT">Performance</a>
- <br>
+ <br />
Non-C Languages
-->
<!-- editingComment
- <br>
+ <br />
<a href="http://www.hdfgroup.uiuc.edu/HDF5/doc_dev_snapshot/H5_NewUG/DRAFTS/H5UG-Cpplus-001221.pdf" TARGET="CONTENT">C++ User Notes</a>
-->
<!--
- <br>
+ <br />
<a href="23_DDL.html" TARGET="CONTENT">DDL in BNF</a>
- <br>
+ <br />
<a href="24_XML-DTD.html" TARGET="CONTENT">XML DTD</a>
-->
</font>
<!--
-<br>
+<br />
<b>IV. Tools</b>
- <font color=#555555>
- <br>
+ <font color="#555555">
+ <br />
<a href="xx_xxx.html" TARGET="CONTENT">h5ls</a>
- <br>
+ <br />
<a href="xx_xxx.html" TARGET="CONTENT">h5dump</a>
- <br>
+ <br />
<a href="xx_xxx.html" TARGET="CONTENT">h5repart</a>
- <br>
+ <br />
<a href="xx_xxx.html" TARGET="CONTENT">h5toh4</a>
- <br>
+ <br />
<a href="xx_xxx.html" TARGET="CONTENT">h4toh5</a>
- <br>
+ <br />
<a href="xx_xxx.html" TARGET="CONTENT">Java Tools</a>
- <br>
+ <br />
<a href="xx_xxx.html" TARGET="CONTENT">XML Tools</a>
</font>
-->
<!--
-<br>
+<br />
<b>Appendices</b>
- <font color=#555555>
- <br>
+ <font color="#555555">
+ <br />
<a href="99_Glossary.html" TARGET="CONTENT">Glossary</a>
- <br>
+ <br />
<a href="99_Glossary.html" TARGET="CONTENT">Glossary</a>
- <br>
+ <br />
<a href="99_PredefDTypes.html" TARGET="CONTENT">Predefined Datatypes</a>
- <br>
+ <br />
H4-to-H5 Mapping
- <br>
+ <br />
H5-to-H4 Mapping
- <br>
+ <br />
<a href="99_TechSupport.html" TARGET="CONTENT">Technical Support</a>
- <br>
+ <br />
</font>
-->
-<hr>
+<hr />
<!-- FOR USE WITH ELECTRONIC VERSION ----------------------------------->
<!-- <small><i>Printable
<a href="http://www.hdfgroup.org/HDF5/doc/PSandPDF/HDF5_UsersGuide.PDF" TARGET="CONTENT">PDF</a>
of this User’s Guide</i></small>
-<hr>
+<hr />
-->
<!-- FOR USE WITH ELECTRONIC VERSION ----------------------------------->
<div align="center">
<b>Other HDF5 documents</b>
</div>
-<br>
+<br />
-<a href="../index.html" TARGET="H5DocWin">Full HDF5 doc set</a> for<br>
+<a href="../index.html" TARGET="H5DocWin">Full HDF5 doc set</a> for<br />
- the current release<br>
+ the current release<br />
-<a href="../H5.intro.html" TARGET="H5DocWin"><cite>Introduction to HDF5</cite></a><br>
+<a href="../H5.intro.html" TARGET="H5DocWin"><cite>Introduction to HDF5</cite></a><br />
-<a href="../RM/RM_H5Front.html" TARGET="H5DocWin"><cite>HDF5 Reference</cite></a><br>
+<a href="../RM/RM_H5Front.html" TARGET="H5DocWin"><cite>HDF5 Reference</cite></a><br />
- <a href="../RM/RM_H5Front.html" TARGET="H5DocWin"><cite>Manual</cite></a><br>
+ <a href="../RM/RM_H5Front.html" TARGET="H5DocWin"><cite>Manual</cite></a><br />
-<a href="../H5.user.html" TARGET="H5DocWin"><cite>HDF5 Release 1.4.5</cite></a><br>
+<a href="../H5.user.html" TARGET="H5DocWin"><cite>HDF5 Release 1.4.5</cite></a><br />
<a href="../H5.user.html" TARGET="H5DocWin"><cite>User's Guide</cite></a>
-<hr>
+<hr />
</body>
</html>
diff --git a/html/UG/UG_nav17SpecialTopics.html b/html/UG/UG_nav17SpecialTopics.html
index 000627d..2b1d16b 100755
--- a/html/UG/UG_nav17SpecialTopics.html
+++ b/html/UG/UG_nav17SpecialTopics.html
@@ -12,8 +12,8 @@
<IMG SRC="GRAPHICS/READ1ST.GIF" BORDER=0 ALT="Read this first!"></A>
-->
-<font size=-1>
-<br>
+<font size="-1">
+<br />
<!-- editingComment
<div align=right>
( <a href="UG_nav01.html">Expand TOC</a> )
@@ -21,240 +21,247 @@
-->
<a href="UG_front.html" TARGET="CONTENT">Title Page</a>
-<br>
+<br />
<a href="../Copyright.html" TARGET="CONTENT">Copyright</a>
<!-- editingComment
-<br>
+<br />
(<a href="../H5_UG_Outline.pdf" TARGET="CONTENT">Complete outline</a>)
-<br>
-<br>
+<br />
+<br />
(<a href="UG_feedback.html" TARGET="CONTENT">Feedback</a>)
-<br>
+<br />
(<a href="http://www.hdfgroup.uiuc.edu/HDF5/doc_dev_snapshot/index.html#H5_NewUG" TARGET="CONTENT">doc_dev_snapshot</a>)
-->
</font>
-<hr>
-<hr>
+<hr />
+<hr />
<!--
-<a href="UG_front.html" TARGET="CONTENT"><IMG SRC="GRAPHICS/COVER.GIF" BORDER=0 ALT="HDF5 UG title page"></a><br>
+<a href="UG_front.html" TARGET="CONTENT"><IMG SRC="GRAPHICS/COVER.GIF" BORDER=0 ALT="HDF5 UG title page"></a><br />
-->
<div align="center">
-<b>HDF5 User's Guide<br>Table of Contents</b>
- <br>
- <a href="UG_UpdateStatus.html" TARGET="CONTENT"><font size=-1><i>Update Status</i></font></a>
+<b>HDF5 User's Guide<br />Table of Contents</b>
+ <br />
+ <a href="UG_UpdateStatus.html" TARGET="CONTENT"><font size="-1"><i>Update Status</i></font></a>
</div>
<p>
<!-- editingComment
- <font color=#555555>
+ <font color="#555555">
<a href="01_Intro.html" TARGET="CONTENT">Introduction</a>
</font>
- <br>
+ <br />
-->
<b>I. The Broad View</b>
- <font color=#555555>
+ <font color="#555555">
<!-- editingComment
- <br>
+ <br />
<a href="02_WhatIs.html" TARGET="CONTENT">What is HDF5?</a>
-->
- <br>
+ <br />
<a href="UG_frame03DataModel.html" TARGET="_TOP">Data Model &</a>
- <br>
+ <br />
<a href="UG_frame03DataModel.html" TARGET="_TOP">File Structure</a>
- <br>
+ <br />
<a href="UG_frame04ProgModel.html" TARGET="_TOP">HDF5 Library &</a>
- <br>
+ <br />
<a href="UG_frame04ProgModel.html" TARGET="_TOP">Programming Model</a>
</font>
-<br>
-<b>II. Using HDF5 —<br>
+<br />
+<b>II. Using HDF5 —<br />
The Specifics</b>
- <font color=#555555>
- <br>
+ <font color="#555555">
+ <br />
<!-- editingComment
<a href="05_Quick.html" TARGET="CONTENT">Quick Start</a>
- <br>
+ <br />
<a href="06_Naming.html" TARGET="CONTENT">API Struture &</a>
- <br>
+ <br />
<a href="06_Naming.html" TARGET="CONTENT">Naming Conventions</a>
- <br>
+ <br />
<a href="07_DocSet.html" TARGET="CONTENT">Document Set</a>
- <br>
+ <br />
-->
<a href="UG_frame08TheFile.html" TARGET="_TOP">The File</a>
- <br>
+ <br />
<a href="UG_frame09Groups.html" TARGET="_TOP">Groups</a>
- <br>
+<!-- <a href="UG_frame09Groups.html" TARGET="_TOP">Groups and Links</a>
+-->
+ <br />
<a href="UG_frame10Datasets.html" TARGET="_TOP">Datasets</a>
- <br>
+ <br />
+<!--
+ <a href="UG_frameObjectsIdentifiers.html" TARGET="_TOP">Objects and
+ Identifiers</a>
+ <br />
+-->
<a href="UG_frame11Datatypes.html" TARGET="_TOP">Datatypes</a>
- <br>
+ <br />
<a href="UG_frame12Dataspaces.html" TARGET="_TOP">Dataspaces &</a>
- <br>
+ <br />
<a href="UG_frame12Dataspaces.html" TARGET="_TOP">Partial I/O</a>
- <br>
+ <br />
<a href="UG_frame13Attributes.html" TARGET="_TOP">Attributes</a>
- <br>
+ <br />
<a href="UG_frame13ErrorHandling.html" TARGET="_TOP">Error Handling</a>
- <br>
+ <br />
<a href="UG_frame14PropertyLists.html" TARGET="_TOP">Property Lists</a>
<!--
- <br>
+ <br />
Images & Palettes
- <br>
+ <br />
Discarding Objects
- <br>
+ <br />
<a href="17_Filters.html" TARGET="CONTENT">Filters</a>
- <br>
+ <br />
Miscellaneous
-->
<!-- editingComment
- <br>
+ <br />
<a href="http://www.hdfgroup.uiuc.edu/HDF5/doc_dev_snapshot/H5_NewUG/DRAFTS/VFL-clip-020924DRAFT.pdf" TARGET="CONTENT">VFL</a> (early clip)
-->
</font>
<br />
<b>III. <a href="UG_frame17SpecialTopics.html" TARGET="_TOP">Additional Resources</a>
</b><br />
-<b>IV. <a href="http://www.hdfgroup.org/ftp/HDF5/examples/examples-by-api/"
+<b>IV. <a href="http://www.hdfgroup.org/HDF5/examples/"
TARGET="CONTENT">Code Examples</a></b><br />
- <font color=#555555>
+ <font color="#555555">
<!-- NEED TO WRITE PER CH, CREATE UG_frame18Performance.html, AND LINK IT IN
- <br>
+ <br />
<a href="UG_frame18Performance.html" TARGET="_TOP">Performance</a>
- <br>
+ <br />
<a href="UG_frame17SpecialTopics.html" TARGET="_TOP">Special Topics</a>
<font size="-1">
- <br>
+ <br />
<a href="17_SpecialTopics.html#Intro" TARGET="CONTENT">
Introduction</a>
- <br>
+ <br />
<a href="17_SpecialTopics.html#NBitDatatype" TARGET="CONTENT">
N-Bit Datatype</a>
- <br>
+ <br />
<a href="17_SpecialTopics.html#ScaleOffsetFilter" TARGET="CONTENT">
Scale-Offset Filter</a>
-->
<!--
- <a href="99_SelectedPassages.html" TARGET="CONTENT">Selected Passages</a><br>
- <br>
+ <a href="99_SelectedPassages.html" TARGET="CONTENT">Selected Passages</a><br />
+ <br />
Higher Levels
- <br>
+ <br />
<a href="20_Parallel.html" TARGET="CONTENT">Parallel Environments</a>
-->
<!-- editingComment
- <br>
+ <br />
Parallel Environments
- <br>
+ <br />
(in progress)
-->
<!--
- <br>
+ <br />
<a href="21_Perform.html" TARGET="CONTENT">Performance</a>
- <br>
+ <br />
Non-C Languages
-->
<!-- editingComment
- <br>
+ <br />
<a href="http://www.hdfgroup.uiuc.edu/HDF5/doc_dev_snapshot/H5_NewUG/DRAFTS/H5UG-Cpplus-001221.pdf" TARGET="CONTENT">C++ User Notes</a>
-->
<!--
- <br>
+ <br />
<a href="23_DDL.html" TARGET="CONTENT">DDL in BNF</a>
- <br>
+ <br />
<a href="24_XML-DTD.html" TARGET="CONTENT">XML DTD</a>
-->
</font>
<!--
-<br>
+<br />
<b>IV. Tools</b>
- <font color=#555555>
- <br>
+ <font color="#555555">
+ <br />
<a href="xx_xxx.html" TARGET="CONTENT">h5ls</a>
- <br>
+ <br />
<a href="xx_xxx.html" TARGET="CONTENT">h5dump</a>
- <br>
+ <br />
<a href="xx_xxx.html" TARGET="CONTENT">h5repart</a>
- <br>
+ <br />
<a href="xx_xxx.html" TARGET="CONTENT">h5toh4</a>
- <br>
+ <br />
<a href="xx_xxx.html" TARGET="CONTENT">h4toh5</a>
- <br>
+ <br />
<a href="xx_xxx.html" TARGET="CONTENT">Java Tools</a>
- <br>
+ <br />
<a href="xx_xxx.html" TARGET="CONTENT">XML Tools</a>
</font>
-->
<!--
-<br>
+<br />
<b>Appendices</b>
- <font color=#555555>
- <br>
+ <font color="#555555">
+ <br />
<a href="99_Glossary.html" TARGET="CONTENT">Glossary</a>
- <br>
+ <br />
<a href="99_Glossary.html" TARGET="CONTENT">Glossary</a>
- <br>
+ <br />
<a href="99_PredefDTypes.html" TARGET="CONTENT">Predefined Datatypes</a>
- <br>
+ <br />
H4-to-H5 Mapping
- <br>
+ <br />
H5-to-H4 Mapping
- <br>
+ <br />
<a href="99_TechSupport.html" TARGET="CONTENT">Technical Support</a>
- <br>
+ <br />
</font>
-->
-<hr>
+<hr />
<!-- FOR USE WITH ELECTRONIC VERSION ----------------------------------->
<!-- <small><i>Printable
<a href="http://www.hdfgroup.org/HDF5/doc/PSandPDF/HDF5_UsersGuide.PDF" TARGET="CONTENT">PDF</a>
of this User’s Guide</i></small>
-<hr>
+<hr />
-->
<!-- FOR USE WITH ELECTRONIC VERSION ----------------------------------->
<div align="center">
<b>Other HDF5 documents</b>
</div>
-<br>
+<br />
-<a href="../index.html" TARGET="H5DocWin">Full HDF5 doc set</a> for<br>
+<a href="../index.html" TARGET="H5DocWin">Full HDF5 doc set</a> for<br />
- the current release<br>
+ the current release<br />
-<a href="../H5.intro.html" TARGET="H5DocWin"><cite>Introduction to HDF5</cite></a><br>
+<a href="../H5.intro.html" TARGET="H5DocWin"><cite>Introduction to HDF5</cite></a><br />
-<a href="../RM/RM_H5Front.html" TARGET="H5DocWin"><cite>HDF5 Reference</cite></a><br>
+<a href="../RM/RM_H5Front.html" TARGET="H5DocWin"><cite>HDF5 Reference</cite></a><br />
- <a href="../RM/RM_H5Front.html" TARGET="H5DocWin"><cite>Manual</cite></a><br>
+ <a href="../RM/RM_H5Front.html" TARGET="H5DocWin"><cite>Manual</cite></a><br />
-<a href="../H5.user.html" TARGET="H5DocWin"><cite>HDF5 Release 1.4.5</cite></a><br>
+<a href="../H5.user.html" TARGET="H5DocWin"><cite>HDF5 Release 1.4.5</cite></a><br />
<a href="../H5.user.html" TARGET="H5DocWin"><cite>User's Guide</cite></a>
-<hr>
+<hr />
</body>
</html>
diff --git a/html/UG/UG_navObjectsIdentifiers.html b/html/UG/UG_navObjectsIdentifiers.html
index 6c4ab52..785320b 100644
--- a/html/UG/UG_navObjectsIdentifiers.html
+++ b/html/UG/UG_navObjectsIdentifiers.html
@@ -12,8 +12,8 @@
<IMG SRC="GRAPHICS/READ1ST.GIF" BORDER=0 ALT="Read this first!"></A>
-->
-<font size=-1>
-<br>
+<font size="-1">
+<br />
<!-- editingComment
<div align=right>
( <a href="UG_nav01.html">Expand TOC</a> )
@@ -21,101 +21,101 @@
-->
<a href="UG_front.html" TARGET="CONTENT">Title Page</a>
-<br>
+<br />
<a href="../Copyright.html" TARGET="CONTENT">Copyright</a>
<!-- editingComment
-<br>
+<br />
(<a href="../H5_UG_Outline.pdf" TARGET="CONTENT">Complete outline</a>)
-<br>
-<br>
+<br />
+<br />
(<a href="UG_feedback.html" TARGET="CONTENT">Feedback</a>)
-<br>
+<br />
(<a href="http://www.hdfgroup.uiuc.edu/HDF5/doc_dev_snapshot/index.html#H5_NewUG" TARGET="CONTENT">doc_dev_snapshot</a>)
-->
</font>
-<hr>
-<hr>
+<hr />
+<hr />
<!--
-<a href="UG_front.html" TARGET="CONTENT"><IMG SRC="GRAPHICS/COVER.GIF" BORDER=0 ALT="HDF5 UG title page"></a><br>
+<a href="UG_front.html" TARGET="CONTENT"><IMG SRC="GRAPHICS/COVER.GIF" BORDER=0 ALT="HDF5 UG title page"></a><br />
-->
<div align="center">
-<b>HDF5 User's Guide<br>Table of Contents</b>
- <br>
- <a href="UG_UpdateStatus.html" TARGET="CONTENT"><font size=-1><i>Update Status</i></font></a>
+<b>HDF5 User's Guide<br />Table of Contents</b>
+ <br />
+ <a href="UG_UpdateStatus.html" TARGET="CONTENT"><font size="-1"><i>Update Status</i></font></a>
</div>
<p>
<!-- editingComment
- <font color=#555555>
+ <font color="#555555">
<a href="01_Intro.html" TARGET="CONTENT">Introduction</a>
</font>
- <br>
+ <br />
-->
<b>I. The Broad View</b>
- <font color=#555555>
+ <font color="#555555">
<!-- editingComment
- <br>
+ <br />
<a href="02_WhatIs.html" TARGET="CONTENT">What is HDF5?</a>
-->
- <br>
+ <br />
<a href="UG_frame03DataModel.html" TARGET="_TOP">Data Model &</a>
- <br>
+ <br />
<a href="UG_frame03DataModel.html" TARGET="_TOP">File Structure</a>
- <br>
+ <br />
<a href="UG_frame04ProgModel.html" TARGET="_TOP">HDF5 Library &</a>
- <br>
+ <br />
<a href="UG_frame04ProgModel.html" TARGET="_TOP">Programming Model</a>
</font>
-<br>
-<b>II. Using HDF5 —<br>
+<br />
+<b>II. Using HDF5 —<br />
The Specifics</b>
- <font color=#555555>
- <br>
+ <font color="#555555">
+ <br />
<!-- editingComment
<a href="05_Quick.html" TARGET="CONTENT">Quick Start</a>
- <br>
+ <br />
<a href="06_Naming.html" TARGET="CONTENT">API Struture &</a>
- <br>
+ <br />
<a href="06_Naming.html" TARGET="CONTENT">Naming Conventions</a>
- <br>
+ <br />
<a href="07_DocSet.html" TARGET="CONTENT">Document Set</a>
- <br>
+ <br />
-->
<a href="UG_frame08TheFile.html" TARGET="_TOP">The File</a>
- <br>
+ <br />
<a href="UG_frame09Groups.html" TARGET="_TOP">Groups and Links</a>
- <br>
+ <br />
<a href="UG_frame10Datasets.html" TARGET="_TOP">Datasets</a>
- <br>
+ <br />
<a href="UG_frameObjectsIdentifiers.html" TARGET="_TOP">Objects and Identifiers</a>
<font size="-1">
- <br>
+ <br />
<a href="09_Groups.html#DefiningGroupsAndLinks" TARGET="CONTENT">
Defining</a>
</font>
<font size="-2">
- <br>
+ <br />
<a href="09_Groups.html#Groups" TARGET="CONTENT">
Groups</a>
</font>
<font size="-1">
- <br>
+ <br />
<a href="09_Groups.html#ProgModel" TARGET="CONTENT">
Programming</a>
</font>
<font size="-2">
- <br>
+ <br />
<a href="09_Groups.html#ProgModelCreateGroup" TARGET="CONTENT">
Creating a Group</a>
</font>
@@ -138,144 +138,144 @@
- <br>
+ <br />
<a href="UG_frame11Datatypes.html" TARGET="_TOP">Datatypes</a>
- <br>
+ <br />
<a href="UG_frame12Dataspaces.html" TARGET="_TOP">Dataspaces &</a>
- <br>
+ <br />
<a href="UG_frame12Dataspaces.html" TARGET="_TOP">Partial I/O</a>
- <br>
+ <br />
<a href="UG_frame13Attributes.html" TARGET="_TOP">Attributes</a>
- <br>
+ <br />
<a href="UG_frame13ErrorHandling.html" TARGET="_TOP">Error Handling</a>
- <br>
+ <br />
<a href="UG_frame14PropertyLists.html" TARGET="_TOP">Property Lists</a>
</font>
<br />
<b>III. <a href="17_Additional.html" TARGET="CONTENT">Additional Resources</a>
</b><br />
-<b>IV. <a href="http://www.hdfgroup.org/ftp/HDF5/examples/examples-by-api/">
+<b>IV. <a href="http://www.hdfgroup.org/HDF5/examples/">
Code Examples</a></b><br />
- <font color=#555555>
+ <font color="#555555">
<!-- NEED TO WRITE PER CH, CREATE UG_frame18Performance.html, AND LINK IT IN
- <br>
+ <br />
<a href="UG_frame18Performance.html" TARGET="_TOP">Performance</a>
- <br>
+ <br />
<a href="UG_frame17SpecialTopics.html" TARGET="_TOP">Special Topics</a>
- <br>
- <a href="../ddl.html" TARGET="H5DocWin">DDL in BNF</a><br>
+ <br />
+ <a href="../ddl.html" TARGET="H5DocWin">DDL in BNF</a><br />
- <a href="../ddl.html" TARGET="H5DocWin">for HDF5</a><br>
+ <a href="../ddl.html" TARGET="H5DocWin">for HDF5</a><br />
- <a href="99_SelectedPassages.html" TARGET="CONTENT">Selected Passages</a><br>
- <br>
+ <a href="99_SelectedPassages.html" TARGET="CONTENT">Selected Passages</a><br />
+ <br />
Higher Levels
- <br>
+ <br />
<a href="20_Parallel.html" TARGET="CONTENT">Parallel Environments</a>
-->
<!-- editingComment
- <br>
+ <br />
Parallel Environments
- <br>
+ <br />
(in progress)
-->
<!--
- <br>
+ <br />
<a href="21_Perform.html" TARGET="CONTENT">Performance</a>
- <br>
+ <br />
Non-C Languages
-->
<!-- editingComment
- <br>
+ <br />
<a href="http://www.hdfgroup.uiuc.edu/HDF5/doc_dev_snapshot/H5_NewUG/DRAFTS/H5UG-Cpplus-001221.pdf" TARGET="CONTENT">C++ User Notes</a>
-->
<!--
- <br>
+ <br />
<a href="23_DDL.html" TARGET="CONTENT">DDL in BNF</a>
- <br>
+ <br />
<a href="24_XML-DTD.html" TARGET="CONTENT">XML DTD</a>
-->
</font>
<!--
-<br>
+<br />
<b>IV. Tools</b>
- <font color=#555555>
- <br>
+ <font color="#555555">
+ <br />
<a href="xx_xxx.html" TARGET="CONTENT">h5ls</a>
- <br>
+ <br />
<a href="xx_xxx.html" TARGET="CONTENT">h5dump</a>
- <br>
+ <br />
<a href="xx_xxx.html" TARGET="CONTENT">h5repart</a>
- <br>
+ <br />
<a href="xx_xxx.html" TARGET="CONTENT">h5toh4</a>
- <br>
+ <br />
<a href="xx_xxx.html" TARGET="CONTENT">h4toh5</a>
- <br>
+ <br />
<a href="xx_xxx.html" TARGET="CONTENT">Java Tools</a>
- <br>
+ <br />
<a href="xx_xxx.html" TARGET="CONTENT">XML Tools</a>
</font>
-->
<!--
-<br>
+<br />
<b>Appendices</b>
- <font color=#555555>
- <br>
+ <font color="#555555">
+ <br />
<a href="99_Glossary.html" TARGET="CONTENT">Glossary</a>
- <br>
+ <br />
<a href="99_Glossary.html" TARGET="CONTENT">Glossary</a>
- <br>
+ <br />
<a href="99_PredefDTypes.html" TARGET="CONTENT">Predefined Datatypes</a>
- <br>
+ <br />
H4-to-H5 Mapping
- <br>
+ <br />
H5-to-H4 Mapping
- <br>
+ <br />
<a href="99_TechSupport.html" TARGET="CONTENT">Technical Support</a>
- <br>
+ <br />
</font>
-->
-<hr>
+<hr />
<!-- FOR USE WITH ELECTRONIC VERSION ----------------------------------->
<small><i>Printable
<a href="http://www.hdfgroup.org/HDF5/doc/PSandPDF/HDF5_UsersGuide.PDF" TARGET="CONTENT">PDF</a>
of this User’s Guide</i></small>
-<hr>
+<hr />
<!-- FOR USE WITH ELECTRONIC VERSION ----------------------------------->
<div align="center">
<b>Other HDF5 documents</b>
</div>
-<br>
+<br />
-<a href="../index.html" TARGET="H5DocWin">Full HDF5 doc set</a> for<br>
+<a href="../index.html" TARGET="H5DocWin">Full HDF5 doc set</a> for<br />
- the current release<br>
+ the current release<br />
-<a href="../H5.intro.html" TARGET="H5DocWin"><cite>Introduction to HDF5</cite></a><br>
+<a href="../H5.intro.html" TARGET="H5DocWin"><cite>Introduction to HDF5</cite></a><br />
-<a href="../RM/RM_H5Front.html" TARGET="H5DocWin"><cite>HDF5 Reference</cite></a><br>
+<a href="../RM/RM_H5Front.html" TARGET="H5DocWin"><cite>HDF5 Reference</cite></a><br />
- <a href="../RM/RM_H5Front.html" TARGET="H5DocWin"><cite>Manual</cite></a><br>
+ <a href="../RM/RM_H5Front.html" TARGET="H5DocWin"><cite>Manual</cite></a><br />
-<a href="../H5.user.html" TARGET="H5DocWin"><cite>HDF5 Release 1.4.5</cite></a><br>
+<a href="../H5.user.html" TARGET="H5DocWin"><cite>HDF5 Release 1.4.5</cite></a><br />
<a href="../H5.user.html" TARGET="H5DocWin"><cite>User's Guide</cite></a>
-<hr>
+<hr />
</body>
</html>
diff --git a/html/UG/ed_libs/Footer.lbi b/html/UG/ed_libs/Footer.lbi
deleted file mode 100644
index de35a89..0000000
--- a/html/UG/ed_libs/Footer.lbi
+++ /dev/null
@@ -1,5 +0,0 @@
-<address>
-THG Help Desk: <img src="../../Graphics/help.png" align=top height=16>
-<br>
-Describes HDF5 Release 1.8.0
-</address>
diff --git a/html/_topic/Chunking/index.html b/html/_topic/Chunking/index.html
index cb66344..b7e354f 100644
--- a/html/_topic/Chunking/index.html
+++ b/html/_topic/Chunking/index.html
@@ -529,25 +529,10 @@ Example 2: Writing part of a column to a chunked dataset
<hr>
-<!-- #BeginLibraryItem "/ed_libs/Footer-THGonly.lbi" -->
-<address>
-<table width="100%" border="0">
- <tr valign="top">
- <td align="left">
- <address>
- The HDF Group Help Desk: <img src="../../Graphics/help.png" align=top height=16>
- <br>
- Describes HDF5 Release 1.8.13, May 2014.
- </address>
- </td><td width="5%"> </td>
- <td align="right">
- <a href="../../Copyright.html">Copyright</a> by
- <a href="http://www.hdfgroup.org">The HDF Group</a>
- </td>
- </tr>
-</table>
-</address>
-<!-- #EndLibraryItem --><html><SCRIPT LANGUAGE="JAVASCRIPT">
+
+<?php include("../../ed_libs/Footer3.htm"); ?>
+
+<SCRIPT LANGUAGE="JAVASCRIPT">
<!--
document.writeln("Last modified: 5 October 2010");
-->
diff --git a/html/cpplus/CppInterfaces.html b/html/cpplus/CppInterfaces.html
index 1d942f8..00ade8c 100644
--- a/html/cpplus/CppInterfaces.html
+++ b/html/cpplus/CppInterfaces.html
@@ -1424,27 +1424,7 @@ void resetIdComponent(
<hr>
-<!-- #BeginLibraryItem "/ed_libs/Footer.lbi" -->
-<address>
-<table width="100%" border="0">
- <tr valign="top">
- <td align="left">
- <address>
- The HDF Group Help Desk: <img src="../Graphics/help.png" align=top height=16>
- <br>
- Describes HDF5 Release 1.8.13, May 2014.
- </address>
- </td><td width="5%"> </td>
- <td align="right">
- <a href="../Copyright.html">Copyright</a> by
- <a href="http://www.hdfgroup.org">The HDF Group</a>
- <br>
- and the Board of Trustees of the University of Illinois
- </td>
- </tr>
-</table>
-</address>
-<!-- #EndLibraryItem -->
+<?php include("../ed_libs/Footer2.htm"); ?>
Last modified: 17 December 2000
diff --git a/html/ddl.html b/html/ddl.html
index 55ec17b..dcc6366 100644
--- a/html/ddl.html
+++ b/html/ddl.html
@@ -150,7 +150,7 @@ This section contains a brief explanation of the symbols used in the DDL.
<strpad> ::= H5T_STR_NULLTERM | H5T_STR_NULLPAD | H5T_STR_SPACEPAD
-<cset> ::= H5T_CSET_ASCII
+<cset> ::= H5T_CSET_ASCII | H5T_CSET_UTF8
<ctype> ::= H5T_C_S1 | H5T_FORTRAN_S1
@@ -633,30 +633,11 @@ GROUP "/" {
</table>
</center>
<hr>
-<!-- #EndLibraryItem --><!-- #BeginLibraryItem "/ed_libs/Footer.lbi" -->
-<address>
-<table width="100%" border="0">
- <tr valign="top">
- <td align="left">
- <address>
- The HDF Group Help Desk: <img src="Graphics/help.png" align=top height=16>
- <br>
- Describes HDF5 Release 1.8.13, May 2014.
- </address>
- </td><td width="5%"> </td>
- <td align="right">
- <a href="Copyright.html">Copyright</a> by
- <a href="http://www.hdfgroup.org">The HDF Group</a>
- <br>
- and the Board of Trustees of the University of Illinois
- </td>
- </tr>
-</table>
-</address>
-<!-- #EndLibraryItem -->
+<!-- #EndLibraryItem -->
+<?php include("./ed_libs/Footer.htm"); ?>
-Last modified: 25 September 2012
+Last modified: 24 September 2014
</body>
diff --git a/html/doc-info.html b/html/doc-info.html
index 440dd55..d5a8bc3 100644
--- a/html/doc-info.html
+++ b/html/doc-info.html
@@ -19,14 +19,14 @@
<?php
-$page_title = "HDF5 Documentation: Releases 1.6.10 and 1.8.13";
+$page_title = "HDF5 Documentation: Releases 1.6.10 and 1.8.14";
include ("../../links.php");
include ("../../includes/header.html");
?>
<fieldset><h1>HDF5 Documentation</H1></fieldset>
<p align=left>
- <A HREF="./index.html">Release 1.8.13</A>
+ <A HREF="./index.html">Release 1.8.14</A>
<code> </code>
<A HREF="../doc1.6/index.html">Release 1.6.10</A>
@@ -45,14 +45,14 @@ enables users to locate the desired documentation set.
</p>
<hr>
-<h2>HDF5 Release 1.8.13</h2>
+<h2>HDF5 Release 1.8.14</h2>
-<p>Release 1.8.13 is the current release.
+<p>Release 1.8.14 is the current release.
New projects are strongly encouraged to use this release as it contains
many new features, file optimizations, and performance enhancements.</p>
-<p><h4>Release 1.8.13 Documentation (latest release):</h4></p>
+<p><h4>Release 1.8.14 Documentation (latest release):</h4></p>
<p>
<ul>
<ul>
diff --git a/html/ed_libs/Footer-THGonly.htm b/html/ed_libs/Footer-THGonly.htm
new file mode 100644
index 0000000..d24a5c4
--- /dev/null
+++ b/html/ed_libs/Footer-THGonly.htm
@@ -0,0 +1,23 @@
+
+<!-- INCLUDE VIA PHP FROM <doc_root>/ed_libs/Footer-THGonly.htm -->
+
+<address>
+<table width="100%" border="0">
+ <tr valign="top">
+ <td align="left">
+ <address>
+ The HDF Group Help Desk: <img src="./Graphics/help.png" align=top height=16>
+ <br>
+ Describes HDF5 Release 1.8.14, November 2014.
+ </address>
+ </td><td width="5%"> </td>
+ <td align="right">
+ <a href="./Copyright.html">Copyright</a> by
+ <a href="http://www.hdfgroup.org">The HDF Group</a>
+ </td>
+ </tr>
+</table>
+</address>
+
+<!-- END PHP INCLUDE <doc_root>/ed_libs/Footer-THGonly.htm -->
+
diff --git a/html/ed_libs/Footer-THGonly.lbi b/html/ed_libs/Footer-THGonly.lbi
index 19c9a7a..089dcc0 100644
--- a/html/ed_libs/Footer-THGonly.lbi
+++ b/html/ed_libs/Footer-THGonly.lbi
@@ -6,7 +6,7 @@
<address>
The HDF Group Help Desk: <img src="../Graphics/help.png" align=top height=16>
<br>
- Describes HDF5 Release 1.8.13, May 2014.
+ Describes HDF5 Release 1.8.14, November 2014.
</address>
</td><td width="5%"> </td>
<td align="right">
diff --git a/html/ed_libs/Footer.lbi b/html/ed_libs/Footer-THGonly2.htm
similarity index 70%
copy from html/ed_libs/Footer.lbi
copy to html/ed_libs/Footer-THGonly2.htm
index 17aa6f0..86a4cff 100644
--- a/html/ed_libs/Footer.lbi
+++ b/html/ed_libs/Footer-THGonly2.htm
@@ -1,4 +1,6 @@
+<!-- INCLUDE VIA PHP FROM <doc_root>/ed_libs/Footer-THGonly2.htm -->
+
<address>
<table width="100%" border="0">
<tr valign="top">
@@ -6,15 +8,16 @@
<address>
The HDF Group Help Desk: <img src="../Graphics/help.png" align=top height=16>
<br>
- Describes HDF5 Release 1.8.13, May 2014.
+ Describes HDF5 Release 1.8.14, November 2014.
</address>
</td><td width="5%"> </td>
<td align="right">
<a href="../Copyright.html">Copyright</a> by
<a href="http://www.hdfgroup.org">The HDF Group</a>
- <br>
- and the Board of Trustees of the University of Illinois
</td>
</tr>
</table>
</address>
+
+<!-- END PHP INCLUDE <doc_root>/ed_libs/Footer-THGonly2.htm -->
+
diff --git a/html/ed_libs/Footer-THGonly3.htm b/html/ed_libs/Footer-THGonly3.htm
new file mode 100644
index 0000000..c527ada
--- /dev/null
+++ b/html/ed_libs/Footer-THGonly3.htm
@@ -0,0 +1,23 @@
+
+<!-- INCLUDE VIA PHP FROM <doc_root>/ed_libs/Footer-THGonly3.htm -->
+
+<address>
+<table width="100%" border="0">
+ <tr valign="top">
+ <td align="left">
+ <address>
+ The HDF Group Help Desk: <img src="../../Graphics/help.png" align=top height=16>
+ <br>
+ Describes HDF5 Release 1.8.14, November 2014.
+ </address>
+ </td><td width="5%"> </td>
+ <td align="right">
+ <a href="../../Copyright.html">Copyright</a> by
+ <a href="http://www.hdfgroup.org">The HDF Group</a>
+ </td>
+ </tr>
+</table>
+</address>
+
+<!-- END PHP INCLUDE <doc_root>/ed_libs/Footer-THGonly3.htm -->
+
diff --git a/html/ed_libs/Footer.lbi b/html/ed_libs/Footer.htm
similarity index 55%
copy from html/ed_libs/Footer.lbi
copy to html/ed_libs/Footer.htm
index 17aa6f0..4892c4b 100644
--- a/html/ed_libs/Footer.lbi
+++ b/html/ed_libs/Footer.htm
@@ -1,16 +1,18 @@
+<!-- INCLUDE VIA PHP FROM <doc_root>/ed_libs/Footer.htm -->
+
<address>
<table width="100%" border="0">
<tr valign="top">
<td align="left">
<address>
- The HDF Group Help Desk: <img src="../Graphics/help.png" align=top height=16>
+ The HDF Group Help Desk: <img src="./Graphics/help.png" align=top height=16>
<br>
- Describes HDF5 Release 1.8.13, May 2014.
+ Describes HDF5 Release 1.8.14, November 2014.
</address>
</td><td width="5%"> </td>
<td align="right">
- <a href="../Copyright.html">Copyright</a> by
+ <a href="./Copyright.html">Copyright</a> by
<a href="http://www.hdfgroup.org">The HDF Group</a>
<br>
and the Board of Trustees of the University of Illinois
@@ -18,3 +20,6 @@
</tr>
</table>
</address>
+
+<!-- END PHP INCLUDE FROM <doc_root>/ed_libs/Footer.htm -->
+
diff --git a/html/ed_libs/Footer.lbi b/html/ed_libs/Footer.lbi
index 17aa6f0..ae37d9e 100644
--- a/html/ed_libs/Footer.lbi
+++ b/html/ed_libs/Footer.lbi
@@ -6,7 +6,7 @@
<address>
The HDF Group Help Desk: <img src="../Graphics/help.png" align=top height=16>
<br>
- Describes HDF5 Release 1.8.13, May 2014.
+ Describes HDF5 Release 1.8.14, November 2014.
</address>
</td><td width="5%"> </td>
<td align="right">
diff --git a/html/ed_libs/Footer.lbi b/html/ed_libs/Footer2.htm
similarity index 74%
copy from html/ed_libs/Footer.lbi
copy to html/ed_libs/Footer2.htm
index 17aa6f0..1515771 100644
--- a/html/ed_libs/Footer.lbi
+++ b/html/ed_libs/Footer2.htm
@@ -1,4 +1,6 @@
+<!-- INCLUDE VIA PHP FROM <doc_root>/ed_libs/Footer2.htm -->
+
<address>
<table width="100%" border="0">
<tr valign="top">
@@ -6,7 +8,7 @@
<address>
The HDF Group Help Desk: <img src="../Graphics/help.png" align=top height=16>
<br>
- Describes HDF5 Release 1.8.13, May 2014.
+ Describes HDF5 Release 1.8.14, November 2014.
</address>
</td><td width="5%"> </td>
<td align="right">
@@ -18,3 +20,6 @@
</tr>
</table>
</address>
+
+<!-- END PHP INCLUDE FROM <doc_root>/ed_libs/Footer2.htm -->
+
diff --git a/html/ed_libs/Footer.lbi b/html/ed_libs/Footer3.htm
similarity index 54%
copy from html/ed_libs/Footer.lbi
copy to html/ed_libs/Footer3.htm
index 17aa6f0..cc1168d 100644
--- a/html/ed_libs/Footer.lbi
+++ b/html/ed_libs/Footer3.htm
@@ -1,16 +1,18 @@
+<!-- INCLUDE VIA PHP FROM <doc_root>/ed_libs/Footer3.htm -->
+
<address>
<table width="100%" border="0">
<tr valign="top">
<td align="left">
<address>
- The HDF Group Help Desk: <img src="../Graphics/help.png" align=top height=16>
+ The HDF Group Help Desk: <img src="../../Graphics/help.png" align=top height=16>
<br>
- Describes HDF5 Release 1.8.13, May 2014.
+ Describes HDF5 Release 1.8.14, November 2014.
</address>
</td><td width="5%"> </td>
<td align="right">
- <a href="../Copyright.html">Copyright</a> by
+ <a href="../../Copyright.html">Copyright</a> by
<a href="http://www.hdfgroup.org">The HDF Group</a>
<br>
and the Board of Trustees of the University of Illinois
@@ -18,3 +20,6 @@
</tr>
</table>
</address>
+
+<!-- END PHP INCLUDE FROM <doc_root>/ed_libs/Footer3.htm -->
+
diff --git a/html/ed_libs/Footer_Null.htm b/html/ed_libs/Footer_Null.htm
new file mode 100755
index 0000000..a46de04
--- /dev/null
+++ b/html/ed_libs/Footer_Null.htm
@@ -0,0 +1,15 @@
+
+<!-- INCLUDE VIA PHP FROM <doc_root>/ed_libs/Footer_Null.htm -->
+
+<!--
+ The contents of this file (excluding this note) are to be swapped
+ in for the contents of Footer.htm and Footer-THGonly.htm
+ when switching from Electronic to Print output.
+ This file may be empty (aside from this note) or may have code
+ within it (print vs. electronic).
+-->
+
+
+
+<!-- END PHP INCLUDE FROM <doc_root>/ed_libs/Footer_Null.htm -->
+
diff --git a/html/ed_libs/Footer_Null.lbi b/html/ed_libs/Footer_Null.lbi
index a081d39..5a93513 100755
--- a/html/ed_libs/Footer_Null.lbi
+++ b/html/ed_libs/Footer_Null.lbi
@@ -1,6 +1,7 @@
<!--
The contents of this file (excluding this note) are to be swapped
- in for Footer.lbi when switching between Print and Electronic.
+ in for the contents of Footer.lbi and Footer-THGonly.htm
+ when switching from Electronic to Print output.
This file may be empty (aside from this note) or may have code
within it (print vs. electronic).
-->
diff --git a/html/fortran/FortranFlags.html b/html/fortran/FortranFlags.html
index c6bc12f..484be97 100644
--- a/html/fortran/FortranFlags.html
+++ b/html/fortran/FortranFlags.html
@@ -372,6 +372,7 @@ HDF5 Fortran flags have the same meanings as the C flags defined in the
H5T_NORM_MSBSET_F
H5T_NORM_NONE_F
H5T_CSET_ASCII_F
+ H5T_CSET_UTF8_F
H5T_STR_NULLTERM_F
H5T_STR_NULLPAD_F
H5T_STR_SPACEPAD_F
@@ -474,29 +475,13 @@ the development of HDF5 Fortran applications.
</table>
</center>
<hr>
-<!-- #EndLibraryItem --><!-- #BeginLibraryItem "/ed_libs/Footer.lbi" -->
-<address>
-<table width="100%" border="0">
- <tr valign="top">
- <td align="left">
- <address>
- The HDF Group Help Desk: <img src="../Graphics/help.png" align=top height=16>
- <br>
- Describes HDF5 Release 1.8.13, May 20114.
- </address>
- </td><td width="5%"> </td>
- <td align="right">
- <a href="../Copyright.html">Copyright</a> by
- <a href="http://www.hdfgroup.org">The HDF Group</a>
- <br>
- and the Board of Trustees of the University of Illinois
- </td>
- </tr>
-</table>
-</address>
-<!-- #EndLibraryItem --><SCRIPT LANGUAGE="JAVASCRIPT">
+<!-- #EndLibraryItem -->
+
+<?php include("../ed_libs/Footer2.htm"); ?>
+
+<SCRIPT LANGUAGE="JAVASCRIPT">
<!--
-document.writeln("Last modified: 19 October 2011");
+document.writeln("Last modified: 24 September 2014");
-->
</SCRIPT>
</body>
diff --git a/html/fortran/index.html b/html/fortran/index.html
index d0387b4..7b96a36 100644
--- a/html/fortran/index.html
+++ b/html/fortran/index.html
@@ -51,7 +51,7 @@ HDF5 Fortran Library
The HDF5 Fortran Library is available in both Fortran 90 and
Fortran 2003 environments.
A small number of features are available only in Fortran 2003
- environments, but most are availalble in both.
+ environments, but most are available in both.
<p>
HDF5 Fortran Library documentation includes the following:
@@ -273,11 +273,14 @@ display transposed data, if data is written from a Fortran program.
</table>
</center>
<hr>
-<!-- #EndLibraryItem --><SCRIPT LANGUAGE="JAVASCRIPT">
+<!-- #EndLibraryItem -->
+
+<?php include("../ed_libs/Footer2.htm"); ?>
+
+<SCRIPT LANGUAGE="JAVASCRIPT">
<!--
document.writeln(' \
<address> \
- THG Help Desk: <img src="../Graphics/help.png" align=top height=16> <br> \
Last modified: 2 February 2012 <br> \
</address> \
');
diff --git a/html/index.html b/html/index.html
index 50243ab..aa25334 100644
--- a/html/index.html
+++ b/html/index.html
@@ -216,7 +216,7 @@
<tr>
<td align="left" valign="top" width="47%">
- <a href="http://www.hdfgroup.org/products/java/hdfview/">HDFview</a>
+ <a href="http://www.hdfgroup.org/products/java/hdfview/">HDFView</a>
<br /><font size="-1">Browser and editor
<br />Excellent choice for a “first look”</font>
</td><td align="left" valign="top" width="6%">
@@ -256,7 +256,7 @@
<td bgcolor="#FFFFFF" valign="top" align="center" colspan="3">
<br />
<font size="5" color="#004488">HDF5 Library</font>
- <br /><font size="4" color="#004488">Release 1.8.13, May 2014
+ <br /><font size="4" color="#004488">Release 1.8.14, November 2014
</font>
</td>
</tr>
@@ -401,7 +401,7 @@
-->
<br />
<!-- hhmts start -->
- Last modified: 14 May 2014
+ Last modified: 13 November 2014
<!-- hhmts end -->
<p>
diff --git a/perform/CMakeLists.txt b/perform/CMakeLists.txt
index df7526e..6887c60 100644
--- a/perform/CMakeLists.txt
+++ b/perform/CMakeLists.txt
@@ -4,7 +4,7 @@ PROJECT (HDF5_PERFORM )
#-----------------------------------------------------------------------------
# Apply Definitions to compiler in this directory and below
#-----------------------------------------------------------------------------
-add_definitions (${HDF5_EXTRA_C_FLAGS})
+add_definitions (${HDF_EXTRA_C_FLAGS})
#-----------------------------------------------------------------------------
# Setup include Directories
diff --git a/perform/Makefile.in b/perform/Makefile.in
index 8698c46..8db63de 100644
--- a/perform/Makefile.in
+++ b/perform/Makefile.in
@@ -546,7 +546,6 @@ MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MPE = @MPE@
-MPI_GET_SIZE = @MPI_GET_SIZE@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
diff --git a/perform/sio_standalone.h b/perform/sio_standalone.h
index b407ecb..b2f8220 100644
--- a/perform/sio_standalone.h
+++ b/perform/sio_standalone.h
@@ -79,6 +79,7 @@
#endif /* H5_HAVE_ALARM */
#define HDasctime(T) asctime(T)
#define HDasin(X) asin(X)
+#define HDasprintf asprintf /*varargs*/
#define HDassert(X) assert(X)
#define HDatan(X) atan(X)
#define HDatan2(X,Y) atan2(X,Y)
diff --git a/perform/sio_timer.c b/perform/sio_timer.c
index f233de3..4e42ee6 100644
--- a/perform/sio_timer.c
+++ b/perform/sio_timer.c
@@ -1,197 +1,197 @@
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * Copyright by The HDF Group. *
- * All rights reserved. *
- * *
- * This file is part of HDF5. The full HDF5 copyright notice, including *
- * terms governing use, modification, and redistribution, is contained in *
- * the files COPYING and Copyright.html. COPYING can be found at the root *
- * of the source code distribution tree; Copyright.html can be found at the *
- * root level of an installed copy of the electronic HDF5 document set and *
- * is linked from the top-level documents page. It can also be found at *
- * http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have *
- * access to either file, you may request a copy from help at hdfgroup.org. *
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-
-/*
- * Purpose:
- *
- * This is a module of useful timing functions for performance testing.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-
-#include "sio_timer.h"
-
-
-#include "sio_perf.h"
-
-/*
- * The number to divide the tv_usec field with to get a nice decimal to add to
- * the number of seconds.
- */
-#define MICROSECOND 1000000.0
-
-/* global variables */
-sio_time *timer_g; /* timer: global for stub functions */
-
-/*
- * Function: sub_time
- * Purpose: Struct two time values, and return the difference, in microseconds
- *
- * Note that the function assumes that a > b
- * Programmer: Leon Arber, 1/27/06
- */
-static double sub_time(struct timeval* a, struct timeval* b)
-{
- return (((double)a->tv_sec +
- ((double)a->tv_usec) / MICROSECOND) -
- ((double)b->tv_sec +
- ((double)b->tv_usec) / MICROSECOND));
-}
-
-
-/*
- * Function: sio_time_new
- * Purpose: Build us a brand, spankin', new performance time object.
- * The object is a black box to the user.
- * Return: Pointer to sio_time object
- * Programmer: Bill Wendling, 01. October 2001
- * Modifications:
- */
-sio_time *
-sio_time_new(void)
-{
- sio_time *pt = (sio_time *)calloc(1, sizeof(struct sio_time_));
-
- /* set global timer variable */
- timer_g = pt;
-
- return pt;
-}
-
-/*
- * Function: sio_time_destroy
- * Purpose: Remove the memory allocated for the sio_time object. Only
- * need to call on a pointer allocated with the ``sio_time_new''
- * function.
- * Return: Nothing
- * Programmer: Bill Wendling, 01. October 2001
- * Modifications:
- */
-void
-sio_time_destroy(sio_time *pt)
-{
- HDfree(pt);
- /* reset the global timer pointer too. */
- timer_g = NULL;
-}
-
-
-
-/*
- * Function: set_time
- * Purpose: Set the time in a ``sio_time'' object.
- * Return: Pointer to the passed in ``sio_time'' object.
- * Programmer: Bill Wendling, 01. October 2001
- * Modifications:
- */
-sio_time *
-set_time(sio_time *pt, timer_type t, int start_stop)
-{
- if (pt) {
- if (start_stop == TSTART) {
- HDgettimeofday(&pt->sys_timer[t], NULL);
-
- /* When we start the timer for HDF5_FINE_WRITE_FIXED_DIMS or HDF5_FINE_READ_FIXED_DIMS
- * we compute the time it took to only open the file */
- if(t == HDF5_FINE_WRITE_FIXED_DIMS)
- pt->total_time[HDF5_FILE_WRITE_OPEN] += sub_time(&(pt->sys_timer[t]), &(pt->sys_timer[HDF5_GROSS_WRITE_FIXED_DIMS]));
- else if(t == HDF5_FINE_READ_FIXED_DIMS)
- pt->total_time[HDF5_FILE_READ_OPEN] += sub_time(&(pt->sys_timer[t]), &(pt->sys_timer[HDF5_GROSS_READ_FIXED_DIMS]));
-
-
- } else {
- struct timeval sys_t;
-
- HDgettimeofday(&sys_t, NULL);
- pt->total_time[t] += sub_time(&sys_t, &(pt->sys_timer[t]));
-
-/* ((double)sys_t.tv_sec +
- ((double)sys_t.tv_usec) / MICROSECOND) -
- ((double)pt->sys_timer[t].tv_sec +
- ((double)pt->sys_timer[t].tv_usec) / MICROSECOND);*/
-
- /* When we stop the timer for HDF5_GROSS_WRITE_FIXED_DIMS or HDF5_GROSS_READ_FIXED_DIMS
- * we compute the time it took to close the file after the last read/write finished */
- if(t == HDF5_GROSS_WRITE_FIXED_DIMS)
- pt->total_time[HDF5_FILE_WRITE_CLOSE] += sub_time(&(pt->sys_timer[t]), &(pt->sys_timer[HDF5_FINE_WRITE_FIXED_DIMS]));
- else if(t == HDF5_GROSS_READ_FIXED_DIMS)
- pt->total_time[HDF5_FILE_READ_CLOSE] += sub_time(&(pt->sys_timer[t]), &(pt->sys_timer[HDF5_FINE_READ_FIXED_DIMS]));
-
- }
-
- if (sio_debug_level >= 4) {
- const char *msg;
-
- switch (t) {
- case HDF5_FILE_OPENCLOSE:
- msg = "File Open/Close";
- break;
- case HDF5_DATASET_CREATE:
- msg = "Dataset Create";
- break;
- case HDF5_MPI_WRITE:
- msg = "MPI Write";
- break;
- case HDF5_MPI_READ:
- msg = "MPI Read";
- break;
- case HDF5_FINE_WRITE_FIXED_DIMS:
- msg = "Fine Write";
- break;
- case HDF5_FINE_READ_FIXED_DIMS:
- msg = "Fine Read";
- break;
- case HDF5_GROSS_WRITE_FIXED_DIMS:
- msg = "Gross Write";
- break;
- case HDF5_GROSS_READ_FIXED_DIMS:
- msg = "Gross Read";
- break;
- case HDF5_RAW_WRITE_FIXED_DIMS:
- msg = "Raw Write";
- break;
- case HDF5_RAW_READ_FIXED_DIMS:
- msg = "Raw Read";
- break;
- default:
- msg = "Unknown Timer";
- break;
- }
-
- fprintf(output, " %s %s: %.2f\n", msg,
- (start_stop == TSTART ? "Start" : "Stop"),
- pt->total_time[t]);
- }
- }
-
- return pt;
-}
-
-/*
- * Function: get_time
- * Purpose: Get the time from a ``sio_time'' object.
- * Return: The number of seconds as a DOUBLE.
- * Programmer: Bill Wendling, 01. October 2001
- * Modifications:
- */
-double
-get_time(sio_time *pt, timer_type t)
-{
- return pt->total_time[t];
-}
-#ifdef STANDALONE
-#include "sio_standalone.c"
-#endif
-
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group. *
+ * All rights reserved. *
+ * *
+ * This file is part of HDF5. The full HDF5 copyright notice, including *
+ * terms governing use, modification, and redistribution, is contained in *
+ * the files COPYING and Copyright.html. COPYING can be found at the root *
+ * of the source code distribution tree; Copyright.html can be found at the *
+ * root level of an installed copy of the electronic HDF5 document set and *
+ * is linked from the top-level documents page. It can also be found at *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have *
+ * access to either file, you may request a copy from help at hdfgroup.org. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Purpose:
+ *
+ * This is a module of useful timing functions for performance testing.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "sio_timer.h"
+
+
+#include "sio_perf.h"
+
+/*
+ * The number to divide the tv_usec field with to get a nice decimal to add to
+ * the number of seconds.
+ */
+#define MICROSECOND 1000000.0
+
+/* global variables */
+sio_time *timer_g; /* timer: global for stub functions */
+
+/*
+ * Function: sub_time
+ * Purpose: Struct two time values, and return the difference, in microseconds
+ *
+ * Note that the function assumes that a > b
+ * Programmer: Leon Arber, 1/27/06
+ */
+static double sub_time(struct timeval* a, struct timeval* b)
+{
+ return (((double)a->tv_sec +
+ ((double)a->tv_usec) / MICROSECOND) -
+ ((double)b->tv_sec +
+ ((double)b->tv_usec) / MICROSECOND));
+}
+
+
+/*
+ * Function: sio_time_new
+ * Purpose: Build us a brand, spankin', new performance time object.
+ * The object is a black box to the user.
+ * Return: Pointer to sio_time object
+ * Programmer: Bill Wendling, 01. October 2001
+ * Modifications:
+ */
+sio_time *
+sio_time_new(void)
+{
+ sio_time *pt = (sio_time *)calloc(1, sizeof(struct sio_time_));
+
+ /* set global timer variable */
+ timer_g = pt;
+
+ return pt;
+}
+
+/*
+ * Function: sio_time_destroy
+ * Purpose: Remove the memory allocated for the sio_time object. Only
+ * need to call on a pointer allocated with the ``sio_time_new''
+ * function.
+ * Return: Nothing
+ * Programmer: Bill Wendling, 01. October 2001
+ * Modifications:
+ */
+void
+sio_time_destroy(sio_time *pt)
+{
+ HDfree(pt);
+ /* reset the global timer pointer too. */
+ timer_g = NULL;
+}
+
+
+
+/*
+ * Function: set_time
+ * Purpose: Set the time in a ``sio_time'' object.
+ * Return: Pointer to the passed in ``sio_time'' object.
+ * Programmer: Bill Wendling, 01. October 2001
+ * Modifications:
+ */
+sio_time *
+set_time(sio_time *pt, timer_type t, int start_stop)
+{
+ if (pt) {
+ if (start_stop == TSTART) {
+ HDgettimeofday(&pt->sys_timer[t], NULL);
+
+ /* When we start the timer for HDF5_FINE_WRITE_FIXED_DIMS or HDF5_FINE_READ_FIXED_DIMS
+ * we compute the time it took to only open the file */
+ if(t == HDF5_FINE_WRITE_FIXED_DIMS)
+ pt->total_time[HDF5_FILE_WRITE_OPEN] += sub_time(&(pt->sys_timer[t]), &(pt->sys_timer[HDF5_GROSS_WRITE_FIXED_DIMS]));
+ else if(t == HDF5_FINE_READ_FIXED_DIMS)
+ pt->total_time[HDF5_FILE_READ_OPEN] += sub_time(&(pt->sys_timer[t]), &(pt->sys_timer[HDF5_GROSS_READ_FIXED_DIMS]));
+
+
+ } else {
+ struct timeval sys_t;
+
+ HDgettimeofday(&sys_t, NULL);
+ pt->total_time[t] += sub_time(&sys_t, &(pt->sys_timer[t]));
+
+/* ((double)sys_t.tv_sec +
+ ((double)sys_t.tv_usec) / MICROSECOND) -
+ ((double)pt->sys_timer[t].tv_sec +
+ ((double)pt->sys_timer[t].tv_usec) / MICROSECOND);*/
+
+ /* When we stop the timer for HDF5_GROSS_WRITE_FIXED_DIMS or HDF5_GROSS_READ_FIXED_DIMS
+ * we compute the time it took to close the file after the last read/write finished */
+ if(t == HDF5_GROSS_WRITE_FIXED_DIMS)
+ pt->total_time[HDF5_FILE_WRITE_CLOSE] += sub_time(&(pt->sys_timer[t]), &(pt->sys_timer[HDF5_FINE_WRITE_FIXED_DIMS]));
+ else if(t == HDF5_GROSS_READ_FIXED_DIMS)
+ pt->total_time[HDF5_FILE_READ_CLOSE] += sub_time(&(pt->sys_timer[t]), &(pt->sys_timer[HDF5_FINE_READ_FIXED_DIMS]));
+
+ }
+
+ if (sio_debug_level >= 4) {
+ const char *msg;
+
+ switch (t) {
+ case HDF5_FILE_OPENCLOSE:
+ msg = "File Open/Close";
+ break;
+ case HDF5_DATASET_CREATE:
+ msg = "Dataset Create";
+ break;
+ case HDF5_MPI_WRITE:
+ msg = "MPI Write";
+ break;
+ case HDF5_MPI_READ:
+ msg = "MPI Read";
+ break;
+ case HDF5_FINE_WRITE_FIXED_DIMS:
+ msg = "Fine Write";
+ break;
+ case HDF5_FINE_READ_FIXED_DIMS:
+ msg = "Fine Read";
+ break;
+ case HDF5_GROSS_WRITE_FIXED_DIMS:
+ msg = "Gross Write";
+ break;
+ case HDF5_GROSS_READ_FIXED_DIMS:
+ msg = "Gross Read";
+ break;
+ case HDF5_RAW_WRITE_FIXED_DIMS:
+ msg = "Raw Write";
+ break;
+ case HDF5_RAW_READ_FIXED_DIMS:
+ msg = "Raw Read";
+ break;
+ default:
+ msg = "Unknown Timer";
+ break;
+ }
+
+ fprintf(output, " %s %s: %.2f\n", msg,
+ (start_stop == TSTART ? "Start" : "Stop"),
+ pt->total_time[t]);
+ }
+ }
+
+ return pt;
+}
+
+/*
+ * Function: get_time
+ * Purpose: Get the time from a ``sio_time'' object.
+ * Return: The number of seconds as a DOUBLE.
+ * Programmer: Bill Wendling, 01. October 2001
+ * Modifications:
+ */
+double
+get_time(sio_time *pt, timer_type t)
+{
+ return pt->total_time[t];
+}
+#ifdef STANDALONE
+#include "sio_standalone.c"
+#endif
+
diff --git a/release_docs/HISTORY-1_8.txt b/release_docs/HISTORY-1_8.txt
index f176cb3..fa18196 100644
--- a/release_docs/HISTORY-1_8.txt
+++ b/release_docs/HISTORY-1_8.txt
@@ -3,6 +3,7 @@ HDF5 History
This file contains development history of HDF5 1.8 branch
+15. Release Information for hdf5-1.8.13
14. Release Information for hdf5-1.8.12
13. Release Information for hdf5-1.8.11
12. Release Information for hdf5-1.8.10-patch1
@@ -20,8 +21,768 @@ This file contains development history of HDF5 1.8 branch
[Search on the string '%%%%' for section breaks of each release.]
+
+%%%%1.8.13%%%%
+
+
+HDF5 version 1.8.13 released on 2014-05-05
+================================================================================
+
+INTRODUCTION
+============
+
+This document describes the differences between HDF5-1.8.12 and
+HDF5-1.8.13, and contains information on the platforms tested and
+known problems in HDF5-1.8.13.
+For more details, see the files HISTORY-1_0-1_8_0_rc3.txt
+and HISTORY-1_8.txt in the release_docs/ directory of the HDF5 source.
+
+Links to the HDF5 1.8.13 source code, documentation, and additional materials
+can be found on the HDF5 web page at:
+
+ http://www.hdfgroup.org/products/hdf5/
+
+The HDF5 1.8.13 release can be obtained from:
+
+ http://www.hdfgroup.org/HDF5/release/obtain5.html
+
+User documentation for 1.8.13 can be accessed directly at this location:
+
+ http://www.hdfgroup.org/HDF5/doc/
+
+New features in the HDF5-1.8.x release series, including brief general
+descriptions of some new and modified APIs, are described in the "What's New
+in 1.8.0?" document:
+
+ http://www.hdfgroup.org/HDF5/doc/ADGuide/WhatsNew180.html
+
+All new and modified APIs are listed in detail in the "HDF5 Software Changes
+from Release to Release" document, in the section "Release 1.8.13 (current
+release) versus Release 1.8.12":
+
+ http://www.hdfgroup.org/HDF5/doc/ADGuide/Changes.html
+
+If you have any questions or comments, please send them to the HDF Help Desk:
+
+ help at hdfgroup.org
+
+
+CONTENTS
+========
+
+- New Features
+- Support for New Platforms, Languages, and Compilers
+- Bug Fixes since HDF5-1.8.12
+- Supported Platforms
+- Supported Configuration Features Summary
+- More Tested Platforms
+- Known Problems
+
+
+New Features
+============
+
+ Configuration
+ -------------
+ - Autotools: Automake updated to 1.14.1 (ADB - 2014/04/08)
+
+ - CMake: Moved minimum CMake version to 2.8.11 which enables better library
+ include processing. (ADB - 2014/03/26)
+
+ - When configuring a thread-safe HDF5 Library it is no longer necessary
+ to specify --enable-threadsafe with --with-pthreads if the Pthreads
+ library is in a standard location. (DER - 2014/04/11 HDFFV-8693)
+
+ Library
+ -------
+ - Added an H5free_memory API call. This should be used to free memory
+ that has been allocated by HDF5 API calls. H5Tget_member_name and
+ H5Pget_class_name are two examples. The main motivation for this call
+ is Windows, where it is common for application code and the HDF5 Library
+ to be using different C run-time libraries (CRT). Using the new call
+ ensures that the same CRT handles both the allocation and free. This
+ new function can also be useful in any case where the library uses a
+ different memory manager than the application, such as when a debug
+ memory manager is in use or when the HDF5 Library is wrapped for use
+ in a managed language like Python or Java. Fixes HDFFV-7710, 8519,
+ and 8851. (DER - 2014/04/11)
+
+ - The Core VFD (aka Memory VFD) can now be configured to track dirty
+ regions in the file and only write out the changed regions on
+ flush/close. Additionally, a "page aggregation" size can be set that
+ will aggregate small writes into larger writes. For example, setting
+ a 1 MiB page aggregation size will logically partition the the
+ in-memory file into 1 MiB pages that will be written out in their
+ entirety if even a single byte is dirtied. The feature is controlled
+ via the new H5Pset/get_core_write_tracking() API call. A new
+ "core_paged" target has been added to the check-vfd target in
+ test/Makefile.am that exercises the feature over all HDF5 VFD-aware
+ tests. (DER - 2014/04/12)
+
+ Parallel Library
+ ----------------
+ - Removed MPI-POSIX VFD, as it wasn't helping anyone and was just
+ generating support questions. Application developers performing
+ parallel I/O should always use the MPI-IO VFD.
+ (QAK - 2014/03/28 HDFFV-8659)
+
+ - Improved parallel I/O support to allow collective I/O on point
+ selections. (QAK - 2014/03/15)
+
+ Tools
+ -----
+ - None
+
+ High-Level APIs
+ ---------------
+ - None
+
+ Fortran API
+ -----------
+ - Wrappers h5pset_file_image_f and h5pget_file_image_f were added to the
+ library. (MSB - 2014/1/2014)
+
+ C++ API
+ -------
+ - The following new features are added:
+ + Wrappers to class H5Object to get an object's name (HDFFV-8548).
+ ssize_t getObjName(char *obj_name, size_t buf_size = 0)
+ ssize_t getObjName(H5std_string& obj_name, size_t len = 0)
+ H5std_string getObjName()
+ + Wrappers to class H5CommonFG to get a child object's type from a
+ group or file (HDFFV-8367).
+ H5O_type_t childObjType(const H5std_string& objname)
+ H5O_type_t childObjType(const char* objname)
+ H5O_type_t childObjType(hsize_t index,
+ H5_index_t index_type=H5_INDEX_NAME,
+ H5_iter_order_t order=H5_ITER_INC, const char* objname=".")
+ + Wrappers to class DSetMemXferPropList for setting/getting a transform
+ property list (HDFFV-7907).
+ DSetMemXferPropList(const char* expression);
+ void setDataTransform(const char* expression)
+ void setDataTransform(const H5std_string& expression)
+ ssize_t getDataTransform(char* exp, size_t buf_size=0)
+ H5std_string getDataTransform()
+ + Wrapper to CompType for setting size to compound datatype (HDFFV-8642).
+ void setSize(size_t size)
+ + Overloaded functions to provide prototypes that declare constant
+ arguments const (HDFFV-3384). These include:
+ DataSet::fillMemBuf
+ DataSet::getVlenBufSize
+ DataSpace::extentCopy
+ DataType::commit
+ FileAccPropList::setSplit
+ H5File::getVFDHandle
+ + Additional overload to class H5Location to get a comment as a char*
+ ssize_t getComment(const char* name, size_t buf_size, char* comment)
+ + Additional overloads to class Attribute to get an attribute's name for
+ convenience:
+ ssize_t getName(char* attr_name, size_t buf_size=0)
+ ssize_t getName(H5std_string& attr_name, size_t buf_size=0)
+ (BMR, 2014/04/15)
+ + A static wrapper to Exception for printing the error stack without an
+ instance of Exception
+ static void printErrorStack(FILE* stream = stderr,
+ hid_t err_stack = H5E_DEFAULT);
+ (BMR, 2014/04/25)
+
+
+Support for New Platforms, Languages, and Compilers
+===================================================
+ Mac OS X 10.6 Snow Leopard is not supported by Apple any more. In view of
+ the added support of Mac OS X 10.9, Mac OS X 10.6 is retired from HDF5
+ supported platforms. (AKC - 2014/03/14 HDFFV-8704)
+
+ Mac OS X 10.9 Mavericks is supported. (AKC - 2014/03/04 HDFFV-8694)
+
+
+Bug Fixes since HDF5-1.8.12
+===========================
+
+ Configuration
+ -------------
+ - CMake: When CMake commands are executed individually on the command line
+ and the external filters are being built, the CMAKE_BUILD_TYPE define
+ must be set to the same value as the configuration
+ (-DCMAKE_BUILD_TYPE:STRING=Release if using -C Release). This is needed
+ by the the szip and zlib filter build commands. (ADB - HDFFV-8695)
+
+ - CMake: Removed use of the XLATE_UTILITY program.
+ (ADB - 2014/03/28 HDFFV-8640)
+
+ - CMake: Added missing quotes in setting the CMAKE_EXE_LINKER_FLAGS for the
+ MPI option. (ADB - 2014/02/27 HDFFV-8674)
+
+ - CMake: Configuration of the HDF5 C++ or Fortran libraries with the
+ thread-safety feature.
+
+ C++ and/or Fortran + thread-safe is enforced as a non-supported
+ configuration. This matches the autotools. (DER - 2014/04/11)
+
+ - CMake: Configuration of static HDF5 C library with the thread-safety
+ feature.
+
+ Static + thread-safe + Win32 threads is not a supported configuration
+ due to the inability to automatically clean up thread-local storage.
+ This is expected to be fixed in a future release. In the meantime, a
+ work-around that uses internal functionality may allow the combination
+ to be used without resource leaks. Contact the help desk for more
+ information. (DER - 2014/04/11)
+
+ - Autotools: Several changes were done to configure and installcheck.
+
+ An export of LD_LIBRARY_PATH=<szip library location> was
+ removed from configure; make installcheck was revised to run
+ scripts installed in share/hdf5_examples to use the installed h5cc, etc.
+ to compile and run example source files also installed there.
+
+ Make installcheck will now fail when a shared szip or other external lib
+ file cannot be found in the same manner that executables compiled and
+ linked with h5cc will fail to run when those lib files cannot be found
+ after install. Make installcheck should pass after setting
+ LD_LIBRARY_PATH to the szip location. (LRK - 2014/04/16)
+
+ Library
+ -------
+ - A Gnu Make directive (.NOTPARALLEL) is added to fortran/test/Makefile.
+
+ AIX native make does not support this directive and would fail if
+ parallel make (e.g. make -j4) is used to build the library. AIX users
+ either do not use parallel make or install Gnu Make to build the library.
+ (AKC 2014/04/08 HDFFV-8738)
+
+ - H5R.c: H5Rget_name gave an assertion failure if the "name" parameter
+ was NULL.
+
+ Fixed H5Rget_name to return the size of the buffer needed to read a
+ name of the referenced object in this case. The size doesn't include
+ the NULL terminator. H5Rget_name returns negative on failure.
+ (MSB - 2014/01/22 HDFFV-8620)
+
+ - H5Z.c: H5Zfilter_avail didn't check if a filter was available as a
+ dynamically loaded filter. The error manifested itself in the h5repack
+ tool when removing user-defined dynamically loaded filter.
+
+ Added a code to find the filter among the dynamically loaded filters
+ after the function fails to find it among the registered filters.
+ (ADB - 2014/03/03 HDFFV-8629)
+
+ - Memory leak: a memory leak was observed in conjunction to the
+ H5TS_errstk_key_g thread-local variable allocated in the H5E_get_stack
+ function in H5E.c.
+
+ The shared HDF5 thread-safe library now no longer leaks thread-local
+ storage resources on Windows with Win32 threads. Currently, there is
+ no solution for this problem when HDF5 is statically built. We
+ disabled the build of the static HDF5 thread-safe library with
+ Win32 threads. (DER - 2014/04/11 HDFFV-8518)
+
+ - H5Dio.c: Improved handling of NULL pointers to H5Dread/H5Dwrite
+ calls. Credit to Jason Newton (nevion at gmail.com) for the original patch.
+
+ H5Dwrite/read failed when a NULL pointer was passed for a data buffer
+ and 0 elements were selected. Fixed. (QAK - 2014/04/16 HDFFV-8705)
+
+ - Deprecated API (1_6 API): Improved handling of closing the library and
+ re-accessing it with a deprecated routine.
+
+ When a program used a deprecated API (for example, H5Gcreate1),
+ closed the library, and reopened it again to access a group, dataset,
+ datatype, dataspace, attribute, or property list, HDF5 failed to
+ provide an identifier for the object. Fixed.
+ (NAF, QAK - 2014/04/16 HDFFV-8232)
+
+ Parallel Library
+ ----------------
+ - Fixed a missing H5F_Provisional module in HDF5mpio.f90
+ (MSB - 2014/2/7 HDFFV-8651)
+
+ Performance
+ -------------
+ - None
+
+ Tools
+ -----
+ - The h5diff tool would report that a datafile compared with an exact
+ copy of the same datafile had differences. This was due to the issue
+ below of reading un-written chunks. This problem is also fixed.
+ (AKC - 2014/05/01 HDFFV-8637)
+
+ - The h5dump and h5diff utilities occasionally produced different output
+ between Linux and Windows systems. This has been fixed.
+
+ This happened to datasets that used chunked storage, with default fill
+ values, and some of the chunks had not been written.
+ When the dataset was read, the library failed to write the default fill
+ values to parts of the use buffer that were associated with the unwritten
+ chunks. (JP - 2014/05/01 HDFFV-8247)
+
+ - The compress option is retired from bin/release.
+ (AKC - 2014/04/25 HDFFV-8755)
+
+ - bin/release has a new option "zip" that produces a release zip file for
+ the Windows platform. (AKC - 2014/04/24 HDFFV-8433)
+
+ - h5diff: Several failures relating to handling of strings attributes
+ are fixed.
+
+ The tool crashed or gave an error message when one of the strings had
+ fixed size type and another variable-length size type. h5diff now flags such
+ strings as "not comparable". We plan to enhance the tool to handle
+ strings of the different types in the future releases.
+ (AKC - 2014/04/18 HDFFV-8625, 8639, 8745)
+
+ - h5repack: h5repack would not remove user-defined filters.
+ Fixed by modifying h5repack to check if the filter is registered or
+ can be dynamically loaded. (ADB - 2014/03/03 HDFFV-8629)
+
+ F90 API
+ -------
+ - H5D_CHUNK_CACHE_NSLOTS_DFLT_F and H5D_CHUNK_CACHE_NBYTES_DFLT_F were
+ changed from the default KIND for INTEGER to INTEGER of KIND size_t.
+ (MSB - 2014/3/31 HDFFV-8689)
+
+ C++ API
+ ------
+ - Added throw() to all exception destructors. Credit to Jason Newton
+ (nevion at gmail.com) for the patch. (BMR - 2014/4/15 HDFFV-8623)
+ - Changed the default value for H5Location::getComment from 256 to 0
+ to conform to C function and because it makes more sense.
+ (BMR - 2014/4/15)
+
+ High-Level APIs:
+ ------
+ - None
+
+ Fortran High-Level APIs:
+ ------
+ - None
+
+ Testing
+ -------
+ - testhdf5 now exits with EXIT_SUCCESS(0) if no errors, else
+ EXIT_FAILURE(1). (AKC - 2014/01/27 HDFFV-8572)
+
+ - The big test now pays attention to the HDF5_DRIVER environment variable.
+ Previously, it would run all tests with the family, stdio, and sec2
+ virtual file drivers (VFDs) for each VFD in the check-vfd make target,
+ regardless of the variable setting. It now checks the variable and
+ either runs the appropriate VFD-specific tests or skips as needed.
+ This saves much testing time. Fixes HDFFV-8554. (DER - 2014/04/11)
+
+Supported Platforms
+===================
+The following platforms are supported and have been tested for this release.
+They are built with the configure process unless specified otherwise.
+
+ AIX 5.3 xlc 10.1.0.5
+ (NASA G-ADA) xlC 10.1.0.5
+ xlf90 12.1.0.6
+ gmake v3.82
+
+ Linux 2.6.18-308.13.1.el5PAE GNU C (gcc), Fortran (gfortran), C++ (g++)
+ #1 SMP i686 i686 i386 compilers for 32-bit applications;
+ (jam) Version 4.1.2 20080704 (Red Hat 4.1.2-54)
+ Version 4.8.2
+ PGI C, Fortran, C++ Compilers for 32-bit
+ applications;
+ Version 13.7-0
+ Intel(R) C, C++, Fortran Compiler for 32-bit
+ applications;
+ Version 14.0.2 (Build 20140120)
+
+ Linux 2.6.18-371.6.1.el5 GNU C (gcc), Fortran (gfortran), C++ (g++)
+ #1 SMP x86_64 GNU/Linux compilers for 64-bit applications;
+ (koala) Version 4.1.2 20080704 (Red Hat 4.1.2-54)
+ Version 4.8.2
+ PGI C, Fortran, C++ for 64-bit target on
+ x86-64;
+ Version 13.7-0
+ Intel(R) C, C++, Fortran Compilers for
+ applications running on Intel(R) 64;
+ Version 14.0.2 (Build 20140120)
+
+ Linux 2.6.32-431.11.2.el6 GNU C (gcc), Fortran (gfortran), C++ (g++)
+ #1 SMP x86_64 GNU/Linux compilers:
+ (platypus) Version 4.4.7 20120313
+ Version 4.8.2
+ PGI C, Fortran, C++ for 64-bit target on
+ x86-64;
+ Version 13.7-0
+ Intel(R) C (icc), C++ (icpc), Fortran (icc)
+ compilers:
+ Version 14.0.2 (Build 20140120)
+
+ Linux 2.6.32-431.11.2.el6.ppc64 gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-3)
+ #1 SMP ppc64 GNU/Linux g++ (GCC) 4.4.7 20120313 (Red Hat 4.4.7-3)
+ (ostrich) GNU Fortran (GCC) 4.4.7 20120313 (Red Hat 4.4.7-3)
+ IBM XL C/C++ V11.1
+ IBM XL Fortran V13.1
+
+ SunOS 5.11 32- and 64-bit Sun C 5.12 SunOS_sparc
+ (emu) Sun Fortran 95 8.6 SunOS_sparc
+ Sun C++ 5.12 SunOS_sparc
+
+ Windows 7 Visual Studio 2008 w/ Intel Fortran 14 (cmake)
+ Visual Studio 2010 w/ Intel Fortran 14 (cmake)
+ Visual Studio 2012 w/ Intel Fortran 14 (cmake)
+ Cygwin(CYGWIN_NT-6.1 1.7.28(0.271/5/3) gcc(4.8.2) compiler and gfortran)
+ (cmake and autotools)
+
+ Windows 7 x64 Visual Studio 2008 w/ Intel Fortran 14 (cmake)
+ Visual Studio 2010 w/ Intel Fortran 14 (cmake)
+ Visual Studio 2012 w/ Intel Fortran 14 (cmake)
+
+ Windows 8.1 Visual Studio 2012 w/ Intel Fortran 14 (cmake)
+
+ Windows 8.1 x64 Visual Studio 2012 w/ Intel Fortran 14 (cmake)
+
+ Mac OS X Lion 10.7.3 Apple clang/clang++ version 3.0 from Xcode 4.6.1
+ 64-bit gfortran GNU Fortran (GCC) 4.6.2
+ (duck) Intel icc/icpc/ifort version 13.0.3
+
+ Mac OS X Mt. Lion 10.8.5 Apple clang/clang++ version 5.0 from Xcode 5.0.2
+ 64-bit gfortran GNU Fortran (GCC) 4.8.2
+ (swallow/kite) Intel icc/icpc/ifort version 14.0.2
+
+ Mac OS X Mavericks 10.9.2 Apple clang/clang++ version 5.1 from Xcode 5.1
+ 64-bit gfortran GNU Fortran (GCC) 4.8.2
+ (wren/quail) Intel icc/icpc/ifort version 14.0.2
+
+
+Tested Configuration Features Summary
+=====================================
+
+ In the tables below
+ y = tested
+ n = not tested in this release
+ C = Cluster
+ W = Workstation
+ x = not working in this release
+ dna = does not apply
+ ( ) = footnote appears below second table
+ <blank> = testing incomplete on this feature or platform
+
+Platform C F90/ F90 C++ zlib SZIP
+ parallel F2003 parallel
+Solaris2.11 32-bit n y/y n y y y
+Solaris2.11 64-bit n y/y n y y y
+Windows 7 y y/y n y y y
+Windows 7 x64 y y/y n y y y
+Windows 7 Cygwin n y/y n y y y
+Windows 8.1 n y/y n y y y
+Windows 8.1 x64 n y/y n y y y
+Mac OS X Lion 10.7.3 64-bit n y/y n y y y
+Mac OS X Mountain Lion 10.8.1 64-bit n y/y n y y y
+Mac OS X Mavericks 10.9.1 64-bit n y/y n y y y
+AIX 5.3 32- and 64-bit n y/n n y y y
+CentOS 5.9 Linux 2.6.18-308 i686 GNU y y/y y y y y
+CentOS 5.9 Linux 2.6.18-308 i686 Intel n y/y n y y y
+CentOS 5.9 Linux 2.6.18-308 i686 PGI n y/y n y y y
+CentOS 5.9 Linux 2.6.18 x86_64 GNU n y/y n y y y
+CentOS 5.9 Linux 2.6.18 x86_64 Intel n y/y n y y y
+CentOS 6.4 Linux 2.6.32 x86_64 GNU y y/y y y y y
+CentOS 6.4 Linux 2.6.32 x86_64 Intel n y/y n y y y
+CentOS 6.4 Linux 2.6.32 x86_64 PGI n y/y n y y y
+Linux 2.6.32-431.11.2.el6.ppc64 n y/n n y y y
+OpenVMS IA64 V8.4 n y/n n y y n
+
+Platform Shared Shared Shared Thread-
+ C libs F90 libs C++ libs safe
+Solaris2.11 32-bit y y y y
+Solaris2.11 64-bit y y y y
+Windows 7 y y y y
+Windows 7 x64 y y y y
+Windows 7 Cygwin n n n y
+Windows 8.1 y y y y
+Windows 8.1 x64 y y y y
+Mac OS X Lion 10.7.3 64-bit y n y y
+Mac OS X Mountain Lion 10.8.1 64-bit y n y y
+Mac OS X Mavericks 10.9.1 64-bit y n y y
+AIX 5.3 32- and 64-bit y n n y
+CentOS 5.9 Linux 2.6.18-308 i686 GNU y y y y
+CentOS 5.9 Linux 2.6.18-308 i686 Intel y y y n
+CentOS 5.9 Linux 2.6.18-308 i686 PGI y y y n
+CentOS 5.9 Linux 2.6.18 x86_64 GNU y y y y
+CentOS 5.9 Linux 2.6.18 x86_64 Intel y y y n
+CentOS 6.4 Linux 2.6.32 x86_64 GNU y y y n
+CentOS 6.4 Linux 2.6.32 x86_64 Intel y y y n
+CentOS 6.4 Linux 2.6.32 x86_64 PGI y y y n
+Linux 2.6.32-431.11.2.el6.ppc64 y y y n
+OpenVMS IA64 V8.4 n n n n
+
+Compiler versions for each platform are listed in the preceding
+"Supported Platforms" table.
+
+
+More Tested Platforms
+=====================
+The following platforms are not supported but have been tested for this release.
+
+ Linux 2.6.18-308.13.1.el5PAE MPICH mpich 3.1 compiled with
+ #1 SMP i686 i686 i386 gcc 4.8.2 and gfortran 4.8.2
+ (jam) g95 (GCC 4.0.3 (g95 0.94!)
+
+ Linux 2.6.18-431.11.2.el6 MPICH mpich 3.1 compiled with
+ #1 SMP x86_64 GNU/Linux gcc 4.8.2 and gfortran 4.8.2
+ (platypus) g95 (GCC 4.0.3 (g95 0.94!)
+
+ FreeBSD 8.2-STABLE i386 gcc 4.5.4 [FreeBSD] 20110526
+ (loyalty) gcc 4.6.1 20110527
+ g++ 4.6.1 20110527
+ gfortran 4.6.1 20110527
+
+ FreeBSD 8.2-STABLE amd64 gcc 4.5.4 [FreeBSD] 20110526
+ (freedom) gcc 4.6.1 20110527
+ g++ 4.6.1 20110527
+ gfortran 4.6.1 20110527
+
+ Debian7.1.0 3.2.0-4-amd64 #1 SMP Debian 3.2.51-1 x86_64 GNU/Linux
+ gcc (Debian 4.7.2-5) 4.7.2
+ GNU Fortran (Debian 4.7.2-5) 4.7.2
+ (cmake and autotools)
+
+ Fedora20 3.11.10-301.fc20.x86_64 #1 SMP x86_64 x86_64 x86_64 GNU/Linux
+ gcc (GCC) 4.8.2 20131212 (Red Hat 4.8.2-7)
+ GNU Fortran (GCC) 4.8.2 20130603 (Red Hat 4.8.2-7)
+ (cmake and autotools)
+
+ SUSE 13.1 3.11.6-4-desktop #1 SMP PREEMPT x86_64 x86_64 x86_64 GNU/Linux
+ gcc (SUSE Linux) 4.8.1
+ GNU Fortran (SUSE Linux) 4.8.1
+ (cmake and autotools)
+
+ Ubuntu 13.10 3.11.0-13-generic #20-Ubuntu SMP x86_64 GNU/Linux
+ gcc (Ubuntu/Linaro 4.8.1-10ubuntu8) 4.8.1
+ GNU Fortran (Ubuntu/Linaro 4.8.1-10ubuntu8) 4.8.1
+ (cmake and autotools)
+
+ Cray Linux Environment (CLE) PrgEnv-pgi/4.0.46
+ hopper.nersc.gov pgcc 12.5-0 64-bit target on x86-64 Linux -tp shanghai
+ pgf90 12.5-0 64-bit target on x86-64 Linux -tp shanghai
+ pgCC 12.5-0 64-bit target on x86-64 Linux -tp shanghai
+
+
+Known Problems
+==============
+* When reading or writing a dataset (H5Dread/H5Dwrite) with a large selection
+ size (e.g., 2GB ~= 500 million of 4 bytes integers or floating point
+ numbers), some I/O systems may not be able to process it correctly.
+ We advise users to find out system limits before using large selections. If
+ I/O size limits exist, application should use HDF5 partial I/O capabilities
+ (e.g., H5Sselect_hyperslab(...)) to divide large requests into smaller sizes.
+ In this case we also advise users not to use chunk storage sizes larger that
+ 2GB since the HDF5 library performs I/O on the entire chunk. We will work
+ on the HDF5 library to divide large data requests to smaller I/O requests.
+ (AKC 2014/05/02 HDFFV-8479)
+
+* Due to an Intel compiler bug introduced in version 14.0.1, the HDF5 FORTRAN
+ wrappers do not work with configure option --enable-fortran2003.
+ However, the option --enable-fortran works with Intel 14.0.1. The compiler
+ bug was fixed in Intel version 14.0.2 and resolved the issue.
+ (MSB - 2014/4/15)
+
+* Due to a PGI compiler bug introduced in versions before 13.3 and versions
+ after 14.2, the FORTRAN test 'Testing get file image' will fail.
+ (MSB - 2014/4/15)
+
+* On CYGWIN, when building the library dynamically, testing will fail on
+ dynamically loaded filters. The test process will build dynamic filter
+ libraries with the *.dll.a extension, and the HDF5 Library will be looking
+ for *.so libraries. Entered as issue HDFFV-8736. (ADB - 2014/04/14)
+
+* A Gnu Make directive (.NOTPARALLEL) is added to fortran/test/Makefile.
+ AIX native make does not support this directive and would fail if
+ parallel make (e.g. make -j4) is used to build the library. AIX users
+ either do not use parallel make or install Gnu Make to build the library.
+ (AKC 2014/04/08 HDFFV-8738)
+
+* CLANG compiler with the options -fcatch-undefined-behavior and -ftrapv
+ catches some undefined behavior in the alignment algorithm of the macro
+ DETECT_I in H5detect.c. Since the algorithm is trying to detect the alignment
+ of integers, ideally the flag -fcatch-undefined-behavior should not to be
+ used for H5detect.c. In the future, we can separate flags for H5detect.c
+ from the rest of the library. (SLU - 2013/10/16 HDFFV-8147)
+
+* Make provided by Solaris fails in "make check". Solaris users should use
+ gmake to build and install the HDF5 software. (AKC - 2013/10/08 - HDFFV-8534)
+
+* On OpenVMS, two soft conversion functions (H5T__conv_i_f and H5T__conv_f_i)
+ have bugs. They convert data between floating-point numbers and integers.
+ But the library's default is hard conversion. The user should avoid
+ explicitly enabling soft conversion between floating-point numbers and
+ integers. (Issue VMS-8; SLU - 2013/09/19)
+
+* On OpenVMS, ZLIB 1.2.8 library doesn't work properly. ZLIB 1.2.5 works
+ fine. So please use ZLIB 1.2.5 to build HDF5 library. (Issue VMS-5;
+ SLU 2013/09/19)
+
+* When building using the Cray compilers on Cray machines, HDF5
+ configure mistakenly thinks the compiler is an intel compiler and
+ sets the -std=c99 flag which breaks configure on Cray. To build HDF5
+ properly on a Cray machine, please consult with the instructions in
+ INSTALL_parallel for building on Hopper.
+ (MSC - 2013/04/26 - HDFFV-8429)
+
+* The 5.9 C++ compiler on Sun failed to compile a C++ test ttypes.cpp. It
+ complains with this message:
+ "/home/hdf5/src/H5Vprivate.h", line 130: Error: __func__ is not defined.
+
+ The reason is that __func__ is a predefined identifier in C99 standard. The
+ HDF5 C library uses it in H5private.h. The test ttypes.cpp includes
+ H5private.h (H5Tpkg.h<-H5Fprivate.h<-H5Vprivate.h<-H5private.h). Sun's 5.9
+ C++ compiler doesn't support __func__, thus fails to compile the C++ test.
+ But Sun's 5.11 C++ compiler does. To check whether your Sun C++ compiler
+ knows this identifier, try to compile the following simple C++ program:
+ #include<stdio.h>
+
+ int main(void)
+ {
+ printf("%s\n", __func__);
+ return 0;
+ }
+ (SLU - 2012/11/5)
+
+* The C++ and FORTRAN bindings are not currently working on FreeBSD with the
+ native release 8.2 compilers (4.2.1), but are working with gcc 4.6 from the
+ ports (and probably gcc releases after that).
+ (QAK - 2012/10/19)
+
+* The following h5dump test case fails in BG/P machines (and potentially other
+ machines that use a command script to launch executables):
+
+ h5dump --no-compact-subset -d "AHFINDERDIRECT::ah_centroid_t[0] it=0 tl=0"
+ tno-subset.h5
+
+ This is due to the embedded spaces in the dataset name being interpreted
+ by the command script launcher as meta-characters, thus passing three
+ arguments to h5dump's -d flag. The command passes if run by hand, just
+ not via the test script.
+ (AKC - 2012/05/03)
+
+* On hopper, the build failed when RUNSERIAL and RUNPARALLEL are set
+ to aprun -np X, because the H5lib_settings.c file was not generated
+ properly. Not setting those environment variables works, because
+ configure was able to automatically detect that it's a Cray system
+ and used the proper launch commands when necessary.
+ (MSC - 2012/04/18)
+
+* The data conversion test dt_arith.c fails in "long double" to integer
+ conversion on Ubuntu 11.10 (3.0.0.13 kernel) with GCC 4.6.1 if the library
+ is built with optimization -O3 or -O2. The older GCC (4.5) or newer kernal
+ (3.2.2 on Fedora) doesn't have the problem. Users should lower the
+ optimization level (-O1 or -O0) by defining CFLAGS in the command line of
+ "configure" like:
+
+ CFLAGS=-O1 ./configure
+
+ This will overwrite the library's default optimization level.
+ (SLU - 2012/02/07 - HDFFV-7829)
+ This issue is no longer present on Ubuntu 12.10 (3.5.0 kernel) with
+ gcc 4.7.2.
+
+* The STDIO VFD does not work on some architectures, possibly due to 32/64
+ bit or large file issues. The basic STDIO VFD test is known to fail on
+ 64-bit SunOS 5.10 on SPARC when built with -m64 and 32-bit OS X/Darwin
+ 10.7.0. The STDIO VFD test has been disabled while we investigate and
+ a fix should appear in a future release.
+ (DER - 2011/10/14 - HDFFV-8235)
+
+* h5diff can report inconsistent results when comparing datasets of enum type
+ that contain invalid values. This is due to how enum types are handled in
+ the library and will be addressed in a future release.
+ (DER - 2011/10/14 - HDFFV-7527)
+
+* The links test can fail under the stdio VFD due to some issues with external
+ links. This will be investigated and fixed in a future release.
+ (DER - 2011/10/14 - HDFFV-7768)
+
+* After the shared library support was fixed for some bugs, it was discovered
+ that "make prefix=XXX install" no longer works for shared libraries. It
+ still works correctly for static libraries. Therefore, if you want to
+ install the HDF5 shared libraries in a location such as /usr/local/hdf5,
+ you need to specify the location via the --prefix option during configure
+ time. E.g, ./configure --prefix=/usr/local/hdf5 ...
+ (AKC - 2011/05/07 - HDFFV-7583)
+
+* The parallel test, t_shapesame, in testpar/, may run for a long time and may
+ be terminated by the alarm signal. If that happens, one can increase the
+ alarm seconds (default is 1200 seconds = 20 minutes) by setting the
+ environment variable, $HDF5_ALARM_SECONDS, to a larger value such as 3600
+ (60 minutes). Note that the t_shapesame test may fail in some systems
+ (see the "While working on the 1.8.6 release..." problem below). If
+ it does, it will waste more time if $HDF5_ALARM_SECONDS is set
+ to a larger value.
+ (AKC - 2011/05/07)
+
+* The C++ and FORTRAN bindings are not currently working on FreeBSD.
+ (QAK - 2011/04/26)
+
+* Shared Fortran libraries are not quite working on AIX. While they are
+ generated when --enable-shared is specified, the fortran and hl/fortran
+ tests fail. We are looking into the issue. HL and C++ shared libraries
+ should now be working as intended, however.
+ (MAM - 2011/04/20)
+
+* The --with-mpe configure option does not work with Mpich2.
+ (AKC - 2011/03/10)
+
+* While working on the 1.8.6 release of HDF5, a bug was discovered that can
+ occur when reading from a dataset in parallel shortly after it has been
+ written to collectively. The issue was exposed by a new test in the parallel
+ HDF5 test suite, but had existed before that. We believe the problem lies with
+ certain MPI implementations and/or file systems.
+
+ We have provided a pure MPI test program, as well as a standalone HDF5
+ program, that can be used to determine if this is an issue on your system.
+ They should be run across multiple nodes with a varying number of processes.
+ These programs can be found at:
+ http://www.hdfgroup.org/ftp/HDF5/examples/known_problems/
+ (NAF - 2011/01/19)
+
+* All the VFL drivers aren't backward compatible. In H5FDpublic.h, the
+ structure H5FD_class_t changed in 1.8. There is new parameter added to
+ get_eoa and set_eoa callback functions. A new callback function
+ get_type_map was added in. The public function H5FDrealloc was taken
+ out in 1.8. The problem only happens when users define their own driver
+ for 1.6 and try to plug in 1.8 library. Because there's only one user
+ complaining about it, we (Elena, Quincey, and I) decided to leave it as
+ it is (see bug report #1279). Quincey will make a plan for 1.10.
+ (SLU - 2010/02/02)
+
+* The --enable-static-exec configure flag will only statically link libraries
+ if the static version of that library is present. If only the shared version
+ of a library exists (i.e., most system libraries on Solaris, AIX, and Mac,
+ for example, only have shared versions), the flag should still result in a
+ successful compilation, but note that the installed executables will not be
+ fully static. Thus, the only guarantee on these systems is that the
+ executable is statically linked with just the HDF5 library.
+ (MAM - 2009/11/04)
+
+* Parallel tests failed with 16 processes with data inconsistency at testphdf5
+ / dataset_readAll. Parallel tests also failed with 32 and 64 processes with
+ collective abort of all ranks at t_posix_compliant / allwrite_allread_blocks
+ with MPI IO.
+ (CMC - 2009/04/28)
+
+* On an Intel 64 Linux cluster (RH 4, Linux 2.6.9) with Intel 10.0 compilers,
+ use -mp -O1 compilation flags to build the libraries. A higher level of
+ optimization causes failures in several HDF5 library tests.
+
+* A dataset created or rewritten with a v1.6.3 library or after cannot be read
+ with the v1.6.2 library or before when the Fletcher32 EDC filter is enabled.
+ There was a bug in the calculation of the Fletcher32 checksum in the
+ library before v1.6.3; the checksum value was not consistent between big-
+ endian and little-endian systems. This bug was fixed in Release 1.6.3.
+ However, after fixing the bug, the checksum value was no longer the same as
+ before on little-endian system. Library releases after 1.6.4 can still read
+ datasets created or rewritten with an HDF5 library of v1.6.2 or before.
+ (SLU - 2005/06/30)
+
+
%%%%1.8.12%%%%
+
HDF5 version 1.8.12 released on 2013-11-04
================================================================================
@@ -611,8 +1372,10 @@ Known Problems
datasets created or rewritten with an HDF5 library of v1.6.2 or before.
(SLU - 2005/06/30)
+
%%%%1.8.11%%%%
+
HDF5 version 1.8.11 released on 2013-05-08
================================================================================
@@ -1228,6 +1991,7 @@ Known Problems
%%%%1.8.10-patch1%%%%
+
HDF5 version 1.8.10-patch1 released on 2013-01-22
================================================================================
diff --git a/release_docs/INSTALL b/release_docs/INSTALL
index 8e8f46c..d687986 100644
--- a/release_docs/INSTALL
+++ b/release_docs/INSTALL
@@ -130,22 +130,26 @@ CONTENTS
datasets. For more information about Szip compression and license
terms, see http://hdfgroup.org/doc_resource/SZIP/.
- Precompiled Szip binaries for each supported platform and a source
- tar file can be found at ftp://ftp.hdfgroup.org/lib-external/szip/.
-
+ The Szip source code can be obtained from the HDF5 Download page
+ http://www.hdfgroup.org/HDF5/release/obtain5.html#extlibs. Building
+ instructions are available with the Szip source code.
+
+ The HDF Group does not distribute separate Szip precompiled libraries,
+ but the HDF5 binaries available from
+ http://www.hdfgroup.org/HDF5/release/obtain5.html include
+ the Szip encoder enabled binary for the corresponding platform.
+
To configure the HDF5 Library with the Szip compression filter, use
the '--with-szlib=/PATH_TO_SZIP' flag. For more information, see
section 4.3.7, "Specifying other libraries and headers."
- Starting with release 1.6.3, Szip library binaries are distributed
- with the encoder enabled (a license may be required to use this binary)
- and with the encoder disabled (freely usable without a license).
- If the encoder enabled binary is used, Szip compression encoding is
- available for an HDF5 application; if the encoder disabled binary is
- used, Szip compression is not available. Szip decoding is always
- available for applications (i.e., an HDF5 application can always read
- Szip-compressed data) if the Szip filter is present, regardless of the
- binary used.
+ Please notice that if HDF5 configure cannot find a valid Szip library,
+ configure will not fail; in this case, the compression filter will
+ not be available to the applications.
+
+ To check if Szip compression was successfully configured in,
+ check the "I/O filters (external):" line in the configure output,
+ summary section, printed to the standard output.
3.3. MPI and MPI-IO
The parallel version of the library is built upon the foundation
diff --git a/release_docs/INSTALL_CMake.txt b/release_docs/INSTALL_CMake.txt
index 36e8380..b831071 100644
--- a/release_docs/INSTALL_CMake.txt
+++ b/release_docs/INSTALL_CMake.txt
@@ -292,9 +292,8 @@ Notes: CMake and HDF5
how CMake support can be improved on any system. Visit the
KitWare site for more information about CMake.
- 3. Build and test results can be submitted to our CDash server at:
- cdash.hdfgroup.uiuc.edu.
- Please read the HDF and CDash document at:
+ 3. Build and test results can be submitted to our CDash server,
+ please read the HDF and CDash document at:
www.hdfgroup.org/CDash/HowToSubmit.
4. See the appendix at the bottom of this file for examples of using
@@ -402,9 +401,8 @@ These five steps are described in detail below.
set (HDF5_ENABLE_THREADSAFE OFF CACHE BOOL "(WINDOWS)Enable Threadsafety" FORCE)
set (HDF5_PACKAGE_EXTLIBS OFF CACHE BOOL "(WINDOWS)CPACK - include external libraries" FORCE)
set (HDF5_NO_PACKAGES OFF CACHE BOOL "CPACK - Disable packaging" FORCE)
- set (HDF5_ALLOW_EXTERNAL_SUPPORT "NO" CACHE STRING "Allow External Library Building" FORCE)
- set (ZLIB_SVN_URL "http://svn.hdfgroup.uiuc.edu/zlib/trunk" CACHE STRING "Use ZLib from HDF repository" FORCE)
- set (SZIP_SVN_URL "http://svn.hdfgroup.uiuc.edu/szip/trunk" CACHE STRING "Use SZip from HDF repository" FORCE)
+ set (HDF5_ALLOW_EXTERNAL_SUPPORT "NO" CACHE STRING "Allow External Library Building (NO SVN TGZ)" FORCE)
+ set_property (CACHE HDF5_ALLOW_EXTERNAL_SUPPORT PROPERTY STRINGS NO SVN TGZ)
set (ZLIB_TGZ_NAME "ZLib.tar.gz" CACHE STRING "Use ZLib from compressed file" FORCE)
set (SZIP_TGZ_NAME "SZip.tar.gz" CACHE STRING "Use SZip from compressed file" FORCE)
set (ZLIB_PACKAGE_NAME "zlib" CACHE STRING "Name of ZLIB package" FORCE)
@@ -467,9 +465,9 @@ These five steps are described in detail below.
-DHDF5_ALLOW_EXTERNAL_SUPPORT:STRING="SVN"
The options to control the SVN URL (config/cmake/cacheinit.cmake file) are:
- ZLIB_SVN_URL:STRING="http://svn.hdfgroup.uiuc.edu/zlib/trunk"
- SZIP_SVN_URL:STRING="http://svn.hdfgroup.uiuc.edu/szip/trunk"
- These should be changed to your location. Also define CMAKE_BUILD_TYPE
+ ZLIB_SVN_URL:STRING="http://${svn_url}/zlib/trunk"
+ SZIP_SVN_URL:STRING="http://${svn_url}/szip/trunk"
+ ${svn_url} should be changed to your location. Also define CMAKE_BUILD_TYPE
to be the configuration type.
3.2.2 Or the external libraries (zlib and szip) can be configured
@@ -640,7 +638,7 @@ cmake_minimum_required(VERSION 2.8.10 FATAL_ERROR)
set(CTEST_SOURCE_NAME hdf5-1.8.13)
# this is the location of the source with ctest parameter hdf5src
# "ctest -S HDF518LinuxCmake.cmake,hdf5src -C Release -O hdf518static.log"
-set(CTEST_SOURCE_NAME ${CTEST_SCRIPT_ARG})
+#set(CTEST_SOURCE_NAME ${CTEST_SCRIPT_ARG})
# this is the location of the build directory
set(CTEST_BINARY_NAME ${CTEST_SOURCE_NAME}/build)
@@ -692,7 +690,7 @@ set(SITE_BUILDNAME_SUFFIX "SHARED")
######### Following controls source update ##########
#set(LOCAL_UPDATE "TRUE")
######### Following controls source repository ##########
-#set(REPOSITORY_URL "http://svn.hdfgroup.uiuc.edu/hdf5/branches/hdf5_1_8")
+#set(REPOSITORY_URL "http://svn.${hdfgroup_url}/hdf5/branches/hdf5_1_8")
#comment to use a uncompressed source folder
set(CTEST_USE_TAR_SOURCE "hdf5-1.8.13")
###################################################################
diff --git a/release_docs/INSTALL_Cygwin.txt b/release_docs/INSTALL_Cygwin.txt
index a7e5f67..a56895a 100644
--- a/release_docs/INSTALL_Cygwin.txt
+++ b/release_docs/INSTALL_Cygwin.txt
@@ -2,14 +2,20 @@
HDF5 Build and Install Instructions for Cygwin
************************************************************************
+This document is a instruction on how to build, test and install HDF5 libary on
+Cygwin. See detailed information in hdf5/INSTALL.
+
+NOTE: hdf5 can be built with CMake, see the INSTALL_CMake.txt file for more guidance.
+
Preconditions:
--------------
-1. Installed Cygwin 1.7.15 or higher
+1. Installed Cygwin 1.7.25 or higher
To install the Cygwin net release, go to http://www.cygwin.com and
- click on "Install or update now!" icon. This will download a GUI
- installer called setup.txt which can be run to download a complete
+ click on "setup-x86.exe" (32-bit installation) under the heading
+ "Current Cygwin DLL version". This will download a GUI
+ installer called setup-x86.exe which can be run to download a complete
Cygwin installation via the internet. Then follow the instructions
on each screen to install Cygwin.
@@ -18,42 +24,46 @@ Preconditions:
http://www.cygwin.com/packages/ provides detailed information about
Cygwin packages.
- To build HDF5 on Cygwin, Devel package (including gcc,gcc-g++,
- gcc-gfortran, and gcc-java compiles, and gdb tool) should be installed.
+ Most required dependencies can be satisfied by installing all packages in
+ the "Devel" category. However, please verify that you have installed all
+ packages listed below.
-2. Compilers Installed
+2. Compilers, Libraries and Utilities Installed
- 2.1 C/C++ Compilers HDF5-1.8 Supported
-
- gcc (4.5.3), which includes:
+ 2.1 Compilers Supported
+
+ The following compilers are supported by HDF5 and included in the Cygwin
+ package system:
+ gcc (4.7.3), which includes:
gcc4-core : C compiler
gcc4-g++ : C++ compiler
gcc4-fortran : fortran compiler
+
- 2.2 Using Compilers Not Supported
-
- The compilers in 2.1 are supported and tested by HDF
- group. Any other compilers may still work but they are not
- guaranteed by HDF group.
-
- If users want to use other compilers except those in 2.1,
- try to set the following variables to override the default
- choices.
+ 2.1.1 Using Compilers Not Supported
- CXX : C++ compiler command
- FC : Fortran compiler command
+ By default the current configuration uses vendor compilers; to use
+ another compiler run the following commands before running
+ configure:
+
+ setenv CC "foo -flags"
+ setenv FC "fffoo -flags"
For example, if users want to use pgf90 as fortran compiler, then
setenv FC pgf90
-
-3. HDF5 Dependencies
- 3.1 Zlib
+ See the configure help page (configure --help) for a list of
+ environment variables that have an affect on building the
+ library.
+
+ 2.2 HDF5 External Library Dependencies
+
+ 2.2.1 Zlib
- zlib-1.2.5 or later is supported and tested on Cygwin.
+ zlib-1.2.5 or later is supported and tested on Cygwin.
- 3.2 Szip
+ 2.2.2 Szip
The HDF5 library has a predefined compression filter that uses
the extended-Rice lossless compression algorithm for chunked
datatsets. For more information about Szip compression and
@@ -64,9 +74,24 @@ Preconditions:
ftp://ftp.hdfgroup.org/lib-external/szip/2.1. Binary distribution can be
found under ftp://ftp.hdfgroup.org/lib-external/szip/2.1/bin/cygwin
-
-Install HDF5 on Cygwin
-----------------------
+
+ 2.3 Additional Utilities
+
+ The following standard utilities are also required to build and test HDF5:
+
+ bison : yacc implementation
+ flex : flex utility
+ make : make utility
+
+ 2.4 Alternate Build Process
+
+ Download the CMake package and follow the notes in the "INSTALL_CMake.txt"
+ file to build HDF5 with the CMake utilities.
+
+
+
+Build, Test and Install HDF5 on Cygwin
+--------------------------------------
1. Get HDF5 source code package
Users can download HDF5 source code package from HDF website
diff --git a/release_docs/INSTALL_parallel b/release_docs/INSTALL_parallel
index 6f60165..28068f1 100644
--- a/release_docs/INSTALL_parallel
+++ b/release_docs/INSTALL_parallel
@@ -23,8 +23,7 @@ with your system support staff of information how to compile an MPI program,
how to run an MPI application, and how to access the parallel file system.
There are sample MPI-IO C and Fortran programs in the appendix section of
"Sample programs". You can use them to run simple tests of your MPI compilers
-and the parallel file system. Also, the t_posix_compliant test in testpar
-verifies if the file system is POSIX compliant.
+and the parallel file system.
1.2. Further Help
@@ -236,6 +235,7 @@ $ make install
2.5.2 Hopper known issues
------------------------------
+Issue 1:
Sometimes when building the library with make, you might get this problem:
LD_LIBRARY_PATH="$LD_LIBRARY_PATH`echo | \
@@ -254,6 +254,22 @@ If that happens, you are probable running with make -j <x>. In that
case, you need to cleanup everything and start again as detailed above
but use serial make (do not use -j <x>).
+Issue 2:
+* When building using the Cray compilers on Cray machines, HDF5
+ configure mistakenly thinks the compiler is an intel compiler and
+ sets the -std=c99 flag which breaks configure on Cray. To build HDF5
+ properly on a Cray machine, please consult with the instructions in
+ INSTALL_parallel for building on Hopper.
+ (MSC - 2013/04/26 - HDFFV-8429)
+
+Issue 3:
+* On hopper, the build failed when RUNSERIAL and RUNPARALLEL are set
+ to aprun -np X, because the H5lib_settings.c file was not generated
+ properly. Not setting those environment variables works, because
+ configure was able to automatically detect that it's a Cray system
+ and used the proper launch commands when necessary.
+ (MSC - 2012/04/18)
+
3. Detail explanation
---------------------
@@ -322,11 +338,6 @@ non-zero code. Failure to support file size greater than 2GB is not a fatal
error for HDF5 because HDF5 can use other file-drivers such as families of
files to bypass the file size limit.
-The t_posix_compliant tests if the file system is POSIX compliant when POSIX
-and MPI IO APIs are used. This is for information only and it always exits
-with 0 even when non-compliance errors have occurred. This is to prevent
-the test from aborting the remaining parallel HDF5 tests unnecessarily.
-
The t_cache does many small sized I/O requests and may not run well in a
slow file system such as NFS disk. If it takes a long time to run it, try
set the environment variable $HDF5_PARAPREFIX to a file system more suitable
diff --git a/release_docs/RELEASE.txt b/release_docs/RELEASE.txt
index 9e9d8dd..9b08a23 100644
--- a/release_docs/RELEASE.txt
+++ b/release_docs/RELEASE.txt
@@ -1,40 +1,32 @@
-HDF5 version 1.8.13 released on 2014-05-05
+HDF5 version 1.8.14 released on 2014-11-12
================================================================================
INTRODUCTION
============
-This document describes the differences between HDF5-1.8.12 and
-HDF5-1.8.13, and contains information on the platforms tested and
-known problems in HDF5-1.8.13.
-For more details, see the files HISTORY-1_0-1_8_0_rc3.txt
-and HISTORY-1_8.txt in the release_docs/ directory of the HDF5 source.
+This document describes the differences between HDF5-1.8.13 and
+HDF5-1.8.14, and contains information on the platforms tested and
+known problems in HDF5-1.8.14.
-Links to the HDF5 1.8.13 source code, documentation, and additional materials
+All new and modified APIs are listed in the "HDF5 Software Changes
+from Release to Release" document along with details about previous
+releases at:
+
+ http://www.hdfgroup.org/HDF5/doc/ADGuide/Changes.html
+
+Links to the HDF5 1.8.14 source code, documentation, and additional materials
can be found on the HDF5 web page at:
http://www.hdfgroup.org/products/hdf5/
-The HDF5 1.8.13 release can be obtained from:
+The HDF5 1.8.14 release can be obtained from:
http://www.hdfgroup.org/HDF5/release/obtain5.html
-User documentation for 1.8.13 can be accessed directly at this location:
+User documentation for 1.8.14 can be accessed directly at this location:
http://www.hdfgroup.org/HDF5/doc/
-New features in the HDF5-1.8.x release series, including brief general
-descriptions of some new and modified APIs, are described in the "What's New
-in 1.8.0?" document:
-
- http://www.hdfgroup.org/HDF5/doc/ADGuide/WhatsNew180.html
-
-All new and modified APIs are listed in detail in the "HDF5 Software Changes
-from Release to Release" document, in the section "Release 1.8.13 (current
-release) versus Release 1.8.12":
-
- http://www.hdfgroup.org/HDF5/doc/ADGuide/Changes.html
-
If you have any questions or comments, please send them to the HDF Help Desk:
help at hdfgroup.org
@@ -45,7 +37,7 @@ CONTENTS
- New Features
- Support for New Platforms, Languages, and Compilers
-- Bug Fixes since HDF5-1.8.12
+- Bug Fixes since HDF5-1.8.13
- Supported Platforms
- Supported Configuration Features Summary
- More Tested Platforms
@@ -57,291 +49,382 @@ New Features
Configuration
-------------
- - Autotools: Automake updated to 1.14.1 (ADB - 2014/04/08)
-
- - CMake: Moved minimum CMake version to 2.8.11 which enables better library
- include processing. (ADB - 2014/03/26)
+ - bin/cmakehdf5 configures, builds and installs C, C++, Fortran and High
+ level API's. (It used to build the C API only).
+ (AKC 2014/10/17 HDFFV-8932).
- - When configuring a thread-safe HDF5 Library it is no longer necessary
- to specify --enable-threadsafe with --with-pthreads if the Pthreads
- library is in a standard location. (DER - 2014/04/11 HDFFV-8693)
-
Library
-------
- - Added an H5free_memory API call. This should be used to free memory
- that has been allocated by HDF5 API calls. H5Tget_member_name and
- H5Pget_class_name are two examples. The main motivation for this call
- is Windows, where it is common for application code and the HDF5 Library
- to be using different C run-time libraries (CRT). Using the new call
- ensures that the same CRT handles both the allocation and free. This
- new function can also be useful in any case where the library uses a
- different memory manager than the application, such as when a debug
- memory manager is in use or when the HDF5 Library is wrapped for use
- in a managed language like Python or Java. Fixes HDFFV-7710, 8519,
- and 8851. (DER - 2014/04/11)
-
- - The Core VFD (aka Memory VFD) can now be configured to track dirty
- regions in the file and only write out the changed regions on
- flush/close. Additionally, a "page aggregation" size can be set that
- will aggregate small writes into larger writes. For example, setting
- a 1 MiB page aggregation size will logically partition the the
- in-memory file into 1 MiB pages that will be written out in their
- entirety if even a single byte is dirtied. The feature is controlled
- via the new H5Pset/get_core_write_tracking() API call. A new
- "core_paged" target has been added to the check-vfd target in
- test/Makefile.am that exercises the feature over all HDF5 VFD-aware
- tests. (DER - 2014/04/12)
-
+ - None
+
Parallel Library
----------------
- - Removed MPI-POSIX VFD, as it wasn't helping anyone and was just
- generating support questions. Application developers performing
- parallel I/O should always use the MPI-IO VFD.
- (QAK - 2014/03/28 HDFFV-8659)
+ - Chunk Fill Writes Changed to Collective
+
+ Slow performance in chunk fill writes. Chunk fills
+ in the past were written independently by rank 0 one block
+ at a time.
+
+ Optimized the chunk fill write algorithm so that all
+ chunk fill values will be written collectively in a single MPI-IO
+ call. This should show a great performance improvement when
+ creating chunked datasets in parallel when the chunk dimensions
+ are fairly small.
+
+ (MSC - 2014/08/22, HDFFV-8878)
- - Improved parallel I/O support to allow collective I/O on point
- selections. (QAK - 2014/03/15)
-
Tools
-----
- None
- High-Level APIs
+ High-level APIs
---------------
- None
Fortran API
-----------
- - Wrappers h5pset_file_image_f and h5pget_file_image_f were added to the
- library. (MSB - 2014/1/2014)
+ - None
C++ API
-------
- - The following new features are added:
- + Wrappers to class H5Object to get an object's name (HDFFV-8548).
- ssize_t getObjName(char *obj_name, size_t buf_size = 0)
- ssize_t getObjName(H5std_string& obj_name, size_t len = 0)
- H5std_string getObjName()
- + Wrappers to class H5CommonFG to get a child object's type from a
- group or file (HDFFV-8367).
- H5O_type_t childObjType(const H5std_string& objname)
- H5O_type_t childObjType(const char* objname)
- H5O_type_t childObjType(hsize_t index,
- H5_index_t index_type=H5_INDEX_NAME,
- H5_iter_order_t order=H5_ITER_INC, const char* objname=".")
- + Wrappers to class DSetMemXferPropList for setting/getting a transform
- property list (HDFFV-7907).
- DSetMemXferPropList(const char* expression);
- void setDataTransform(const char* expression)
- void setDataTransform(const H5std_string& expression)
- ssize_t getDataTransform(char* exp, size_t buf_size=0)
- H5std_string getDataTransform()
- + Wrapper to CompType for setting size to compound datatype (HDFFV-8642).
- void setSize(size_t size)
- + Overloaded functions to provide prototypes that declare constant
- arguments const (HDFFV-3384). These include:
- DataSet::fillMemBuf
- DataSet::getVlenBufSize
- DataSpace::extentCopy
- DataType::commit
- FileAccPropList::setSplit
- H5File::getVFDHandle
- + Additional overload to class H5Location to get a comment as a char*
- ssize_t getComment(const char* name, size_t buf_size, char* comment)
- + Additional overloads to class Attribute to get an attribute's name for
- convenience:
- ssize_t getName(char* attr_name, size_t buf_size=0)
- ssize_t getName(H5std_string& attr_name, size_t buf_size=0)
- (BMR, 2014/04/15)
- + A static wrapper to Exception for printing the error stack without an
- instance of Exception
- static void printErrorStack(FILE* stream = stderr,
- hid_t err_stack = H5E_DEFAULT);
- (BMR, 2014/04/25)
+ - Initialization of Object IDs
+
+ The data member "id" in classes that represent HDF5 objects were
+ initialized to 0, which caused problem for some users.
+
+ Replaced 0 with H5I_INVALID_HID to initialize these "id"s. For the
+ PropList class, H5P_DEFAULT is used instead of H5I_INVALID_HID.
+
+ (BMR - 2014/09/30, HDFFV-4259)
+
Support for New Platforms, Languages, and Compilers
===================================================
- Mac OS X 10.6 Snow Leopard is not supported by Apple any more. In view of
- the added support of Mac OS X 10.9, Mac OS X 10.6 is retired from HDF5
- supported platforms. (AKC - 2014/03/14 HDFFV-8704)
+ - None
- Mac OS X 10.9 Mavericks is supported. (AKC - 2014/03/04 HDFFV-8694)
-
-
-Bug Fixes since HDF5-1.8.12
+Bug Fixes since HDF5-1.8.13
===========================
Configuration
-------------
- - CMake: When CMake commands are executed individually on the command line
- and the external filters are being built, the CMAKE_BUILD_TYPE define
- must be set to the same value as the configuration
- (-DCMAKE_BUILD_TYPE:STRING=Release if using -C Release). This is needed
- by the the szip and zlib filter build commands. (ADB - HDFFV-8695)
+ - CMake and SVN URLs
+
+ The SVN URLs will be different when the HDF Group domain name changes.
+
+ Removed the SVN URL references in the cacheinit.cmake and release_docs files.
+
+ (ADB - 2014/10/27, HDFFV-8953)
+
+ - CMake Packaging
+
+ A Fortran module was not generated if the compiler was not F2003
+ compliant.
+
+ Removed the module name from the package list of Fortran modules because
+ that module was never generated. This was only an issue for Fortran
+ compliers that are not F2003 compatible.
+
+ (ADB - 2014/10/16, HDFFV-8932)
+
+ - Shared Library Interface Version Number (soname)
+
+ In order to increase the maintainability of HDF5, an architectural
+ change was made which required the renaming of several public symbols in
+ H5Ppublic.h.
+
+ The shared libary interface version number ("soname") has been increased
+ on account of these changes. For a full list of the changed symbols, see
+ the interface compatibility report, which is available as a link off of
+ the 'HDF5 Software Changes from Release to Release' document:
+
+ http://www.hdfgroup.org/HDF5/doc/ADGuide/Changes.html
+
+ (AKC - 2014/10/03, HDFFV-8937)
+
+ - Configure Settings for Mac OSX Need Defaults for PROD_XXX, DEBUG_XXX,
+ and PROFILE_XXX
+
+ The configure setting files for Mac OSX (config/apple) did not
+ have the default settings of PROD_XXX, DEBUG_XXX, PROFILE_XXX.
+
+ Added the default settings. Mac platforms now builds library with
+ "-O3" optimization when the default clang compiler is used.
+
+ (AKC - 2014/10/01, HDFFV-8933)
+
+ - CMake ConfigureChecks
+
+ Two include files were missing from two C tests.
+
+ Propagated the configure test changes to H5_LDOUBLE_TO_INTEGER_WORKS_TEST
+ and H5_ULLONG_TO_LDOUBLE_PRECISION_TEST to ConfigureChecks.cmake (added
+ stdlib.h and string.h in the HDFTests.c file).
+
+ (ADB - 2014/09/02 HDFFV-8845)
+
+ - CMake Parallel Test Missing
+
+ The source file was removed in the previous release but the parallel
+ test t_posix_compliant was not.
+
+ Removed the t_posix_compliant parallel test from the library.
+
+ (ADB - 2014/8/14 HDFFV-8880)
- - CMake: Removed use of the XLATE_UTILITY program.
- (ADB - 2014/03/28 HDFFV-8640)
+ - Autotools Reconfigure. Bison. Flex.
+
+ The Bison and Flex files were out of date.
+
+ Bison was upgraded to 2.7, and Flex was upgraded to 2.5.37. The
+ bin/reconfigure script now will execute Bison and Flex and update
+ the hl/src files.
+
+ (ADB - 2014/06/16 HDFFV-8709)
- - CMake: Added missing quotes in setting the CMAKE_EXE_LINKER_FLAGS for the
- MPI option. (ADB - 2014/02/27 HDFFV-8674)
+ - Autotools Reconfigure. m4.
- - CMake: Configuration of the HDF5 C++ or Fortran libraries with the
- thread-safety feature.
+ The m4 macro processor was out of date.
+
+ Reconfigured Autotools with m4 upgraded to 1.4.17.
+
+ (ADB - 2014/06/12 HDFFV-8743)
+
+ - Autotools: Modified configure to add an entry at the beginning of AM_LDFLAGS
+ for the hdf5 install directory. Without this entry the relink commands
+ invoked by "make install" to create libraries dependent on libhdf5.so added
+ a dependency on the first libhdf5.so found in any directory in AM_LDFLAGS
+ regardless of its version. (LRK - 2014/10/17 HDFFV-8944)
- C++ and/or Fortran + thread-safe is enforced as a non-supported
- configuration. This matches the autotools. (DER - 2014/04/11)
+ - Changed Autotools Build Behavior. Fortran High-level Library.
- - CMake: Configuration of static HDF5 C library with the thread-safety
- feature.
+ The Fortran high-level (HL) library did not compile if the default
+ size of a REAL is DOUBLE PRECISION; the build would fail during
+ compilation.
- Static + thread-safe + Win32 threads is not a supported configuration
- due to the inability to automatically clean up thread-local storage.
- This is expected to be fixed in a future release. In the meantime, a
- work-around that uses internal functionality may allow the combination
- to be used without resource leaks. Contact the help desk for more
- information. (DER - 2014/04/11)
+ Configure now checks to see if REAL is DOUBLE PRECISION, Fortran is
+ enabled, and HL library is enabled. If this is true, then configure
+ will stop with an error message.
- - Autotools: Several changes were done to configure and installcheck.
+ (MSB - 2014/8/11, HDFFV-8883/HDFFV-889)
- An export of LD_LIBRARY_PATH=<szip library location> was
- removed from configure; make installcheck was revised to run
- scripts installed in share/hdf5_examples to use the installed h5cc, etc.
- to compile and run example source files also installed there.
- Make installcheck will now fail when a shared szip or other external lib
- file cannot be found in the same manner that executables compiled and
- linked with h5cc will fail to run when those lib files cannot be found
- after install. Make installcheck should pass after setting
- LD_LIBRARY_PATH to the szip location. (LRK - 2014/04/16)
Library
-------
- - A Gnu Make directive (.NOTPARALLEL) is added to fortran/test/Makefile.
+ - Fixed Identifier Management Code
+
+ Opening an object returns an identifier; closing the object should
+ free up the identifier. A problem was found where the identifiers
+ were not being freed up correctly.
+
+ Fixed the problem so that identifiers that have been used can be
+ used again after their object has been closed.
+
+ (QAK - 2014/10/16, HDFFV-8930)
+
+ - Removal of DllMain() from Static Windows Builds
+
+ A DllMain() function was added in HDF5 1.8.13 in order to handle
+ win32 thread cleanup. The preprocessor #ifdefs around the DllMain
+ function allowed it to be compiled when the static library is built,
+ which is incorrect behavior that can cause linkage problems in
+ clients.
+
+ The fix was to change the preprocessor #ifdefs to exclude compiling
+ DllMain() in static builds. Our DllMain function is now only
+ compiled when the shared, thread-safe library is built on Windows.
+
+ (DER - 2014/06/13, HDFFV-8837)
+
+ - Enforce Constraint on page_size Parameter in H5Pset_core_write_tracking()
+
+ The reference manual states that the page_size parameter cannot be
+ zero.
+
+ This change checks the page_size parameter to see it is zero and
+ returns an error code if it is.
+
+ (DER - 2014/08/11, HDFFV-8891)
+
+ - H5Ldelete_by_idx() fails on non-existent group name.
+ (MSC - 2014/07/31, HDFFV-8888)
+
+ - H5Ldelete_by_idx() Seg Fault on Non-existent Group Name
+
+ If a non-existent group name was used by H5Ldelete_by_idx(), a
+ segmentation fault would result.
+
+ Bug was fixed.
+
+ (MSC - 2014/07/31, HDFFV-8888)
+
+ - Bug in Test When Building Parallel HDF5 on PVFS2
+
+ There was a bug in a test when building Parallel HDF5 on PVFS2.
+
+ The build now uses MPI_File_get_size() instead of stat().
+
+ (MSC - 2014/07/14, HDFFV-8856)
+
+ - MPI-IO Driver Tried to Allocate Space for Zero-length Dataset
+
+ MPI-IO driver tried to allocate space for zero-length dataset
+ and asserts.
+
+ Fixed driver and added a regression test.
+
+ (MSC - 2014/07/03, HDFFV-8761)
+
+
+ Parallel Library
+ ----------------
+ - None
+
+ Performance
+ -------------
+ - None
+
+ Tools
+ -----
+ - None
+
+ Fortran API
+ -------
+ - SIZEOF Replaced by C_SIZEOF and STORAGE_SIZE.
+
+ The intrinsic function SIZEOF is non-standard and should be replaced with a
+ standard intrinsic function.
- AIX native make does not support this directive and would fail if
- parallel make (e.g. make -j4) is used to build the library. AIX users
- either do not use parallel make or install Gnu Make to build the library.
- (AKC 2014/04/08 HDFFV-8738)
+ If the F2008 intrinsic C_SIZEOF and STORAGE_SIZE are available, then they will
+ be used instead of the non-standard SIZEOF intrinsic, even when the SIZEOF
+ function is available.
- - H5R.c: H5Rget_name gave an assertion failure if the "name" parameter
- was NULL.
+ (MSB - 2014/6/16, HDFFV-8653)
- Fixed H5Rget_name to return the size of the buffer needed to read a
- name of the referenced object in this case. The size doesn't include
- the NULL terminator. H5Rget_name returns negative on failure.
- (MSB - 2014/01/22 HDFFV-8620)
+ - Non-functional API: h5pget_fill_value_f
+
+ The Fortran wrapper h5pget_fill_value_f was calling the wrong C API.
- - H5Z.c: H5Zfilter_avail didn't check if a filter was available as a
- dynamically loaded filter. The error manifested itself in the h5repack
- tool when removing user-defined dynamically loaded filter.
+ The correct C API, H5Pget_fill_value, is now called by the Fortran
+ wrapper.
- Added a code to find the filter among the dynamically loaded filters
- after the function fails to find it among the registered filters.
- (ADB - 2014/03/03 HDFFV-8629)
+ (MSB - 2014/9/25, HDFFV-8879)
- - Memory leak: a memory leak was observed in conjunction to the
- H5TS_errstk_key_g thread-local variable allocated in the H5E_get_stack
- function in H5E.c.
+ - Interoperability with C HDF5: H5Literate and h5literate_f
- The shared HDF5 thread-safe library now no longer leaks thread-local
- storage resources on Windows with Win32 threads. Currently, there is
- no solution for this problem when HDF5 is statically built. We
- disabled the build of the static HDF5 thread-safe library with
- Win32 threads. (DER - 2014/04/11 HDFFV-8518)
+ h5literate_f assumes the return value for the callback function to
+ be of type int (or int_f in C). However, in the C wrapper the return
+ value of H5Literate is type herr_t, and this could cause
+ interoperability issues.
- - H5Dio.c: Improved handling of NULL pointers to H5Dread/H5Dwrite
- calls. Credit to Jason Newton (nevion at gmail.com) for the original patch.
+ The callback function should be declared INTEGER(C_INT) for
+ portability. The tests were updated accordingly.
- H5Dwrite/read failed when a NULL pointer was passed for a data buffer
- and 0 elements were selected. Fixed. (QAK - 2014/04/16 HDFFV-8705)
+ (MSB - 2014/9/26, HDFFV-8909)
- - Deprecated API (1_6 API): Improved handling of closing the library and
- re-accessing it with a deprecated routine.
+ - Interoperability with C HDF5: Constant INTEGER Parameters with the
+ H5FD Interface
- When a program used a deprecated API (for example, H5Gcreate1),
- closed the library, and reopened it again to access a group, dataset,
- datatype, dataspace, attribute, or property list, HDF5 failed to
- provide an identifier for the object. Fixed.
- (NAF, QAK - 2014/04/16 HDFFV-8232)
+ Wrong type cast of constant Fortran INTEGER parameters was used.
- Parallel Library
- ----------------
- - Fixed a missing H5F_Provisional module in HDF5mpio.f90
- (MSB - 2014/2/7 HDFFV-8651)
+ The following parameter constant types were changed from INTEGER to
+ INTEGER(HID_T) to match the C types: H5FD_CORE, H5FD_FAMILY, H5FD_LOG,
+ H5FD_MPIO, H5FD_MULTI, H5FD_SEC2, and H5FD_STDIO.
- Performance
- -------------
- - None
+ Other internal 'int' types where changed to 'hid_t'; these are
+ transparent to the user.
- Tools
- -----
- - The h5diff tool would report that a datafile compared with an exact
- copy of the same datafile had differences. This was due to the issue
- below of reading un-written chunks. This problem is also fixed.
- (AKC - 2014/05/01 HDFFV-8637)
+ (MSB - 2014/7/18, HDFFV-8748)
- - The h5dump and h5diff utilities occasionally produced different output
- between Linux and Windows systems. This has been fixed.
-
- This happened to datasets that used chunked storage, with default fill
- values, and some of the chunks had not been written.
- When the dataset was read, the library failed to write the default fill
- values to parts of the use buffer that were associated with the unwritten
- chunks. (JP - 2014/05/01 HDFFV-8247)
+ C++ API
+ ------
+ - Memory Leaks
- - The compress option is retired from bin/release.
- (AKC - 2014/04/25 HDFFV-8755)
+ There were several potential memory leaks in the library due to
+ dynamically allocated strings not being freed when failure occurs.
- - bin/release has a new option "zip" that produces a release zip file for
- the Windows platform. (AKC - 2014/04/24 HDFFV-8433)
+ Applied user's patches to remove these potential memory leaks.
- - h5diff: Several failures relating to handling of strings attributes
- are fixed.
+ (BMR - 2014/09/30, HDFFV-8928)
- The tool crashed or gave an error message when one of the strings had
- fixed size type and another variable-length size type. h5diff now flags such
- strings as "not comparable". We plan to enhance the tool to handle
- strings of the different types in the future releases.
- (AKC - 2014/04/18 HDFFV-8625, 8639, 8745)
+ - Disallow H5F_ACC_CREAT
+
+ H5F_ACC_CREAT was included in the C++ API but the C library does not
+ allow it at this time.
- - h5repack: h5repack would not remove user-defined filters.
- Fixed by modifying h5repack to check if the filter is registered or
- can be dynamically loaded. (ADB - 2014/03/03 HDFFV-8629)
+ Removed this flag from the functions in H5File class.
- F90 API
- -------
- - H5D_CHUNK_CACHE_NSLOTS_DFLT_F and H5D_CHUNK_CACHE_NBYTES_DFLT_F were
- changed from the default KIND for INTEGER to INTEGER of KIND size_t.
- (MSB - 2014/3/31 HDFFV-8689)
+ (BMR - 2014/09/29, HDFFV-8852)
- C++ API
- ------
- - Added throw() to all exception destructors. Credit to Jason Newton
- (nevion at gmail.com) for the patch. (BMR - 2014/4/15 HDFFV-8623)
- - Changed the default value for H5Location::getComment from 256 to 0
- to conform to C function and because it makes more sense.
- (BMR - 2014/4/15)
+ - Missing Flags in Documentation: H5F_ACC_RDONLY and H5F_ACC_RDWR
+
+ The H5F_ACC_RDONLY and H5F_ACC_RDWR flags were missing from the
+ documentation of the H5File constructors.
+
+ These two flags are now included in the documentation for opening
+ files.
- High-Level APIs:
+ (BMR - 2014/09/29, HDFFV-8852)
+
+ High-level APIs:
------
- - None
+ - Seg Faults in H5TBread_field_name and H5TBread_field_name_f
- Fortran High-Level APIs:
+ When H5TBread_field_name or H5TBread_field_name_f were used to read a
+ field and if the name of the field was wrong, a segmentation fault
+ would result.
+
+ Both C and Fortran APIs were fixed so they no longer seg fault if
+ the name of the field is wrong, and both APIs return a negative
+ value if the name of the field is wrong.
+
+ (MSB - 2014/09/29, HDFFV-8912)
+
+ - Possible Buffer Overflow in High-level (HL) APIs
+
+ Multiple HL APIs (H5DSis_scale is one example) had issues:
+ (1) The datatype from the file was re-used as the memory datatype,
+ and
+ (2) No effort was made to ensure that strings were actually
+ null-terminated.
+
+ All of the HL routines now check for NULL pointers, for null-terminated
+ strings, and to see if string buffers are short enough not to overflow
+ the buffer. The minimum length of the buffers is now used in strncmp
+ to avoid overflow.
+
+ (MSB - 2014/9/29, HDFFV-8670)
+
+ - Behavior Change of H5LTdtype_to_text
+
+ If a user buffer was passed in to H5LTdtype_to_text along with the
+ length, then the function would not truncate at the end of the
+ buffer, but would exceed the end of the user buffer.
+
+ H5LTdtype_to_text was changed to truncate the string if the user
+ buffer is too small.
+
+ (MSB - 2014/9/29, HDFFV-8855)
+
+ Fortran High-level APIs:
------
- - None
+ - See entry for HDFFV-8912 above.
Testing
-------
- - testhdf5 now exits with EXIT_SUCCESS(0) if no errors, else
- EXIT_FAILURE(1). (AKC - 2014/01/27 HDFFV-8572)
+ - A subtest in parallel h5diff (ph5diff) testing was bypassed for the
+ local Linux 32 machine due to unknown issue in the previous version of
+ Mpich. The failure no long exists in the current Mpich. Therefore the
+ bypass is removed. (AKC - 2014/11/03 HDFFV-8954)
+
+ - Fixed incorrect exit code values (was -1) in testframe which is commonly
+ used by several test programs. (AKC - 2014/07/22 HDFFV-8881)
- - The big test now pays attention to the HDF5_DRIVER environment variable.
- Previously, it would run all tests with the family, stdio, and sec2
- virtual file drivers (VFDs) for each VFD in the check-vfd make target,
- regardless of the variable setting. It now checks the variable and
- either runs the appropriate VFD-specific tests or skips as needed.
- This saves much testing time. Fixes HDFFV-8554. (DER - 2014/04/11)
+ - Fixed Incorrect Exit Code Values in Testframe
+ The testframe which is commonly used by several test programs
+ had some incorrect exit code values. Fixed the incorrect exit code
+ values. (AKC - 2014/07/22, HDFFV-8881)
Supported Platforms
===================
@@ -351,7 +434,6 @@ They are built with the configure process unless specified otherwise.
AIX 5.3 xlc 10.1.0.5
(NASA G-ADA) xlC 10.1.0.5
xlf90 12.1.0.6
- gmake v3.82
Linux 2.6.18-308.13.1.el5PAE GNU C (gcc), Fortran (gfortran), C++ (g++)
#1 SMP i686 i686 i386 compilers for 32-bit applications;
@@ -368,9 +450,6 @@ They are built with the configure process unless specified otherwise.
#1 SMP x86_64 GNU/Linux compilers for 64-bit applications;
(koala) Version 4.1.2 20080704 (Red Hat 4.1.2-54)
Version 4.8.2
- PGI C, Fortran, C++ for 64-bit target on
- x86-64;
- Version 13.7-0
Intel(R) C, C++, Fortran Compilers for
applications running on Intel(R) 64;
Version 14.0.2 (Build 20140120)
@@ -386,41 +465,45 @@ They are built with the configure process unless specified otherwise.
compilers:
Version 14.0.2 (Build 20140120)
- Linux 2.6.32-431.11.2.el6.ppc64 gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-3)
- #1 SMP ppc64 GNU/Linux g++ (GCC) 4.4.7 20120313 (Red Hat 4.4.7-3)
- (ostrich) GNU Fortran (GCC) 4.4.7 20120313 (Red Hat 4.4.7-3)
- IBM XL C/C++ V11.1
- IBM XL Fortran V13.1
+ Linux 2.6.32-431.29.2.el6.ppc64 gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-4)
+ #1 SMP ppc64 GNU/Linux g++ (GCC) 4.4.7 20120313 (Red Hat 4.4.7-4)
+ (ostrich) GNU Fortran (GCC) 4.4.7 20120313 (Red Hat 4.4.7-4)
+ IBM XL C/C++ V13.1
+ IBM XL Fortran V15.1
SunOS 5.11 32- and 64-bit Sun C 5.12 SunOS_sparc
(emu) Sun Fortran 95 8.6 SunOS_sparc
Sun C++ 5.12 SunOS_sparc
- Windows 7 Visual Studio 2008 w/ Intel Fortran 14 (cmake)
+ Windows 7 Visual Studio 2008 (cmake)
Visual Studio 2010 w/ Intel Fortran 14 (cmake)
Visual Studio 2012 w/ Intel Fortran 14 (cmake)
- Cygwin(CYGWIN_NT-6.1 1.7.28(0.271/5/3) gcc(4.8.2) compiler and gfortran)
+ Visual Studio 2013 w/ Intel Fortran 14 (cmake)
+ Cygwin(CYGWIN_NT-6.1 1.7.32(0.274/5/3) gcc(4.8.3) compiler and gfortran)
(cmake and autotools)
- Windows 7 x64 Visual Studio 2008 w/ Intel Fortran 14 (cmake)
+ Windows 7 x64 Visual Studio 2008 (cmake)
Visual Studio 2010 w/ Intel Fortran 14 (cmake)
Visual Studio 2012 w/ Intel Fortran 14 (cmake)
+ Visual Studio 2013 w/ Intel Fortran 14 (cmake)
Windows 8.1 Visual Studio 2012 w/ Intel Fortran 14 (cmake)
+ Visual Studio 2013 w/ Intel Fortran 14 (cmake)
Windows 8.1 x64 Visual Studio 2012 w/ Intel Fortran 14 (cmake)
+ Visual Studio 2013 w/ Intel Fortran 14 (cmake)
- Mac OS X Lion 10.7.3 Apple clang/clang++ version 3.0 from Xcode 4.6.1
- 64-bit gfortran GNU Fortran (GCC) 4.6.2
+ Mac OS X Lion 10.7.5 Apple clang/clang++ version 3.0 from Xcode 4.6.1
+ 64-bit gfortran GNU Fortran (GCC) 4.8.2
(duck) Intel icc/icpc/ifort version 13.0.3
- Mac OS X Mt. Lion 10.8.5 Apple clang/clang++ version 5.0 from Xcode 5.0.2
+ Mac OS X Mt. Lion 10.8.5 Apple clang/clang++ version 5.1 from Xcode 5.1
64-bit gfortran GNU Fortran (GCC) 4.8.2
(swallow/kite) Intel icc/icpc/ifort version 14.0.2
- Mac OS X Mavericks 10.9.2 Apple clang/clang++ version 5.1 from Xcode 5.1
+ Mac OS X Mavericks 10.9.5 Apple clang/clang++ version 6.0 from Xcode 6.0.1
64-bit gfortran GNU Fortran (GCC) 4.8.2
- (wren/quail) Intel icc/icpc/ifort version 14.0.2
+ (wren) Intel icc/icpc/ifort version 14.0.2
Tested Configuration Features Summary
@@ -442,12 +525,12 @@ Solaris2.11 32-bit n y/y n y y y
Solaris2.11 64-bit n y/y n y y y
Windows 7 y y/y n y y y
Windows 7 x64 y y/y n y y y
-Windows 7 Cygwin n y/y n y y y
+Windows 7 Cygwin n y/y n y y n
Windows 8.1 n y/y n y y y
-Windows 8.1 x64 n y/y n y y y
-Mac OS X Lion 10.7.3 64-bit n y/y n y y y
-Mac OS X Mountain Lion 10.8.1 64-bit n y/y n y y y
-Mac OS X Mavericks 10.9.1 64-bit n y/y n y y y
+Windows 8.1 x64 n y/y n y y y
+Mac OS X Lion 10.7.5 64-bit n y/y n y y y
+Mac OS X Mountain Lion 10.8.5 64-bit n y/y n y y y
+Mac OS X Mavericks 10.9.5 64-bit n y/y n y y ?
AIX 5.3 32- and 64-bit n y/n n y y y
CentOS 5.9 Linux 2.6.18-308 i686 GNU y y/y y y y y
CentOS 5.9 Linux 2.6.18-308 i686 Intel n y/y n y y y
@@ -458,7 +541,6 @@ CentOS 6.4 Linux 2.6.32 x86_64 GNU y y/y y y y y
CentOS 6.4 Linux 2.6.32 x86_64 Intel n y/y n y y y
CentOS 6.4 Linux 2.6.32 x86_64 PGI n y/y n y y y
Linux 2.6.32-431.11.2.el6.ppc64 n y/n n y y y
-OpenVMS IA64 V8.4 n y/n n y y n
Platform Shared Shared Shared Thread-
C libs F90 libs C++ libs safe
@@ -469,9 +551,9 @@ Windows 7 x64 y y y y
Windows 7 Cygwin n n n y
Windows 8.1 y y y y
Windows 8.1 x64 y y y y
-Mac OS X Lion 10.7.3 64-bit y n y y
-Mac OS X Mountain Lion 10.8.1 64-bit y n y y
-Mac OS X Mavericks 10.9.1 64-bit y n y y
+Mac OS X Lion 10.7.5 64-bit y n y y
+Mac OS X Mountain Lion 10.8.5 64-bit y n y y
+Mac OS X Mavericks 10.9.5 64-bit y n y y
AIX 5.3 32- and 64-bit y n n y
CentOS 5.9 Linux 2.6.18-308 i686 GNU y y y y
CentOS 5.9 Linux 2.6.18-308 i686 Intel y y y n
@@ -482,7 +564,6 @@ CentOS 6.4 Linux 2.6.32 x86_64 GNU y y y n
CentOS 6.4 Linux 2.6.32 x86_64 Intel y y y n
CentOS 6.4 Linux 2.6.32 x86_64 PGI y y y n
Linux 2.6.32-431.11.2.el6.ppc64 y y y n
-OpenVMS IA64 V8.4 n n n n
Compiler versions for each platform are listed in the preceding
"Supported Platforms" table.
@@ -492,12 +573,12 @@ More Tested Platforms
=====================
The following platforms are not supported but have been tested for this release.
- Linux 2.6.18-308.13.1.el5PAE MPICH mpich 3.1 compiled with
- #1 SMP i686 i686 i386 gcc 4.8.2 and gfortran 4.8.2
+ Linux 2.6.18-308.13.1.el5PAE MPICH mpich 3.1.2 compiled with
+ #1 SMP i686 i686 i386 gcc 4.9.1 and gfortran 4.9.1
(jam) g95 (GCC 4.0.3 (g95 0.94!)
- Linux 2.6.18-431.11.2.el6 MPICH mpich 3.1 compiled with
- #1 SMP x86_64 GNU/Linux gcc 4.8.2 and gfortran 4.8.2
+ Linux 2.6.18-431.11.2.el6 MPICH mpich 3.1.2 compiled with
+ #1 SMP x86_64 GNU/Linux gcc 4.9.1 and gfortran 4.9.1
(platypus) g95 (GCC 4.0.3 (g95 0.94!)
FreeBSD 8.2-STABLE i386 gcc 4.5.4 [FreeBSD] 20110526
@@ -510,150 +591,68 @@ The following platforms are not supported but have been tested for this release.
g++ 4.6.1 20110527
gfortran 4.6.1 20110527
- Debian7.1.0 3.2.0-4-amd64 #1 SMP Debian 3.2.51-1 x86_64 GNU/Linux
+ Debian7.5.0 3.2.0-4-amd64 #1 SMP Debian 3.2.51-1 x86_64 GNU/Linux
gcc (Debian 4.7.2-5) 4.7.2
GNU Fortran (Debian 4.7.2-5) 4.7.2
(cmake and autotools)
- Fedora20 3.11.10-301.fc20.x86_64 #1 SMP x86_64 x86_64 x86_64 GNU/Linux
- gcc (GCC) 4.8.2 20131212 (Red Hat 4.8.2-7)
- GNU Fortran (GCC) 4.8.2 20130603 (Red Hat 4.8.2-7)
+ Fedora20 3.15.3-200.fc20.x86_64 #1 SMP x86_64 x86_64 x86_64 GNU/Linux
+ gcc (GCC) 4.8.3 20140624 (Red Hat 4.8.3-1)
+ GNU Fortran (GCC) 4.8.3 20140624 (Red Hat 4.8.3-1)
(cmake and autotools)
- SUSE 13.1 3.11.6-4-desktop #1 SMP PREEMPT x86_64 x86_64 x86_64 GNU/Linux
+ SUSE 13.1 3.11.10-17-desktop #1 SMP PREEMPT x86_64 x86_64 x86_64 GNU/Linux
gcc (SUSE Linux) 4.8.1
GNU Fortran (SUSE Linux) 4.8.1
(cmake and autotools)
- Ubuntu 13.10 3.11.0-13-generic #20-Ubuntu SMP x86_64 GNU/Linux
- gcc (Ubuntu/Linaro 4.8.1-10ubuntu8) 4.8.1
- GNU Fortran (Ubuntu/Linaro 4.8.1-10ubuntu8) 4.8.1
+ Ubuntu 14.04 3.13.0-35-generic #62-Ubuntu SMP x86_64 GNU/Linux
+ gcc (Ubuntu/Linaro 4.9.1-0ubuntu1) 4.9.1
+ GNU Fortran (Ubuntu/Linaro 4.9.1-0ubuntu1) 4.9.1
(cmake and autotools)
- Cray Linux Environment (CLE) PrgEnv-pgi/4.0.46
- hopper.nersc.gov pgcc 12.5-0 64-bit target on x86-64 Linux -tp shanghai
- pgf90 12.5-0 64-bit target on x86-64 Linux -tp shanghai
- pgCC 12.5-0 64-bit target on x86-64 Linux -tp shanghai
+ Cray Linux Environment (CLE) PrgEnv-pgi/4.2.34
+ hopper.nersc.gov pgcc 13.6-0 64-bit target on x86-64 Linux -tp istanbul
+ pgf90 13.6-0 64-bit target on x86-64 Linux -tp istanbul
+ pgCC 13.6-0 64-bit target on x86-64 Linux -tp istanbul
Known Problems
==============
-* When reading or writing a dataset (H5Dread/H5Dwrite) with a large selection
- size (e.g., 2GB ~= 500 million of 4 bytes integers or floating point
- numbers), some I/O systems may not be able to process it correctly.
- We advise users to find out system limits before using large selections. If
- I/O size limits exist, application should use HDF5 partial I/O capabilities
- (e.g., H5Sselect_hyperslab(...)) to divide large requests into smaller sizes.
- In this case we also advise users not to use chunk storage sizes larger that
- 2GB since the HDF5 library performs I/O on the entire chunk. We will work
- on the HDF5 library to divide large data requests to smaller I/O requests.
- (AKC 2014/05/02 HDFFV-8479)
-
-* Due to an Intel compiler bug introduced in version 14.0.1, the HDF5 FORTRAN
- wrappers do not work with configure option --enable-fortran2003.
- However, the option --enable-fortran works with Intel 14.0.1. The compiler
- bug was fixed in Intel version 14.0.2 and resolved the issue.
- (MSB - 2014/4/15)
-
-* Due to a PGI compiler bug introduced in versions before 13.3 and versions
- after 14.2, the FORTRAN test 'Testing get file image' will fail.
- (MSB - 2014/4/15)
-
-* On CYGWIN, when building the library dynamically, testing will fail on
- dynamically loaded filters. The test process will build dynamic filter
- libraries with the *.dll.a extension, and the HDF5 Library will be looking
- for *.so libraries. Entered as issue HDFFV-8736. (ADB - 2014/04/14)
-
-* A Gnu Make directive (.NOTPARALLEL) is added to fortran/test/Makefile.
- AIX native make does not support this directive and would fail if
- parallel make (e.g. make -j4) is used to build the library. AIX users
- either do not use parallel make or install Gnu Make to build the library.
- (AKC 2014/04/08 HDFFV-8738)
+* On cygwin platforms the feature to load dynamic filter libraries only looks
+ for libraries with the a so extension. Support for cygwin cygxxx.dll libraries
+ is planned for the next release.
+ (ADB - 2014/11/04 - HDFFV-8736)
+
+* On windows platforms in debug configurations, the VFD flush1 tests will fail
+ with the split and multi VFD drivers. These tests will display a modal debug
+ dialog which must be answered or wait for the test timeout to expire.
+ The flush1 and flush2 tests will be skipped under debug for this release.
+ (ADB - 2014/06/23 - HDFFV-8851)
* CLANG compiler with the options -fcatch-undefined-behavior and -ftrapv
- catches some undefined behavior in the alignment algorithm of the macro
- DETECT_I in H5detect.c. Since the algorithm is trying to detect the alignment
- of integers, ideally the flag -fcatch-undefined-behavior should not to be
- used for H5detect.c. In the future, we can separate flags for H5detect.c
- from the rest of the library. (SLU - 2013/10/16 HDFFV-8147)
+ catches some undefined behavior in the alignment algorithm of the macro DETECT_I
+ in H5detect.c (Issue 8147). Since the algorithm is trying to detect the alignment
+ of integers, ideally the flag -fcatch-undefined-behavior shouldn't to be used for
+ H5detect.c. In the future, we can separate flags for H5detect.c from the rest of
+ the library. (SLU - 2013/10/16)
* Make provided by Solaris fails in "make check". Solaris users should use
gmake to build and install the HDF5 software. (AKC - 2013/10/08 - HDFFV-8534)
-* On OpenVMS, two soft conversion functions (H5T__conv_i_f and H5T__conv_f_i)
- have bugs. They convert data between floating-point numbers and integers.
- But the library's default is hard conversion. The user should avoid
- explicitly enabling soft conversion between floating-point numbers and
- integers. (Issue VMS-8; SLU - 2013/09/19)
-
-* On OpenVMS, ZLIB 1.2.8 library doesn't work properly. ZLIB 1.2.5 works
- fine. So please use ZLIB 1.2.5 to build HDF5 library. (Issue VMS-5;
- SLU 2013/09/19)
-
-* When building using the Cray compilers on Cray machines, HDF5
- configure mistakenly thinks the compiler is an intel compiler and
- sets the -std=c99 flag which breaks configure on Cray. To build HDF5
- properly on a Cray machine, please consult with the instructions in
- INSTALL_parallel for building on Hopper.
- (MSC - 2013/04/26 - HDFFV-8429)
-
-* The 5.9 C++ compiler on Sun failed to compile a C++ test ttypes.cpp. It
- complains with this message:
- "/home/hdf5/src/H5Vprivate.h", line 130: Error: __func__ is not defined.
-
- The reason is that __func__ is a predefined identifier in C99 standard. The
- HDF5 C library uses it in H5private.h. The test ttypes.cpp includes
- H5private.h (H5Tpkg.h<-H5Fprivate.h<-H5Vprivate.h<-H5private.h). Sun's 5.9
- C++ compiler doesn't support __func__, thus fails to compile the C++ test.
- But Sun's 5.11 C++ compiler does. To check whether your Sun C++ compiler
- knows this identifier, try to compile the following simple C++ program:
- #include<stdio.h>
-
- int main(void)
- {
- printf("%s\n", __func__);
- return 0;
- }
- (SLU - 2012/11/5)
+* The h5dump and h5diff utilities occasionally produce different output
+ between Linux and Windows systems. This is caused by lower-level library
+ routines that fail to write fill values to the user's buffer when reading
+ unallocated chunks from datasets that have a fill value set to
+ H5D_FILL_VALUE_DEFAULT. Due to platform differences the return of
+ spurious data values has only been encountered on Windows 32-bit systems.
+ (Issue HDFFV-8247; JP - 2013/03/27)
* The C++ and FORTRAN bindings are not currently working on FreeBSD with the
native release 8.2 compilers (4.2.1), but are working with gcc 4.6 from the
ports (and probably gcc releases after that).
(QAK - 2012/10/19)
-* The following h5dump test case fails in BG/P machines (and potentially other
- machines that use a command script to launch executables):
-
- h5dump --no-compact-subset -d "AHFINDERDIRECT::ah_centroid_t[0] it=0 tl=0"
- tno-subset.h5
-
- This is due to the embedded spaces in the dataset name being interpreted
- by the command script launcher as meta-characters, thus passing three
- arguments to h5dump's -d flag. The command passes if run by hand, just
- not via the test script.
- (AKC - 2012/05/03)
-
-* On hopper, the build failed when RUNSERIAL and RUNPARALLEL are set
- to aprun -np X, because the H5lib_settings.c file was not generated
- properly. Not setting those environment variables works, because
- configure was able to automatically detect that it's a Cray system
- and used the proper launch commands when necessary.
- (MSC - 2012/04/18)
-
-* The data conversion test dt_arith.c fails in "long double" to integer
- conversion on Ubuntu 11.10 (3.0.0.13 kernel) with GCC 4.6.1 if the library
- is built with optimization -O3 or -O2. The older GCC (4.5) or newer kernal
- (3.2.2 on Fedora) doesn't have the problem. Users should lower the
- optimization level (-O1 or -O0) by defining CFLAGS in the command line of
- "configure" like:
-
- CFLAGS=-O1 ./configure
-
- This will overwrite the library's default optimization level.
- (SLU - 2012/02/07 - HDFFV-7829)
- This issue is no longer present on Ubuntu 12.10 (3.5.0 kernel) with
- gcc 4.7.2.
-
* The STDIO VFD does not work on some architectures, possibly due to 32/64
bit or large file issues. The basic STDIO VFD test is known to fail on
64-bit SunOS 5.10 on SPARC when built with -m64 and 32-bit OS X/Darwin
@@ -688,9 +687,6 @@ Known Problems
to a larger value.
(AKC - 2011/05/07)
-* The C++ and FORTRAN bindings are not currently working on FreeBSD.
- (QAK - 2011/04/26)
-
* Shared Fortran libraries are not quite working on AIX. While they are
generated when --enable-shared is specified, the fortran and hl/fortran
tests fail. We are looking into the issue. HL and C++ shared libraries
@@ -738,10 +734,6 @@ Known Problems
with MPI IO.
(CMC - 2009/04/28)
-* On an Intel 64 Linux cluster (RH 4, Linux 2.6.9) with Intel 10.0 compilers,
- use -mp -O1 compilation flags to build the libraries. A higher level of
- optimization causes failures in several HDF5 library tests.
-
* A dataset created or rewritten with a v1.6.3 library or after cannot be read
with the v1.6.2 library or before when the Fletcher32 EDC filter is enabled.
There was a bug in the calculation of the Fletcher32 checksum in the
diff --git a/release_docs/USING_CMake_Examples.txt b/release_docs/USING_CMake_Examples.txt
index e6108d2..299063f 100644
--- a/release_docs/USING_CMake_Examples.txt
+++ b/release_docs/USING_CMake_Examples.txt
@@ -1,81 +1,81 @@
-************************************************************************
-* Build and Test HDF5 Examples with CMake *
-************************************************************************
-
-Notes: This short instruction is written for users who want to quickly
- test the installation of HDF5 by using the CMake tools to build
- and test the HDF5 Examples. The following instructions will show
- the default usage and then present common changes for non-default
- installations.
- For more information, see the USING_HDF5_CMake.txt file.
-
- More information about using CMake can be found at the KitWare
- site, www.cmake.org.
-
- CMake uses the command line and these instructions use the script
- method of the ctest command.
-
-
-========================================================================
-I. Preconditions
-========================================================================
-
- 1. We suggest you obtain the latest CMake for windows from the Kitware
- web site. The HDF5 1.8.x product requires a minimum CMake version
- of 2.8.12.
-
- 2. You have installed the HDF5 library built with CMake, by executing
- the HDF Install Utility (the *.exe file in the binary package for
- Windows or the *.sh on Linux). If you are using a Windows platform,
- you can obtain a pre-built Windows binary from The HDF Group's website
- at www.hdfgroup.org. See Section "III. Common changes to the
- HDF518_Examples.cmake file", for the line to change the location.
-
- 3. On Windows, you have installed the 7Zip package. See Section "III.
- Common changes to the HDF518_Examples.cmake file", for the line to
- change the command.
-
-
-
-========================================================================
-II. Building HDF5 Examples with CMake
-========================================================================
-
-Files in the HDF5 install directory:
- HDF5Examples-0.1.1-Source.zip (or HDF5Examples-0.1.1-Source.tar.gz)
- HDF518_Examples.cmake
-
-Default installation process:
- Create a directory to run the examples, i.e. \test_hdf5.
- Copy HDF5Examples-0.1.1-Source.zip(.tar.gz) to this directory, do NOT unzip.
- Copy HDF518_Examples.cmake to this directory.
- Edit line 8 of the HDF518_Examples.cmake file and change the INSTALLDIR
- to the HDF5 install location.
-
- Execute from this directory:
- ctest -S HDF518_Examples.cmake,HDF5Examples-0.1.1-Source -C Release -O test.log
-
-The script will uncompress the examples file HDF5Examples-0.1.1-Source.zip(.tar.gz),
- and create a build directory inside the HDF5Examples-0.1.1-Source directory.
- It will then configure, build, and execute the examples. All the log files
- will be found under the build\Testing\Temporary directory, check these for
- errors.
-
-The amount of script information can be increased by adding -V to the ctest
- command. Even more information can be shown by adding -VV instead of -V.
-
-
-========================================================================
-III. Common changes to the HDF518_Examples.cmake file
-========================================================================
-
-Line 8: change the INSTALLDIR to a different HDF5 install location.
-
-Line 14: uncomment to allow Mac machines to build shared examples.
-
-Line 15: uncomment to not build and test Fortran examples.
-
-Line 16: uncomment to build and test Fortran examples with F2003 option.
-
-Line 68: change the CTEST_7Z_COMMAND to a different unzip program.
-
+************************************************************************
+* Build and Test HDF5 Examples with CMake *
+************************************************************************
+
+Notes: This short instruction is written for users who want to quickly
+ test the installation of HDF5 by using the CMake tools to build
+ and test the HDF5 Examples. The following instructions will show
+ the default usage and then present common changes for non-default
+ installations.
+ For more information, see the USING_HDF5_CMake.txt file.
+
+ More information about using CMake can be found at the KitWare
+ site, www.cmake.org.
+
+ CMake uses the command line and these instructions use the script
+ method of the ctest command.
+
+
+========================================================================
+I. Preconditions
+========================================================================
+
+ 1. We suggest you obtain the latest CMake for windows from the Kitware
+ web site. The HDF5 1.8.x product requires a minimum CMake version
+ of 2.8.12.
+
+ 2. You have installed the HDF5 library built with CMake, by executing
+ the HDF Install Utility (the *.exe file in the binary package for
+ Windows or the *.sh on Linux). If you are using a Windows platform,
+ you can obtain a pre-built Windows binary from The HDF Group's website
+ at www.hdfgroup.org. See Section "III. Common changes to the
+ HDF518_Examples.cmake file", for the line to change the location.
+
+ 3. On Windows, you have installed the 7Zip package. See Section "III.
+ Common changes to the HDF518_Examples.cmake file", for the line to
+ change the command.
+
+
+
+========================================================================
+II. Building HDF5 Examples with CMake
+========================================================================
+
+Files in the HDF5 install directory:
+ HDF5Examples-0.1.1-Source.zip (or HDF5Examples-0.1.1-Source.tar.gz)
+ HDF518_Examples.cmake
+
+Default installation process:
+ Create a directory to run the examples, i.e. \test_hdf5.
+ Copy HDF5Examples-0.1.1-Source.zip(.tar.gz) to this directory, do NOT unzip.
+ Copy HDF518_Examples.cmake to this directory.
+ Edit line 8 of the HDF518_Examples.cmake file and change the INSTALLDIR
+ to the HDF5 install location.
+
+ Execute from this directory:
+ ctest -S HDF518_Examples.cmake,HDF5Examples-0.1.1-Source -C Release -O test.log
+
+The script will uncompress the examples file HDF5Examples-0.1.1-Source.zip(.tar.gz),
+ and create a build directory inside the HDF5Examples-0.1.1-Source directory.
+ It will then configure, build, and execute the examples. All the log files
+ will be found under the build\Testing\Temporary directory, check these for
+ errors.
+
+The amount of script information can be increased by adding -V to the ctest
+ command. Even more information can be shown by adding -VV instead of -V.
+
+
+========================================================================
+III. Common changes to the HDF518_Examples.cmake file
+========================================================================
+
+Line 8: change the INSTALLDIR to a different HDF5 install location.
+
+Line 14: uncomment to allow Mac machines to build shared examples.
+
+Line 15: uncomment to not build and test Fortran examples.
+
+Line 16: uncomment to build and test Fortran examples with F2003 option.
+
+Line 68: change the CTEST_7Z_COMMAND to a different unzip program.
+
diff --git a/release_docs/USING_HDF5_CMake.txt b/release_docs/USING_HDF5_CMake.txt
index 926b297..6195dc3 100644
--- a/release_docs/USING_HDF5_CMake.txt
+++ b/release_docs/USING_HDF5_CMake.txt
@@ -27,7 +27,7 @@ Notes: This short instruction is written for users who want to quickly
3. See the appendix at the bottom of this file for an example
of using a ctest script for building and testing. See
- CMake.txt for more information.
+ INSTALL_CMake.txt for more information.
@@ -69,7 +69,7 @@ Go through these steps to build HDF5 applications with CMake.
1. Run CMake
2. Configure the cache settings
3. Build HDF5 Applications
- 4. Test HDF5 Applications.
+ 4. Test HDF5 Applications
These steps are described in more detail below.
@@ -175,8 +175,8 @@ These steps are described in more detail below.
III. Minimum C Project Files for CMake
========================================================================
- 6. Create a CMakeLists.txt file at the source root. Include the
- following text in the file:
+Create a CMakeLists.txt file at the source root. Include the
+following text in the file:
##########################################################
cmake_minimum_required (VERSION 2.8.12)
@@ -254,7 +254,7 @@ set(SITE_COMPILER_NAME "compiler name")
set(SITE_COMPILER_VERSION "compiler version")
# needed for source updates, change as required
-set(REPOSITORY_URL "http://svn.hdfgroup.uiuc.edu/hdf5-examples/trunk/1_8")
+set(REPOSITORY_URL "http://svn.${hdfgroup_url}/hdf5-examples/trunk/1_8")
set(ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DCMAKE_INSTALL_PREFIX:PATH=/usr/local/hdf5Examples-1.8")
diff --git a/release_docs/USING_HDF5_VS.txt b/release_docs/USING_HDF5_VS.txt
index 9bf301e..9063ea6 100644
--- a/release_docs/USING_HDF5_VS.txt
+++ b/release_docs/USING_HDF5_VS.txt
@@ -18,12 +18,12 @@ Using Visual Studio 2010 with HDF5 Libraries built with Visual Studio 2010
1. Set up path for external libraries and headers
- The path settings will need to be in project property sheets per project.
+ The path settings will need to be in the project property sheets per project.
Go to "Project" and select "Properties", find "Configuration Properties",
and then "VC++ Directories".
1.1 If you are building on 64-bit Windows, find the "Platform" dropdown
- and select "x64".
+ and select "x64".
1.2 Add the header path to the "Include Directories" setting.
@@ -42,7 +42,7 @@ Using Visual Studio 2010 with HDF5 Libraries built with Visual Studio 2010
Using Visual Studio 2008 with HDF5 Libraries built with Visual Studio 2008
==========================================================================
- 2. Set up path for external libraries and headers
+ 2. Set up the path for external libraries and headers
Invoke Microsoft Visual Studio and go to "Tools" and select "Options",
find "Projects", and then "VC++ Directories".
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 2b562be..d353bcc 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -4,7 +4,7 @@ PROJECT (HDF5_SRC C CXX)
#-----------------------------------------------------------------------------
# Apply Definitions to compiler in this directory and below
#-----------------------------------------------------------------------------
-add_definitions (${HDF5_EXTRA_C_FLAGS})
+add_definitions (${HDF_EXTRA_C_FLAGS})
#-----------------------------------------------------------------------------
# List Source Files
@@ -117,6 +117,7 @@ IDE_GENERATED_PROPERTIES ("H5E" "${H5E_HDRS}" "${H5E_SRCS}" )
set (H5F_SRCS
${HDF5_SRC_DIR}/H5F.c
+ ${HDF5_SRC_DIR}/H5Fint.c
${HDF5_SRC_DIR}/H5Faccum.c
${HDF5_SRC_DIR}/H5Fcwfs.c
${HDF5_SRC_DIR}/H5Fdbg.c
@@ -637,26 +638,43 @@ add_custom_command (
WORKING_DIRECTORY ${HDF5_BINARY_DIR}
)
-add_custom_command (
- TARGET ${HDF5_BINARY_DIR}/H5Edefin.h
- PRE_BUILD
- COMMAND ${CMAKE_COMMAND} -E perl ${HDF5_SOURCE_DIR}/bin/make_err ${HDF5_SOURCE_DIR}/src/H5err.txt
- COMMENT " Creating err headers"
-)
-
-add_custom_command (
- TARGET ${HDF5_BINARY_DIR}/H5version.h
- PRE_BUILD
- COMMAND ${CMAKE_COMMAND} -E perl ${HDF5_SOURCE_DIR}/bin/make_vers ${HDF5_SOURCE_DIR}/src/H5vers.txt
- COMMENT " Creating API version macro"
-)
-
-add_custom_command (
- TARGET ${HDF5_BINARY_DIR}/H5overflow.h
- PRE_BUILD
- COMMAND ${CMAKE_COMMAND} -E perl ${HDF5_SOURCE_DIR}/bin/make_overflow ${HDF5_SOURCE_DIR}/src/H5overflow.txt
- COMMENT " Creating Assignment overflow macro"
-)
+if (GENERATE_ERROR_HEADERS)
+ find_pacakge (Perl)
+ if (PERL_FOUND)
+ add_custom_command (
+ OUTPUT ${HDF5_BINARY_DIR}/H5Edefin.h
+ PRE_BUILD
+ COMMAND ${PERL_EXECUTABLE}
+ ARGS ${HDF5_SOURCE_DIR}/bin/make_err ${HDF5_SOURCE_DIR}/src/H5err.txt
+ DEPENDS ${HDF5_SOURCE_DIR}/src/H5err.txt
+ COMMENT " Creating err header"
+ )
+
+ add_custom_command (
+ OUTPUT ${HDF5_BINARY_DIR}/H5version.h
+ PRE_BUILD
+ COMMAND ${PERL_EXECUTABLE}
+ ARGS ${HDF5_SOURCE_DIR}/bin/make_vers ${HDF5_SOURCE_DIR}/src/H5vers.txt
+ DEPENDS ${HDF5_SOURCE_DIR}/src/H5vers.txt
+ COMMENT " Creating API version macro"
+ )
+
+ add_custom_command (
+ OUTPUT ${HDF5_BINARY_DIR}/H5overflow.h
+ PRE_BUILD
+ COMMAND ${PERL_EXECUTABLE}
+ ARGS ${HDF5_SOURCE_DIR}/bin/make_overflow ${HDF5_SOURCE_DIR}/src/H5overflow.txt
+ DEPENDS ${HDF5_SOURCE_DIR}/src/H5overflow.txt
+ COMMENT " Creating Assignment overflow macro"
+ )
+
+ add_custom_target(run_perl_scripts ALL
+ DEPENDS ${HDF5_BINARY_DIR}/H5Edefin.h ${HDF5_BINARY_DIR}/H5version.h ${HDF5_BINARY_DIR}/H5overflow.h
+ )
+ else (PERL_FOUND)
+ message (STATUS "Cannot generate headers - perl not found")
+ endif (PERL_FOUND)
+endif (GENERATE_ERROR_HEADERS)
#-----------------------------------------------------------------------------
# Add H5Tinit source to build - generated by H5Detect/CMake at configure time
diff --git a/src/H5.c b/src/H5.c
index 1515f96..84dc990 100644
--- a/src/H5.c
+++ b/src/H5.c
@@ -840,7 +840,8 @@ H5free_memory(void *mem)
} /* end H5free_memory() */
-#ifdef H5_HAVE_WIN32_API
+#if defined(H5_HAVE_THREADSAFE) && defined(H5_BUILT_AS_DYNAMIC_LIB) \
+ && defined(H5_HAVE_WIN32_API) && defined(H5_HAVE_WIN_THREADS)
/*-------------------------------------------------------------------------
* Function: DllMain
*
@@ -895,4 +896,4 @@ DllMain(_In_ HINSTANCE hinstDLL, _In_ DWORD fdwReason, _In_ LPVOID lpvReserved)
return fOkay;
}
-#endif /* H5_HAVE_WIN32_API */
+#endif /* H5_HAVE_WIN32_API && H5_BUILT_AS_DYNAMIC_LIB && H5_HAVE_WIN_THREADS && H5_HAVE_THREADSAFE*/
diff --git a/src/H5A.c b/src/H5A.c
index 1b4fe08..d4e970e 100644
--- a/src/H5A.c
+++ b/src/H5A.c
@@ -63,10 +63,6 @@ typedef struct H5A_iter_cb1 {
/* Local Prototypes */
/********************/
-static herr_t H5A_open_common(const H5G_loc_t *loc, H5A_t *attr);
-static herr_t H5A_write(H5A_t *attr, const H5T_t *mem_type, const void *buf, hid_t dxpl_id);
-static herr_t H5A_read(const H5A_t *attr, const H5T_t *mem_type, void *buf, hid_t dxpl_id);
-
/*********************/
/* Package Variables */
@@ -181,17 +177,23 @@ H5A_term_interface(void)
FUNC_ENTER_NOAPI_NOINIT_NOERR
if(H5_interface_initialize_g) {
- if((n = H5I_nmembers(H5I_ATTR))>0) {
+ if(H5I_nmembers(H5I_ATTR) > 0) {
(void)H5I_clear_type(H5I_ATTR, FALSE, FALSE);
- } else {
+ n++; /*H5I*/
+ } /* end if */
+ else {
/* Close deprecated interface */
n += H5A__term_deprec_interface();
+ /* Destroy the attribute object id group */
(void)H5I_dec_type_ref(H5I_ATTR);
+ n++; /*H5I*/
+
+ /* Mark closed */
H5_interface_initialize_g = 0;
- n = 1;
- }
- }
+ } /* end else */
+ } /* end if */
+
FUNC_LEAVE_NOAPI(n)
} /* H5A_term_interface() */
@@ -229,6 +231,7 @@ hid_t
H5Acreate2(hid_t loc_id, const char *attr_name, hid_t type_id, hid_t space_id,
hid_t acpl_id, hid_t UNUSED aapl_id)
{
+ H5A_t *attr = NULL; /* Attribute created */
H5G_loc_t loc; /* Object location */
H5T_t *type; /* Datatype to use for attribute */
H5S_t *space; /* Dataspace to use for attribute */
@@ -249,13 +252,21 @@ H5Acreate2(hid_t loc_id, const char *attr_name, hid_t type_id, hid_t space_id,
if(NULL == (type = (H5T_t *)H5I_object_verify(type_id, H5I_DATATYPE)))
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a type")
if(NULL == (space = (H5S_t *)H5I_object_verify(space_id, H5I_DATASPACE)))
- HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a data space")
+ HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a dataspace")
/* Go do the real work for attaching the attribute to the dataset */
- if((ret_value = H5A_create(&loc, attr_name, type, space, acpl_id, H5AC_dxpl_id)) < 0)
+ if(NULL == (attr = H5A_create(&loc, attr_name, type, space, acpl_id, H5AC_dxpl_id)))
HGOTO_ERROR(H5E_ATTR, H5E_CANTINIT, FAIL, "unable to create attribute")
+ /* Register the new attribute and get an ID for it */
+ if((ret_value = H5I_register(H5I_ATTR, attr, TRUE)) < 0)
+ HGOTO_ERROR(H5E_ATOM, H5E_CANTREGISTER, FAIL, "unable to register attribute for ID")
+
done:
+ /* Cleanup on failure */
+ if(ret_value < 0 && attr && H5A_close(attr) < 0)
+ HDONE_ERROR(H5E_ATTR, H5E_CANTFREE, FAIL, "can't close attribute")
+
FUNC_LEAVE_API(ret_value)
} /* H5Acreate2() */
@@ -296,6 +307,7 @@ H5Acreate_by_name(hid_t loc_id, const char *obj_name, const char *attr_name,
hid_t type_id, hid_t space_id, hid_t acpl_id, hid_t UNUSED aapl_id,
hid_t lapl_id)
{
+ H5A_t *attr = NULL; /* Attribute created */
H5G_loc_t loc; /* Object location */
H5G_loc_t obj_loc; /* Location used to open group */
H5G_name_t obj_path; /* Opened object group hier. path */
@@ -323,7 +335,7 @@ H5Acreate_by_name(hid_t loc_id, const char *obj_name, const char *attr_name,
if(NULL == (type = (H5T_t *)H5I_object_verify(type_id, H5I_DATATYPE)))
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a type")
if(NULL == (space = (H5S_t *)H5I_object_verify(space_id, H5I_DATASPACE)))
- HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a data space")
+ HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a dataspace")
/* Set up opened group location to fill in */
obj_loc.oloc = &obj_oloc;
@@ -336,185 +348,21 @@ H5Acreate_by_name(hid_t loc_id, const char *obj_name, const char *attr_name,
loc_found = TRUE;
/* Go do the real work for attaching the attribute to the dataset */
- if((ret_value = H5A_create(&obj_loc, attr_name, type, space, acpl_id, H5AC_dxpl_id)) < 0)
+ if(NULL == (attr = H5A_create(&obj_loc, attr_name, type, space, acpl_id, H5AC_dxpl_id)))
HGOTO_ERROR(H5E_ATTR, H5E_CANTINIT, FAIL, "unable to create attribute")
-done:
- /* Release resources */
- if(loc_found && H5G_loc_free(&obj_loc) < 0)
- HDONE_ERROR(H5E_ATTR, H5E_CANTRELEASE, FAIL, "can't free location")
-
- FUNC_LEAVE_API(ret_value)
-} /* H5Acreate_by_name() */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5A_create
- *
- * Purpose:
- * This is the guts of creating an attribute.
- * Usage:
- * hid_t H5A_create(ent, name, type, space)
- * const H5G_entry_t *ent; IN: Pointer to symbol table entry for object to attribute
- * const char *name; IN: Name of attribute
- * H5T_t *type; IN: Datatype of attribute
- * H5S_t *space; IN: Dataspace of attribute
- * hid_t acpl_id IN: Attribute creation property list
- *
- * Return: Non-negative on success/Negative on failure
- *
- * Programmer: Quincey Koziol
- * April 2, 1998
- *
- *-------------------------------------------------------------------------
- */
-hid_t
-H5A_create(const H5G_loc_t *loc, const char *name, const H5T_t *type,
- const H5S_t *space, hid_t acpl_id, hid_t dxpl_id)
-{
- H5A_t *attr = NULL; /* Attribute created */
- hssize_t snelmts; /* elements in attribute */
- size_t nelmts; /* elements in attribute */
- htri_t tri_ret; /* htri_t return value */
- hid_t ret_value; /* Return value */
-
- FUNC_ENTER_NOAPI_NOINIT
-
- /* check args */
- HDassert(loc);
- HDassert(name);
- HDassert(type);
- HDassert(space);
-
- /* Check for existing attribute with same name */
- /* (technically, the "attribute create" operation will fail for a duplicated
- * name, but it's going to be hard to unwind all the special cases on
- * failure, so just check first, for now - QAK)
- */
- if((tri_ret = H5O_attr_exists(loc->oloc, name, H5AC_ind_dxpl_id)) < 0)
- HGOTO_ERROR(H5E_ATTR, H5E_NOTFOUND, FAIL, "error checking attributes")
- else if(tri_ret > 0)
- HGOTO_ERROR(H5E_ATTR, H5E_ALREADYEXISTS, FAIL, "attribute already exists")
-
- /* Check if the dataspace has an extent set (or is NULL) */
- if(!(H5S_has_extent(space)))
- HGOTO_ERROR(H5E_ATTR, H5E_BADVALUE, FAIL, "dataspace extent has not been set")
-
- /* Check if the datatype is "sensible" for use in a dataset */
- if(H5T_is_sensible(type) != TRUE)
- HGOTO_ERROR(H5E_ATTR, H5E_BADTYPE, FAIL, "datatype is not sensible")
-
- /* Build the attribute information */
- if(NULL == (attr = H5FL_CALLOC(H5A_t)))
- HGOTO_ERROR(H5E_ATTR, H5E_CANTALLOC, FAIL, "memory allocation failed for attribute info")
-
- if(NULL == (attr->shared = H5FL_CALLOC(H5A_shared_t)))
- HGOTO_ERROR(H5E_ATTR, H5E_CANTALLOC, FAIL, "can't allocate shared attr structure")
-
- /* If the creation property list is H5P_DEFAULT, use the default character encoding */
- if(acpl_id == H5P_DEFAULT)
- attr->shared->encoding = H5F_DEFAULT_CSET;
- else {
- H5P_genplist_t *ac_plist; /* ACPL Property list */
-
- /* Get a local copy of the attribute creation property list */
- if(NULL == (ac_plist = (H5P_genplist_t *)H5I_object(acpl_id)))
- HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a property list")
-
- if(H5P_get(ac_plist, H5P_STRCRT_CHAR_ENCODING_NAME, &(attr->shared->encoding)) < 0)
- HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't get character encoding flag")
- } /* end else */
-
- /* Copy the attribute name */
- attr->shared->name = H5MM_xstrdup(name);
-
- /* Copy datatype */
- if(NULL == (attr->shared->dt = H5T_copy(type, H5T_COPY_ALL)))
- HGOTO_ERROR(H5E_ATTR, H5E_CANTGET, FAIL, "can't get shared datatype info")
-
- /* Mark datatype as being on disk now */
- if(H5T_set_loc(attr->shared->dt, loc->oloc->file, H5T_LOC_DISK) < 0)
- HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "invalid datatype location")
-
- /* Set the latest format for datatype, if requested */
- if(H5F_USE_LATEST_FORMAT(loc->oloc->file))
- if(H5T_set_latest_version(attr->shared->dt) < 0)
- HGOTO_ERROR(H5E_DATASET, H5E_CANTSET, FAIL, "can't set latest version of datatype")
-
- /* Copy the dataspace for the attribute */
- attr->shared->ds = H5S_copy(space, FALSE, TRUE);
-
- /* Set the latest format for dataspace, if requested */
- if(H5F_USE_LATEST_FORMAT(loc->oloc->file))
- if(H5S_set_latest_version(attr->shared->ds) < 0)
- HGOTO_ERROR(H5E_DATASET, H5E_CANTSET, FAIL, "can't set latest version of dataspace")
-
- /* Copy the object header information */
- if(H5O_loc_copy(&(attr->oloc), loc->oloc, H5_COPY_DEEP) < 0)
- HGOTO_ERROR(H5E_ATTR, H5E_CANTOPENOBJ, FAIL, "unable to copy entry")
-
- /* Deep copy of the group hierarchy path */
- if(H5G_name_copy(&(attr->path), loc->path, H5_COPY_DEEP) < 0)
- HGOTO_ERROR(H5E_ATTR, H5E_CANTCOPY, FAIL, "unable to copy path")
-
- /* Check if any of the pieces should be (or are already) shared in the
- * SOHM table
- */
- if(H5SM_try_share(attr->oloc.file, dxpl_id, NULL, 0, H5O_DTYPE_ID, attr->shared->dt, NULL) < 0)
- HGOTO_ERROR(H5E_OHDR, H5E_BADMESG, FAIL, "trying to share datatype failed")
- if(H5SM_try_share(attr->oloc.file, dxpl_id, NULL, 0, H5O_SDSPACE_ID, attr->shared->ds, NULL) < 0)
- HGOTO_ERROR(H5E_OHDR, H5E_BADMESG, FAIL, "trying to share dataspace failed")
-
- /* Check whether datatype is committed & increment ref count
- * (to maintain ref. count incr/decr similarity with "shared message"
- * type of datatype sharing)
- */
- if(H5T_committed(attr->shared->dt)) {
- /* Increment the reference count on the shared datatype */
- if(H5T_link(attr->shared->dt, 1, dxpl_id) < 0)
- HGOTO_ERROR(H5E_OHDR, H5E_LINKCOUNT, FAIL, "unable to adjust shared datatype link count")
- } /* end if */
-
- /* Compute the size of pieces on disk. This is either the size of the
- * datatype and dataspace messages themselves, or the size of the "shared"
- * messages if either or both of them are shared.
- */
- attr->shared->dt_size = H5O_msg_raw_size(attr->oloc.file, H5O_DTYPE_ID, FALSE, attr->shared->dt);
- attr->shared->ds_size = H5O_msg_raw_size(attr->oloc.file, H5O_SDSPACE_ID, FALSE, attr->shared->ds);
-
- /* Get # of elements for attribute's dataspace */
- if((snelmts = H5S_GET_EXTENT_NPOINTS(attr->shared->ds)) < 0)
- HGOTO_ERROR(H5E_ATTR, H5E_CANTCOUNT, FAIL, "dataspace is invalid")
- H5_ASSIGN_OVERFLOW(nelmts, snelmts, hssize_t, size_t);
-
- HDassert(attr->shared->dt_size > 0);
- HDassert(attr->shared->ds_size > 0);
- attr->shared->data_size = nelmts * H5T_GET_SIZE(attr->shared->dt);
-
- /* Hold the symbol table entry (and file) open */
- if(H5O_open(&(attr->oloc)) < 0)
- HGOTO_ERROR(H5E_ATTR, H5E_CANTOPENOBJ, FAIL, "unable to open")
- attr->obj_opened = TRUE;
-
- /* Set the version to encode the attribute with */
- if(H5A_set_version(attr->oloc.file, attr) < 0)
- HGOTO_ERROR(H5E_ATTR, H5E_CANTSET, FAIL, "unable to update attribute version")
-
- /* Insert the attribute into the object header */
- if(H5O_attr_create(&(attr->oloc), dxpl_id, attr) < 0)
- HGOTO_ERROR(H5E_ATTR, H5E_CANTINSERT, FAIL, "unable to create attribute in object header")
-
/* Register the new attribute and get an ID for it */
if((ret_value = H5I_register(H5I_ATTR, attr, TRUE)) < 0)
HGOTO_ERROR(H5E_ATOM, H5E_CANTREGISTER, FAIL, "unable to register attribute for ID")
-
done:
- /* Cleanup on failure */
+ /* Release resources */
+ if(loc_found && H5G_loc_free(&obj_loc) < 0)
+ HDONE_ERROR(H5E_ATTR, H5E_CANTRELEASE, FAIL, "can't free location")
if(ret_value < 0 && attr && H5A_close(attr) < 0)
HDONE_ERROR(H5E_ATTR, H5E_CANTFREE, FAIL, "can't close attribute")
- FUNC_LEAVE_NOAPI(ret_value)
-} /* H5A_create() */
+ FUNC_LEAVE_API(ret_value)
+} /* H5Acreate_by_name() */
/*--------------------------------------------------------------------------
@@ -712,192 +560,6 @@ done:
} /* H5Aopen_by_idx() */
-/*-------------------------------------------------------------------------
- * Function: H5A_open_common
- *
- * Purpose:
- * Finishes initializing an attributes the open
- *
- * Usage:
- * herr_t H5A_open_common(loc, name, dxpl_id)
- * const H5G_loc_t *loc; IN: Pointer to group location for object
- * H5A_t *attr; IN/OUT: Pointer to attribute to initialize
- *
- * Return: Non-negative on success/Negative on failure
- *
- * Programmer: Quincey Koziol
- * December 18, 2006
- *
- *-------------------------------------------------------------------------
- */
-static herr_t
-H5A_open_common(const H5G_loc_t *loc, H5A_t *attr)
-{
- herr_t ret_value = SUCCEED; /* Return value */
-
- FUNC_ENTER_NOAPI_NOINIT
-
- /* check args */
- HDassert(loc);
- HDassert(attr);
-
-#if defined(H5_USING_MEMCHECKER) || !defined(NDEBUG)
- /* Clear object location */
- if(H5O_loc_reset(&(attr->oloc)) < 0)
- HGOTO_ERROR(H5E_ATTR, H5E_CANTOPENOBJ, FAIL, "unable to reset location")
-#endif /* H5_USING_MEMCHECKER */
-
- /* Free any previous group hier. path */
- if(H5G_name_free(&(attr->path)) < 0)
- HGOTO_ERROR(H5E_ATTR, H5E_CANTRELEASE, FAIL, "can't release group hier. path")
-
- /* Deep copy of the symbol table entry */
- if(H5O_loc_copy(&(attr->oloc), loc->oloc, H5_COPY_DEEP) < 0)
- HGOTO_ERROR(H5E_ATTR, H5E_CANTOPENOBJ, FAIL, "unable to copy entry")
-
- /* Deep copy of the group hier. path */
- if(H5G_name_copy(&(attr->path), loc->path, H5_COPY_DEEP) < 0)
- HGOTO_ERROR(H5E_ATTR, H5E_CANTCOPY, FAIL, "unable to copy entry")
-
- /* Hold the symbol table entry (and file) open */
- if(H5O_open(&(attr->oloc)) < 0)
- HGOTO_ERROR(H5E_ATTR, H5E_CANTOPENOBJ, FAIL, "unable to open")
- attr->obj_opened = TRUE;
-
-done:
- FUNC_LEAVE_NOAPI(ret_value)
-} /* H5A_open_common() */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5A_open_by_idx
- *
- * Purpose: Open an attribute according to its index order
- *
- * Return: Non-negative on success/Negative on failure
- *
- * Programmer: Quincey Koziol
- * April 2, 1998
- *
- *-------------------------------------------------------------------------
- */
-H5A_t *
-H5A_open_by_idx(const H5G_loc_t *loc, const char *obj_name, H5_index_t idx_type,
- H5_iter_order_t order, hsize_t n, hid_t lapl_id, hid_t dxpl_id)
-{
- H5G_loc_t obj_loc; /* Location used to open group */
- H5G_name_t obj_path; /* Opened object group hier. path */
- H5O_loc_t obj_oloc; /* Opened object object location */
- hbool_t loc_found = FALSE; /* Entry at 'obj_name' found */
- H5A_t *attr = NULL; /* Attribute from object header */
- H5A_t *ret_value; /* Return value */
-
- FUNC_ENTER_NOAPI_NOINIT
-
- /* check args */
- HDassert(loc);
- HDassert(obj_name);
-
- /* Set up opened group location to fill in */
- obj_loc.oloc = &obj_oloc;
- obj_loc.path = &obj_path;
- H5G_loc_reset(&obj_loc);
-
- /* Find the object's location */
- if(H5G_loc_find(loc, obj_name, &obj_loc/*out*/, lapl_id, dxpl_id) < 0)
- HGOTO_ERROR(H5E_ATTR, H5E_NOTFOUND, NULL, "object not found")
- loc_found = TRUE;
-
- /* Read in attribute from object header */
- if(NULL == (attr = H5O_attr_open_by_idx(obj_loc.oloc, idx_type, order, n, dxpl_id)))
- HGOTO_ERROR(H5E_ATTR, H5E_CANTOPENOBJ, NULL, "unable to load attribute info from object header")
-
- /* Finish initializing attribute */
- if(H5A_open_common(&obj_loc, attr) < 0)
- HGOTO_ERROR(H5E_ATTR, H5E_CANTINIT, NULL, "unable to initialize attribute")
-
- /* Set return value */
- ret_value = attr;
-
-done:
- /* Release resources */
- if(loc_found && H5G_loc_free(&obj_loc) < 0)
- HDONE_ERROR(H5E_ATTR, H5E_CANTRELEASE, NULL, "can't free location")
-
- /* Cleanup on failure */
- if(ret_value == NULL)
- if(attr && H5A_close(attr) < 0)
- HDONE_ERROR(H5E_ATTR, H5E_CANTFREE, NULL, "can't close attribute")
-
- FUNC_LEAVE_NOAPI(ret_value)
-} /* H5A_open_by_idx() */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5A_open_by_name
- *
- * Purpose: Open an attribute in an object header, according to it's name
- *
- * Return: Non-negative on success/Negative on failure
- *
- * Programmer: Quincey Koziol
- * December 11, 2006
- *
- *-------------------------------------------------------------------------
- */
-H5A_t *
-H5A_open_by_name(const H5G_loc_t *loc, const char *obj_name, const char *attr_name,
- hid_t lapl_id, hid_t dxpl_id)
-{
- H5G_loc_t obj_loc; /* Location used to open group */
- H5G_name_t obj_path; /* Opened object group hier. path */
- H5O_loc_t obj_oloc; /* Opened object object location */
- hbool_t loc_found = FALSE; /* Entry at 'obj_name' found */
- H5A_t *attr = NULL; /* Attribute from object header */
- H5A_t *ret_value; /* Return value */
-
- FUNC_ENTER_NOAPI(NULL)
-
- /* check args */
- HDassert(loc);
- HDassert(obj_name);
- HDassert(attr_name);
-
- /* Set up opened group location to fill in */
- obj_loc.oloc = &obj_oloc;
- obj_loc.path = &obj_path;
- H5G_loc_reset(&obj_loc);
-
- /* Find the object's location */
- if(H5G_loc_find(loc, obj_name, &obj_loc/*out*/, lapl_id, dxpl_id) < 0)
- HGOTO_ERROR(H5E_ATTR, H5E_NOTFOUND, NULL, "object not found")
- loc_found = TRUE;
-
- /* Read in attribute from object header */
- if(NULL == (attr = H5O_attr_open_by_name(obj_loc.oloc, attr_name, dxpl_id)))
- HGOTO_ERROR(H5E_ATTR, H5E_CANTINIT, NULL, "unable to load attribute info from object header")
-
- /* Finish initializing attribute */
- if(H5A_open_common(loc, attr) < 0)
- HGOTO_ERROR(H5E_ATTR, H5E_CANTINIT, NULL, "unable to initialize attribute")
-
- /* Set return value */
- ret_value = attr;
-
-done:
- /* Release resources */
- if(loc_found && H5G_loc_free(&obj_loc) < 0)
- HDONE_ERROR(H5E_ATTR, H5E_CANTRELEASE, NULL, "can't free location")
-
- /* Cleanup on failure */
- if(ret_value == NULL)
- if(attr && H5A_close(attr) < 0)
- HDONE_ERROR(H5E_ATTR, H5E_CANTFREE, NULL, "can't close attribute")
-
- FUNC_LEAVE_NOAPI(ret_value)
-} /* H5A_open_by_name() */
-
-
/*--------------------------------------------------------------------------
NAME
H5Awrite
@@ -943,120 +605,6 @@ done:
/*--------------------------------------------------------------------------
NAME
- H5A_write
- PURPOSE
- Actually write out data to an attribute
- USAGE
- herr_t H5A_write (attr, mem_type, buf)
- H5A_t *attr; IN: Attribute to write
- const H5T_t *mem_type; IN: Memory datatype of buffer
- const void *buf; IN: Buffer of data to write
- RETURNS
- Non-negative on success/Negative on failure
-
- DESCRIPTION
- This function writes a complete attribute to disk.
---------------------------------------------------------------------------*/
-static herr_t
-H5A_write(H5A_t *attr, const H5T_t *mem_type, const void *buf, hid_t dxpl_id)
-{
- uint8_t *tconv_buf = NULL; /* datatype conv buffer */
- hbool_t tconv_owned = FALSE; /* Whether the datatype conv buffer is owned by attribute */
- uint8_t *bkg_buf = NULL; /* temp conversion buffer */
- hssize_t snelmts; /* elements in attribute */
- size_t nelmts; /* elements in attribute */
- H5T_path_t *tpath = NULL; /* conversion information*/
- hid_t src_id = -1, dst_id = -1;/* temporary type atoms */
- size_t src_type_size; /* size of source type */
- size_t dst_type_size; /* size of destination type*/
- size_t buf_size; /* desired buffer size */
- herr_t ret_value = SUCCEED;
-
- FUNC_ENTER_NOAPI_NOINIT
-
- HDassert(attr);
- HDassert(mem_type);
- HDassert(buf);
-
- /* Get # of elements for attribute's dataspace */
- if((snelmts = H5S_GET_EXTENT_NPOINTS(attr->shared->ds)) < 0)
- HGOTO_ERROR(H5E_ATTR, H5E_CANTCOUNT, FAIL, "dataspace is invalid")
- H5_ASSIGN_OVERFLOW(nelmts, snelmts, hssize_t, size_t);
-
- /* If there's actually data elements for the attribute, make a copy of the data passed in */
- if(nelmts > 0) {
- /* Get the memory and file datatype sizes */
- src_type_size = H5T_GET_SIZE(mem_type);
- dst_type_size = H5T_GET_SIZE(attr->shared->dt);
-
- /* Convert memory buffer into disk buffer */
- /* Set up type conversion function */
- if(NULL == (tpath = H5T_path_find(mem_type, attr->shared->dt, NULL, NULL, dxpl_id, FALSE)))
- HGOTO_ERROR(H5E_ATTR, H5E_UNSUPPORTED, FAIL, "unable to convert between src and dst datatypes")
-
- /* Check for type conversion required */
- if(!H5T_path_noop(tpath)) {
- if((src_id = H5I_register(H5I_DATATYPE, H5T_copy(mem_type, H5T_COPY_ALL), FALSE)) < 0 ||
- (dst_id = H5I_register(H5I_DATATYPE, H5T_copy(attr->shared->dt, H5T_COPY_ALL), FALSE)) < 0)
- HGOTO_ERROR(H5E_ATTR, H5E_CANTREGISTER, FAIL, "unable to register types for conversion")
-
- /* Get the maximum buffer size needed and allocate it */
- buf_size = nelmts * MAX(src_type_size, dst_type_size);
- if(NULL == (tconv_buf = H5FL_BLK_MALLOC(attr_buf, buf_size)))
- HGOTO_ERROR(H5E_ATTR, H5E_CANTALLOC, FAIL, "memory allocation failed")
- if(NULL == (bkg_buf = H5FL_BLK_CALLOC(attr_buf, buf_size)))
- HGOTO_ERROR(H5E_ATTR, H5E_CANTALLOC, FAIL, "memory allocation failed")
-
- /* Copy the user's data into the buffer for conversion */
- HDmemcpy(tconv_buf, buf, (src_type_size * nelmts));
-
- /* Perform datatype conversion */
- if(H5T_convert(tpath, src_id, dst_id, nelmts, (size_t)0, (size_t)0, tconv_buf, bkg_buf, dxpl_id) < 0)
- HGOTO_ERROR(H5E_ATTR, H5E_CANTENCODE, FAIL, "datatype conversion failed")
-
- /* Free the previous attribute data buffer, if there is one */
- if(attr->shared->data)
- attr->shared->data = H5FL_BLK_FREE(attr_buf, attr->shared->data);
-
- /* Set the pointer to the attribute data to the converted information */
- attr->shared->data = tconv_buf;
- tconv_owned = TRUE;
- } /* end if */
- /* No type conversion necessary */
- else {
- HDassert(dst_type_size == src_type_size);
-
- /* Allocate the attribute buffer, if there isn't one */
- if(attr->shared->data == NULL)
- if(NULL == (attr->shared->data = H5FL_BLK_MALLOC(attr_buf, dst_type_size * nelmts)))
- HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed")
-
- /* Copy the attribute data into the user's buffer */
- HDmemcpy(attr->shared->data, buf, (dst_type_size * nelmts));
- } /* end else */
-
- /* Modify the attribute in the object header */
- if(H5O_attr_write(&(attr->oloc), dxpl_id, attr) < 0)
- HGOTO_ERROR(H5E_ATTR, H5E_CANTINIT, FAIL, "unable to modify attribute")
- } /* end if */
-
-done:
- /* Release resources */
- if(src_id >= 0 && H5I_dec_ref(src_id) < 0)
- HDONE_ERROR(H5E_ATTR, H5E_CANTDEC, FAIL, "unable to close temporary object")
- if(dst_id >= 0 && H5I_dec_ref(dst_id) < 0)
- HDONE_ERROR(H5E_ATTR, H5E_CANTDEC, FAIL, "unable to close temporary object")
- if(tconv_buf && !tconv_owned)
- tconv_buf = H5FL_BLK_FREE(attr_buf, tconv_buf);
- if(bkg_buf)
- bkg_buf = H5FL_BLK_FREE(attr_buf, bkg_buf);
-
- FUNC_LEAVE_NOAPI(ret_value)
-} /* H5A_write() */
-
-
-/*--------------------------------------------------------------------------
- NAME
H5Aread
PURPOSE
Read in data from an attribute
@@ -1100,109 +648,6 @@ done:
/*--------------------------------------------------------------------------
NAME
- H5A_read
- PURPOSE
- Actually read in data from an attribute
- USAGE
- herr_t H5A_read (attr, mem_type, buf)
- H5A_t *attr; IN: Attribute to read
- const H5T_t *mem_type; IN: Memory datatype of buffer
- void *buf; IN: Buffer for data to read
- RETURNS
- Non-negative on success/Negative on failure
-
- DESCRIPTION
- This function reads a complete attribute from disk.
---------------------------------------------------------------------------*/
-static herr_t
-H5A_read(const H5A_t *attr, const H5T_t *mem_type, void *buf, hid_t dxpl_id)
-{
- uint8_t *tconv_buf = NULL; /* datatype conv buffer*/
- uint8_t *bkg_buf = NULL; /* background buffer */
- hssize_t snelmts; /* elements in attribute */
- size_t nelmts; /* elements in attribute*/
- H5T_path_t *tpath = NULL; /* type conversion info */
- hid_t src_id = -1, dst_id = -1;/* temporary type atoms*/
- size_t src_type_size; /* size of source type */
- size_t dst_type_size; /* size of destination type */
- size_t buf_size; /* desired buffer size */
- herr_t ret_value = SUCCEED;
-
- FUNC_ENTER_NOAPI_NOINIT
-
- HDassert(attr);
- HDassert(mem_type);
- HDassert(buf);
-
- /* Create buffer for data to store on disk */
- if((snelmts = H5S_GET_EXTENT_NPOINTS(attr->shared->ds)) < 0)
- HGOTO_ERROR(H5E_ATTR, H5E_CANTCOUNT, FAIL, "dataspace is invalid")
- H5_ASSIGN_OVERFLOW(nelmts, snelmts, hssize_t, size_t);
-
- if(nelmts > 0) {
- /* Get the memory and file datatype sizes */
- src_type_size = H5T_GET_SIZE(attr->shared->dt);
- dst_type_size = H5T_GET_SIZE(mem_type);
-
- /* Check if the attribute has any data yet, if not, fill with zeroes */
- if(attr->obj_opened && !attr->shared->data)
- HDmemset(buf, 0, (dst_type_size * nelmts));
- else { /* Attribute exists and has a value */
- /* Convert memory buffer into disk buffer */
- /* Set up type conversion function */
- if(NULL == (tpath = H5T_path_find(attr->shared->dt, mem_type, NULL, NULL, dxpl_id, FALSE)))
- HGOTO_ERROR(H5E_ATTR, H5E_UNSUPPORTED, FAIL, "unable to convert between src and dst datatypes")
-
- /* Check for type conversion required */
- if(!H5T_path_noop(tpath)) {
- if((src_id = H5I_register(H5I_DATATYPE, H5T_copy(attr->shared->dt, H5T_COPY_ALL), FALSE)) < 0 ||
- (dst_id = H5I_register(H5I_DATATYPE, H5T_copy(mem_type, H5T_COPY_ALL), FALSE)) < 0)
- HGOTO_ERROR(H5E_ATTR, H5E_CANTREGISTER, FAIL, "unable to register types for conversion")
-
- /* Get the maximum buffer size needed and allocate it */
- buf_size = nelmts * MAX(src_type_size, dst_type_size);
- if(NULL == (tconv_buf = H5FL_BLK_MALLOC(attr_buf, buf_size)))
- HGOTO_ERROR(H5E_ATTR, H5E_NOSPACE, FAIL, "memory allocation failed")
- if(NULL == (bkg_buf = H5FL_BLK_CALLOC(attr_buf, buf_size)))
- HGOTO_ERROR(H5E_ATTR, H5E_NOSPACE, FAIL, "memory allocation failed")
-
- /* Copy the attribute data into the buffer for conversion */
- HDmemcpy(tconv_buf, attr->shared->data, (src_type_size * nelmts));
-
- /* Perform datatype conversion. */
- if(H5T_convert(tpath, src_id, dst_id, nelmts, (size_t)0, (size_t)0, tconv_buf, bkg_buf, dxpl_id) < 0)
- HGOTO_ERROR(H5E_ATTR, H5E_CANTENCODE, FAIL, "datatype conversion failed")
-
- /* Copy the converted data into the user's buffer */
- HDmemcpy(buf, tconv_buf, (dst_type_size * nelmts));
- } /* end if */
- /* No type conversion necessary */
- else {
- HDassert(dst_type_size == src_type_size);
-
- /* Copy the attribute data into the user's buffer */
- HDmemcpy(buf, attr->shared->data, (dst_type_size * nelmts));
- } /* end else */
- } /* end else */
- } /* end if */
-
-done:
- /* Release resources */
- if(src_id >= 0 && H5I_dec_ref(src_id) < 0)
- HDONE_ERROR(H5E_ATTR, H5E_CANTDEC, FAIL, "unable to close temporary object")
- if(dst_id >= 0 && H5I_dec_ref(dst_id) < 0)
- HDONE_ERROR(H5E_ATTR, H5E_CANTDEC, FAIL, "unable to close temporary object")
- if(tconv_buf)
- tconv_buf = H5FL_BLK_FREE(attr_buf, tconv_buf);
- if(bkg_buf)
- bkg_buf = H5FL_BLK_FREE(attr_buf, bkg_buf);
-
- FUNC_LEAVE_NOAPI(ret_value)
-} /* H5A_read() */
-
-
-/*--------------------------------------------------------------------------
- NAME
H5Aget_space
PURPOSE
Gets a copy of the dataspace for an attribute
@@ -1221,7 +666,6 @@ hid_t
H5Aget_space(hid_t attr_id)
{
H5A_t *attr; /* Attribute object for ID */
- H5S_t *ds = NULL; /* Copy of dataspace for attribute */
hid_t ret_value;
FUNC_ENTER_API(FAIL)
@@ -1231,18 +675,10 @@ H5Aget_space(hid_t attr_id)
if(NULL == (attr = (H5A_t *)H5I_object_verify(attr_id, H5I_ATTR)))
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not an attribute")
- /* Copy the attribute's dataspace */
- if(NULL == (ds = H5S_copy(attr->shared->ds, FALSE, TRUE)))
- HGOTO_ERROR(H5E_ATTR, H5E_CANTINIT, FAIL, "unable to copy dataspace")
-
- /* Atomize */
- if((ret_value = H5I_register(H5I_DATASPACE, ds, TRUE)) < 0)
- HGOTO_ERROR(H5E_ATOM, H5E_CANTREGISTER, FAIL, "unable to register dataspace atom")
+ if((ret_value = H5A_get_space(attr)) < 0)
+ HGOTO_ERROR(H5E_ARGS, H5E_CANTGET, FAIL, "can't get space ID of attribute")
done:
- if(ret_value < 0 && ds)
- (void)H5S_close(ds);
-
FUNC_LEAVE_API(ret_value)
} /* H5Aget_space() */
@@ -1267,7 +703,6 @@ hid_t
H5Aget_type(hid_t attr_id)
{
H5A_t *attr; /* Attribute object for ID */
- H5T_t *dt = NULL; /* Copy of attribute's datatype */
hid_t ret_value; /* Return value */
FUNC_ENTER_API(FAIL)
@@ -1277,36 +712,10 @@ H5Aget_type(hid_t attr_id)
if(NULL == (attr = (H5A_t *)H5I_object_verify(attr_id, H5I_ATTR)))
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not an attribute")
- /* Patch the datatype's "top level" file pointer */
- if(H5T_patch_file(attr->shared->dt, attr->oloc.file) < 0)
- HGOTO_ERROR(H5E_ATTR, H5E_CANTINIT, FAIL, "unable to patch datatype's file pointer")
-
- /*
- * Copy the attribute's datatype. If the type is a named type then
- * reopen the type before returning it to the user. Make the type
- * read-only.
- */
- if(NULL == (dt = H5T_copy(attr->shared->dt, H5T_COPY_REOPEN)))
- HGOTO_ERROR(H5E_ATTR, H5E_CANTINIT, FAIL, "unable to copy datatype")
-
- /* Mark any datatypes as being in memory now */
- if(H5T_set_loc(dt, NULL, H5T_LOC_MEMORY) < 0)
- HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "invalid datatype location")
-
- /* Lock copied type */
- if(H5T_lock(dt, FALSE) < 0)
- HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "unable to lock transient datatype")
-
- /* Atomize */
- if((ret_value = H5I_register(H5I_DATATYPE, dt, TRUE)) < 0)
- HGOTO_ERROR(H5E_ATOM, H5E_CANTREGISTER, FAIL, "unable to register datatype ID")
+ if((ret_value = H5A_get_type(attr)) < 0)
+ HGOTO_ERROR(H5E_ARGS, H5E_CANTGET, FAIL, "can't get space ID of attribute")
done:
- if(ret_value < 0) {
- if(dt && H5T_close(dt) < 0)
- HDONE_ERROR(H5E_DATATYPE, H5E_CLOSEERROR, FAIL, "unable to release datatype")
- } /* end if */
-
FUNC_LEAVE_API(ret_value)
} /* H5Aget_type() */
@@ -1334,33 +743,19 @@ hid_t
H5Aget_create_plist(hid_t attr_id)
{
H5A_t *attr; /* Attribute object for ID */
- H5P_genplist_t *plist; /* Default property list */
- hid_t new_plist_id; /* ID of ACPL to return */
- H5P_genplist_t *new_plist; /* ACPL to return */
hid_t ret_value;
FUNC_ENTER_API(FAIL)
H5TRACE1("i", "i", attr_id);
- HDassert(H5P_LST_ATTRIBUTE_CREATE_g != -1);
+ HDassert(H5P_LST_ATTRIBUTE_CREATE_ID_g != -1);
/* Get attribute and default attribute creation property list*/
if(NULL == (attr = (H5A_t *)H5I_object_verify(attr_id, H5I_ATTR)))
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not an attribute")
- if(NULL == (plist = (H5P_genplist_t *)H5I_object(H5P_LST_ATTRIBUTE_CREATE_g)))
- HGOTO_ERROR(H5E_PLIST, H5E_BADTYPE, FAIL, "can't get default ACPL")
-
- /* Create the property list object to return */
- if((new_plist_id = H5P_copy_plist(plist, TRUE)) < 0)
- HGOTO_ERROR(H5E_PLIST, H5E_CANTINIT, FAIL, "unable to copy attribute creation properties")
- if(NULL == (new_plist = (H5P_genplist_t *)H5I_object(new_plist_id)))
- HGOTO_ERROR(H5E_PLIST, H5E_BADTYPE, FAIL, "can't get property list")
-
- /* Set the character encoding on the new property list */
- if(H5P_set(new_plist, H5P_STRCRT_CHAR_ENCODING_NAME, &(attr->shared->encoding)) < 0)
- HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set character encoding")
- ret_value = new_plist_id;
+ if((ret_value = H5A_get_create_plist(attr)) < 0)
+ HGOTO_ERROR(H5E_ARGS, H5E_CANTGET, FAIL, "can't get creation property list for attr")
done:
FUNC_LEAVE_API(ret_value)
@@ -1412,53 +807,6 @@ done:
} /* H5Aget_name() */
-/*--------------------------------------------------------------------------
- NAME
- H5A_get_name
- PURPOSE
- Private function for H5Aget_name. Gets a copy of the name for an
- attribute
- RETURNS
- This function returns the length of the attribute's name (which may be
- longer than 'buf_size') on success or negative for failure.
- DESCRIPTION
- This function retrieves the name of an attribute for an attribute ID.
- Up to 'buf_size' characters are stored in 'buf' followed by a '\0' string
- terminator. If the name of the attribute is longer than 'buf_size'-1,
- the string terminator is stored in the last position of the buffer to
- properly terminate the string.
---------------------------------------------------------------------------*/
-ssize_t
-H5A_get_name(H5A_t *attr, size_t buf_size, char *buf)
-{
- size_t copy_len, nbytes;
- ssize_t ret_value;
-
- FUNC_ENTER_NOAPI(FAIL)
-
- /* get the real attribute length */
- nbytes = HDstrlen(attr->shared->name);
- HDassert((ssize_t)nbytes >= 0); /*overflow, pretty unlikely --rpm*/
-
- /* compute the string length which will fit into the user's buffer */
- copy_len = MIN(buf_size - 1, nbytes);
-
- /* Copy all/some of the name */
- if(buf && copy_len > 0) {
- HDmemcpy(buf, attr->shared->name, copy_len);
-
- /* Terminate the string */
- buf[copy_len]='\0';
- } /* end if */
-
- /* Set return value */
- ret_value = (ssize_t)nbytes;
-
-done:
- FUNC_LEAVE_NOAPI(ret_value)
-} /* H5A_get_name() */
-
-
/*-------------------------------------------------------------------------
* Function: H5Aget_name_by_idx
*
@@ -1723,47 +1071,6 @@ done:
/*-------------------------------------------------------------------------
- * Function: H5A_get_info
- *
- * Purpose: Retrieve information about an attribute.
- *
- * Return: Success: Non-negative
- * Failure: Negative
- *
- * Programmer: Quincey Koziol
- * February 6, 2007
- *
- *-------------------------------------------------------------------------
- */
-herr_t
-H5A_get_info(const H5A_t *attr, H5A_info_t *ainfo)
-{
- herr_t ret_value = SUCCEED; /* Return value */
-
- FUNC_ENTER_NOAPI(FAIL)
-
- /* Check args */
- HDassert(attr);
- HDassert(ainfo);
-
- /* Set info for attribute */
- ainfo->cset = attr->shared->encoding;
- ainfo->data_size = attr->shared->data_size;
- if(attr->shared->crt_idx == H5O_MAX_CRT_ORDER_IDX) {
- ainfo->corder_valid = FALSE;
- ainfo->corder = 0;
- } /* end if */
- else {
- ainfo->corder_valid = TRUE;
- ainfo->corder = attr->shared->crt_idx;
- } /* end else */
-
-done:
- FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5A_get_info() */
-
-
-/*-------------------------------------------------------------------------
* Function: H5Arename
*
* Purpose: Rename an attribute
@@ -1779,7 +1086,6 @@ done:
herr_t
H5Arename(hid_t loc_id, const char *old_name, const char *new_name)
{
- H5G_loc_t loc; /* Object location */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
@@ -1790,14 +1096,18 @@ H5Arename(hid_t loc_id, const char *old_name, const char *new_name)
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "name is nil")
if(H5I_ATTR == H5I_get_type(loc_id))
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "location is not valid for an attribute")
- if(H5G_loc(loc_id, & loc) < 0)
- HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a location")
/* Avoid thrashing things if the names are the same */
- if(HDstrcmp(old_name, new_name))
- /* Call attribute rename routine */
+ if(HDstrcmp(old_name, new_name)) {
+ H5G_loc_t loc; /* Object location */
+
+ if(H5G_loc(loc_id, & loc) < 0)
+ HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a location")
+
+ /* Call private attribute rename routine */
if(H5O_attr_rename(loc.oloc, H5AC_dxpl_id, old_name, new_name) < 0)
HGOTO_ERROR(H5E_ATTR, H5E_CANTRENAME, FAIL, "can't rename attribute")
+ } /* end if */
done:
FUNC_LEAVE_API(ret_value)
@@ -1821,11 +1131,6 @@ herr_t
H5Arename_by_name(hid_t loc_id, const char *obj_name, const char *old_attr_name,
const char *new_attr_name, hid_t lapl_id)
{
- H5G_loc_t loc; /* Object location */
- H5G_loc_t obj_loc; /* Location used to open group */
- H5G_name_t obj_path; /* Opened object group hier. path */
- H5O_loc_t obj_oloc; /* Opened object object location */
- hbool_t loc_found = FALSE; /* Entry at 'obj_name' found */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
@@ -1835,8 +1140,6 @@ H5Arename_by_name(hid_t loc_id, const char *obj_name, const char *old_attr_name,
/* check arguments */
if(H5I_ATTR == H5I_get_type(loc_id))
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "location is not valid for an attribute")
- if(H5G_loc(loc_id, &loc) < 0)
- HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a location")
if(!obj_name || !*obj_name)
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no object name")
if(!old_attr_name || !*old_attr_name)
@@ -1851,26 +1154,17 @@ H5Arename_by_name(hid_t loc_id, const char *obj_name, const char *old_attr_name,
/* Avoid thrashing things if the names are the same */
if(HDstrcmp(old_attr_name, new_attr_name)) {
- /* Set up opened group location to fill in */
- obj_loc.oloc = &obj_oloc;
- obj_loc.path = &obj_path;
- H5G_loc_reset(&obj_loc);
-
- /* Find the object's location */
- if(H5G_loc_find(&loc, obj_name, &obj_loc/*out*/, lapl_id, H5AC_ind_dxpl_id) < 0)
- HGOTO_ERROR(H5E_ATTR, H5E_NOTFOUND, FAIL, "object not found")
- loc_found = TRUE;
-
- /* Call attribute rename routine */
- if(H5O_attr_rename(obj_loc.oloc, H5AC_dxpl_id, old_attr_name, new_attr_name) < 0)
+ H5G_loc_t loc; /* Object location */
+
+ if(H5G_loc(loc_id, & loc) < 0)
+ HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a location")
+
+ /* Call private attribute rename routine */
+ if(H5A_rename_by_name(loc, obj_name, old_attr_name, new_attr_name, lapl_id) < 0)
HGOTO_ERROR(H5E_ATTR, H5E_CANTRENAME, FAIL, "can't rename attribute")
} /* end if */
done:
- /* Release resources */
- if(loc_found && H5G_loc_free(&obj_loc) < 0)
- HDONE_ERROR(H5E_ATTR, H5E_CANTRELEASE, FAIL, "can't free location")
-
FUNC_LEAVE_API(ret_value)
} /* H5Arename_by_name() */
@@ -2297,271 +1591,6 @@ done:
/*-------------------------------------------------------------------------
- * Function: H5A_copy
- *
- * Purpose: Copies attribute OLD_ATTR.
- *
- * Return: Success: Pointer to a new copy of the OLD_ATTR argument.
- *
- * Failure: NULL
- *
- * Programmer: Robb Matzke
- * Thursday, December 4, 1997
- *
- * Modification:Raymond Lu
- * 4 June 2008
- * Changed some attribute information to be shared.
- *
- *-------------------------------------------------------------------------
- */
-H5A_t *
-H5A_copy(H5A_t *_new_attr, const H5A_t *old_attr)
-{
- H5A_t *new_attr = NULL;
- hbool_t allocated_attr = FALSE; /* Whether the attribute was allocated */
- H5A_t *ret_value = NULL; /* Return value */
-
- FUNC_ENTER_NOAPI(NULL)
-
- /* check args */
- HDassert(old_attr);
-
- /* Allocate attribute structure */
- if(_new_attr == NULL) {
- if(NULL == (new_attr = H5FL_CALLOC(H5A_t)))
- HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed")
- allocated_attr = TRUE;
- } /* end if */
- else
- new_attr = _new_attr;
-
- /* Copy the top level of the attribute */
- new_attr->sh_loc = old_attr->sh_loc;
-
- /* Deep copy of the group hierarchy path */
- if(H5G_name_copy(&(new_attr->path), &(old_attr->path), H5_COPY_DEEP) < 0)
- HGOTO_ERROR(H5E_ATTR, H5E_CANTCOPY, NULL, "unable to copy path")
-
- /* Share some attribute information */
- new_attr->shared = old_attr->shared;
-
- /* Increment reference count for shared object */
- new_attr->shared->nrefs++;
-
- /* Don't open the object header for a copy */
- new_attr->obj_opened = FALSE;
-
- /* Set the return value */
- ret_value = new_attr;
-
-done:
- if(ret_value == NULL)
- if(allocated_attr && new_attr && H5A_close(new_attr) < 0)
- HDONE_ERROR(H5E_ATTR, H5E_CANTFREE, NULL, "can't close attribute")
-
- FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5A_copy() */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5A_free
- *
- * Purpose: Frees all memory associated with an attribute, but does not
- * free the H5A_t structure (which should be done in H5T_close).
- *
- * Return: Non-negative on success/Negative on failure
- *
- * Programmer: Quincey Koziol
- * Monday, November 15, 2004
- *
- * Modifications:
- *
- *-------------------------------------------------------------------------
- */
-herr_t
-H5A_free(H5A_t *attr)
-{
- herr_t ret_value = SUCCEED; /* Return value */
-
- FUNC_ENTER_NOAPI(FAIL)
-
- HDassert(attr);
-
- /* Free dynamicly allocated items */
- if(attr->shared->name) {
- H5MM_xfree(attr->shared->name);
- attr->shared->name = NULL;
- }
- if(attr->shared->dt) {
- if(H5T_close(attr->shared->dt) < 0)
- HGOTO_ERROR(H5E_ATTR, H5E_CANTRELEASE, FAIL, "can't release datatype info")
- attr->shared->dt = NULL;
- }
- if(attr->shared->ds) {
- if(H5S_close(attr->shared->ds) < 0)
- HGOTO_ERROR(H5E_ATTR, H5E_CANTRELEASE, FAIL, "can't release dataspace info")
- attr->shared->ds = NULL;
- }
- if(attr->shared->data)
- attr->shared->data = H5FL_BLK_FREE(attr_buf, attr->shared->data);
-
-done:
- FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5A_free() */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5A_close
- *
- * Purpose: Frees an attribute and all associated memory.
- *
- * Return: Non-negative on success/Negative on failure
- *
- * Programmer: Robb Matzke
- * Monday, December 8, 1997
- *
- * Modifications:
- * Raymond Lu
- * 4 June 2008
- * Changed some attribute object information to be shared.
- *-------------------------------------------------------------------------
- */
-herr_t
-H5A_close(H5A_t *attr)
-{
- herr_t ret_value = SUCCEED; /* Return value */
-
- FUNC_ENTER_NOAPI(FAIL)
-
- HDassert(attr);
- HDassert(attr->shared);
-
- /* Close the object's symbol-table entry */
- if(attr->obj_opened && (H5O_close(&(attr->oloc)) < 0))
- HGOTO_ERROR(H5E_ATTR, H5E_CANTRELEASE, FAIL, "can't release object header info")
-
- /* Reference count can be 0. It only happens when H5A_create fails. */
- if(attr->shared->nrefs <= 1) {
- /* Free dynamicly allocated items */
- if(H5A_free(attr) < 0)
- HGOTO_ERROR(H5E_ATTR, H5E_CANTRELEASE, FAIL, "can't release attribute info")
-
- /* Destroy shared attribute struct */
- attr->shared = H5FL_FREE(H5A_shared_t, attr->shared);
- } /* end if */
- else {
- /* There are other references to the shared part of the attribute.
- * Only decrement the reference count. */
- --attr->shared->nrefs;
- } /* end else */
-
- /* Free group hierarchy path */
- if(H5G_name_free(&(attr->path)) < 0)
- HGOTO_ERROR(H5E_ATTR, H5E_CANTRELEASE, FAIL, "can't release group hier. path")
-
- attr->shared = NULL;
- attr = H5FL_FREE(H5A_t, attr);
-
-done:
- FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5A_close() */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5A_oloc
- *
- * Purpose: Return the object location for an attribute. It's the
- * object location for the object to which the attribute
- * belongs, not the attribute itself.
- *
- * Return: Success: Ptr to entry
- * Failure: NULL
- *
- * Programmer: Robb Matzke
- * Thursday, August 6, 1998
- *
- *-------------------------------------------------------------------------
- */
-H5O_loc_t *
-H5A_oloc(H5A_t *attr)
-{
- H5O_loc_t *ret_value; /* Return value */
-
- FUNC_ENTER_NOAPI(NULL)
-
- HDassert(attr);
-
- /* Set return value */
- ret_value = &(attr->oloc);
-
-done:
- FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5A_oloc() */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5A_nameof
- *
- * Purpose: Return the group hier. path for an attribute. It's the
- * group hier. path for the object to which the attribute
- * belongs, not the attribute itself.
- *
- * Return: Success: Ptr to entry
- * Failure: NULL
- *
- * Programmer: Quincey Koziol
- * Monday, September 12, 2005
- *
- *-------------------------------------------------------------------------
- */
-H5G_name_t *
-H5A_nameof(H5A_t *attr)
-{
- H5G_name_t *ret_value; /* Return value */
-
- FUNC_ENTER_NOAPI(NULL)
-
- HDassert(attr);
-
- /* Set return value */
- ret_value=&(attr->path);
-
-done:
- FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5A_nameof() */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5A_type
- *
- * Purpose: Return the datatype for an attribute.
- *
- * Return: Success: Ptr to entry
- * Failure: NULL
- *
- * Programmer: Neil Fortner
- * Friday, November 11, 2011
- *
- *-------------------------------------------------------------------------
- */
-H5T_t *
-H5A_type(const H5A_t *attr)
-{
- H5T_t *ret_value; /* Return value */
-
- FUNC_ENTER_NOAPI(NULL)
-
- HDassert(attr);
-
- /* Set return value */
- ret_value = attr->shared->dt;
-
-done:
- FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5A_type() */
-
-
-/*-------------------------------------------------------------------------
* Function: H5Aexists
*
* Purpose: Checks if an attribute with a given name exists on an opened
@@ -2619,10 +1648,6 @@ H5Aexists_by_name(hid_t loc_id, const char *obj_name, const char *attr_name,
hid_t lapl_id)
{
H5G_loc_t loc; /* Object location */
- H5G_loc_t obj_loc; /* Location used to open group */
- H5G_name_t obj_path; /* Opened object group hier. path */
- H5O_loc_t obj_oloc; /* Opened object object location */
- hbool_t loc_found = FALSE; /* Entry at 'obj_name' found */
htri_t ret_value; /* Return value */
FUNC_ENTER_API(FAIL)
@@ -2643,25 +1668,10 @@ H5Aexists_by_name(hid_t loc_id, const char *obj_name, const char *attr_name,
if(TRUE != H5P_isa_class(lapl_id, H5P_LINK_ACCESS))
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not link access property list ID")
- /* Set up opened group location to fill in */
- obj_loc.oloc = &obj_oloc;
- obj_loc.path = &obj_path;
- H5G_loc_reset(&obj_loc);
-
- /* Find the object's location */
- if(H5G_loc_find(&loc, obj_name, &obj_loc/*out*/, lapl_id, H5AC_ind_dxpl_id) < 0)
- HGOTO_ERROR(H5E_ATTR, H5E_NOTFOUND, FAIL, "object not found")
- loc_found = TRUE;
-
- /* Check if the attribute exists */
- if((ret_value = H5O_attr_exists(obj_loc.oloc, attr_name, H5AC_ind_dxpl_id)) < 0)
+ if((ret_value = H5A_exists_by_name(loc, obj_name, attr_name, lapl_id)) < 0)
HGOTO_ERROR(H5E_ATTR, H5E_CANTGET, FAIL, "unable to determine if attribute exists")
done:
- /* Release resources */
- if(loc_found && H5G_loc_free(&obj_loc) < 0)
- HDONE_ERROR(H5E_ATTR, H5E_CANTRELEASE, FAIL, "can't free location")
-
FUNC_LEAVE_API(ret_value)
} /* H5Aexists_by_name() */
diff --git a/src/H5AC.c b/src/H5AC.c
index e0891dd..91a49c5 100644
--- a/src/H5AC.c
+++ b/src/H5AC.c
@@ -114,6 +114,7 @@ static hid_t H5AC_noblock_dxpl_id=(-1);
/* Dataset transfer property list for independent metadata I/O calls */
/* (just "library internal" set - i.e. independent transfer mode) */
/* (Global variable definition, declaration is in H5ACprivate.h also) */
+H5P_genplist_t *H5AC_ind_dxpl_g = NULL;
hid_t H5AC_ind_dxpl_id=(-1);
@@ -165,8 +166,7 @@ static herr_t H5AC_log_moved_entry(const H5F_t * f,
haddr_t old_addr,
haddr_t new_addr);
-static herr_t H5AC_log_inserted_entry(H5F_t * f,
- H5AC_t * cache_ptr,
+static herr_t H5AC_log_inserted_entry(H5AC_t * cache_ptr,
H5AC_info_t * entry_ptr);
static herr_t H5AC_propagate_and_apply_candidate_list(H5F_t * f,
@@ -256,30 +256,25 @@ static herr_t
H5AC_init_interface(void)
{
#ifdef H5_HAVE_PARALLEL
- H5P_genclass_t *xfer_pclass; /* Dataset transfer property list class object */
H5P_genplist_t *xfer_plist; /* Dataset transfer property list object */
unsigned block_before_meta_write; /* "block before meta write" property value */
unsigned coll_meta_write; /* "collective metadata write" property value */
- unsigned library_internal=1; /* "library internal" property value */
- H5FD_mpio_xfer_t xfer_mode; /* I/O transfer mode property value */
- herr_t ret_value=SUCCEED; /* Return value */
+ unsigned library_internal = 1; /* "library internal" property value */
+#endif /* H5_HAVE_PARALLEL */
+ herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_NOAPI_NOINIT
+#ifdef H5_HAVE_PARALLEL
/* Sanity check */
- HDassert(H5P_CLS_DATASET_XFER_g!=(-1));
-
- /* Get the dataset transfer property list class object */
- if (NULL == (xfer_pclass = H5I_object(H5P_CLS_DATASET_XFER_g)))
- HGOTO_ERROR(H5E_CACHE, H5E_BADATOM, FAIL, "can't get property list class")
-
+ HDassert(H5P_CLS_DATASET_XFER_g != NULL);
/* Get an ID for the blocking, collective H5AC dxpl */
- if ((H5AC_dxpl_id=H5P_create_id(xfer_pclass,FALSE)) < 0)
+ if((H5AC_dxpl_id = H5P_create_id(H5P_CLS_DATASET_XFER_g, FALSE)) < 0)
HGOTO_ERROR(H5E_CACHE, H5E_CANTCREATE, FAIL, "unable to register property list")
/* Get the property list object */
- if (NULL == (xfer_plist = H5I_object(H5AC_dxpl_id)))
+ if (NULL == (xfer_plist = (H5P_genplist_t *)H5I_object(H5AC_dxpl_id)))
HGOTO_ERROR(H5E_CACHE, H5E_BADATOM, FAIL, "can't get new property list object")
/* Insert 'block before metadata write' property */
@@ -299,11 +294,11 @@ H5AC_init_interface(void)
/* Get an ID for the non-blocking, collective H5AC dxpl */
- if ((H5AC_noblock_dxpl_id=H5P_create_id(xfer_pclass,FALSE)) < 0)
+ if((H5AC_noblock_dxpl_id = H5P_create_id(H5P_CLS_DATASET_XFER_g, FALSE)) < 0)
HGOTO_ERROR(H5E_CACHE, H5E_CANTCREATE, FAIL, "unable to register property list")
/* Get the property list object */
- if (NULL == (xfer_plist = H5I_object(H5AC_noblock_dxpl_id)))
+ if (NULL == (xfer_plist = (H5P_genplist_t *)H5I_object(H5AC_noblock_dxpl_id)))
HGOTO_ERROR(H5E_CACHE, H5E_BADATOM, FAIL, "can't get new property list object")
/* Insert 'block before metadata write' property */
@@ -323,43 +318,45 @@ H5AC_init_interface(void)
/* Get an ID for the non-blocking, independent H5AC dxpl */
- if ((H5AC_ind_dxpl_id=H5P_create_id(xfer_pclass,FALSE)) < 0)
+ if((H5AC_ind_dxpl_id = H5P_create_id(H5P_CLS_DATASET_XFER_g, FALSE)) < 0)
HGOTO_ERROR(H5E_CACHE, H5E_CANTCREATE, FAIL, "unable to register property list")
/* Get the property list object */
- if (NULL == (xfer_plist = H5I_object(H5AC_ind_dxpl_id)))
+ if(NULL == (H5AC_ind_dxpl_g = (H5P_genplist_t *)H5I_object(H5AC_ind_dxpl_id)))
HGOTO_ERROR(H5E_CACHE, H5E_BADATOM, FAIL, "can't get new property list object")
/* Insert 'block before metadata write' property */
block_before_meta_write=0;
- if(H5P_insert(xfer_plist,H5AC_BLOCK_BEFORE_META_WRITE_NAME,H5AC_BLOCK_BEFORE_META_WRITE_SIZE,&block_before_meta_write,NULL,NULL,NULL,NULL,NULL,NULL)<0)
+ if(H5P_insert(H5AC_ind_dxpl_g, H5AC_BLOCK_BEFORE_META_WRITE_NAME, H5AC_BLOCK_BEFORE_META_WRITE_SIZE, &block_before_meta_write,
+ NULL, NULL, NULL, NULL, NULL, NULL) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't insert metadata cache dxpl property")
/* Insert 'library internal' property */
- if(H5P_insert(xfer_plist,H5AC_LIBRARY_INTERNAL_NAME,H5AC_LIBRARY_INTERNAL_SIZE,&library_internal,NULL,NULL,NULL,NULL,NULL,NULL)<0)
+ if(H5P_insert(H5AC_ind_dxpl_g, H5AC_LIBRARY_INTERNAL_NAME, H5AC_LIBRARY_INTERNAL_SIZE, &library_internal,
+ NULL, NULL, NULL, NULL, NULL, NULL) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't insert metadata cache dxpl property")
/* Insert 'collective metadata write' property */
coll_meta_write = 0;
- if(H5P_insert(xfer_plist, H5AC_COLLECTIVE_META_WRITE_NAME, H5AC_COLLECTIVE_META_WRITE_SIZE, &coll_meta_write,
- NULL, NULL, NULL, NULL, NULL, NULL) < 0)
+ if(H5P_insert(H5AC_ind_dxpl_g, H5AC_COLLECTIVE_META_WRITE_NAME, H5AC_COLLECTIVE_META_WRITE_SIZE, &coll_meta_write,
+ NULL, NULL, NULL, NULL, NULL, NULL) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't insert metadata cache dxpl property")
-done:
- FUNC_LEAVE_NOAPI(ret_value)
-
#else /* H5_HAVE_PARALLEL */
- FUNC_ENTER_NOAPI_NOINIT_NOERR
-
/* Sanity check */
- HDassert(H5P_LST_DATASET_XFER_g!=(-1));
+ HDassert(H5P_LST_DATASET_XFER_ID_g!=(-1));
H5AC_dxpl_id = H5P_DATASET_XFER_DEFAULT;
H5AC_noblock_dxpl_id = H5P_DATASET_XFER_DEFAULT;
H5AC_ind_dxpl_id = H5P_DATASET_XFER_DEFAULT;
- FUNC_LEAVE_NOAPI(SUCCEED)
+ /* Get the property list objects for the IDs */
+ if (NULL == (H5AC_ind_dxpl_g = (H5P_genplist_t *)H5I_object(H5AC_ind_dxpl_id)))
+ HGOTO_ERROR(H5E_CACHE, H5E_BADATOM, FAIL, "can't get property list object")
#endif /* H5_HAVE_PARALLEL */
+
+done:
+ FUNC_LEAVE_NOAPI(ret_value)
} /* end H5AC_init_interface() */
@@ -992,7 +989,7 @@ H5AC_insert_entry(H5F_t *f, hid_t dxpl_id, const H5AC_class_t *type, haddr_t add
if(NULL != (aux_ptr = (H5AC_aux_t *)f->shared->cache->aux_ptr)) {
/* Log the new entry */
- if(H5AC_log_inserted_entry(f, f->shared->cache, (H5AC_info_t *)thing) < 0)
+ if(H5AC_log_inserted_entry(f->shared->cache, (H5AC_info_t *)thing) < 0)
HGOTO_ERROR(H5E_CACHE, H5E_CANTINS, FAIL, "H5AC_log_inserted_entry() failed")
/* Check if we should try to flush */
@@ -1511,7 +1508,6 @@ H5AC_unprotect(H5F_t *f, hid_t dxpl_id, const H5AC_class_t *type, haddr_t addr,
hbool_t dirtied;
hbool_t deleted;
#ifdef H5_HAVE_PARALLEL
- hbool_t size_changed = FALSE;
H5AC_aux_t * aux_ptr = NULL;
#endif /* H5_HAVE_PARALLEL */
#if H5AC__TRACE_FILE_ENABLED
@@ -1626,7 +1622,7 @@ H5AC_set_sync_point_done_callback(H5C_t * cache_ptr,
{
H5AC_aux_t * aux_ptr;
- FUNC_ENTER_NOAPI_NOINIT
+ FUNC_ENTER_NOAPI_NOINIT_NOERR
HDassert(cache_ptr && (cache_ptr->magic == H5C__H5C_T_MAGIC));
@@ -1663,7 +1659,7 @@ H5AC_set_write_done_callback(H5C_t * cache_ptr,
{
H5AC_aux_t * aux_ptr;
- FUNC_ENTER_NOAPI_NOINIT
+ FUNC_ENTER_NOAPI_NOINIT_NOERR
HDassert(cache_ptr && (cache_ptr->magic == H5C__H5C_T_MAGIC));
@@ -2511,7 +2507,6 @@ H5AC_broadcast_candidate_list(H5AC_t * cache_ptr,
int * num_entries_ptr,
haddr_t ** haddr_buf_ptr_ptr)
{
- herr_t result;
hbool_t success = FALSE;
H5AC_aux_t * aux_ptr = NULL;
haddr_t * haddr_buf_ptr = NULL;
@@ -2681,7 +2676,7 @@ H5AC_broadcast_clean_list(H5AC_t * cache_ptr)
*/
if ( aux_ptr->sync_point_done != NULL ) {
- addr_buf_ptr = H5MM_malloc((size_t)(num_entries * sizeof(haddr_t)));
+ addr_buf_ptr = H5MM_malloc((size_t)num_entries * sizeof(haddr_t));
if ( addr_buf_ptr == NULL ) {
@@ -2779,7 +2774,7 @@ done:
if(buf_ptr != NULL)
buf_ptr = (MPI_Offset *)H5MM_xfree((void *)buf_ptr);
if(addr_buf_ptr != NULL)
- addr_buf_ptr = (MPI_Offset *)H5MM_xfree((void *)addr_buf_ptr);
+ addr_buf_ptr = (haddr_t *)H5MM_xfree((void *)addr_buf_ptr);
FUNC_LEAVE_NOAPI(ret_value)
} /* H5AC_broadcast_clean_list() */
@@ -3513,8 +3508,7 @@ done:
*/
#ifdef H5_HAVE_PARALLEL
static herr_t
-H5AC_log_inserted_entry(H5F_t * f,
- H5AC_t * cache_ptr,
+H5AC_log_inserted_entry(H5AC_t * cache_ptr,
H5AC_info_t * entry_ptr)
{
H5AC_aux_t * aux_ptr;
diff --git a/src/H5ACpkg.h b/src/H5ACpkg.h
index 3060a70..ad768ef 100644
--- a/src/H5ACpkg.h
+++ b/src/H5ACpkg.h
@@ -70,8 +70,6 @@
#define H5AC__MAX_DIRTY_BYTES_THRESHOLD (int32_t) \
(H5C__MAX_MAX_CACHE_SIZE / 4)
-#define H5AC__DEFAULT_METADATA_WRITE_STRATEGY \
- H5AC_METADATA_WRITE_STRATEGY__DISTRIBUTED
/****************************************************************************
*
diff --git a/src/H5ACprivate.h b/src/H5ACprivate.h
index 2e7bcd7..aeae56d 100644
--- a/src/H5ACprivate.h
+++ b/src/H5ACprivate.h
@@ -34,6 +34,7 @@
#include "H5private.h" /* Generic Functions */
#include "H5Cprivate.h" /* Cache */
#include "H5Fprivate.h" /* File access */
+#include "H5Pprivate.h" /* Property lists */
#ifdef H5_METADATA_TRACE_FILE
#define H5AC__TRACE_FILE_ENABLED 1
@@ -193,6 +194,7 @@ extern hid_t H5AC_dxpl_id;
/* Dataset transfer property list for independent metadata I/O calls */
/* (just "library internal" set - i.e. independent transfer mode) */
/* (Global variable declaration, definition is in H5AC.c) */
+extern H5P_genplist_t *H5AC_ind_dxpl_g;
extern hid_t H5AC_ind_dxpl_id;
diff --git a/src/H5Adeprec.c b/src/H5Adeprec.c
index 10ee70b..247b4b5 100644
--- a/src/H5Adeprec.c
+++ b/src/H5Adeprec.c
@@ -162,6 +162,7 @@ hid_t
H5Acreate1(hid_t loc_id, const char *name, hid_t type_id, hid_t space_id,
hid_t plist_id)
{
+ H5A_t *attr = NULL; /* Attribute created */
H5G_loc_t loc; /* Object location */
H5T_t *type; /* Datatype to use for attribute */
H5S_t *space; /* Dataspace to use for attribute */
@@ -182,12 +183,16 @@ H5Acreate1(hid_t loc_id, const char *name, hid_t type_id, hid_t space_id,
if(NULL == (type = (H5T_t *)H5I_object_verify(type_id, H5I_DATATYPE)))
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a type")
if(NULL == (space = (H5S_t *)H5I_object_verify(space_id, H5I_DATASPACE)))
- HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a data space")
+ HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a dataspace")
/* Go do the real work for attaching the attribute to the dataset */
- if((ret_value = H5A_create(&loc, name, type, space, plist_id, H5AC_dxpl_id)) < 0)
+ if(NULL==(attr = H5A_create(&loc, name, type, space, plist_id, H5AC_dxpl_id)))
HGOTO_ERROR(H5E_ATTR, H5E_CANTINIT, FAIL, "unable to create attribute")
+ /* Register the new attribute and get an ID for it */
+ if((ret_value = H5I_register(H5I_ATTR, attr, TRUE)) < 0)
+ HGOTO_ERROR(H5E_ATOM, H5E_CANTREGISTER, FAIL, "unable to register attribute for ID")
+
done:
FUNC_LEAVE_API(ret_value)
} /* H5Acreate1() */
diff --git a/src/H5Aint.c b/src/H5Aint.c
index 3eeb76d..b0c068d 100644
--- a/src/H5Aint.c
+++ b/src/H5Aint.c
@@ -119,6 +119,1111 @@ H5FL_SEQ_DEFINE(H5A_t_ptr);
/*-------------------------------------------------------------------------
+ * Function: H5A_create
+ *
+ * Purpose:
+ * This is the guts of creating an attribute.
+ * Usage:
+ * hid_t H5A_create(ent, name, type, space)
+ * const H5G_entry_t *ent; IN: Pointer to symbol table entry for object to attribute
+ * const char *name; IN: Name of attribute
+ * H5T_t *type; IN: Datatype of attribute
+ * H5S_t *space; IN: Dataspace of attribute
+ * hid_t acpl_id IN: Attribute creation property list
+ *
+ * Return: attribute structure on success, NULL on Failure.
+ *
+ * Programmer: Quincey Koziol
+ * April 2, 1998
+ *
+ *-------------------------------------------------------------------------
+ */
+H5A_t *
+H5A_create(const H5G_loc_t *loc, const char *name, const H5T_t *type,
+ const H5S_t *space, hid_t acpl_id, hid_t dxpl_id)
+{
+ H5A_t *attr = NULL; /* Attribute created */
+ hssize_t snelmts; /* elements in attribute */
+ size_t nelmts; /* elements in attribute */
+ htri_t tri_ret; /* htri_t return value */
+ H5A_t *ret_value = NULL; /* Return value */
+
+ FUNC_ENTER_NOAPI_NOINIT
+
+ /* check args */
+ HDassert(loc);
+ HDassert(name);
+ HDassert(type);
+ HDassert(space);
+
+ /* Check for existing attribute with same name */
+ /* (technically, the "attribute create" operation will fail for a duplicated
+ * name, but it's going to be hard to unwind all the special cases on
+ * failure, so just check first, for now - QAK)
+ */
+ if((tri_ret = H5O_attr_exists(loc->oloc, name, H5AC_ind_dxpl_id)) < 0)
+ HGOTO_ERROR(H5E_ATTR, H5E_NOTFOUND, NULL, "error checking attributes")
+ else if(tri_ret > 0)
+ HGOTO_ERROR(H5E_ATTR, H5E_ALREADYEXISTS, NULL, "attribute already exists")
+
+ /* Check if the dataspace has an extent set (or is NULL) */
+ if(!(H5S_has_extent(space)))
+ HGOTO_ERROR(H5E_ATTR, H5E_BADVALUE, NULL, "dataspace extent has not been set")
+
+ /* Check if the datatype is "sensible" for use in a dataset */
+ if(H5T_is_sensible(type) != TRUE)
+ HGOTO_ERROR(H5E_ATTR, H5E_BADTYPE, NULL, "datatype is not sensible")
+
+ /* Build the attribute information */
+ if(NULL == (attr = H5FL_CALLOC(H5A_t)))
+ HGOTO_ERROR(H5E_ATTR, H5E_CANTALLOC, NULL, "memory allocation failed for attribute info")
+
+ if(NULL == (attr->shared = H5FL_CALLOC(H5A_shared_t)))
+ HGOTO_ERROR(H5E_ATTR, H5E_CANTALLOC, NULL, "can't allocate shared attr structure")
+
+ /* If the creation property list is H5P_DEFAULT, use the default character encoding */
+ if(acpl_id == H5P_DEFAULT)
+ attr->shared->encoding = H5F_DEFAULT_CSET;
+ else {
+ H5P_genplist_t *ac_plist; /* ACPL Property list */
+
+ /* Get a local copy of the attribute creation property list */
+ if(NULL == (ac_plist = (H5P_genplist_t *)H5I_object(acpl_id)))
+ HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "not a property list")
+
+ if(H5P_get(ac_plist, H5P_STRCRT_CHAR_ENCODING_NAME, &(attr->shared->encoding)) < 0)
+ HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, NULL, "can't get character encoding flag")
+ } /* end else */
+
+ /* Copy the attribute name */
+ attr->shared->name = H5MM_xstrdup(name);
+
+ /* Copy datatype */
+ if(NULL == (attr->shared->dt = H5T_copy(type, H5T_COPY_ALL)))
+ HGOTO_ERROR(H5E_ATTR, H5E_CANTGET, NULL, "can't get shared datatype info")
+
+ /* Mark datatype as being on disk now */
+ if(H5T_set_loc(attr->shared->dt, loc->oloc->file, H5T_LOC_DISK) < 0)
+ HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, NULL, "invalid datatype location")
+
+ /* Set the latest format for datatype, if requested */
+ if(H5F_USE_LATEST_FORMAT(loc->oloc->file))
+ if(H5T_set_latest_version(attr->shared->dt) < 0)
+ HGOTO_ERROR(H5E_DATASET, H5E_CANTSET, NULL, "can't set latest version of datatype")
+
+ /* Copy the dataspace for the attribute */
+ attr->shared->ds = H5S_copy(space, FALSE, TRUE);
+
+ /* Set the latest format for dataspace, if requested */
+ if(H5F_USE_LATEST_FORMAT(loc->oloc->file))
+ if(H5S_set_latest_version(attr->shared->ds) < 0)
+ HGOTO_ERROR(H5E_DATASET, H5E_CANTSET, NULL, "can't set latest version of dataspace")
+
+ /* Copy the object header information */
+ if(H5O_loc_copy(&(attr->oloc), loc->oloc, H5_COPY_DEEP) < 0)
+ HGOTO_ERROR(H5E_ATTR, H5E_CANTOPENOBJ, NULL, "unable to copy entry")
+
+ /* Deep copy of the group hierarchy path */
+ if(H5G_name_copy(&(attr->path), loc->path, H5_COPY_DEEP) < 0)
+ HGOTO_ERROR(H5E_ATTR, H5E_CANTCOPY, NULL, "unable to copy path")
+
+ /* Check if any of the pieces should be (or are already) shared in the
+ * SOHM table
+ */
+ if(H5SM_try_share(attr->oloc.file, dxpl_id, NULL, 0, H5O_DTYPE_ID, attr->shared->dt, NULL) < 0)
+ HGOTO_ERROR(H5E_OHDR, H5E_BADMESG, NULL, "trying to share datatype failed")
+ if(H5SM_try_share(attr->oloc.file, dxpl_id, NULL, 0, H5O_SDSPACE_ID, attr->shared->ds, NULL) < 0)
+ HGOTO_ERROR(H5E_OHDR, H5E_BADMESG, NULL, "trying to share dataspace failed")
+
+ /* Check whether datatype is committed & increment ref count
+ * (to maintain ref. count incr/decr similarity with "shared message"
+ * type of datatype sharing)
+ */
+ if(H5T_committed(attr->shared->dt)) {
+ /* Increment the reference count on the shared datatype */
+ if(H5T_link(attr->shared->dt, 1, dxpl_id) < 0)
+ HGOTO_ERROR(H5E_OHDR, H5E_LINKCOUNT, NULL, "unable to adjust shared datatype link count")
+ } /* end if */
+
+ /* Compute the size of pieces on disk. This is either the size of the
+ * datatype and dataspace messages themselves, or the size of the "shared"
+ * messages if either or both of them are shared.
+ */
+ attr->shared->dt_size = H5O_msg_raw_size(attr->oloc.file, H5O_DTYPE_ID, FALSE, attr->shared->dt);
+ attr->shared->ds_size = H5O_msg_raw_size(attr->oloc.file, H5O_SDSPACE_ID, FALSE, attr->shared->ds);
+
+ /* Get # of elements for attribute's dataspace */
+ if((snelmts = H5S_GET_EXTENT_NPOINTS(attr->shared->ds)) < 0)
+ HGOTO_ERROR(H5E_ATTR, H5E_CANTCOUNT, NULL, "dataspace is invalid")
+ H5_ASSIGN_OVERFLOW(nelmts, snelmts, hssize_t, size_t);
+
+ HDassert(attr->shared->dt_size > 0);
+ HDassert(attr->shared->ds_size > 0);
+ attr->shared->data_size = nelmts * H5T_GET_SIZE(attr->shared->dt);
+
+ /* Hold the symbol table entry (and file) open */
+ if(H5O_open(&(attr->oloc)) < 0)
+ HGOTO_ERROR(H5E_ATTR, H5E_CANTOPENOBJ, NULL, "unable to open")
+ attr->obj_opened = TRUE;
+
+ /* Set the version to encode the attribute with */
+ if(H5A_set_version(attr->oloc.file, attr) < 0)
+ HGOTO_ERROR(H5E_ATTR, H5E_CANTSET, NULL, "unable to update attribute version")
+
+ /* Insert the attribute into the object header */
+ if(H5O_attr_create(&(attr->oloc), dxpl_id, attr) < 0)
+ HGOTO_ERROR(H5E_ATTR, H5E_CANTINSERT, NULL, "unable to create attribute in object header")
+
+ ret_value = attr;
+
+done:
+ if(NULL == ret_value && attr && H5A_close(attr))
+ HDONE_ERROR(H5E_ATTR, H5E_CANTFREE, NULL, "can't close attribute")
+
+ FUNC_LEAVE_NOAPI(ret_value)
+
+} /* H5A_create() */
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5A_open_common
+ *
+ * Purpose:
+ * Finishes initializing an attributes the open
+ *
+ * Usage:
+ * herr_t H5A_open_common(loc, name, dxpl_id)
+ * const H5G_loc_t *loc; IN: Pointer to group location for object
+ * H5A_t *attr; IN/OUT: Pointer to attribute to initialize
+ *
+ * Return: Non-negative on success/Negative on failure
+ *
+ * Programmer: Quincey Koziol
+ * December 18, 2006
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5A_open_common(const H5G_loc_t *loc, H5A_t *attr)
+{
+ herr_t ret_value = SUCCEED; /* Return value */
+
+ FUNC_ENTER_NOAPI_NOINIT
+
+ /* check args */
+ HDassert(loc);
+ HDassert(attr);
+
+#if defined(H5_USING_MEMCHECKER) || !defined(NDEBUG)
+ /* Clear object location */
+ if(H5O_loc_reset(&(attr->oloc)) < 0)
+ HGOTO_ERROR(H5E_ATTR, H5E_CANTOPENOBJ, FAIL, "unable to reset location")
+#endif /* H5_USING_MEMCHECKER */
+
+ /* Free any previous group hier. path */
+ if(H5G_name_free(&(attr->path)) < 0)
+ HGOTO_ERROR(H5E_ATTR, H5E_CANTRELEASE, FAIL, "can't release group hier. path")
+
+ /* Deep copy of the symbol table entry */
+ if(H5O_loc_copy(&(attr->oloc), loc->oloc, H5_COPY_DEEP) < 0)
+ HGOTO_ERROR(H5E_ATTR, H5E_CANTOPENOBJ, FAIL, "unable to copy entry")
+
+ /* Deep copy of the group hier. path */
+ if(H5G_name_copy(&(attr->path), loc->path, H5_COPY_DEEP) < 0)
+ HGOTO_ERROR(H5E_ATTR, H5E_CANTCOPY, FAIL, "unable to copy entry")
+
+ /* Hold the symbol table entry (and file) open */
+ if(H5O_open(&(attr->oloc)) < 0)
+ HGOTO_ERROR(H5E_ATTR, H5E_CANTOPENOBJ, FAIL, "unable to open")
+ attr->obj_opened = TRUE;
+
+done:
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* H5A_open_common() */
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5A_open_by_idx
+ *
+ * Purpose: Open an attribute according to its index order
+ *
+ * Return: Non-negative on success/Negative on failure
+ *
+ * Programmer: Quincey Koziol
+ * April 2, 1998
+ *
+ *-------------------------------------------------------------------------
+ */
+H5A_t *
+H5A_open_by_idx(const H5G_loc_t *loc, const char *obj_name, H5_index_t idx_type,
+ H5_iter_order_t order, hsize_t n, hid_t lapl_id, hid_t dxpl_id)
+{
+ H5G_loc_t obj_loc; /* Location used to open group */
+ H5G_name_t obj_path; /* Opened object group hier. path */
+ H5O_loc_t obj_oloc; /* Opened object object location */
+ hbool_t loc_found = FALSE; /* Entry at 'obj_name' found */
+ H5A_t *attr = NULL; /* Attribute from object header */
+ H5A_t *ret_value; /* Return value */
+
+ FUNC_ENTER_NOAPI_NOINIT
+
+ /* check args */
+ HDassert(loc);
+ HDassert(obj_name);
+
+ /* Set up opened group location to fill in */
+ obj_loc.oloc = &obj_oloc;
+ obj_loc.path = &obj_path;
+ H5G_loc_reset(&obj_loc);
+
+ /* Find the object's location */
+ if(H5G_loc_find(loc, obj_name, &obj_loc/*out*/, lapl_id, dxpl_id) < 0)
+ HGOTO_ERROR(H5E_ATTR, H5E_NOTFOUND, NULL, "object not found")
+ loc_found = TRUE;
+
+ /* Read in attribute from object header */
+ if(NULL == (attr = H5O_attr_open_by_idx(obj_loc.oloc, idx_type, order, n, dxpl_id)))
+ HGOTO_ERROR(H5E_ATTR, H5E_CANTOPENOBJ, NULL, "unable to load attribute info from object header")
+
+ /* Finish initializing attribute */
+ if(H5A_open_common(&obj_loc, attr) < 0)
+ HGOTO_ERROR(H5E_ATTR, H5E_CANTINIT, NULL, "unable to initialize attribute")
+
+ /* Set return value */
+ ret_value = attr;
+
+done:
+ /* Release resources */
+ if(loc_found && H5G_loc_free(&obj_loc) < 0)
+ HDONE_ERROR(H5E_ATTR, H5E_CANTRELEASE, NULL, "can't free location")
+
+ /* Cleanup on failure */
+ if(ret_value == NULL)
+ if(attr && H5A_close(attr) < 0)
+ HDONE_ERROR(H5E_ATTR, H5E_CANTFREE, NULL, "can't close attribute")
+
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* H5A_open_by_idx() */
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5A_open_by_name
+ *
+ * Purpose: Open an attribute in an object header, according to it's name
+ *
+ * Return: Non-negative on success/Negative on failure
+ *
+ * Programmer: Quincey Koziol
+ * December 11, 2006
+ *
+ *-------------------------------------------------------------------------
+ */
+H5A_t *
+H5A_open_by_name(const H5G_loc_t *loc, const char *obj_name, const char *attr_name,
+ hid_t lapl_id, hid_t dxpl_id)
+{
+ H5G_loc_t obj_loc; /* Location used to open group */
+ H5G_name_t obj_path; /* Opened object group hier. path */
+ H5O_loc_t obj_oloc; /* Opened object object location */
+ hbool_t loc_found = FALSE; /* Entry at 'obj_name' found */
+ H5A_t *attr = NULL; /* Attribute from object header */
+ H5A_t *ret_value; /* Return value */
+
+ FUNC_ENTER_NOAPI(NULL)
+
+ /* check args */
+ HDassert(loc);
+ HDassert(obj_name);
+ HDassert(attr_name);
+
+ /* Set up opened group location to fill in */
+ obj_loc.oloc = &obj_oloc;
+ obj_loc.path = &obj_path;
+ H5G_loc_reset(&obj_loc);
+
+ /* Find the object's location */
+ if(H5G_loc_find(loc, obj_name, &obj_loc/*out*/, lapl_id, dxpl_id) < 0)
+ HGOTO_ERROR(H5E_ATTR, H5E_NOTFOUND, NULL, "object not found")
+ loc_found = TRUE;
+
+ /* Read in attribute from object header */
+ if(NULL == (attr = H5O_attr_open_by_name(obj_loc.oloc, attr_name, dxpl_id)))
+ HGOTO_ERROR(H5E_ATTR, H5E_CANTINIT, NULL, "unable to load attribute info from object header")
+
+ /* Finish initializing attribute */
+ if(H5A_open_common(loc, attr) < 0)
+ HGOTO_ERROR(H5E_ATTR, H5E_CANTINIT, NULL, "unable to initialize attribute")
+
+ /* Set return value */
+ ret_value = attr;
+
+done:
+ /* Release resources */
+ if(loc_found && H5G_loc_free(&obj_loc) < 0)
+ HDONE_ERROR(H5E_ATTR, H5E_CANTRELEASE, NULL, "can't free location")
+
+ /* Cleanup on failure */
+ if(ret_value == NULL)
+ if(attr && H5A_close(attr) < 0)
+ HDONE_ERROR(H5E_ATTR, H5E_CANTFREE, NULL, "can't close attribute")
+
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* H5A_open_by_name() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+ H5A_write
+ PURPOSE
+ Actually write out data to an attribute
+ USAGE
+ herr_t H5A_write (attr, mem_type, buf)
+ H5A_t *attr; IN: Attribute to write
+ const H5T_t *mem_type; IN: Memory datatype of buffer
+ const void *buf; IN: Buffer of data to write
+ RETURNS
+ Non-negative on success/Negative on failure
+
+ DESCRIPTION
+ This function writes a complete attribute to disk.
+--------------------------------------------------------------------------*/
+herr_t
+H5A_write(H5A_t *attr, const H5T_t *mem_type, const void *buf, hid_t dxpl_id)
+{
+ uint8_t *tconv_buf = NULL; /* datatype conv buffer */
+ hbool_t tconv_owned = FALSE; /* Whether the datatype conv buffer is owned by attribute */
+ uint8_t *bkg_buf = NULL; /* temp conversion buffer */
+ hssize_t snelmts; /* elements in attribute */
+ size_t nelmts; /* elements in attribute */
+ H5T_path_t *tpath = NULL; /* conversion information*/
+ hid_t src_id = -1, dst_id = -1;/* temporary type atoms */
+ size_t src_type_size; /* size of source type */
+ size_t dst_type_size; /* size of destination type*/
+ size_t buf_size; /* desired buffer size */
+ herr_t ret_value = SUCCEED;
+
+ FUNC_ENTER_NOAPI_NOINIT
+
+ HDassert(attr);
+ HDassert(mem_type);
+ HDassert(buf);
+
+ /* Get # of elements for attribute's dataspace */
+ if((snelmts = H5S_GET_EXTENT_NPOINTS(attr->shared->ds)) < 0)
+ HGOTO_ERROR(H5E_ATTR, H5E_CANTCOUNT, FAIL, "dataspace is invalid")
+ H5_ASSIGN_OVERFLOW(nelmts, snelmts, hssize_t, size_t);
+
+ /* If there's actually data elements for the attribute, make a copy of the data passed in */
+ if(nelmts > 0) {
+ /* Get the memory and file datatype sizes */
+ src_type_size = H5T_GET_SIZE(mem_type);
+ dst_type_size = H5T_GET_SIZE(attr->shared->dt);
+
+ /* Convert memory buffer into disk buffer */
+ /* Set up type conversion function */
+ if(NULL == (tpath = H5T_path_find(mem_type, attr->shared->dt, NULL, NULL, dxpl_id, FALSE)))
+ HGOTO_ERROR(H5E_ATTR, H5E_UNSUPPORTED, FAIL, "unable to convert between src and dst datatypes")
+
+ /* Check for type conversion required */
+ if(!H5T_path_noop(tpath)) {
+ if((src_id = H5I_register(H5I_DATATYPE, H5T_copy(mem_type, H5T_COPY_ALL), FALSE)) < 0 ||
+ (dst_id = H5I_register(H5I_DATATYPE, H5T_copy(attr->shared->dt, H5T_COPY_ALL), FALSE)) < 0)
+ HGOTO_ERROR(H5E_ATTR, H5E_CANTREGISTER, FAIL, "unable to register types for conversion")
+
+ /* Get the maximum buffer size needed and allocate it */
+ buf_size = nelmts * MAX(src_type_size, dst_type_size);
+ if(NULL == (tconv_buf = H5FL_BLK_MALLOC(attr_buf, buf_size)))
+ HGOTO_ERROR(H5E_ATTR, H5E_CANTALLOC, FAIL, "memory allocation failed")
+ if(NULL == (bkg_buf = H5FL_BLK_CALLOC(attr_buf, buf_size)))
+ HGOTO_ERROR(H5E_ATTR, H5E_CANTALLOC, FAIL, "memory allocation failed")
+
+ /* Copy the user's data into the buffer for conversion */
+ HDmemcpy(tconv_buf, buf, (src_type_size * nelmts));
+
+ /* Perform datatype conversion */
+ if(H5T_convert(tpath, src_id, dst_id, nelmts, (size_t)0, (size_t)0, tconv_buf, bkg_buf, dxpl_id) < 0)
+ HGOTO_ERROR(H5E_ATTR, H5E_CANTENCODE, FAIL, "datatype conversion failed")
+
+ /* Free the previous attribute data buffer, if there is one */
+ if(attr->shared->data)
+ attr->shared->data = H5FL_BLK_FREE(attr_buf, attr->shared->data);
+
+ /* Set the pointer to the attribute data to the converted information */
+ attr->shared->data = tconv_buf;
+ tconv_owned = TRUE;
+ } /* end if */
+ /* No type conversion necessary */
+ else {
+ HDassert(dst_type_size == src_type_size);
+
+ /* Allocate the attribute buffer, if there isn't one */
+ if(attr->shared->data == NULL)
+ if(NULL == (attr->shared->data = H5FL_BLK_MALLOC(attr_buf, dst_type_size * nelmts)))
+ HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed")
+
+ /* Copy the attribute data into the user's buffer */
+ HDmemcpy(attr->shared->data, buf, (dst_type_size * nelmts));
+ } /* end else */
+
+ /* Modify the attribute in the object header */
+ if(H5O_attr_write(&(attr->oloc), dxpl_id, attr) < 0)
+ HGOTO_ERROR(H5E_ATTR, H5E_CANTINIT, FAIL, "unable to modify attribute")
+ } /* end if */
+
+done:
+ /* Release resources */
+ if(src_id >= 0 && H5I_dec_ref(src_id) < 0)
+ HDONE_ERROR(H5E_ATTR, H5E_CANTDEC, FAIL, "unable to close temporary object")
+ if(dst_id >= 0 && H5I_dec_ref(dst_id) < 0)
+ HDONE_ERROR(H5E_ATTR, H5E_CANTDEC, FAIL, "unable to close temporary object")
+ if(tconv_buf && !tconv_owned)
+ tconv_buf = H5FL_BLK_FREE(attr_buf, tconv_buf);
+ if(bkg_buf)
+ bkg_buf = H5FL_BLK_FREE(attr_buf, bkg_buf);
+
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* H5A_write() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+ H5A_read
+ PURPOSE
+ Actually read in data from an attribute
+ USAGE
+ herr_t H5A_read (attr, mem_type, buf)
+ H5A_t *attr; IN: Attribute to read
+ const H5T_t *mem_type; IN: Memory datatype of buffer
+ void *buf; IN: Buffer for data to read
+ RETURNS
+ Non-negative on success/Negative on failure
+
+ DESCRIPTION
+ This function reads a complete attribute from disk.
+--------------------------------------------------------------------------*/
+herr_t
+H5A_read(const H5A_t *attr, const H5T_t *mem_type, void *buf, hid_t dxpl_id)
+{
+ uint8_t *tconv_buf = NULL; /* datatype conv buffer*/
+ uint8_t *bkg_buf = NULL; /* background buffer */
+ hssize_t snelmts; /* elements in attribute */
+ size_t nelmts; /* elements in attribute*/
+ H5T_path_t *tpath = NULL; /* type conversion info */
+ hid_t src_id = -1, dst_id = -1;/* temporary type atoms*/
+ size_t src_type_size; /* size of source type */
+ size_t dst_type_size; /* size of destination type */
+ size_t buf_size; /* desired buffer size */
+ herr_t ret_value = SUCCEED;
+
+ FUNC_ENTER_NOAPI_NOINIT
+
+ HDassert(attr);
+ HDassert(mem_type);
+ HDassert(buf);
+
+ /* Create buffer for data to store on disk */
+ if((snelmts = H5S_GET_EXTENT_NPOINTS(attr->shared->ds)) < 0)
+ HGOTO_ERROR(H5E_ATTR, H5E_CANTCOUNT, FAIL, "dataspace is invalid")
+ H5_ASSIGN_OVERFLOW(nelmts, snelmts, hssize_t, size_t);
+
+ if(nelmts > 0) {
+ /* Get the memory and file datatype sizes */
+ src_type_size = H5T_GET_SIZE(attr->shared->dt);
+ dst_type_size = H5T_GET_SIZE(mem_type);
+
+ /* Check if the attribute has any data yet, if not, fill with zeroes */
+ if(attr->obj_opened && !attr->shared->data)
+ HDmemset(buf, 0, (dst_type_size * nelmts));
+ else { /* Attribute exists and has a value */
+ /* Convert memory buffer into disk buffer */
+ /* Set up type conversion function */
+ if(NULL == (tpath = H5T_path_find(attr->shared->dt, mem_type, NULL, NULL, dxpl_id, FALSE)))
+ HGOTO_ERROR(H5E_ATTR, H5E_UNSUPPORTED, FAIL, "unable to convert between src and dst datatypes")
+
+ /* Check for type conversion required */
+ if(!H5T_path_noop(tpath)) {
+ if((src_id = H5I_register(H5I_DATATYPE, H5T_copy(attr->shared->dt, H5T_COPY_ALL), FALSE)) < 0 ||
+ (dst_id = H5I_register(H5I_DATATYPE, H5T_copy(mem_type, H5T_COPY_ALL), FALSE)) < 0)
+ HGOTO_ERROR(H5E_ATTR, H5E_CANTREGISTER, FAIL, "unable to register types for conversion")
+
+ /* Get the maximum buffer size needed and allocate it */
+ buf_size = nelmts * MAX(src_type_size, dst_type_size);
+ if(NULL == (tconv_buf = H5FL_BLK_MALLOC(attr_buf, buf_size)))
+ HGOTO_ERROR(H5E_ATTR, H5E_NOSPACE, FAIL, "memory allocation failed")
+ if(NULL == (bkg_buf = H5FL_BLK_CALLOC(attr_buf, buf_size)))
+ HGOTO_ERROR(H5E_ATTR, H5E_NOSPACE, FAIL, "memory allocation failed")
+
+ /* Copy the attribute data into the buffer for conversion */
+ HDmemcpy(tconv_buf, attr->shared->data, (src_type_size * nelmts));
+
+ /* Perform datatype conversion. */
+ if(H5T_convert(tpath, src_id, dst_id, nelmts, (size_t)0, (size_t)0, tconv_buf, bkg_buf, dxpl_id) < 0)
+ HGOTO_ERROR(H5E_ATTR, H5E_CANTENCODE, FAIL, "datatype conversion failed")
+
+ /* Copy the converted data into the user's buffer */
+ HDmemcpy(buf, tconv_buf, (dst_type_size * nelmts));
+ } /* end if */
+ /* No type conversion necessary */
+ else {
+ HDassert(dst_type_size == src_type_size);
+
+ /* Copy the attribute data into the user's buffer */
+ HDmemcpy(buf, attr->shared->data, (dst_type_size * nelmts));
+ } /* end else */
+ } /* end else */
+ } /* end if */
+
+done:
+ /* Release resources */
+ if(src_id >= 0 && H5I_dec_ref(src_id) < 0)
+ HDONE_ERROR(H5E_ATTR, H5E_CANTDEC, FAIL, "unable to close temporary object")
+ if(dst_id >= 0 && H5I_dec_ref(dst_id) < 0)
+ HDONE_ERROR(H5E_ATTR, H5E_CANTDEC, FAIL, "unable to close temporary object")
+ if(tconv_buf)
+ tconv_buf = H5FL_BLK_FREE(attr_buf, tconv_buf);
+ if(bkg_buf)
+ bkg_buf = H5FL_BLK_FREE(attr_buf, bkg_buf);
+
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* H5A_read() */
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5A_get_space
+ *
+ * Purpose: Returns and ID for the dataspace of the attribute.
+ *
+ * Return: Success: ID for dataspace
+ *
+ * Failure: FAIL
+ *
+ * Programmer: Mohamad Chaarawi
+ * March, 2012
+ *
+ *-------------------------------------------------------------------------
+ */
+hid_t
+H5A_get_space(H5A_t *attr)
+{
+ H5S_t *ds = NULL;
+ hid_t ret_value = FAIL;
+
+ FUNC_ENTER_NOAPI_NOINIT
+
+ /* Copy the attribute's dataspace */
+ if(NULL == (ds = H5S_copy(attr->shared->ds, FALSE, TRUE)))
+ HGOTO_ERROR(H5E_ATTR, H5E_CANTINIT, FAIL, "unable to copy dataspace")
+
+ /* Atomize */
+ if((ret_value = H5I_register(H5I_DATASPACE, ds, TRUE)) < 0)
+ HGOTO_ERROR(H5E_ATOM, H5E_CANTREGISTER, FAIL, "unable to register dataspace atom")
+
+done:
+ if(ret_value < 0 && ds) {
+ if(H5S_close(ds) < 0)
+ HDONE_ERROR(H5E_DATASET, H5E_CLOSEERROR, FAIL, "unable to release dataspace")
+ } /* end if */
+
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5A_get_space() */
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5A_get_type
+ *
+ * Purpose: Returns and ID for the datatype of the dataset.
+ *
+ * Return: Success: ID for datatype
+ *
+ * Failure: FAIL
+ *
+ * Programmer: Mohamad Chaarawi
+ * March, 2012
+ *
+ *-------------------------------------------------------------------------
+ */
+hid_t
+H5A_get_type(H5A_t *attr)
+{
+ H5T_t *dt = NULL;
+ hid_t ret_value = FAIL;
+
+ FUNC_ENTER_NOAPI_NOINIT
+
+ /* Patch the datatype's "top level" file pointer */
+ if(H5T_patch_file(attr->shared->dt, attr->oloc.file) < 0)
+ HGOTO_ERROR(H5E_ATTR, H5E_CANTINIT, FAIL, "unable to patch datatype's file pointer")
+
+ /*
+ * Copy the attribute's datatype. If the type is a named type then
+ * reopen the type before returning it to the user. Make the type
+ * read-only.
+ */
+ if(NULL == (dt = H5T_copy(attr->shared->dt, H5T_COPY_REOPEN)))
+ HGOTO_ERROR(H5E_ATTR, H5E_CANTINIT, FAIL, "unable to copy datatype")
+
+ /* Mark any datatypes as being in memory now */
+ if(H5T_set_loc(dt, NULL, H5T_LOC_MEMORY) < 0)
+ HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "invalid datatype location")
+
+ /* Lock copied type */
+ if(H5T_lock(dt, FALSE) < 0)
+ HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "unable to lock transient datatype")
+
+ /* Create an atom */
+ if((ret_value = H5I_register(H5I_DATATYPE, dt, TRUE)) < 0)
+ HGOTO_ERROR(H5E_ATOM, H5E_CANTREGISTER, FAIL, "unable to register datatype")
+
+done:
+ if(ret_value < 0) {
+ if(dt && H5T_close(dt) < 0)
+ HDONE_ERROR(H5E_DATASET, H5E_CLOSEERROR, FAIL, "unable to release datatype")
+ } /* end if */
+
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5A_get_type() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+ H5A_get_create_plist
+ PURPOSE
+ private version of H5Aget_create_plist
+ RETURNS
+ This function returns the ID of a copy of the attribute's creation
+ property list, or negative on failure.
+
+ ERRORS
+
+ DESCRIPTION
+ This function returns a copy of the creation property list for
+ an attribute. The resulting ID must be closed with H5Pclose() or
+ resource leaks will occur.
+--------------------------------------------------------------------------*/
+hid_t
+H5A_get_create_plist(H5A_t* attr)
+{
+ H5P_genplist_t *plist; /* Default property list */
+ hid_t new_plist_id; /* ID of ACPL to return */
+ H5P_genplist_t *new_plist; /* ACPL to return */
+ hid_t ret_value;
+ FUNC_ENTER_NOAPI_NOINIT
+
+ if(NULL == (plist = (H5P_genplist_t *)H5I_object(H5P_LST_ATTRIBUTE_CREATE_ID_g)))
+ HGOTO_ERROR(H5E_PLIST, H5E_BADTYPE, FAIL, "can't get default ACPL")
+
+ /* Create the property list object to return */
+ if((new_plist_id = H5P_copy_plist(plist, TRUE)) < 0)
+ HGOTO_ERROR(H5E_PLIST, H5E_CANTINIT, FAIL, "unable to copy attribute creation properties")
+ if(NULL == (new_plist = (H5P_genplist_t *)H5I_object(new_plist_id)))
+ HGOTO_ERROR(H5E_PLIST, H5E_BADTYPE, FAIL, "can't get property list")
+
+ /* Set the character encoding on the new property list */
+ if(H5P_set(new_plist, H5P_STRCRT_CHAR_ENCODING_NAME, &(attr->shared->encoding)) < 0)
+ HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set character encoding")
+
+ ret_value = new_plist_id;
+
+done:
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5Aget_create_plist() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+ H5A_get_name
+ PURPOSE
+ Private function for H5Aget_name. Gets a copy of the name for an
+ attribute
+ RETURNS
+ This function returns the length of the attribute's name (which may be
+ longer than 'buf_size') on success or negative for failure.
+ DESCRIPTION
+ This function retrieves the name of an attribute for an attribute ID.
+ Up to 'buf_size' characters are stored in 'buf' followed by a '\0' string
+ terminator. If the name of the attribute is longer than 'buf_size'-1,
+ the string terminator is stored in the last position of the buffer to
+ properly terminate the string.
+--------------------------------------------------------------------------*/
+ssize_t
+H5A_get_name(H5A_t *attr, size_t buf_size, char *buf)
+{
+ size_t copy_len, nbytes;
+ ssize_t ret_value;
+
+ FUNC_ENTER_NOAPI_NOERR
+
+ /* get the real attribute length */
+ nbytes = HDstrlen(attr->shared->name);
+ HDassert((ssize_t)nbytes >= 0); /*overflow, pretty unlikely --rpm*/
+
+ /* compute the string length which will fit into the user's buffer */
+ copy_len = MIN(buf_size - 1, nbytes);
+
+ /* Copy all/some of the name */
+ if(buf && copy_len > 0) {
+ HDmemcpy(buf, attr->shared->name, copy_len);
+
+ /* Terminate the string */
+ buf[copy_len]='\0';
+ } /* end if */
+
+ /* Set return value */
+ ret_value = (ssize_t)nbytes;
+
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* H5A_get_name() */
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5A_get_info
+ *
+ * Purpose: Retrieve information about an attribute.
+ *
+ * Return: Success: Non-negative
+ * Failure: Negative
+ *
+ * Programmer: Quincey Koziol
+ * February 6, 2007
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5A_get_info(const H5A_t *attr, H5A_info_t *ainfo)
+{
+ FUNC_ENTER_NOAPI_NOERR
+
+ /* Check args */
+ HDassert(attr);
+ HDassert(ainfo);
+
+ /* Set info for attribute */
+ ainfo->cset = attr->shared->encoding;
+ ainfo->data_size = attr->shared->data_size;
+ if(attr->shared->crt_idx == H5O_MAX_CRT_ORDER_IDX) {
+ ainfo->corder_valid = FALSE;
+ ainfo->corder = 0;
+ } /* end if */
+ else {
+ ainfo->corder_valid = TRUE;
+ ainfo->corder = attr->shared->crt_idx;
+ } /* end else */
+
+ FUNC_LEAVE_NOAPI(SUCCEED)
+} /* end H5A_get_info() */
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5A_copy
+ *
+ * Purpose: Copies attribute OLD_ATTR.
+ *
+ * Return: Success: Pointer to a new copy of the OLD_ATTR argument.
+ *
+ * Failure: NULL
+ *
+ * Programmer: Robb Matzke
+ * Thursday, December 4, 1997
+ *
+ * Modification:Raymond Lu
+ * 4 June 2008
+ * Changed some attribute information to be shared.
+ *
+ *-------------------------------------------------------------------------
+ */
+H5A_t *
+H5A_copy(H5A_t *_new_attr, const H5A_t *old_attr)
+{
+ H5A_t *new_attr = NULL;
+ hbool_t allocated_attr = FALSE; /* Whether the attribute was allocated */
+ H5A_t *ret_value = NULL; /* Return value */
+
+ FUNC_ENTER_NOAPI(NULL)
+
+ /* check args */
+ HDassert(old_attr);
+
+ /* Allocate attribute structure */
+ if(_new_attr == NULL) {
+ if(NULL == (new_attr = H5FL_CALLOC(H5A_t)))
+ HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed")
+ allocated_attr = TRUE;
+ } /* end if */
+ else
+ new_attr = _new_attr;
+
+ /* Copy the top level of the attribute */
+ new_attr->sh_loc = old_attr->sh_loc;
+
+ /* Deep copy of the group hierarchy path */
+ if(H5G_name_copy(&(new_attr->path), &(old_attr->path), H5_COPY_DEEP) < 0)
+ HGOTO_ERROR(H5E_ATTR, H5E_CANTCOPY, NULL, "unable to copy path")
+
+ /* Share some attribute information */
+ new_attr->shared = old_attr->shared;
+
+ /* Increment reference count for shared object */
+ new_attr->shared->nrefs++;
+
+ /* Don't open the object header for a copy */
+ new_attr->obj_opened = FALSE;
+
+ /* Set the return value */
+ ret_value = new_attr;
+
+done:
+ if(ret_value == NULL)
+ if(allocated_attr && new_attr && H5A_close(new_attr) < 0)
+ HDONE_ERROR(H5E_ATTR, H5E_CANTFREE, NULL, "can't close attribute")
+
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5A_copy() */
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5A_free
+ *
+ * Purpose: Frees all memory associated with an attribute, but does not
+ * free the H5A_t structure (which should be done in H5T_close).
+ *
+ * Return: Non-negative on success/Negative on failure
+ *
+ * Programmer: Quincey Koziol
+ * Monday, November 15, 2004
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5A_free(H5A_t *attr)
+{
+ herr_t ret_value = SUCCEED; /* Return value */
+
+ FUNC_ENTER_NOAPI(FAIL)
+
+ HDassert(attr);
+
+ /* Free dynamicly allocated items */
+ if(attr->shared->name) {
+ H5MM_xfree(attr->shared->name);
+ attr->shared->name = NULL;
+ }
+ if(attr->shared->dt) {
+ if(H5T_close(attr->shared->dt) < 0)
+ HGOTO_ERROR(H5E_ATTR, H5E_CANTRELEASE, FAIL, "can't release datatype info")
+ attr->shared->dt = NULL;
+ }
+ if(attr->shared->ds) {
+ if(H5S_close(attr->shared->ds) < 0)
+ HGOTO_ERROR(H5E_ATTR, H5E_CANTRELEASE, FAIL, "can't release dataspace info")
+ attr->shared->ds = NULL;
+ }
+ if(attr->shared->data)
+ attr->shared->data = H5FL_BLK_FREE(attr_buf, attr->shared->data);
+
+done:
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5A_free() */
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5A_close
+ *
+ * Purpose: Frees an attribute and all associated memory.
+ *
+ * Return: Non-negative on success/Negative on failure
+ *
+ * Programmer: Robb Matzke
+ * Monday, December 8, 1997
+ *
+ * Modifications:
+ * Raymond Lu
+ * 4 June 2008
+ * Changed some attribute object information to be shared.
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5A_close(H5A_t *attr)
+{
+ herr_t ret_value = SUCCEED; /* Return value */
+
+ FUNC_ENTER_NOAPI(FAIL)
+
+ HDassert(attr);
+ HDassert(attr->shared);
+
+ /* Close the object's symbol-table entry */
+ if(attr->obj_opened && (H5O_close(&(attr->oloc)) < 0))
+ HGOTO_ERROR(H5E_ATTR, H5E_CANTRELEASE, FAIL, "can't release object header info")
+
+ /* Reference count can be 0. It only happens when H5A_create fails. */
+ if(attr->shared->nrefs <= 1) {
+ /* Free dynamicly allocated items */
+ if(H5A_free(attr) < 0)
+ HGOTO_ERROR(H5E_ATTR, H5E_CANTRELEASE, FAIL, "can't release attribute info")
+
+ /* Destroy shared attribute struct */
+ attr->shared = H5FL_FREE(H5A_shared_t, attr->shared);
+ } /* end if */
+ else {
+ /* There are other references to the shared part of the attribute.
+ * Only decrement the reference count. */
+ --attr->shared->nrefs;
+ } /* end else */
+
+ /* Free group hierarchy path */
+ if(H5G_name_free(&(attr->path)) < 0)
+ HGOTO_ERROR(H5E_ATTR, H5E_CANTRELEASE, FAIL, "can't release group hier. path")
+
+ attr->shared = NULL;
+ attr = H5FL_FREE(H5A_t, attr);
+
+done:
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5A_close() */
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5A_oloc
+ *
+ * Purpose: Return the object location for an attribute. It's the
+ * object location for the object to which the attribute
+ * belongs, not the attribute itself.
+ *
+ * Return: Success: Ptr to entry
+ * Failure: NULL
+ *
+ * Programmer: Robb Matzke
+ * Thursday, August 6, 1998
+ *
+ *-------------------------------------------------------------------------
+ */
+H5O_loc_t *
+H5A_oloc(H5A_t *attr)
+{
+ H5O_loc_t *ret_value; /* Return value */
+
+ FUNC_ENTER_NOAPI_NOERR
+
+ HDassert(attr);
+
+ /* Set return value */
+ ret_value = &(attr->oloc);
+
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5A_oloc() */
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5A_nameof
+ *
+ * Purpose: Return the group hier. path for an attribute. It's the
+ * group hier. path for the object to which the attribute
+ * belongs, not the attribute itself.
+ *
+ * Return: Success: Ptr to entry
+ * Failure: NULL
+ *
+ * Programmer: Quincey Koziol
+ * Monday, September 12, 2005
+ *
+ *-------------------------------------------------------------------------
+ */
+H5G_name_t *
+H5A_nameof(H5A_t *attr)
+{
+ H5G_name_t *ret_value; /* Return value */
+
+ FUNC_ENTER_NOAPI_NOERR
+
+ HDassert(attr);
+
+ /* Set return value */
+ ret_value=&(attr->path);
+
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5A_nameof() */
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5A_type
+ *
+ * Purpose: Return the datatype for an attribute.
+ *
+ * Return: Success: Ptr to entry
+ * Failure: NULL
+ *
+ * Programmer: Neil Fortner
+ * Friday, November 11, 2011
+ *
+ *-------------------------------------------------------------------------
+ */
+H5T_t *
+H5A_type(const H5A_t *attr)
+{
+ H5T_t *ret_value; /* Return value */
+
+ FUNC_ENTER_NOAPI_NOERR
+
+ HDassert(attr);
+
+ /* Set return value */
+ ret_value = attr->shared->dt;
+
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5A_type() */
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5A_exists_by_name
+ *
+ * Purpose: Private version of H5Aexists_by_name
+ *
+ * Return: Success: TRUE/FALSE
+ * Failure: Negative
+ *
+ * Programmer: Quincey Koziol
+ * Thursday, November 1, 2007
+ *
+ *-------------------------------------------------------------------------
+ */
+htri_t
+H5A_exists_by_name(H5G_loc_t loc, const char *obj_name, const char *attr_name,
+ hid_t lapl_id)
+{
+ H5G_loc_t obj_loc; /* Location used to open group */
+ H5G_name_t obj_path; /* Opened object group hier. path */
+ H5O_loc_t obj_oloc; /* Opened object object location */
+ hbool_t loc_found = FALSE; /* Entry at 'obj_name' found */
+ htri_t ret_value; /* Return value */
+
+ FUNC_ENTER_NOAPI_NOINIT
+
+ /* Set up opened group location to fill in */
+ obj_loc.oloc = &obj_oloc;
+ obj_loc.path = &obj_path;
+ H5G_loc_reset(&obj_loc);
+
+ /* Find the object's location */
+ if(H5G_loc_find(&loc, obj_name, &obj_loc/*out*/, lapl_id, H5AC_ind_dxpl_id) < 0)
+ HGOTO_ERROR(H5E_ATTR, H5E_NOTFOUND, FAIL, "object not found")
+ loc_found = TRUE;
+
+ /* Check if the attribute exists */
+ if((ret_value = H5O_attr_exists(obj_loc.oloc, attr_name, H5AC_ind_dxpl_id)) < 0)
+ HGOTO_ERROR(H5E_ATTR, H5E_CANTGET, FAIL, "unable to determine if attribute exists")
+
+done:
+ /* Release resources */
+ if(loc_found && H5G_loc_free(&obj_loc) < 0)
+ HDONE_ERROR(H5E_ATTR, H5E_CANTRELEASE, FAIL, "can't free location")
+
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* H5A_exists_by_name() */
+
+
+/*-------------------------------------------------------------------------
* Function: H5A__compact_build_table_cb
*
* Purpose: Object header iterator callback routine to copy attribute
@@ -1257,3 +2362,53 @@ done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5A_dense_post_copy_file_all */
+
+/*-------------------------------------------------------------------------
+ * Function: H5A_rename_by_name
+ *
+ * Purpose: Private version of H5Arename_by_name
+ *
+ * Return: Success: Non-negative
+ * Failure: Negative
+ *
+ * Programmer: Quincey Koziol
+ * February 20, 2007
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5A_rename_by_name(H5G_loc_t loc, const char *obj_name, const char *old_attr_name,
+ const char *new_attr_name, hid_t lapl_id)
+{
+ H5G_loc_t obj_loc; /* Location used to open group */
+ H5G_name_t obj_path; /* Opened object group hier. path */
+ H5O_loc_t obj_oloc; /* Opened object object location */
+ hbool_t loc_found = FALSE; /* Entry at 'obj_name' found */
+ herr_t ret_value = SUCCEED; /* Return value */
+
+ FUNC_ENTER_NOAPI_NOINIT
+
+ /* Avoid thrashing things if the names are the same */
+ if(HDstrcmp(old_attr_name, new_attr_name)) {
+ /* Set up opened group location to fill in */
+ obj_loc.oloc = &obj_oloc;
+ obj_loc.path = &obj_path;
+ H5G_loc_reset(&obj_loc);
+
+ /* Find the object's location */
+ if(H5G_loc_find(&loc, obj_name, &obj_loc/*out*/, lapl_id, H5AC_ind_dxpl_id) < 0)
+ HGOTO_ERROR(H5E_ATTR, H5E_NOTFOUND, FAIL, "object not found")
+ loc_found = TRUE;
+
+ /* Call attribute rename routine */
+ if(H5O_attr_rename(obj_loc.oloc, H5AC_dxpl_id, old_attr_name, new_attr_name) < 0)
+ HGOTO_ERROR(H5E_ATTR, H5E_CANTRENAME, FAIL, "can't rename attribute")
+ } /* end if */
+
+done:
+ /* Release resources */
+ if(loc_found && H5G_loc_free(&obj_loc) < 0)
+ HDONE_ERROR(H5E_ATTR, H5E_CANTRELEASE, FAIL, "can't free location")
+
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* H5A_rename_by_name() */
diff --git a/src/H5Apkg.h b/src/H5Apkg.h
index fa26a9a..efa2b74 100644
--- a/src/H5Apkg.h
+++ b/src/H5Apkg.h
@@ -186,19 +186,29 @@ H5_DLLVAR const H5B2_class_t H5A_BT2_CORDER[1];
/* Function prototypes for H5A package scope */
H5_DLL herr_t H5A_init(void);
H5_DLL herr_t H5A__term_deprec_interface(void);
-H5_DLL hid_t H5A_create(const H5G_loc_t *loc, const char *name,
+H5_DLL H5A_t *H5A_create(const H5G_loc_t *loc, const char *name,
const H5T_t *type, const H5S_t *space, hid_t acpl_id, hid_t dxpl_id);
-H5_DLL H5A_t * H5A_open_by_name(const H5G_loc_t *loc, const char *obj_name,
+H5_DLL H5A_t *H5A_open_by_name(const H5G_loc_t *loc, const char *obj_name,
const char *attr_name, hid_t lapl_id, hid_t dxpl_id);
H5_DLL H5A_t *H5A_open_by_idx(const H5G_loc_t *loc, const char *obj_name,
H5_index_t idx_type, H5_iter_order_t order, hsize_t n, hid_t lapl_id, hid_t dxpl_id);
+H5_DLL herr_t H5A_open_common(const H5G_loc_t *loc, H5A_t *attr);
+H5_DLL herr_t H5A_write(H5A_t *attr, const H5T_t *mem_type, const void *buf, hid_t dxpl_id);
+H5_DLL herr_t H5A_read(const H5A_t *attr, const H5T_t *mem_type, void *buf, hid_t dxpl_id);
H5_DLL ssize_t H5A_get_name(H5A_t *attr, size_t buf_size, char *buf);
H5_DLL H5A_t *H5A_copy(H5A_t *new_attr, const H5A_t *old_attr);
H5_DLL herr_t H5A_get_info(const H5A_t *attr, H5A_info_t *ainfo);
+H5_DLL hid_t H5A_get_type(H5A_t *attr);
+H5_DLL hid_t H5A_get_space(H5A_t *attr);
+H5_DLL hid_t H5A_get_create_plist(H5A_t* attr);
H5_DLL herr_t H5A_free(H5A_t *attr);
H5_DLL herr_t H5A_close(H5A_t *attr);
H5_DLL htri_t H5A_get_ainfo(H5F_t *f, hid_t dxpl_id, H5O_t *oh, H5O_ainfo_t *ainfo);
H5_DLL herr_t H5A_set_version(const H5F_t *f, H5A_t *attr);
+H5_DLL herr_t H5A_rename_by_name(H5G_loc_t loc, const char *obj_name, const char *old_attr_name,
+ const char *new_attr_name, hid_t lapl_id);
+H5_DLL htri_t H5A_exists_by_name(H5G_loc_t loc, const char *obj_name, const char *attr_name,
+ hid_t lapl_id);
/* Attribute "dense" storage routines */
H5_DLL herr_t H5A_dense_create(H5F_t *f, hid_t dxpl_id, H5O_ainfo_t *ainfo);
diff --git a/src/H5B.c b/src/H5B.c
index b997c3e..414ea67 100644
--- a/src/H5B.c
+++ b/src/H5B.c
@@ -255,7 +255,7 @@ H5B_create(H5F_t *f, hid_t dxpl_id, const H5B_class_t *type, void *udata,
/*
* Cache the new B-tree node.
*/
- if (H5AC_insert_entry(f, dxpl_id, H5AC_BT, *addr_p, bt, H5AC__NO_FLAGS_SET) < 0)
+ if(H5AC_insert_entry(f, dxpl_id, H5AC_BT, *addr_p, bt, H5AC__NO_FLAGS_SET) < 0)
HGOTO_ERROR(H5E_BTREE, H5E_CANTINIT, FAIL, "can't add B-tree root node to cache")
#ifdef H5B_DEBUG
H5B_assert(f, dxpl_id, *addr_p, shared->type, udata);
diff --git a/src/H5C.c b/src/H5C.c
index 85c00f1..fa28584 100644
--- a/src/H5C.c
+++ b/src/H5C.c
@@ -1090,8 +1090,8 @@ H5C_create(size_t max_cache_size,
(cache_ptr->resize_ctl).max_increment = H5C__DEF_AR_MAX_INCREMENT;
(cache_ptr->resize_ctl).flash_incr_mode = H5C_flash_incr__off;
- (cache_ptr->resize_ctl).flash_multiple = 1.0;
- (cache_ptr->resize_ctl).flash_threshold = 0.25;
+ (cache_ptr->resize_ctl).flash_multiple = 1.0f;
+ (cache_ptr->resize_ctl).flash_threshold = 0.25f;
(cache_ptr->resize_ctl).decr_mode = H5C_decr__off;
(cache_ptr->resize_ctl).upper_hr_threshold = H5C__DEF_AR_UPPER_THRESHHOLD;
@@ -2236,7 +2236,7 @@ H5C_get_cache_hit_rate(H5C_t * cache_ptr,
} else {
- *hit_rate_ptr = 0.0;
+ *hit_rate_ptr = 0.0f;
}
done:
@@ -3994,8 +3994,8 @@ H5C_set_cache_auto_resize_config(H5C_t *cache_ptr,
break;
case H5C_incr__threshold:
- if ( ( config_ptr->lower_hr_threshold <= 0.0 ) ||
- ( config_ptr->increment <= 1.0 ) ||
+ if ( ( config_ptr->lower_hr_threshold <= (double)0.0f ) ||
+ ( config_ptr->increment <= (double)1.0f ) ||
( ( config_ptr->apply_max_increment ) &&
( config_ptr->max_increment <= 0 ) ) ) {
@@ -4019,8 +4019,8 @@ H5C_set_cache_auto_resize_config(H5C_t *cache_ptr,
break;
case H5C_decr__threshold:
- if ( ( config_ptr->upper_hr_threshold >= 1.0 ) ||
- ( config_ptr->decrement >= 1.0 ) ||
+ if ( ( config_ptr->upper_hr_threshold >= (double)1.0f ) ||
+ ( config_ptr->decrement >= (double)1.0f ) ||
( ( config_ptr->apply_max_decrement ) &&
( config_ptr->max_decrement <= 0 ) ) ) {
@@ -4030,7 +4030,7 @@ H5C_set_cache_auto_resize_config(H5C_t *cache_ptr,
case H5C_decr__age_out:
if ( ( ( config_ptr->apply_empty_reserve ) &&
- ( config_ptr->empty_reserve >= 1.0 ) ) ||
+ ( config_ptr->empty_reserve >= (double)1.0f ) ) ||
( ( config_ptr->apply_max_decrement ) &&
( config_ptr->max_decrement <= 0 ) ) ) {
@@ -4040,10 +4040,10 @@ H5C_set_cache_auto_resize_config(H5C_t *cache_ptr,
case H5C_decr__age_out_with_threshold:
if ( ( ( config_ptr->apply_empty_reserve ) &&
- ( config_ptr->empty_reserve >= 1.0 ) ) ||
+ ( config_ptr->empty_reserve >= (double)1.0f ) ) ||
( ( config_ptr->apply_max_decrement ) &&
( config_ptr->max_decrement <= 0 ) ) ||
- ( config_ptr->upper_hr_threshold >= 1.0 ) ) {
+ ( config_ptr->upper_hr_threshold >= (double)1.0f ) ) {
cache_ptr->size_decrease_possible = FALSE;
}
@@ -5517,8 +5517,8 @@ H5C_validate_resize_config(H5C_auto_size_ctl_t * config_ptr,
"initial_size must be in the interval [min_size, max_size]");
}
- if ( ( config_ptr->min_clean_fraction < 0.0 ) ||
- ( config_ptr->min_clean_fraction > 1.0 ) ) {
+ if ( ( config_ptr->min_clean_fraction < (double)0.0f ) ||
+ ( config_ptr->min_clean_fraction > (double)1.0f ) ) {
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, \
"min_clean_fraction must be in the interval [0.0, 1.0]");
@@ -5546,14 +5546,14 @@ H5C_validate_resize_config(H5C_auto_size_ctl_t * config_ptr,
if ( config_ptr->incr_mode == H5C_incr__threshold ) {
- if ( ( config_ptr->lower_hr_threshold < 0.0 ) ||
- ( config_ptr->lower_hr_threshold > 1.0 ) ) {
+ if ( ( config_ptr->lower_hr_threshold < (double)0.0f ) ||
+ ( config_ptr->lower_hr_threshold > (double)1.0f ) ) {
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, \
"lower_hr_threshold must be in the range [0.0, 1.0]");
}
- if ( config_ptr->increment < 1.0 ) {
+ if ( config_ptr->increment < (double)1.0f ) {
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, \
"increment must be greater than or equal to 1.0");
@@ -5578,15 +5578,15 @@ H5C_validate_resize_config(H5C_auto_size_ctl_t * config_ptr,
break;
case H5C_flash_incr__add_space:
- if ( ( config_ptr->flash_multiple < 0.1 ) ||
- ( config_ptr->flash_multiple > 10.0 ) ) {
+ if ( ( config_ptr->flash_multiple < (double)0.1f ) ||
+ ( config_ptr->flash_multiple > (double)10.0f ) ) {
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, \
"flash_multiple must be in the range [0.1, 10.0]");
}
- if ( ( config_ptr->flash_threshold < 0.1 ) ||
- ( config_ptr->flash_threshold > 1.0 ) ) {
+ if ( ( config_ptr->flash_threshold < (double)0.1f ) ||
+ ( config_ptr->flash_threshold > (double)1.0f ) ) {
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, \
"flash_threshold must be in the range [0.1, 1.0]");
@@ -5614,14 +5614,14 @@ H5C_validate_resize_config(H5C_auto_size_ctl_t * config_ptr,
if ( config_ptr->decr_mode == H5C_decr__threshold ) {
- if ( config_ptr->upper_hr_threshold > 1.0 ) {
+ if ( config_ptr->upper_hr_threshold > (double)1.0f ) {
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, \
"upper_hr_threshold must be <= 1.0");
}
- if ( ( config_ptr->decrement > 1.0 ) ||
- ( config_ptr->decrement < 0.0 ) ) {
+ if ( ( config_ptr->decrement > (double)1.0f ) ||
+ ( config_ptr->decrement < (double)0.0f ) ) {
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, \
"decrement must be in the interval [0.0, 1.0]");
@@ -5656,8 +5656,8 @@ H5C_validate_resize_config(H5C_auto_size_ctl_t * config_ptr,
}
if ( ( config_ptr->apply_empty_reserve ) &&
- ( ( config_ptr->empty_reserve > 1.0 ) ||
- ( config_ptr->empty_reserve < 0.0 ) ) ) {
+ ( ( config_ptr->empty_reserve > (double)1.0f ) ||
+ ( config_ptr->empty_reserve < (double)0.0f ) ) ) {
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, \
"empty_reserve must be in the interval [0.0, 1.0]");
@@ -5670,8 +5670,8 @@ H5C_validate_resize_config(H5C_auto_size_ctl_t * config_ptr,
if ( config_ptr->decr_mode == H5C_decr__age_out_with_threshold ) {
- if ( ( config_ptr->upper_hr_threshold > 1.0 ) ||
- ( config_ptr->upper_hr_threshold < 0.0 ) ) {
+ if ( ( config_ptr->upper_hr_threshold > (double)1.0f ) ||
+ ( config_ptr->upper_hr_threshold < (double)0.0f ) ) {
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, \
"upper_hr_threshold must be in the interval [0.0, 1.0]");
@@ -5757,8 +5757,8 @@ H5C__auto_adjust_cache_size(H5F_t * f,
HDassert( cache_ptr->magic == H5C__H5C_T_MAGIC );
HDassert( cache_ptr->cache_accesses >=
(cache_ptr->resize_ctl).epoch_length );
- HDassert( 0.0 <= (cache_ptr->resize_ctl).min_clean_fraction );
- HDassert( (cache_ptr->resize_ctl).min_clean_fraction <= 100.0 );
+ HDassert( (double)0.0f <= (cache_ptr->resize_ctl).min_clean_fraction );
+ HDassert( (cache_ptr->resize_ctl).min_clean_fraction <= (double)100.0f );
if ( !cache_ptr->resize_enabled ) {
@@ -5773,7 +5773,7 @@ H5C__auto_adjust_cache_size(H5F_t * f,
HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Can't get hit rate.")
}
- HDassert( ( 0.0 <= hit_rate ) && ( hit_rate <= 1.0 ) );
+ HDassert( ( (double)0.0f <= hit_rate ) && ( hit_rate <= (double)1.0f ) );
switch ( (cache_ptr->resize_ctl).incr_mode )
{
diff --git a/src/H5Cprivate.h b/src/H5Cprivate.h
index 389cf5d..44e3d4d 100644
--- a/src/H5Cprivate.h
+++ b/src/H5Cprivate.h
@@ -831,20 +831,20 @@ typedef struct H5C_cache_entry_t
#define H5C__MAX_EPOCH_MARKERS 10
-#define H5C__DEF_AR_UPPER_THRESHHOLD 0.9999
-#define H5C__DEF_AR_LOWER_THRESHHOLD 0.9
+#define H5C__DEF_AR_UPPER_THRESHHOLD 0.9999f
+#define H5C__DEF_AR_LOWER_THRESHHOLD 0.9f
#define H5C__DEF_AR_MAX_SIZE ((size_t)(16 * 1024 * 1024))
#define H5C__DEF_AR_INIT_SIZE ((size_t)( 1 * 1024 * 1024))
#define H5C__DEF_AR_MIN_SIZE ((size_t)( 1 * 1024 * 1024))
-#define H5C__DEF_AR_MIN_CLEAN_FRAC 0.5
-#define H5C__DEF_AR_INCREMENT 2.0
+#define H5C__DEF_AR_MIN_CLEAN_FRAC 0.5f
+#define H5C__DEF_AR_INCREMENT 2.0f
#define H5C__DEF_AR_MAX_INCREMENT ((size_t)( 2 * 1024 * 1024))
-#define H5C__DEF_AR_FLASH_MULTIPLE 1.0
-#define H5C__DEV_AR_FLASH_THRESHOLD 0.25
-#define H5C__DEF_AR_DECREMENT 0.9
+#define H5C__DEF_AR_FLASH_MULTIPLE 1.0f
+#define H5C__DEV_AR_FLASH_THRESHOLD 0.25f
+#define H5C__DEF_AR_DECREMENT 0.9f
#define H5C__DEF_AR_MAX_DECREMENT ((size_t)( 1 * 1024 * 1024))
#define H5C__DEF_AR_EPCHS_B4_EVICT 3
-#define H5C__DEF_AR_EMPTY_RESERVE 0.05
+#define H5C__DEF_AR_EMPTY_RESERVE 0.05f
#define H5C__MIN_AR_EPOCH_LENGTH 100
#define H5C__DEF_AR_EPOCH_LENGTH 50000
#define H5C__MAX_AR_EPOCH_LENGTH 1000000
diff --git a/src/H5D.c b/src/H5D.c
index 0dbda64..46954f0 100644
--- a/src/H5D.c
+++ b/src/H5D.c
@@ -450,7 +450,6 @@ hid_t
H5Dget_space(hid_t dset_id)
{
H5D_t *dset = NULL;
- H5S_t *space = NULL;
hid_t ret_value;
FUNC_ENTER_API(FAIL)
@@ -460,22 +459,10 @@ H5Dget_space(hid_t dset_id)
if(NULL == (dset = (H5D_t *)H5I_object_verify(dset_id, H5I_DATASET)))
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a dataset")
- /* Read the dataspace message and return a dataspace object */
- if(NULL == (space = H5S_copy(dset->shared->space, FALSE, TRUE)))
+ if((ret_value = H5D_get_space(dset)) < 0)
HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to get dataspace")
- /* Create an atom */
- if((ret_value = H5I_register (H5I_DATASPACE, space, TRUE)) < 0)
- HGOTO_ERROR(H5E_ATOM, H5E_CANTREGISTER, FAIL, "unable to register dataspace")
-
done:
- if(ret_value < 0) {
- if(space!=NULL) {
- if(H5S_close(space) < 0)
- HDONE_ERROR(H5E_DATASET, H5E_CLOSEERROR, FAIL, "unable to release dataspace")
- } /* end if */
- } /* end if */
-
FUNC_LEAVE_API(ret_value)
}
@@ -504,7 +491,7 @@ H5Dget_space_status(hid_t dset_id, H5D_space_status_t *allocation)
H5TRACE2("e", "i*Ds", dset_id, allocation);
/* Check arguments */
- if(NULL==(dset=(H5D_t *)H5I_object_verify(dset_id, H5I_DATASET)))
+ if(NULL == (dset = (H5D_t *)H5I_object_verify(dset_id, H5I_DATASET)))
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a dataset")
/* Read dataspace address and return */
@@ -537,7 +524,6 @@ H5Dget_type(hid_t dset_id)
{
H5D_t *dset; /* Dataset */
- H5T_t *dt = NULL; /* Datatype to return */
hid_t ret_value; /* Return value */
FUNC_ENTER_API(FAIL)
@@ -547,32 +533,10 @@ H5Dget_type(hid_t dset_id)
if(NULL == (dset = (H5D_t *)H5I_object_verify(dset_id, H5I_DATASET)))
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a dataset")
- /* Patch the datatype's "top level" file pointer */
- if(H5T_patch_file(dset->shared->type, dset->oloc.file) < 0)
- HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to patch datatype's file pointer")
-
- /* Copy the dataset's datatype */
- if(NULL == (dt = H5T_copy(dset->shared->type, H5T_COPY_REOPEN)))
- HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to copy datatype")
-
- /* Mark any datatypes as being in memory now */
- if(H5T_set_loc(dt, NULL, H5T_LOC_MEMORY) < 0)
- HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "invalid datatype location")
-
- /* Lock copied type */
- if(H5T_lock(dt, FALSE) < 0)
- HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to lock transient datatype")
-
- /* Create an atom */
- if((ret_value = H5I_register(H5I_DATATYPE, dt, TRUE)) < 0)
- HGOTO_ERROR(H5E_ATOM, H5E_CANTREGISTER, FAIL, "unable to register datatype")
+ if((ret_value = H5D_get_type(dset)) < 0)
+ HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to get dataspace")
done:
- if(ret_value < 0) {
- if(dt && H5T_close(dt) < 0)
- HDONE_ERROR(H5E_DATASET, H5E_CLOSEERROR, FAIL, "unable to release datatype")
- } /* end if */
-
FUNC_LEAVE_API(ret_value)
} /* end H5Dget_type() */
@@ -607,7 +571,7 @@ H5Dget_create_plist(hid_t dset_id)
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a dataset")
if((ret_value = H5D_get_create_plist(dataset)) < 0)
- HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a dataset")
+ HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, FAIL, "Can't get creation plist")
done:
FUNC_LEAVE_API(ret_value)
@@ -615,123 +579,6 @@ done:
/*-------------------------------------------------------------------------
- * Function: H5D_get_create_plist
- *
- * Purpose: Private function for H5Dget_create_plist
- *
- * Return: Success: ID for a copy of the dataset creation
- * property list. The template should be
- * released by calling H5P_close().
- *
- * Failure: FAIL
- *
- * Programmer: Robb Matzke
- * Tuesday, February 3, 1998
- *
- *-------------------------------------------------------------------------
- */
-hid_t
-H5D_get_create_plist(H5D_t *dset)
-{
- H5P_genplist_t *dcpl_plist; /* Dataset's DCPL */
- H5P_genplist_t *new_plist; /* Copy of dataset's DCPL */
- H5O_fill_t copied_fill; /* Fill value to tweak */
- hid_t new_dcpl_id = FAIL;
- hid_t ret_value; /* Return value */
-
- FUNC_ENTER_NOAPI(FAIL)
-
- /* Check args */
- if(NULL == (dcpl_plist = (H5P_genplist_t *)H5I_object(dset->shared->dcpl_id)))
- HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "can't get property list")
-
- /* Copy the creation property list */
- if((new_dcpl_id = H5P_copy_plist(dcpl_plist, TRUE)) < 0)
- HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, FAIL, "unable to copy the creation property list")
- if(NULL == (new_plist = (H5P_genplist_t *)H5I_object(new_dcpl_id)))
- HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "can't get property list")
-
- /* Retrieve any object creation properties */
- if(H5O_get_create_plist(&dset->oloc, H5AC_ind_dxpl_id, new_plist) < 0)
- HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, FAIL, "can't get object creation info")
-
- /* Get the fill value property */
- if(H5P_get(new_plist, H5D_CRT_FILL_VALUE_NAME, &copied_fill) < 0)
- HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't get fill value")
-
- /* Check if there is a fill value, but no type yet */
- if(copied_fill.buf != NULL && copied_fill.type == NULL) {
- H5T_path_t *tpath; /* Conversion information*/
-
- /* Copy the dataset type into the fill value message */
- if(NULL == (copied_fill.type = H5T_copy(dset->shared->type, H5T_COPY_TRANSIENT)))
- HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to copy dataset datatype for fill value")
-
- /* Set up type conversion function */
- if(NULL == (tpath = H5T_path_find(dset->shared->type, copied_fill.type, NULL, NULL, H5AC_ind_dxpl_id, FALSE)))
- HGOTO_ERROR(H5E_DATASET, H5E_UNSUPPORTED, FAIL, "unable to convert between src and dest data types")
-
- /* Convert disk form of fill value into memory form */
- if(!H5T_path_noop(tpath)) {
- hid_t dst_id, src_id; /* Source & destination datatypes for type conversion */
- uint8_t *bkg_buf = NULL; /* Background conversion buffer */
- size_t bkg_size; /* Size of background buffer */
-
- /* Wrap copies of types to convert */
- dst_id = H5I_register(H5I_DATATYPE, H5T_copy(copied_fill.type, H5T_COPY_TRANSIENT), FALSE);
- if(dst_id < 0)
- HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "unable to copy/register datatype")
- src_id = H5I_register(H5I_DATATYPE, H5T_copy(dset->shared->type, H5T_COPY_ALL), FALSE);
- if(src_id < 0) {
- H5I_dec_ref(dst_id);
- HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "unable to copy/register datatype")
- } /* end if */
-
- /* Allocate a background buffer */
- bkg_size = MAX(H5T_GET_SIZE(copied_fill.type), H5T_GET_SIZE(dset->shared->type));
- if(H5T_path_bkg(tpath) && NULL == (bkg_buf = H5FL_BLK_CALLOC(type_conv, bkg_size))) {
- H5I_dec_ref(src_id);
- H5I_dec_ref(dst_id);
- HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed")
- } /* end if */
-
- /* Convert fill value */
- if(H5T_convert(tpath, src_id, dst_id, (size_t)1, (size_t)0, (size_t)0, copied_fill.buf, bkg_buf, H5AC_ind_dxpl_id) < 0) {
- H5I_dec_ref(src_id);
- H5I_dec_ref(dst_id);
- if(bkg_buf)
- bkg_buf = H5FL_BLK_FREE(type_conv, bkg_buf);
- HGOTO_ERROR(H5E_DATASET, H5E_CANTCONVERT, FAIL, "datatype conversion failed")
- } /* end if */
-
- /* Release local resources */
- if(H5I_dec_ref(src_id) < 0)
- HGOTO_ERROR(H5E_DATASET, H5E_CANTDEC, FAIL, "unable to close temporary object")
- if(H5I_dec_ref(dst_id) < 0)
- HGOTO_ERROR(H5E_DATASET, H5E_CANTDEC, FAIL, "unable to close temporary object")
- if(bkg_buf)
- bkg_buf = H5FL_BLK_FREE(type_conv, bkg_buf);
- } /* end if */
- } /* end if */
-
- /* Set back the fill value property to property list */
- if(H5P_set(new_plist, H5D_CRT_FILL_VALUE_NAME, &copied_fill) < 0)
- HGOTO_ERROR(H5E_DATASET, H5E_CANTSET, FAIL, "unable to set property list fill value")
-
- /* Set the return value */
- ret_value = new_dcpl_id;
-
-done:
- if(ret_value < 0)
- if(new_dcpl_id > 0)
- if(H5I_dec_app_ref(new_dcpl_id) < 0)
- HDONE_ERROR(H5E_DATASET, H5E_CANTDEC, FAIL, "unable to close temporary object")
-
- FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5D_get_create_plist() */
-
-
-/*-------------------------------------------------------------------------
* Function: H5Dget_access_plist
*
* Purpose: Returns a copy of the dataset creation property list.
@@ -768,9 +615,6 @@ hid_t
H5Dget_access_plist(hid_t dset_id)
{
H5D_t *dset; /* Dataset structure */
- H5P_genplist_t *old_plist; /* Default DAPL */
- H5P_genplist_t *new_plist; /* New DAPL */
- hid_t new_dapl_id = FAIL;
hid_t ret_value; /* Return value */
FUNC_ENTER_API(FAIL)
@@ -780,33 +624,10 @@ H5Dget_access_plist(hid_t dset_id)
if (NULL == (dset = (H5D_t *)H5I_object_verify(dset_id, H5I_DATASET)))
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a dataset")
- /* Make a copy of the default dataset access property list */
- if (NULL == (old_plist = (H5P_genplist_t *)H5I_object(H5P_LST_DATASET_ACCESS_g)))
- HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a property list")
- if ((new_dapl_id = H5P_copy_plist(old_plist, TRUE)) < 0)
- HGOTO_ERROR(H5E_INTERNAL, H5E_CANTINIT, FAIL, "can't copy dataset access property list")
- if (NULL == (new_plist = (H5P_genplist_t *)H5I_object(new_dapl_id)))
- HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a property list")
-
- /* If the dataset is chunked then copy the rdcc parameters */
- if (dset->shared->layout.type == H5D_CHUNKED) {
- if (H5P_set(new_plist, H5D_ACS_DATA_CACHE_NUM_SLOTS_NAME, &(dset->shared->cache.chunk.nslots)) < 0)
- HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set data cache number of slots")
- if (H5P_set(new_plist, H5D_ACS_DATA_CACHE_BYTE_SIZE_NAME, &(dset->shared->cache.chunk.nbytes_max)) < 0)
- HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set data cache byte size")
- if (H5P_set(new_plist, H5D_ACS_PREEMPT_READ_CHUNKS_NAME, &(dset->shared->cache.chunk.w0)) < 0)
- HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set preempt read chunks")
- } /* end if */
-
- /* Set the return value */
- ret_value = new_dapl_id;
+ if((ret_value = H5D_get_access_plist(dset)) < 0)
+ HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, FAIL, "Can't get access plist")
done:
- if(ret_value < 0)
- if(new_dapl_id >= 0)
- if(H5I_dec_app_ref(new_dapl_id) < 0)
- HDONE_ERROR(H5E_DATASET, H5E_CANTDEC, FAIL, "unable to close temporary object")
-
FUNC_LEAVE_API(ret_value)
} /* end H5Dget_access_plist() */
@@ -1055,7 +876,6 @@ H5Dvlen_get_buf_size(hid_t dataset_id, hid_t type_id, hid_t space_id,
H5S_t *mspace = NULL; /* Memory dataspace */
char bogus; /* bogus value to pass to H5Diterate() */
H5S_t *space; /* Dataspace for iteration */
- H5P_genclass_t *pclass; /* Property class */
H5P_genplist_t *plist; /* Property list */
herr_t ret_value; /* Return value */
@@ -1092,12 +912,8 @@ H5Dvlen_get_buf_size(hid_t dataset_id, hid_t type_id, hid_t space_id,
if(NULL == (vlen_bufsize.vl_tbuf = H5FL_BLK_MALLOC(vlen_vl_buf, (size_t)1)))
HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "no temporary buffers available")
- /* Get the pointer to the dataset transfer class */
- if(NULL == (pclass = (H5P_genclass_t *)H5I_object(H5P_CLS_DATASET_XFER_g)))
- HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a property list class")
-
/* Change to the custom memory allocation routines for reading VL data */
- if((vlen_bufsize.xfer_pid = H5P_create_id(pclass, FALSE)) < 0)
+ if((vlen_bufsize.xfer_pid = H5P_create_id(H5P_CLS_DATASET_XFER_g, FALSE)) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTCREATE, FAIL, "no dataset xfer plists available")
/* Get the property list struct */
diff --git a/src/H5Dchunk.c b/src/H5Dchunk.c
index 43d140e..820d4b6 100644
--- a/src/H5Dchunk.c
+++ b/src/H5Dchunk.c
@@ -176,6 +176,13 @@ typedef struct H5D_chunk_file_iter_ud_t {
#endif /* H5_HAVE_PARALLEL */
} H5D_chunk_file_iter_ud_t;
+#ifdef H5_HAVE_PARALLEL
+/* information to construct a collective I/O operation for filling chunks */
+typedef struct H5D_chunk_coll_info_t {
+ size_t num_io; /* Number of write operations */
+ haddr_t *addr; /* array of the file addresses of the write operation */
+} H5D_chunk_coll_info_t;
+#endif /* H5_HAVE_PARALLEL */
/********************/
/* Local Prototypes */
@@ -230,7 +237,10 @@ static herr_t H5D__chunk_cache_evict(const H5D_t *dset, hid_t dxpl_id,
static herr_t H5D__chunk_cache_prune(const H5D_t *dset, hid_t dxpl_id,
const H5D_dxpl_cache_t *dxpl_cache, size_t size);
static herr_t H5D__chunk_prune_fill(H5D_chunk_it_ud1_t *udata);
-
+#ifdef H5_HAVE_PARALLEL
+static herr_t H5D__chunk_collective_fill(const H5D_t *dset, hid_t dxpl_id,
+ H5D_chunk_coll_info_t *chunk_info, size_t chunk_size, const void *fill_buf);
+#endif /* H5_HAVE_PARALLEL */
/*********************/
/* Package Variables */
@@ -385,10 +395,9 @@ H5D__chunk_direct_write(const H5D_t *dset, hid_t dxpl_id, uint32_t filters, hsiz
if(H5F_block_write(dset->oloc.file, H5FD_MEM_DRAW, udata.addr, data_size, dxpl_id, buf) < 0)
HGOTO_ERROR(H5E_DATASET, H5E_WRITEERROR, FAIL, "unable to write raw data to file")
-
done:
FUNC_LEAVE_NOAPI(ret_value)
-}
+} /* end H5D__chunk_direct_write() */
/*-------------------------------------------------------------------------
@@ -744,8 +753,10 @@ H5D__chunk_io_init(const H5D_io_info_t *io_info, const H5D_type_info_t *type_inf
fm->select_chunk = NULL;
if(io_info->using_mpi_vfd) {
H5_CHECK_OVERFLOW(fm->layout->u.chunk.nchunks, hsize_t, size_t);
- if(NULL == (fm->select_chunk = (H5D_chunk_info_t **)H5MM_calloc((size_t)fm->layout->u.chunk.nchunks * sizeof(H5D_chunk_info_t *))))
- HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "can't allocate chunk info")
+ if(fm->layout->u.chunk.nchunks) {
+ if(NULL == (fm->select_chunk = (H5D_chunk_info_t **)H5MM_calloc((size_t)fm->layout->u.chunk.nchunks * sizeof(H5D_chunk_info_t *))))
+ HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "can't allocate chunk info")
+ }
} /* end if */
#endif /* H5_HAVE_PARALLEL */
@@ -2798,7 +2809,7 @@ void *
H5D__chunk_lock(const H5D_io_info_t *io_info, H5D_chunk_ud_t *udata,
hbool_t relax)
{
- const H5D_t *dset = io_info->dset; /* Local pointer to the dataset info */
+ const H5D_t *dset = io_info->dset; /* Local pointer to the dataset info */
const H5O_pline_t *pline = &(dset->shared->dcpl_cache.pline); /* I/O pipeline info - always equal to the pline passed to H5D__chunk_alloc */
const H5O_layout_t *layout = &(dset->shared->layout); /* Dataset layout */
const H5O_fill_t *fill = &(dset->shared->dcpl_cache.fill); /* Fill value info */
@@ -3246,6 +3257,7 @@ H5D__chunk_allocate(const H5D_t *dset, hid_t dxpl_id, hbool_t full_overwrite,
hsize_t max_unalloc[H5O_LAYOUT_NDIMS]; /* Last chunk in each dimension that is unallocated */
hsize_t chunk_offset[H5O_LAYOUT_NDIMS]; /* Offset of current chunk */
size_t orig_chunk_size; /* Original size of chunk in bytes */
+ size_t chunk_size; /* Actual size of chunk in bytes, possibly filtered */
unsigned filter_mask = 0; /* Filter mask for chunks that have them */
const H5O_layout_t *layout = &(dset->shared->layout); /* Dataset layout */
const H5O_pline_t *pline = &(dset->shared->dcpl_cache.pline); /* I/O pipeline info */
@@ -3255,11 +3267,9 @@ H5D__chunk_allocate(const H5D_t *dset, hid_t dxpl_id, hbool_t full_overwrite,
H5D_dxpl_cache_t _dxpl_cache; /* Data transfer property cache buffer */
H5D_dxpl_cache_t *dxpl_cache = &_dxpl_cache; /* Data transfer property cache */
#ifdef H5_HAVE_PARALLEL
- MPI_Comm mpi_comm = MPI_COMM_NULL; /* MPI communicator for file */
- int mpi_rank = (-1); /* This process's rank */
- int mpi_code; /* MPI return code */
hbool_t blocks_written = FALSE; /* Flag to indicate that chunk was actually written */
hbool_t using_mpi = FALSE; /* Flag to indicate that the file is being accessed with an MPI-capable file driver */
+ H5D_chunk_coll_info_t chunk_info; /* chunk address information for doing I/O */
#endif /* H5_HAVE_PARALLEL */
hbool_t carry; /* Flag to indicate that chunk increment carrys to higher dimension (sorta) */
int space_ndims; /* Dataset's space rank */
@@ -3268,7 +3278,6 @@ H5D__chunk_allocate(const H5D_t *dset, hid_t dxpl_id, hbool_t full_overwrite,
int op_dim; /* Current operationg dimension */
H5D_fill_buf_info_t fb_info; /* Dataset's fill buffer info */
hbool_t fb_info_init = FALSE; /* Whether the fill value buffer has been initialized */
- hid_t data_dxpl_id; /* DXPL ID to use for raw data I/O operations */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_PACKAGE
@@ -3298,30 +3307,17 @@ H5D__chunk_allocate(const H5D_t *dset, hid_t dxpl_id, hbool_t full_overwrite,
#ifdef H5_HAVE_PARALLEL
/* Retrieve MPI parameters */
if(IS_H5FD_MPI(dset->oloc.file)) {
- /* Get the MPI communicator */
- if(MPI_COMM_NULL == (mpi_comm = H5F_mpi_get_comm(dset->oloc.file)))
- HGOTO_ERROR(H5E_INTERNAL, H5E_MPI, FAIL, "Can't retrieve MPI communicator")
-
- /* Get the MPI rank */
- if((mpi_rank = H5F_mpi_get_rank(dset->oloc.file)) < 0)
- HGOTO_ERROR(H5E_INTERNAL, H5E_MPI, FAIL, "Can't retrieve MPI rank")
-
/* Set the MPI-capable file driver flag */
using_mpi = TRUE;
- /* Use the internal "independent" DXPL */
- data_dxpl_id = H5AC_ind_dxpl_id;
+ /* init chunk info stuff for collective I/O */
+ chunk_info.num_io = 0;
+ chunk_info.addr = NULL;
} /* end if */
- else {
-#endif /* H5_HAVE_PARALLEL */
- /* Use the DXPL we were given */
- data_dxpl_id = dxpl_id;
-#ifdef H5_HAVE_PARALLEL
- } /* end else */
#endif /* H5_HAVE_PARALLEL */
/* Fill the DXPL cache values for later use */
- if(H5D__get_dxpl_cache(data_dxpl_id, &dxpl_cache) < 0)
+ if(H5D__get_dxpl_cache(dxpl_id, &dxpl_cache) < 0)
HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, FAIL, "can't fill dxpl cache")
/* Get original chunk size */
@@ -3351,7 +3347,7 @@ H5D__chunk_allocate(const H5D_t *dset, hid_t dxpl_id, hbool_t full_overwrite,
if(H5D__fill_init(&fb_info, NULL, (H5MM_allocate_t)H5D__chunk_alloc,
(void *)pline, (H5MM_free_t)H5D__chunk_xfree, (void *)pline,
&dset->shared->dcpl_cache.fill, dset->shared->type,
- dset->shared->type_id, (size_t)0, orig_chunk_size, data_dxpl_id) < 0)
+ dset->shared->type_id, (size_t)0, orig_chunk_size, dxpl_id) < 0)
HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "can't initialize fill buffer info")
fb_info_init = TRUE;
@@ -3425,7 +3421,8 @@ H5D__chunk_allocate(const H5D_t *dset, hid_t dxpl_id, hbool_t full_overwrite,
} /* end else */
while(!carry) {
- size_t chunk_size = orig_chunk_size; /* Size of chunk in bytes, possibly filtered */
+ /* Reset size of chunk in bytes, in case filtered size changes */
+ chunk_size = orig_chunk_size;
#ifndef NDEBUG
/* None of the chunks should be allocated */
@@ -3461,6 +3458,9 @@ H5D__chunk_allocate(const H5D_t *dset, hid_t dxpl_id, hbool_t full_overwrite,
if(fb_info_init && fb_info.has_vlen_fill_type) {
/* Sanity check */
HDassert(should_fill);
+#ifdef H5_HAVE_PARALLEL
+ HDassert(!using_mpi); /* Can't write VL datatypes in parallel currently */
+#endif
/* Check to make sure the buffer is large enough. It is
* possible (though ill-advised) for the filter to shrink the
@@ -3473,7 +3473,7 @@ H5D__chunk_allocate(const H5D_t *dset, hid_t dxpl_id, hbool_t full_overwrite,
} /* end if */
/* Fill the buffer with VL datatype fill values */
- if(H5D__fill_refill_vl(&fb_info, fb_info.elmts_per_buf, data_dxpl_id) < 0)
+ if(H5D__fill_refill_vl(&fb_info, fb_info.elmts_per_buf, dxpl_id) < 0)
HGOTO_ERROR(H5E_DATASET, H5E_CANTCONVERT, FAIL, "can't refill fill value buffer")
/* Check if there are filters which need to be applied to the chunk */
@@ -3518,18 +3518,26 @@ H5D__chunk_allocate(const H5D_t *dset, hid_t dxpl_id, hbool_t full_overwrite,
#ifdef H5_HAVE_PARALLEL
/* Check if this file is accessed with an MPI-capable file driver */
if(using_mpi) {
- /* Write the chunks out from only one process */
- /* !! Use the internal "independent" DXPL!! -QAK */
- if(H5_PAR_META_WRITE == mpi_rank)
- if(H5F_block_write(dset->oloc.file, H5FD_MEM_DRAW, udata.addr, chunk_size, data_dxpl_id, fb_info.fill_buf) < 0)
- HGOTO_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, "unable to write raw data to file")
+ /* collect all chunk addresses to be written to
+ write collectively at the end */
+ /* allocate/resize address array if no more space left */
+ if(0 == chunk_info.num_io % 1024) {
+ if(NULL == (chunk_info.addr = (haddr_t *)HDrealloc
+ (chunk_info.addr, (chunk_info.num_io + 1024) * sizeof(haddr_t))))
+ HGOTO_ERROR(H5E_DATASET, H5E_CANTALLOC, FAIL, "memory allocation failed for chunk addresses");
+ } /* end if */
- /* Indicate that blocks are being written */
+ /* Store the chunk's address for later */
+ chunk_info.addr[chunk_info.num_io] = udata.addr;
+ chunk_info.num_io++;
+
+ /* Indicate that blocks will be written */
blocks_written = TRUE;
} /* end if */
else {
#endif /* H5_HAVE_PARALLEL */
- if(H5F_block_write(dset->oloc.file, H5FD_MEM_DRAW, udata.addr, chunk_size, data_dxpl_id, fb_info.fill_buf) < 0)
+ if(H5F_block_write(dset->oloc.file, H5FD_MEM_DRAW, udata.addr, chunk_size,
+ dxpl_id, fb_info.fill_buf) < 0)
HGOTO_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, "unable to write raw data to file")
#ifdef H5_HAVE_PARALLEL
} /* end else */
@@ -3562,15 +3570,10 @@ H5D__chunk_allocate(const H5D_t *dset, hid_t dxpl_id, hbool_t full_overwrite,
} /* end for(op_dim=0...) */
#ifdef H5_HAVE_PARALLEL
- /* Only need to block at the barrier if we actually initialized a chunk */
- /* using an MPI-capable file driver */
+ /* do final collective I/O */
if(using_mpi && blocks_written) {
- /* Wait at barrier to avoid race conditions where some processes are
- * still writing out chunks and other processes race ahead to read
- * them in, getting bogus data.
- */
- if(MPI_SUCCESS != (mpi_code = MPI_Barrier(mpi_comm)))
- HMPI_GOTO_ERROR(FAIL, "MPI_Barrier failed", mpi_code)
+ if(H5D__chunk_collective_fill(dset, dxpl_id, &chunk_info, chunk_size, fb_info.fill_buf) < 0)
+ HGOTO_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, "unable to write raw data to file")
} /* end if */
#endif /* H5_HAVE_PARALLEL */
@@ -3582,9 +3585,186 @@ done:
if(fb_info_init && H5D__fill_term(&fb_info) < 0)
HDONE_ERROR(H5E_DATASET, H5E_CANTFREE, FAIL, "Can't release fill buffer info")
+#ifdef H5_HAVE_PARALLEL
+ if(using_mpi) {
+ if(chunk_info.addr)
+ HDfree(chunk_info.addr);
+ } /* end if */
+#endif
+
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5D__chunk_allocate() */
+#ifdef H5_HAVE_PARALLEL
+
+/*-------------------------------------------------------------------------
+ * Function: H5D__chunk_collective_fill
+ *
+ * Purpose: Use MPIO collective write to fill the chunks (if number of
+ * chunks to fill is greater than the number of MPI procs;
+ * otherwise use independent I/O).
+ *
+ * Return: Non-negative on success/Negative on failure
+ *
+ * Programmer: Mohamad Chaarawi
+ * July 30, 2014
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5D__chunk_collective_fill(const H5D_t *dset, hid_t dxpl_id,
+ H5D_chunk_coll_info_t *chunk_info, size_t chunk_size, const void *fill_buf)
+{
+ MPI_Comm mpi_comm = MPI_COMM_NULL; /* MPI communicator for file */
+ int mpi_rank = (-1); /* This process's rank */
+ int mpi_size = (-1); /* MPI Comm size */
+ int mpi_code; /* MPI return code */
+ size_t num_blocks; /* Number of blocks between processes. */
+ size_t leftover_blocks; /* Number of leftover blocks to handle */
+ int blocks, leftover, block_len; /* converted to int for MPI */
+ MPI_Aint *chunk_disp_array = NULL;
+ int *block_lens = NULL;
+ MPI_Datatype mem_type, file_type;
+ hid_t data_dxpl_id = -1; /* DXPL ID to use for raw data I/O operations */
+ int i; /* Local index variable */
+ herr_t ret_value = SUCCEED; /* Return value */
+
+ FUNC_ENTER_STATIC
+
+ /* Get the MPI communicator */
+ if(MPI_COMM_NULL == (mpi_comm = H5F_mpi_get_comm(dset->oloc.file)))
+ HGOTO_ERROR(H5E_INTERNAL, H5E_MPI, FAIL, "Can't retrieve MPI communicator")
+
+ /* Get the MPI rank */
+ if((mpi_rank = H5F_mpi_get_rank(dset->oloc.file)) < 0)
+ HGOTO_ERROR(H5E_INTERNAL, H5E_MPI, FAIL, "Can't retrieve MPI rank")
+
+ /* Get the MPI size */
+ if((mpi_size = H5F_mpi_get_size(dset->oloc.file)) < 0)
+ HGOTO_ERROR(H5E_INTERNAL, H5E_MPI, FAIL, "Can't retrieve MPI size")
+
+ /* Get a copy of the DXPL, to modify */
+ if((data_dxpl_id = H5P_copy_plist((H5P_genplist_t *)H5I_object(dxpl_id), TRUE)) < 0)
+ HGOTO_ERROR(H5E_PLIST, H5E_CANTCOPY, FAIL, "can't copy property list")
+
+ /* Distribute evenly the number of blocks between processes. */
+ num_blocks = chunk_info->num_io / mpi_size; /* value should be the same on all procs */
+
+ /* after evenly distributing the blocks between processes, are
+ there any leftover blocks for each individual process
+ (round-robin) */
+ leftover_blocks = chunk_info->num_io % mpi_size;
+
+ /* Cast values to types needed by MPI */
+ H5_ASSIGN_OVERFLOW(blocks, num_blocks, size_t, int);
+ H5_ASSIGN_OVERFLOW(leftover, leftover_blocks, size_t, int);
+ H5_ASSIGN_OVERFLOW(block_len, chunk_size, size_t, int);
+
+ /* Allocate buffers */
+ /* (MSC - should not need block_lens if MPI_type_create_hindexed_block is working) */
+ if(NULL == (block_lens = (int *)H5MM_malloc((blocks + 1) * sizeof(int))))
+ HGOTO_ERROR(H5E_DATASET, H5E_CANTALLOC, FAIL, "couldn't allocate chunk lengths buffer")
+ if(NULL == (chunk_disp_array = (MPI_Aint *)H5MM_malloc((blocks + 1) * sizeof(MPI_Aint))))
+ HGOTO_ERROR(H5E_DATASET, H5E_CANTALLOC, FAIL, "couldn't allocate chunk file displacement buffer")
+
+ for(i = 0 ; i < blocks ; i++) {
+ /* store the chunk address as an MPI_Aint */
+ chunk_disp_array[i] = (MPI_Aint)(chunk_info->addr[i + mpi_rank*blocks]);
+
+ /* MSC - should not need this if MPI_type_create_hindexed_block is working */
+ block_lens[i] = block_len;
+
+ /* make sure that the addresses in the datatype are
+ monotonically non decreasing */
+ if(i)
+ HDassert(chunk_disp_array[i] > chunk_disp_array[i - 1]);
+ } /* end if */
+
+ /* calculate if there are any leftover blocks after evenly
+ distributing. If there are, then round robin the distribution
+ to processes 0 -> leftover. */
+ if(leftover && leftover > mpi_rank) {
+ chunk_disp_array[blocks] = (MPI_Aint)chunk_info->addr[blocks*mpi_size + mpi_rank];
+ block_lens[blocks] = block_len;
+ blocks++;
+ }
+
+ /* MSC
+ * should not have a special case for blocks == 0, but ompi (as of 1.8.1) has a bug
+ * in file_set_view when a zero size datatype is create with hindexed or hvector.
+ */
+ if(0 == blocks) {
+ mpi_code = MPI_Type_contiguous(0, MPI_BYTE, &file_type);
+ if(mpi_code != MPI_SUCCESS)
+ HMPI_GOTO_ERROR(FAIL, "MPI_Type_contiguous failed", mpi_code)
+ mpi_code = MPI_Type_contiguous(0, MPI_BYTE, &mem_type);
+ if(mpi_code != MPI_SUCCESS)
+ HMPI_GOTO_ERROR(FAIL, "MPI_Type_contiguous failed", mpi_code)
+ }
+ else {
+ /* MSC
+ * should use this if MPI_type_create_hindexed block is working
+ * mpi_code = MPI_Type_create_hindexed_block(blocks, block_len, chunk_disp_array, MPI_BYTE, &file_type);
+ */
+ mpi_code = MPI_Type_create_hindexed(blocks, block_lens, chunk_disp_array,
+ MPI_BYTE, &file_type);
+ if(mpi_code != MPI_SUCCESS)
+ HMPI_GOTO_ERROR(FAIL, "MPI_Type_create_hindexed failed", mpi_code)
+ mpi_code = MPI_Type_create_hvector(blocks, block_len, 0, MPI_BYTE, &mem_type);
+ if(mpi_code != MPI_SUCCESS)
+ HMPI_GOTO_ERROR(FAIL, "MPI_Type_create_hvector failed", mpi_code)
+ }
+ if(MPI_SUCCESS != (mpi_code = MPI_Type_commit(&file_type)))
+ HMPI_GOTO_ERROR(FAIL, "MPI_Type_commit failed", mpi_code)
+ if(MPI_SUCCESS != (mpi_code = MPI_Type_commit(&mem_type)))
+ HMPI_GOTO_ERROR(FAIL, "MPI_Type_commit failed", mpi_code)
+
+ /* set MPI-IO VFD properties */
+ {
+ H5FD_mpio_xfer_t xfer_mode = H5FD_MPIO_COLLECTIVE;
+ H5P_genplist_t *plist; /* Property list pointer */
+
+ if(NULL == (plist = H5P_object_verify(data_dxpl_id, H5P_DATASET_XFER)))
+ HGOTO_ERROR(H5E_PLIST, H5E_BADTYPE, FAIL, "not a dataset transfer list")
+
+ /* Set buffer MPI type */
+ if(H5P_set(plist, H5FD_MPI_XFER_MEM_MPI_TYPE_NAME, &mem_type) < 0)
+ HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set MPI-I/O property")
+
+ /* Set File MPI type */
+ if(H5P_set(plist, H5FD_MPI_XFER_FILE_MPI_TYPE_NAME, &file_type) < 0)
+ HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set MPI-I/O property")
+
+ /* set transfer mode */
+ if(H5P_set(plist, H5D_XFER_IO_XFER_MODE_NAME, &xfer_mode) < 0)
+ HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set transfer mode")
+ }
+
+ /* low level write */
+ if(H5F_block_write(dset->oloc.file, H5FD_MEM_DRAW, (haddr_t)0, (blocks) ? (size_t)1 : (size_t)0,
+ data_dxpl_id, fill_buf) < 0)
+ HGOTO_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, "unable to write raw data to file")
+
+ /* Barrier so processes don't race ahead */
+ if(MPI_SUCCESS != (mpi_code = MPI_Barrier(mpi_comm)))
+ HMPI_GOTO_ERROR(FAIL, "MPI_Barrier failed", mpi_code)
+
+done:
+ if(data_dxpl_id > 0 && H5I_dec_ref(data_dxpl_id) < 0)
+ HDONE_ERROR(H5E_DATASET, H5E_CANTFREE, FAIL, "Can't free property list")
+
+ /* free things */
+ if(MPI_SUCCESS != (mpi_code = MPI_Type_free(&file_type)))
+ HMPI_DONE_ERROR(FAIL, "MPI_Type_free failed", mpi_code)
+ if(MPI_SUCCESS != (mpi_code = MPI_Type_free(&mem_type)))
+ HMPI_DONE_ERROR(FAIL, "MPI_Type_free failed", mpi_code)
+ H5MM_xfree(chunk_disp_array);
+ H5MM_xfree(block_lens);
+
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5D__chunk_collective_fill() */
+#endif /* H5_HAVE_PARALLEL */
+
/*-------------------------------------------------------------------------
* Function: H5D__chunk_prune_fill
diff --git a/src/H5Dint.c b/src/H5Dint.c
index 97c3a1a..a354a16 100644
--- a/src/H5Dint.c
+++ b/src/H5Dint.c
@@ -103,6 +103,9 @@ H5FL_BLK_EXTERN(sieve_buf);
/* Declare the external free list to manage the H5D_chunk_info_t struct */
H5FL_EXTERN(H5D_chunk_info_t);
+/* Declare extern the free list to manage blocks of type conversion data */
+H5FL_BLK_EXTERN(type_conv);
+
/* Define a static "default" dataset structure to use to initialize new datasets */
static H5D_shared_t H5D_def_dset;
@@ -176,7 +179,7 @@ H5D__init_interface(void)
/* Get the default dataset creation property list values and initialize the
* default dataset with them.
*/
- if(NULL == (def_dcpl = (H5P_genplist_t *)H5I_object(H5P_LST_DATASET_CREATE_g)))
+ if(NULL == (def_dcpl = (H5P_genplist_t *)H5I_object(H5P_LST_DATASET_CREATE_ID_g)))
HGOTO_ERROR(H5E_DATASET, H5E_BADTYPE, FAIL, "can't get default dataset creation property list")
/* Get the default data storage layout */
@@ -221,12 +224,12 @@ done:
int
H5D_term_interface(void)
{
- int n=0;
+ int n = 0;
FUNC_ENTER_NOAPI_NOINIT_NOERR
if(H5_interface_initialize_g) {
- if((n=H5I_nmembers(H5I_DATASET))>0) {
+ if(H5I_nmembers(H5I_DATASET) > 0) {
/* The dataset API uses the "force" flag set to true because it
* is using the "file objects" (H5FO) API functions to track open
* objects in the file. Using the H5FO code means that dataset
@@ -249,19 +252,25 @@ H5D_term_interface(void)
*
* QAK - 5/13/03
*/
- H5I_clear_type(H5I_DATASET, TRUE, FALSE);
- } else {
+ (void)H5I_clear_type(H5I_DATASET, TRUE, FALSE);
+ n++; /*H5I*/
+ } /* end if */
+ else {
/* Close public interface */
n += H5D__term_pub_interface();
/* Close deprecated interface */
n += H5D__term_deprec_interface();
- H5I_dec_type_ref(H5I_DATASET);
+ /* Destroy the dataset object id group */
+ (void)H5I_dec_type_ref(H5I_DATASET);
+ n++; /*H5I*/
+
+ /* Mark closed */
H5_interface_initialize_g = 0;
- n = 1; /*H5I*/
- }
- }
+ } /* end else */
+ } /* end if */
+
FUNC_LEAVE_NOAPI(n)
} /* end H5D_term_interface() */
@@ -455,7 +464,7 @@ done:
/*-------------------------------------------------------------------------
* Function: H5D__get_space_status
*
- * Purpose: Returns the status of data space allocation.
+ * Purpose: Returns the status of dataspace allocation.
*
* Return:
* Success: Non-negative
@@ -2172,16 +2181,16 @@ H5D__set_extent(H5D_t *dset, const hsize_t *size, hid_t dxpl_id)
if(H5D__check_filters(dset) < 0)
HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "can't apply filters")
- /* Get the data space */
+ /* Get the dataspace */
space = dset->shared->space;
/* Check if we are shrinking or expanding any of the dimensions */
if((rank = H5S_get_simple_extent_dims(space, curr_dims, NULL)) < 0)
HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, FAIL, "can't get dataset dimensions")
- /* Modify the size of the data space */
+ /* Modify the size of the dataspace */
if((changed = H5S_set_extent(space, size)) < 0)
- HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to modify size of data space")
+ HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to modify size of dataspace")
/* Don't bother updating things, unless they've changed */
if(changed) {
@@ -2379,7 +2388,6 @@ H5D__mark(const H5D_t *dataset, hid_t UNUSED dxpl_id, unsigned flags)
if(flags & H5D_MARK_LAYOUT)
dataset->shared->layout_dirty = TRUE;
-done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5D__mark() */
@@ -2457,3 +2465,269 @@ done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5D_flush() */
+
+/*-------------------------------------------------------------------------
+ * Function: H5D_get_create_plist
+ *
+ * Purpose: Private function for H5Dget_create_plist
+ *
+ * Return: Success: ID for a copy of the dataset creation
+ * property list. The template should be
+ * released by calling H5P_close().
+ *
+ * Failure: FAIL
+ *
+ * Programmer: Robb Matzke
+ * Tuesday, February 3, 1998
+ *
+ *-------------------------------------------------------------------------
+ */
+hid_t
+H5D_get_create_plist(H5D_t *dset)
+{
+ H5P_genplist_t *dcpl_plist; /* Dataset's DCPL */
+ H5P_genplist_t *new_plist; /* Copy of dataset's DCPL */
+ H5O_fill_t copied_fill; /* Fill value to tweak */
+ hid_t new_dcpl_id = FAIL;
+ hid_t ret_value; /* Return value */
+
+ FUNC_ENTER_NOAPI(FAIL)
+
+ /* Check args */
+ if(NULL == (dcpl_plist = (H5P_genplist_t *)H5I_object(dset->shared->dcpl_id)))
+ HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "can't get property list")
+
+ /* Copy the creation property list */
+ if((new_dcpl_id = H5P_copy_plist(dcpl_plist, TRUE)) < 0)
+ HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, FAIL, "unable to copy the creation property list")
+ if(NULL == (new_plist = (H5P_genplist_t *)H5I_object(new_dcpl_id)))
+ HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "can't get property list")
+
+ /* Retrieve any object creation properties */
+ if(H5O_get_create_plist(&dset->oloc, H5AC_ind_dxpl_id, new_plist) < 0)
+ HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, FAIL, "can't get object creation info")
+
+ /* Get the fill value property */
+ if(H5P_get(new_plist, H5D_CRT_FILL_VALUE_NAME, &copied_fill) < 0)
+ HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't get fill value")
+
+ /* Check if there is a fill value, but no type yet */
+ if(copied_fill.buf != NULL && copied_fill.type == NULL) {
+ H5T_path_t *tpath; /* Conversion information*/
+
+ /* Copy the dataset type into the fill value message */
+ if(NULL == (copied_fill.type = H5T_copy(dset->shared->type, H5T_COPY_TRANSIENT)))
+ HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to copy dataset datatype for fill value")
+
+ /* Set up type conversion function */
+ if(NULL == (tpath = H5T_path_find(dset->shared->type, copied_fill.type, NULL, NULL, H5AC_ind_dxpl_id, FALSE)))
+ HGOTO_ERROR(H5E_DATASET, H5E_UNSUPPORTED, FAIL, "unable to convert between src and dest data types")
+
+ /* Convert disk form of fill value into memory form */
+ if(!H5T_path_noop(tpath)) {
+ hid_t dst_id, src_id; /* Source & destination datatypes for type conversion */
+ uint8_t *bkg_buf = NULL; /* Background conversion buffer */
+ size_t bkg_size; /* Size of background buffer */
+
+ /* Wrap copies of types to convert */
+ dst_id = H5I_register(H5I_DATATYPE, H5T_copy(copied_fill.type, H5T_COPY_TRANSIENT), FALSE);
+ if(dst_id < 0)
+ HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "unable to copy/register datatype")
+ src_id = H5I_register(H5I_DATATYPE, H5T_copy(dset->shared->type, H5T_COPY_ALL), FALSE);
+ if(src_id < 0) {
+ H5I_dec_ref(dst_id);
+ HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "unable to copy/register datatype")
+ } /* end if */
+
+ /* Allocate a background buffer */
+ bkg_size = MAX(H5T_GET_SIZE(copied_fill.type), H5T_GET_SIZE(dset->shared->type));
+ if(H5T_path_bkg(tpath) && NULL == (bkg_buf = H5FL_BLK_CALLOC(type_conv, bkg_size))) {
+ H5I_dec_ref(src_id);
+ H5I_dec_ref(dst_id);
+ HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed")
+ } /* end if */
+
+ /* Convert fill value */
+ if(H5T_convert(tpath, src_id, dst_id, (size_t)1, (size_t)0, (size_t)0, copied_fill.buf, bkg_buf, H5AC_ind_dxpl_id) < 0) {
+ H5I_dec_ref(src_id);
+ H5I_dec_ref(dst_id);
+ if(bkg_buf)
+ bkg_buf = H5FL_BLK_FREE(type_conv, bkg_buf);
+ HGOTO_ERROR(H5E_DATASET, H5E_CANTCONVERT, FAIL, "datatype conversion failed")
+ } /* end if */
+
+ /* Release local resources */
+ if(H5I_dec_ref(src_id) < 0)
+ HGOTO_ERROR(H5E_DATASET, H5E_CANTDEC, FAIL, "unable to close temporary object")
+ if(H5I_dec_ref(dst_id) < 0)
+ HGOTO_ERROR(H5E_DATASET, H5E_CANTDEC, FAIL, "unable to close temporary object")
+ if(bkg_buf)
+ bkg_buf = H5FL_BLK_FREE(type_conv, bkg_buf);
+ } /* end if */
+ } /* end if */
+
+ /* Set back the fill value property to property list */
+ if(H5P_set(new_plist, H5D_CRT_FILL_VALUE_NAME, &copied_fill) < 0)
+ HGOTO_ERROR(H5E_DATASET, H5E_CANTSET, FAIL, "unable to set property list fill value")
+
+ /* Set the return value */
+ ret_value = new_dcpl_id;
+
+done:
+ if(ret_value < 0)
+ if(new_dcpl_id > 0)
+ if(H5I_dec_app_ref(new_dcpl_id) < 0)
+ HDONE_ERROR(H5E_DATASET, H5E_CANTDEC, FAIL, "unable to close temporary object")
+
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5D_get_create_plist() */
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5D_get_access_plist
+ *
+ * Purpose: Returns a copy of the dataset access property list.
+ *
+ * Return: Success: ID for a copy of the dataset access
+ * property list.
+ *
+ * Failure: FAIL
+ *
+ * Programmer: Mohamad Chaarawi
+ * March, 2012
+ *
+ *-------------------------------------------------------------------------
+ */
+hid_t
+H5D_get_access_plist(H5D_t *dset)
+{
+ H5P_genplist_t *old_plist; /* Default DAPL */
+ H5P_genplist_t *new_plist; /* New DAPL */
+ hid_t new_dapl_id = FAIL;
+ hid_t ret_value = FAIL;
+
+ FUNC_ENTER_NOAPI_NOINIT
+
+ /* Make a copy of the default dataset access property list */
+ if (NULL == (old_plist = (H5P_genplist_t *)H5I_object(H5P_LST_DATASET_ACCESS_ID_g)))
+ HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a property list")
+ if ((new_dapl_id = H5P_copy_plist(old_plist, TRUE)) < 0)
+ HGOTO_ERROR(H5E_INTERNAL, H5E_CANTINIT, FAIL, "can't copy dataset access property list")
+ if (NULL == (new_plist = (H5P_genplist_t *)H5I_object(new_dapl_id)))
+ HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a property list")
+
+ /* If the dataset is chunked then copy the rdcc parameters */
+ if (dset->shared->layout.type == H5D_CHUNKED) {
+ if (H5P_set(new_plist, H5D_ACS_DATA_CACHE_NUM_SLOTS_NAME, &(dset->shared->cache.chunk.nslots)) < 0)
+ HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set data cache number of slots")
+ if (H5P_set(new_plist, H5D_ACS_DATA_CACHE_BYTE_SIZE_NAME, &(dset->shared->cache.chunk.nbytes_max)) < 0)
+ HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set data cache byte size")
+ if (H5P_set(new_plist, H5D_ACS_PREEMPT_READ_CHUNKS_NAME, &(dset->shared->cache.chunk.w0)) < 0)
+ HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set preempt read chunks")
+ } /* end if */
+
+ /* Set the return value */
+ ret_value = new_dapl_id;
+
+done:
+ if(ret_value < 0) {
+ if(new_dapl_id > 0)
+ if(H5I_dec_app_ref(new_dapl_id) < 0)
+ HDONE_ERROR(H5E_SYM, H5E_CANTDEC, FAIL, "can't free")
+ } /* end if */
+
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5D_get_access_plist() */
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5D_get_space
+ *
+ * Purpose: Returns and ID for the dataspace of the dataset.
+ *
+ * Return: Success: ID for dataspace
+ *
+ * Failure: FAIL
+ *
+ * Programmer: Mohamad Chaarawi
+ * March, 2012
+ *
+ *-------------------------------------------------------------------------
+ */
+hid_t
+H5D_get_space(H5D_t *dset)
+{
+ H5S_t *space = NULL;
+ hid_t ret_value = FAIL;
+
+ FUNC_ENTER_NOAPI_NOINIT
+
+ /* Read the data space message and return a data space object */
+ if(NULL == (space = H5S_copy(dset->shared->space, FALSE, TRUE)))
+ HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to get data space")
+
+ /* Create an atom */
+ if((ret_value = H5I_register (H5I_DATASPACE, space, TRUE)) < 0)
+ HGOTO_ERROR(H5E_ATOM, H5E_CANTREGISTER, FAIL, "unable to register data space")
+
+done:
+ if(ret_value < 0) {
+ if(space!=NULL) {
+ if(H5S_close(space) < 0)
+ HDONE_ERROR(H5E_DATASET, H5E_CLOSEERROR, FAIL, "unable to release dataspace")
+ } /* end if */
+ } /* end if */
+
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5D_get_space() */
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5D_get_type
+ *
+ * Purpose: Returns and ID for the datatype of the dataset.
+ *
+ * Return: Success: ID for datatype
+ *
+ * Failure: FAIL
+ *
+ * Programmer: Mohamad Chaarawi
+ * March, 2012
+ *
+ *-------------------------------------------------------------------------
+ */
+hid_t
+H5D_get_type(H5D_t *dset)
+{
+ H5T_t *dt = NULL;
+ hid_t ret_value = FAIL;
+
+ FUNC_ENTER_NOAPI_NOINIT
+
+ /* Patch the datatype's "top level" file pointer */
+ if(H5T_patch_file(dset->shared->type, dset->oloc.file) < 0)
+ HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to patch datatype's file pointer")
+
+ /* Copy the dataset's datatype */
+ if(NULL == (dt = H5T_copy(dset->shared->type, H5T_COPY_REOPEN)))
+ HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to copy datatype")
+
+ /* Mark any datatypes as being in memory now */
+ if(H5T_set_loc(dt, NULL, H5T_LOC_MEMORY) < 0)
+ HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "invalid datatype location")
+
+ /* Lock copied type */
+ if(H5T_lock(dt, FALSE) < 0)
+ HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to lock transient datatype")
+
+ if((ret_value = H5I_register(H5I_DATATYPE, dt, TRUE)) < 0)
+ HGOTO_ERROR(H5E_ATOM, H5E_CANTREGISTER, FAIL, "unable to register datatype")
+
+done:
+ if(ret_value < 0) {
+ if(dt && H5T_close(dt) < 0)
+ HDONE_ERROR(H5E_DATASET, H5E_CLOSEERROR, FAIL, "unable to release datatype")
+ } /* end if */
+
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5D_get_type() */
diff --git a/src/H5Dio.c b/src/H5Dio.c
index 27b5334..b0fc822 100644
--- a/src/H5Dio.c
+++ b/src/H5Dio.c
@@ -55,8 +55,8 @@
static herr_t H5D__write(H5D_t *dataset, hid_t mem_type_id,
const H5S_t *mem_space, const H5S_t *file_space, hid_t dset_xfer_plist,
const void *buf);
-static herr_t H5D__pre_write(hid_t dset_id, hid_t mem_type_id, hid_t mem_space_id,
- hid_t file_space_id, hid_t dxpl_id, const void *buf);
+static herr_t H5D__pre_write(H5D_t *dset, hbool_t direct_write, hid_t mem_type_id,
+ const H5S_t *mem_space, const H5S_t *file_space, hid_t dxpl_id, const void *buf);
/* Setup/teardown routines */
static herr_t H5D__ioinfo_init(H5D_t *dset,
@@ -212,16 +212,62 @@ herr_t
H5Dwrite(hid_t dset_id, hid_t mem_type_id, hid_t mem_space_id,
hid_t file_space_id, hid_t dxpl_id, const void *buf)
{
+ H5D_t *dset = NULL;
+ H5P_genplist_t *plist; /* Property list pointer */
+ const H5S_t *mem_space = NULL;
+ const H5S_t *file_space = NULL;
+ hbool_t direct_write = FALSE;
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
H5TRACE6("e", "iiiii*x", dset_id, mem_type_id, mem_space_id, file_space_id,
dxpl_id, buf);
- if(!dset_id)
+ /* check arguments */
+ if(NULL == (dset = (H5D_t *)H5I_object_verify(dset_id, H5I_DATASET)))
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a dataset")
+ if(NULL == dset->oloc.file)
+ HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a file")
+
+ /* Get the default dataset transfer property list if the user didn't provide one */
+ if(H5P_DEFAULT == dxpl_id)
+ dxpl_id= H5P_DATASET_XFER_DEFAULT;
+ else
+ if(TRUE != H5P_isa_class(dxpl_id, H5P_DATASET_XFER))
+ HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not xfer parms")
+
+ /* Get the dataset transfer property list */
+ if(NULL == (plist = (H5P_genplist_t *)H5I_object(dxpl_id)))
+ HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a dataset transfer property list")
+
+ /* Retrieve the 'direct write' flag */
+ if(H5P_get(plist, H5D_XFER_DIRECT_CHUNK_WRITE_FLAG_NAME, &direct_write) < 0)
+ HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "error getting flag for direct chunk write")
- if(H5D__pre_write(dset_id, mem_type_id, mem_space_id, file_space_id, dxpl_id, buf) < 0)
+ /* Check dataspace selections if this is not a direct write */
+ if(!direct_write) {
+ if(mem_space_id < 0 || file_space_id < 0)
+ HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a dataspace")
+
+ if(H5S_ALL != mem_space_id) {
+ if(NULL == (mem_space = (const H5S_t *)H5I_object_verify(mem_space_id, H5I_DATASPACE)))
+ HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a dataspace")
+
+ /* Check for valid selection */
+ if(H5S_SELECT_VALID(mem_space) != TRUE)
+ HGOTO_ERROR(H5E_DATASPACE, H5E_BADRANGE, FAIL, "memory selection+offset not within extent")
+ } /* end if */
+ if(H5S_ALL != file_space_id) {
+ if(NULL == (file_space = (const H5S_t *)H5I_object_verify(file_space_id, H5I_DATASPACE)))
+ HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a dataspace")
+
+ /* Check for valid selection */
+ if(H5S_SELECT_VALID(file_space) != TRUE)
+ HGOTO_ERROR(H5E_DATASPACE, H5E_BADRANGE, FAIL, "file selection+offset not within extent")
+ } /* end if */
+ }
+
+ if(H5D__pre_write(dset, direct_write, mem_type_id, mem_space, file_space, dxpl_id, buf) < 0)
HGOTO_ERROR(H5E_DATASET, H5E_WRITEERROR, FAIL, "can't prepare for writing data")
done:
@@ -242,39 +288,17 @@ done:
*-------------------------------------------------------------------------
*/
static herr_t
-H5D__pre_write(hid_t dset_id, hid_t mem_type_id, hid_t mem_space_id,
- hid_t file_space_id, hid_t dxpl_id, const void *buf)
+H5D__pre_write(H5D_t *dset, hbool_t direct_write, hid_t mem_type_id,
+ const H5S_t *mem_space, const H5S_t *file_space,
+ hid_t dxpl_id, const void *buf)
{
- H5D_t *dset = NULL;
- H5P_genplist_t *plist; /* Property list pointer */
- hbool_t direct_write = FALSE;
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_STATIC
- /* check arguments */
- if(NULL == (dset = (H5D_t *)H5I_object_verify(dset_id, H5I_DATASET)))
- HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a dataset")
- if(NULL == dset->oloc.file)
- HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a file")
-
- /* Get the default dataset transfer property list if the user didn't provide one */
- if(H5P_DEFAULT == dxpl_id)
- dxpl_id= H5P_DATASET_XFER_DEFAULT;
- else
- if(TRUE != H5P_isa_class(dxpl_id, H5P_DATASET_XFER))
- HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not xfer parms")
-
- /* Get the dataset transfer property list */
- if(NULL == (plist = (H5P_genplist_t *)H5I_object(dxpl_id)))
- HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a dataset transfer property list")
-
- /* Retrieve the 'direct write' flag */
- if(H5P_get(plist, H5D_XFER_DIRECT_CHUNK_WRITE_FLAG_NAME, &direct_write) < 0)
- HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "error getting flag for direct chunk write")
-
/* Direct chunk write */
if(direct_write) {
+ H5P_genplist_t *plist; /* Property list pointer */
uint32_t direct_filters;
hsize_t *direct_offset;
uint32_t direct_datasize;
@@ -283,6 +307,10 @@ H5D__pre_write(hid_t dset_id, hid_t mem_type_id, hid_t mem_space_id,
hsize_t internal_offset[H5O_LAYOUT_NDIMS];
int i;
+ /* Get the dataset transfer property list */
+ if(NULL == (plist = (H5P_genplist_t *)H5I_object(dxpl_id)))
+ HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a dataset transfer property list")
+
if(H5D_CHUNKED != dset->shared->layout.type)
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a chunked dataset")
@@ -319,29 +347,6 @@ H5D__pre_write(hid_t dset_id, hid_t mem_type_id, hid_t mem_space_id,
HGOTO_ERROR(H5E_DATASET, H5E_WRITEERROR, FAIL, "can't write chunk directly")
} /* end if */
else { /* Normal write */
- const H5S_t *mem_space = NULL;
- const H5S_t *file_space = NULL;
-
- if(mem_space_id < 0 || file_space_id < 0)
- HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a data space")
-
- if(H5S_ALL != mem_space_id) {
- if(NULL == (mem_space = (const H5S_t *)H5I_object_verify(mem_space_id, H5I_DATASPACE)))
- HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a data space")
-
- /* Check for valid selection */
- if(H5S_SELECT_VALID(mem_space) != TRUE)
- HGOTO_ERROR(H5E_DATASPACE, H5E_BADRANGE, FAIL, "memory selection+offset not within extent")
- } /* end if */
- if(H5S_ALL != file_space_id) {
- if(NULL == (file_space = (const H5S_t *)H5I_object_verify(file_space_id, H5I_DATASPACE)))
- HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a data space")
-
- /* Check for valid selection */
- if(H5S_SELECT_VALID(file_space) != TRUE)
- HGOTO_ERROR(H5E_DATASPACE, H5E_BADRANGE, FAIL, "file selection+offset not within extent")
- } /* end if */
-
/* write raw data */
if(H5D__write(dset, mem_type_id, mem_space, file_space, dxpl_id, buf) < 0)
HGOTO_ERROR(H5E_DATASET, H5E_WRITEERROR, FAIL, "can't write data")
diff --git a/src/H5Dmpio.c b/src/H5Dmpio.c
index c294e42..88c6075 100644
--- a/src/H5Dmpio.c
+++ b/src/H5Dmpio.c
@@ -994,15 +994,15 @@ if(H5DEBUG(D))
} /* end for */
/* Create final MPI derived datatype for the file */
- if(MPI_SUCCESS != (mpi_code = MPI_Type_struct((int)num_chunk, chunk_mpi_file_counts, chunk_disp_array, chunk_ftype, &chunk_final_ftype)))
- HMPI_GOTO_ERROR(FAIL, "MPI_Type_struct failed", mpi_code)
+ if(MPI_SUCCESS != (mpi_code = MPI_Type_create_struct((int)num_chunk, chunk_mpi_file_counts, chunk_disp_array, chunk_ftype, &chunk_final_ftype)))
+ HMPI_GOTO_ERROR(FAIL, "MPI_Type_create_struct failed", mpi_code)
if(MPI_SUCCESS != (mpi_code = MPI_Type_commit(&chunk_final_ftype)))
HMPI_GOTO_ERROR(FAIL, "MPI_Type_commit failed", mpi_code)
chunk_final_ftype_is_derived = TRUE;
/* Create final MPI derived datatype for memory */
- if(MPI_SUCCESS != (mpi_code = MPI_Type_struct((int)num_chunk, chunk_mpi_mem_counts, chunk_mem_disp_array, chunk_mtype, &chunk_final_mtype)))
- HMPI_GOTO_ERROR(FAIL, "MPI_Type_struct failed", mpi_code)
+ if(MPI_SUCCESS != (mpi_code = MPI_Type_create_struct((int)num_chunk, chunk_mpi_mem_counts, chunk_mem_disp_array, chunk_mtype, &chunk_final_mtype)))
+ HMPI_GOTO_ERROR(FAIL, "MPI_Type_create_struct failed", mpi_code)
if(MPI_SUCCESS != (mpi_code = MPI_Type_commit(&chunk_final_mtype)))
HMPI_GOTO_ERROR(FAIL, "MPI_Type_commit failed", mpi_code)
chunk_final_mtype_is_derived = TRUE;
@@ -1308,8 +1308,6 @@ done:
} /* end H5D__multi_chunk_collective_io */
-
-
/*-------------------------------------------------------------------------
* Function: H5D__inter_collective_io
*
diff --git a/src/H5Dprivate.h b/src/H5Dprivate.h
index 9b430ba..d8381e1 100644
--- a/src/H5Dprivate.h
+++ b/src/H5Dprivate.h
@@ -165,6 +165,9 @@ H5_DLL H5G_name_t *H5D_nameof(H5D_t *dataset);
H5_DLL H5T_t *H5D_typeof(const H5D_t *dset);
H5_DLL herr_t H5D_flush(const H5F_t *f, hid_t dxpl_id);
H5_DLL hid_t H5D_get_create_plist(H5D_t *dset);
+H5_DLL hid_t H5D_get_access_plist(H5D_t *dset);
+H5_DLL hid_t H5D_get_space(H5D_t *dset);
+H5_DLL hid_t H5D_get_type(H5D_t *dset);
/* Functions that operate on vlen data */
H5_DLL herr_t H5D_vlen_reclaim(hid_t type_id, H5S_t *space, hid_t plist_id,
diff --git a/src/H5Dpublic.h b/src/H5Dpublic.h
index 4309d64..e7ae3ae 100644
--- a/src/H5Dpublic.h
+++ b/src/H5Dpublic.h
@@ -30,9 +30,9 @@
/*****************/
/* Macros used to "unset" chunk cache configuration parameters */
-#define H5D_CHUNK_CACHE_NSLOTS_DEFAULT ((size_t) -1)
+#define H5D_CHUNK_CACHE_NSLOTS_DEFAULT ((size_t) -1)
#define H5D_CHUNK_CACHE_NBYTES_DEFAULT ((size_t) -1)
-#define H5D_CHUNK_CACHE_W0_DEFAULT -1.
+#define H5D_CHUNK_CACHE_W0_DEFAULT (-1.0f)
/* Property names for H5LTDdirect_chunk_write */
#define H5D_XFER_DIRECT_CHUNK_WRITE_FLAG_NAME "direct_chunk_flag"
diff --git a/src/H5E.c b/src/H5E.c
index 039c260..3fe2a83 100644
--- a/src/H5E.c
+++ b/src/H5E.c
@@ -122,7 +122,7 @@ H5FL_DEFINE_STATIC(H5E_msg_t);
/* Error class ID class */
static const H5I_class_t H5I_ERRCLS_CLS[1] = {{
H5I_ERROR_CLASS, /* ID class value */
- 0, /* Class flags */
+ H5I_CLASS_REUSE_IDS, /* Class flags */
0, /* # of reserved IDs for class */
(H5I_free_t)H5E_unregister_class /* Callback routine for closing objects of this class */
}};
@@ -130,7 +130,7 @@ static const H5I_class_t H5I_ERRCLS_CLS[1] = {{
/* Error message ID class */
static const H5I_class_t H5I_ERRMSG_CLS[1] = {{
H5I_ERROR_MSG, /* ID class value */
- 0, /* Class flags */
+ H5I_CLASS_REUSE_IDS, /* Class flags */
0, /* # of reserved IDs for class */
(H5I_free_t)H5E_close_msg /* Callback routine for closing objects of this class */
}};
@@ -138,14 +138,13 @@ static const H5I_class_t H5I_ERRMSG_CLS[1] = {{
/* Error stack ID class */
static const H5I_class_t H5I_ERRSTK_CLS[1] = {{
H5I_ERROR_STACK, /* ID class value */
- 0, /* Class flags */
+ H5I_CLASS_REUSE_IDS, /* Class flags */
0, /* # of reserved IDs for class */
(H5I_free_t)H5E_close_stack /* Callback routine for closing objects of this class */
}};
-
-
+
/*-------------------------------------------------------------------------
* Function: H5E_init
*
@@ -172,8 +171,7 @@ done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5E_init() */
-
-
+
/*--------------------------------------------------------------------------
* Function: H5E_set_default_auto
*
@@ -211,8 +209,7 @@ H5E_set_default_auto(H5E_t *stk)
FUNC_LEAVE_NOAPI(SUCCEED)
} /* end H5E_set_default_auto() */
-
-
+
/*--------------------------------------------------------------------------
* Function: H5E_init_interface
*
@@ -267,8 +264,7 @@ done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5E_init_interface() */
-
-
+
/*-------------------------------------------------------------------------
* Function: H5E_term_interface
*
@@ -299,15 +295,14 @@ H5E_term_interface(void)
nmsg = H5I_nmembers(H5I_ERROR_MSG);
nstk = H5I_nmembers(H5I_ERROR_STACK);
- n = ncls + nmsg + nstk;
- if(n > 0) {
+ if((ncls + nmsg + nstk) > 0) {
/* Clear any outstanding error stacks */
if(nstk > 0)
- H5I_clear_type(H5I_ERROR_STACK, FALSE, FALSE);
+ (void)H5I_clear_type(H5I_ERROR_STACK, FALSE, FALSE);
/* Clear all the error classes */
if(ncls > 0) {
- H5I_clear_type(H5I_ERROR_CLASS, FALSE, FALSE);
+ (void)H5I_clear_type(H5I_ERROR_CLASS, FALSE, FALSE);
/* Reset the HDF5 error class, if its been closed */
if(H5I_nmembers(H5I_ERROR_CLASS) == 0)
@@ -316,7 +311,7 @@ H5E_term_interface(void)
/* Clear all the error messages */
if(nmsg > 0) {
- H5I_clear_type(H5I_ERROR_MSG, FALSE, FALSE);
+ (void)H5I_clear_type(H5I_ERROR_MSG, FALSE, FALSE);
/* Reset the HDF5 error messages, if they've been closed */
if(H5I_nmembers(H5I_ERROR_MSG) == 0) {
@@ -324,27 +319,28 @@ H5E_term_interface(void)
#include "H5Eterm.h"
} /* end if */
} /* end if */
+
+ n++; /*H5I*/
} /* end if */
else {
/* Close deprecated interface */
n += H5E__term_deprec_interface();
/* Destroy the error class, message, and stack id groups */
- H5I_dec_type_ref(H5I_ERROR_STACK);
- H5I_dec_type_ref(H5I_ERROR_CLASS);
- H5I_dec_type_ref(H5I_ERROR_MSG);
+ (void)H5I_dec_type_ref(H5I_ERROR_STACK);
+ (void)H5I_dec_type_ref(H5I_ERROR_CLASS);
+ (void)H5I_dec_type_ref(H5I_ERROR_MSG);
+ n++; /*H5I*/
/* Mark closed */
H5_interface_initialize_g = 0;
- n = 1; /*H5I*/
} /* end else */
} /* end if */
FUNC_LEAVE_NOAPI(n)
} /* end H5E_term_interface() */
-
-
+
#ifdef H5_HAVE_THREADSAFE
/*-------------------------------------------------------------------------
* Function: H5E_get_stack
@@ -395,8 +391,7 @@ H5E_get_stack(void)
} /* end H5E_get_stack() */
#endif /* H5_HAVE_THREADSAFE */
-
-
+
/*-------------------------------------------------------------------------
* Function: H5E_free_class
*
@@ -426,8 +421,7 @@ H5E_free_class(H5E_cls_t *cls)
FUNC_LEAVE_NOAPI(SUCCEED)
} /* end H5E_free_class() */
-
-
+
/*-------------------------------------------------------------------------
* Function: H5Eregister_class
*
@@ -465,8 +459,7 @@ done:
FUNC_LEAVE_API(ret_value)
} /* end H5Eregister_class() */
-
-
+
/*-------------------------------------------------------------------------
* Function: H5E_register_class
*
@@ -515,8 +508,7 @@ done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5E_register_class() */
-
-
+
/*-------------------------------------------------------------------------
* Function: H5Eunregister_class
*
@@ -552,8 +544,7 @@ done:
FUNC_LEAVE_API(ret_value)
} /* end H5Eunregister_class() */
-
-
+
/*-------------------------------------------------------------------------
* Function: H5E_unregister_class
*
@@ -588,8 +579,7 @@ done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5E_unregister_class() */
-
-
+
/*-------------------------------------------------------------------------
* Function: H5Eget_class_name
*
@@ -624,8 +614,7 @@ done:
FUNC_LEAVE_API(ret_value)
} /* end H5Eget_class_name() */
-
-
+
/*-------------------------------------------------------------------------
* Function: H5E_get_class_name
*
@@ -663,8 +652,7 @@ H5E_get_class_name(const H5E_cls_t *cls, char *name, size_t size)
FUNC_LEAVE_NOAPI(len)
} /* end H5E_get_class_name() */
-
-
+
/*-------------------------------------------------------------------------
* Function: H5E_close_msg_cb
*
@@ -702,8 +690,7 @@ done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5E_close_msg_cb() */
-
-
+
/*-------------------------------------------------------------------------
* Function: H5Eclose_msg
*
@@ -736,8 +723,7 @@ done:
FUNC_LEAVE_API(ret_value)
} /* end H5Eclose_msg() */
-
-
+
/*-------------------------------------------------------------------------
* Function: H5E_close_msg
*
@@ -766,8 +752,7 @@ H5E_close_msg(H5E_msg_t *err)
FUNC_LEAVE_NOAPI(SUCCEED)
} /* end H5E_close_msg() */
-
-
+
/*-------------------------------------------------------------------------
* Function: H5Ecreate_msg
*
@@ -858,8 +843,7 @@ done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5E_create_msg() */
-
-
+
/*-------------------------------------------------------------------------
* Function: H5Eget_msg
*
@@ -894,8 +878,7 @@ done:
FUNC_LEAVE_API(ret_value)
} /* end H5Eget_msg() */
-
-
+
/*-------------------------------------------------------------------------
* Function: H5Ecreate_stack
*
@@ -932,8 +915,7 @@ done:
FUNC_LEAVE_API(ret_value)
} /* end H5Ecreate_stack() */
-
-
+
/*-------------------------------------------------------------------------
* Function: H5Eget_current_stack
*
@@ -969,8 +951,7 @@ done:
FUNC_LEAVE_API(ret_value)
} /* end H5Eget_current_stack() */
-
-
+
/*-------------------------------------------------------------------------
* Function: H5E_get_current_stack
*
@@ -1047,8 +1028,7 @@ done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5E_get_current_stack() */
-
-
+
/*-------------------------------------------------------------------------
* Function: H5Eset_current_stack
*
@@ -1096,8 +1076,7 @@ done:
FUNC_LEAVE_API(ret_value)
} /* end H5Eset_current_stack() */
-
-
+
/*-------------------------------------------------------------------------
* Function: H5E_set_current_stack
*
@@ -1161,8 +1140,7 @@ done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5E_set_current_stack() */
-
-
+
/*-------------------------------------------------------------------------
* Function: H5Eclose_stack
*
@@ -1200,8 +1178,7 @@ done:
FUNC_LEAVE_API(ret_value)
} /* end H5Eclose_stack() */
-
-
+
/*-------------------------------------------------------------------------
* Function: H5E_close_stack
*
@@ -1231,8 +1208,7 @@ H5E_close_stack(H5E_t *estack)
FUNC_LEAVE_NOAPI(SUCCEED)
} /* end H5E_close_stack() */
-
-
+
/*-------------------------------------------------------------------------
* Function: H5Eget_num
*
@@ -1277,8 +1253,7 @@ done:
FUNC_LEAVE_API(ret_value)
} /* end H5Eget_num() */
-
-
+
/*-------------------------------------------------------------------------
* Function: H5E_get_num
*
@@ -1301,8 +1276,7 @@ H5E_get_num(const H5E_t *estack)
FUNC_LEAVE_NOAPI((ssize_t)estack->nused)
} /* end H5E_get_num() */
-
-
+
/*-------------------------------------------------------------------------
* Function: H5Epop
*
@@ -1351,8 +1325,7 @@ done:
FUNC_LEAVE_API(ret_value)
} /* end H5Epop() */
-
-
+
/*-------------------------------------------------------------------------
* Function: H5Epush2
*
@@ -1466,8 +1439,7 @@ done:
FUNC_LEAVE_API(ret_value)
} /* end H5Epush2() */
-
-
+
/*-------------------------------------------------------------------------
* Function: H5Eclear2
*
@@ -1509,8 +1481,7 @@ done:
FUNC_LEAVE_API(ret_value)
} /* end H5Eclear2() */
-
-
+
/*-------------------------------------------------------------------------
* Function: H5Eprint2
*
@@ -1557,8 +1528,7 @@ done:
FUNC_LEAVE_API(ret_value)
} /* end H5Eprint2() */
-
-
+
/*-------------------------------------------------------------------------
* Function: H5Ewalk2
*
@@ -1606,8 +1576,7 @@ done:
FUNC_LEAVE_API(ret_value)
} /* end H5Ewalk2() */
-
-
+
/*-------------------------------------------------------------------------
* Function: H5Eget_auto2
*
@@ -1663,8 +1632,7 @@ done:
FUNC_LEAVE_API(ret_value)
} /* end H5Eget_auto2() */
-
-
+
/*-------------------------------------------------------------------------
* Function: H5Eset_auto2
*
@@ -1733,8 +1701,7 @@ done:
FUNC_LEAVE_API(ret_value)
} /* end H5Eset_auto2() */
-
-
+
/*-------------------------------------------------------------------------
* Function: H5Eauto_is_v2
*
diff --git a/src/H5Epublic.h b/src/H5Epublic.h
index 932b857..17a35d9 100644
--- a/src/H5Epublic.h
+++ b/src/H5Epublic.h
@@ -26,7 +26,7 @@
#include "H5Ipublic.h"
/* Value for the default error stack */
-#define H5E_DEFAULT 0
+#define H5E_DEFAULT (hid_t)0
/* Different kinds of error information */
typedef enum H5E_type_t {
diff --git a/src/H5F.c b/src/H5F.c
index 2413c73..bd7e5ef 100644
--- a/src/H5F.c
+++ b/src/H5F.c
@@ -20,7 +20,7 @@
#define H5F_PACKAGE /*suppress error about including H5Fpkg */
/* Interface initialization */
-#define H5_INTERFACE_INIT_FUNC H5F_init_interface
+#define H5_INTERFACE_INIT_FUNC H5F__init_pub_interface
/***********/
@@ -41,19 +41,6 @@
#include "H5SMprivate.h" /* Shared Object Header Messages */
#include "H5Tprivate.h" /* Datatypes */
-/* Predefined file drivers */
-#include "H5FDcore.h" /*temporary in-memory files */
-#include "H5FDfamily.h" /*family of files */
-#include "H5FDlog.h" /* sec2 driver with logging, for debugging */
-#include "H5FDmpi.h" /* MPI-based file drivers */
-#include "H5FDmulti.h" /*multiple files partitioned by mem usage */
-#include "H5FDsec2.h" /*Posix unbuffered I/O */
-#include "H5FDstdio.h" /* Standard C buffered I/O */
-#ifdef H5_HAVE_WINDOWS
-#include "H5FDwindows.h" /* Windows buffered I/O */
-#endif
-#include "H5FDdirect.h" /*Linux direct I/O */
-
/****************/
/* Local Macros */
@@ -64,22 +51,6 @@
/* Local Typedefs */
/******************/
-/* Struct only used by functions H5F_get_objects and H5F_get_objects_cb */
-typedef struct H5F_olist_t {
- H5I_type_t obj_type; /* Type of object to look for */
- hid_t *obj_id_list; /* Pointer to the list of open IDs to return */
- size_t *obj_id_count; /* Number of open IDs */
- struct {
- hbool_t local; /* Set flag for "local" file searches */
- union {
- H5F_file_t *shared; /* Pointer to shared file to look inside */
- const H5F_t *file; /* Pointer to file to look inside */
- } ptr;
- } file_info;
- size_t list_index; /* Current index in open ID array */
- size_t max_nobjs; /* Maximum # of IDs to put into array */
-} H5F_olist_t;
-
/********************/
/* Package Typedefs */
@@ -89,14 +60,7 @@ typedef struct H5F_olist_t {
/********************/
/* Local Prototypes */
/********************/
-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 H5F_t *H5F_new(H5F_file_t *shared, unsigned flags, hid_t fcpl_id,
- hid_t fapl_id, H5FD_t *lf);
-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_dest(H5F_t *f, hid_t dxpl_id, hbool_t flush);
-static herr_t H5F_close(H5F_t *f);
+
/*********************/
@@ -113,11 +77,6 @@ static herr_t H5F_close(H5F_t *f);
/* Local Variables */
/*******************/
-/* Declare a free list to manage the H5F_t struct */
-H5FL_DEFINE(H5F_t);
-
-/* Declare a free list to manage the H5F_file_t struct */
-H5FL_DEFINE(H5F_file_t);
/* File ID class */
static const H5I_class_t H5I_FILE_CLS[1] = {{
@@ -127,6 +86,35 @@ static const H5I_class_t H5I_FILE_CLS[1] = {{
(H5I_free_t)H5F_close /* Callback routine for closing objects of this class */
}};
+
+/*--------------------------------------------------------------------------
+NAME
+ H5F__init_pub_interface -- Initialize interface-specific information
+USAGE
+ herr_t H5F__init_pub_interface()
+RETURNS
+ Non-negative on success/Negative on failure
+DESCRIPTION
+ Initializes any interface-specific data or routines. (Just calls
+ H5F_init() currently).
+
+--------------------------------------------------------------------------*/
+static herr_t
+H5F__init_pub_interface(void)
+{
+ herr_t ret_value = SUCCEED; /* Return value */
+ FUNC_ENTER_STATIC
+
+ /*
+ * 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")
+
+ ret_value = H5F_init();
+done:
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* H5F__init_pub_interface() */
/*-------------------------------------------------------------------------
@@ -156,37 +144,6 @@ done:
/*-------------------------------------------------------------------------
- * Function: H5F_init_interface
- *
- * Purpose: Initialize interface-specific information.
- *
- * Return: Success: non-negative
- * Failure: negative
- *
- * Programmer: Robb Matzke
- * Friday, November 20, 1998
- *
- *-------------------------------------------------------------------------
- */
-static herr_t
-H5F_init_interface(void)
-{
- herr_t ret_value = SUCCEED; /* Return value */
-
- FUNC_ENTER_NOAPI_NOINIT
-
- /*
- * 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)
-} /* end H5F_init_interface() */
-
-
-/*-------------------------------------------------------------------------
* Function: H5F_term_interface
*
* Purpose: Terminate this interface: free all memory and reset global
@@ -212,20 +169,25 @@ H5F_term_interface(void)
FUNC_ENTER_NOAPI_NOINIT_NOERR
if(H5_interface_initialize_g) {
- if((n = H5I_nmembers(H5I_FILE)) != 0) {
- H5I_clear_type(H5I_FILE, FALSE, FALSE);
- } else {
+ 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);
- H5I_dec_type_ref(H5I_FILE);
+ /* Destroy the file object id group */
+ (void)H5I_dec_type_ref(H5I_FILE);
+ n++; /*H5I*/
+
+ /* Mark closed */
H5_interface_initialize_g = 0;
- n = 1; /*H5I*/
} /* end else */
} /* end if */
FUNC_LEAVE_NOAPI(n)
-} /* H5F_term_interface() */
+} /* end H5F_term_interface() */
/*-------------------------------------------------------------------------
@@ -312,109 +274,6 @@ done:
/*-------------------------------------------------------------------------
- * Function: H5F_get_access_plist
- *
- * Purpose: Returns a copy of the file access property list of the
- * specified file.
- *
- * NOTE: Make sure that, if you are going to overwrite
- * information in the copied property list that was
- * previously opened and assigned to the property list, then
- * you must close it before overwriting the values.
- *
- * Return: Success: Object ID for a copy of the file access
- * property list.
- *
- * Failure: FAIL
- *
- * Programmer: Quincey Koziol
- * Wednesday, May 25, 2005
- *
- * Modifications:
- *
- *-------------------------------------------------------------------------
- */
-hid_t
-H5F_get_access_plist(H5F_t *f, hbool_t app_ref)
-{
- H5P_genplist_t *new_plist; /* New property list */
- H5P_genplist_t *old_plist; /* Old property list */
- void *driver_info=NULL;
- unsigned efc_size = 0;
- hid_t ret_value = SUCCEED;
-
- FUNC_ENTER_NOAPI(FAIL)
-
- /* Check args */
- HDassert(f);
-
- /* Make a copy of the default file access property list */
- if(NULL == (old_plist = (H5P_genplist_t *)H5I_object(H5P_LST_FILE_ACCESS_g)))
- HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a property list")
- if((ret_value = H5P_copy_plist(old_plist, app_ref)) < 0)
- HGOTO_ERROR(H5E_INTERNAL, H5E_CANTINIT, FAIL, "can't copy file access property list")
- if(NULL == (new_plist = (H5P_genplist_t *)H5I_object(ret_value)))
- HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a property list")
-
- /* Copy properties of the file access property list */
- if(H5P_set(new_plist, H5F_ACS_META_CACHE_INIT_CONFIG_NAME, &(f->shared->mdc_initCacheCfg)) < 0)
- HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set initial metadata cache resize config.")
- if(H5P_set(new_plist, H5F_ACS_DATA_CACHE_NUM_SLOTS_NAME, &(f->shared->rdcc_nslots)) < 0)
- HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set data cache number of slots")
- if(H5P_set(new_plist, H5F_ACS_DATA_CACHE_BYTE_SIZE_NAME, &(f->shared->rdcc_nbytes)) < 0)
- HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set data cache byte size")
- if(H5P_set(new_plist, H5F_ACS_PREEMPT_READ_CHUNKS_NAME, &(f->shared->rdcc_w0)) < 0)
- HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set preempt read chunks")
- if(H5P_set(new_plist, H5F_ACS_ALIGN_THRHD_NAME, &(f->shared->threshold)) < 0)
- HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set alignment threshold")
- if(H5P_set(new_plist, H5F_ACS_ALIGN_NAME, &(f->shared->alignment)) < 0)
- HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set alignment")
- if(H5P_set(new_plist, H5F_ACS_GARBG_COLCT_REF_NAME, &(f->shared->gc_ref)) < 0)
- HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set garbage collect reference")
- if(H5P_set(new_plist, H5F_ACS_META_BLOCK_SIZE_NAME, &(f->shared->meta_aggr.alloc_size)) < 0)
- HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set metadata cache size")
- if(H5P_set(new_plist, H5F_ACS_SIEVE_BUF_SIZE_NAME, &(f->shared->sieve_buf_size)) < 0)
- HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't sieve buffer size")
- if(H5P_set(new_plist, H5F_ACS_SDATA_BLOCK_SIZE_NAME, &(f->shared->sdata_aggr.alloc_size)) < 0)
- HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set 'small data' cache size")
- if(H5P_set(new_plist, H5F_ACS_LATEST_FORMAT_NAME, &(f->shared->latest_format)) < 0)
- HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set 'latest format' flag")
- if(f->shared->efc)
- efc_size = H5F_efc_max_nfiles(f->shared->efc);
- if(H5P_set(new_plist, H5F_ACS_EFC_SIZE_NAME, &efc_size) < 0)
- HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't set elink file cache size")
-
- /*
- * Since we're resetting the driver ID and info, close them if they
- * exist in this new property list.
- */
- if(H5P_facc_close(ret_value, NULL) < 0)
- HGOTO_ERROR(H5E_PLIST, H5E_CANTFREE, FAIL, "can't free the old driver information")
-
- /* Increment the reference count on the driver ID and insert it into the property list */
- if(H5I_inc_ref(f->shared->lf->driver_id, FALSE) < 0)
- HGOTO_ERROR(H5E_FILE, H5E_CANTINC, FAIL, "unable to increment ref count on VFL driver")
- if(H5P_set(new_plist, H5F_ACS_FILE_DRV_ID_NAME, &(f->shared->lf->driver_id)) < 0)
- HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set file driver ID")
-
- /* Set the driver "info" in the property list */
- driver_info = H5FD_fapl_get(f->shared->lf);
- if(driver_info != NULL && H5P_set(new_plist, H5F_ACS_FILE_DRV_INFO_NAME, &driver_info) < 0)
- HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set file driver info")
-
- /* Set the file close degree appropriately */
- if(f->shared->fc_degree == H5F_CLOSE_DEFAULT && H5P_set(new_plist, H5F_ACS_CLOSE_DEGREE_NAME, &(f->shared->lf->cls->fc_degree)) < 0) {
- HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set file close degree")
- } else if(f->shared->fc_degree != H5F_CLOSE_DEFAULT && H5P_set(new_plist, H5F_ACS_CLOSE_DEGREE_NAME, &(f->shared->fc_degree)) < 0) {
- HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set file close degree")
- }
-
-done:
- FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5F_get_access_plist() */
-
-
-/*-------------------------------------------------------------------------
* Function: H5Fget_obj_count
*
* Purpose: Public function returning the number of opened object IDs
@@ -456,38 +315,6 @@ done:
/*-------------------------------------------------------------------------
- * Function: H5F_get_obj_count
- *
- * Purpose: Private function return the number of opened object IDs
- * (files, datasets, groups, datatypes) in the same file.
- *
- * Return: SUCCEED on success, FAIL on failure.
- *
- * Programmer: Raymond Lu
- * Wednesday, Dec 5, 2001
- *
- *-------------------------------------------------------------------------
- */
-herr_t
-H5F_get_obj_count(const H5F_t *f, unsigned types, hbool_t app_ref, size_t *obj_id_count_ptr)
-{
- herr_t ret_value = SUCCEED;
-
- FUNC_ENTER_NOAPI(FAIL)
-
- /* Sanity check */
- HDassert(obj_id_count_ptr);
-
- /* Perform the query */
- if((ret_value = H5F_get_objects(f, types, 0, NULL, app_ref, obj_id_count_ptr)) < 0)
- HGOTO_ERROR(H5E_INTERNAL, H5E_BADITER, FAIL, "H5F_get_objects failed")
-
-done:
- FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5F_get_obj_count() */
-
-
-/*-------------------------------------------------------------------------
* Function: H5Fget_object_ids
*
* Purpose: Public function to return a list of opened object IDs.
@@ -536,253 +363,6 @@ done:
/*-------------------------------------------------------------------------
- * Function: H5F_get_obj_ids
- *
- * Purpose: Private function to return a list of opened object IDs.
- *
- * Return: Non-negative on success; can't fail.
- *
- * Programmer: Raymond Lu
- * Wednesday, Dec 5, 2001
- *
- *-------------------------------------------------------------------------
- */
-herr_t
-H5F_get_obj_ids(const H5F_t *f, unsigned types, size_t max_objs, hid_t *oid_list, hbool_t app_ref, size_t *obj_id_count_ptr)
-{
- herr_t ret_value = SUCCEED; /* Return value */
-
- FUNC_ENTER_NOAPI(FAIL)
-
- /* Sanity check */
- HDassert(obj_id_count_ptr);
-
- /* Perform the query */
- if((ret_value = H5F_get_objects(f, types, max_objs, oid_list, app_ref, obj_id_count_ptr)) < 0)
- HGOTO_ERROR(H5E_INTERNAL, H5E_BADITER, FAIL, "H5F_get_objects failed")
-
-done:
- FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5F_get_obj_ids() */
-
-
-/*---------------------------------------------------------------------------
- * Function: H5F_get_objects
- *
- * Purpose: This function is called by H5F_get_obj_count or
- * H5F_get_obj_ids to get number of object IDs and/or a
- * list of opened object IDs (in return value).
- * Return: Non-negative on success; Can't fail.
- *
- * Programmer: Raymond Lu
- * Wednesday, Dec 5, 2001
- *
- *---------------------------------------------------------------------------
- */
-static herr_t
-H5F_get_objects(const H5F_t *f, unsigned types, size_t max_nobjs, hid_t *obj_id_list, hbool_t app_ref, size_t *obj_id_count_ptr)
-{
- size_t obj_id_count=0; /* Number of open IDs */
- H5F_olist_t olist; /* Structure to hold search results */
- herr_t ret_value = SUCCEED; /* Return value */
-
- FUNC_ENTER_NOAPI_NOINIT
-
- /* Sanity check */
- HDassert(obj_id_count_ptr);
-
- /* Set up search information */
- olist.obj_id_list = (max_nobjs==0 ? NULL : obj_id_list);
- olist.obj_id_count = &obj_id_count;
- olist.list_index = 0;
- olist.max_nobjs = max_nobjs;
-
- /* Determine if we are searching for local or global objects */
- if(types & H5F_OBJ_LOCAL) {
- olist.file_info.local = TRUE;
- olist.file_info.ptr.file = f;
- } /* end if */
- else {
- olist.file_info.local = FALSE;
- olist.file_info.ptr.shared = f ? f->shared : NULL;
- } /* end else */
-
- /* Iterate through file IDs to count the number, and put their
- * IDs on the object list. */
- if(types & H5F_OBJ_FILE) {
- olist.obj_type = H5I_FILE;
- if(H5I_iterate(H5I_FILE, H5F_get_objects_cb, &olist, app_ref) < 0)
- HGOTO_ERROR(H5E_FILE, H5E_BADITER, FAIL, "iteration failed(1)")
- } /* end if */
-
- /* If the caller just wants to count the number of objects (OLIST.MAX_NOBJS is zero),
- * or the caller wants to get the list of IDs and the list isn't full,
- * search through dataset IDs to count number of datasets, and put their
- * IDs on the object list */
- if(!olist.max_nobjs || (olist.max_nobjs && olist.list_index<olist.max_nobjs)) {
- if (types & H5F_OBJ_DATASET) {
- olist.obj_type = H5I_DATASET;
- if(H5I_iterate(H5I_DATASET, H5F_get_objects_cb, &olist, app_ref) < 0)
- HGOTO_ERROR(H5E_FILE, H5E_BADITER, FAIL, "iteration failed(2)")
- } /* end if */
- }
-
- /* If the caller just wants to count the number of objects (OLIST.MAX_NOBJS is zero),
- * or the caller wants to get the list of IDs and the list isn't full,
- * search through group IDs to count number of groups, and put their
- * IDs on the object list */
- if(!olist.max_nobjs || (olist.max_nobjs && olist.list_index<olist.max_nobjs)) {
- if(types & H5F_OBJ_GROUP) {
- olist.obj_type = H5I_GROUP;
- if(H5I_iterate(H5I_GROUP, H5F_get_objects_cb, &olist, app_ref) < 0)
- HGOTO_ERROR(H5E_FILE, H5E_BADITER, FAIL, "iteration failed(3)")
- } /* end if */
- }
-
- /* If the caller just wants to count the number of objects (OLIST.MAX_NOBJS is zero),
- * or the caller wants to get the list of IDs and the list isn't full,
- * search through datatype IDs to count number of named datatypes, and put their
- * IDs on the object list */
- if(!olist.max_nobjs || (olist.max_nobjs && olist.list_index<olist.max_nobjs)) {
- if(types & H5F_OBJ_DATATYPE) {
- olist.obj_type = H5I_DATATYPE;
- if(H5I_iterate(H5I_DATATYPE, H5F_get_objects_cb, &olist, app_ref) < 0)
- HGOTO_ERROR(H5E_FILE, H5E_BADITER, FAIL, "iteration failed(4)")
- } /* end if */
- }
-
- /* If the caller just wants to count the number of objects (OLIST.MAX_NOBJS is zero),
- * or the caller wants to get the list of IDs and the list isn't full,
- * search through attribute IDs to count number of attributes, and put their
- * IDs on the object list */
- if(!olist.max_nobjs || (olist.max_nobjs && olist.list_index<olist.max_nobjs)) {
- if(types & H5F_OBJ_ATTR) {
- olist.obj_type = H5I_ATTR;
- if(H5I_iterate(H5I_ATTR, H5F_get_objects_cb, &olist, app_ref) < 0)
- HGOTO_ERROR(H5E_FILE, H5E_BADITER, FAIL, "iteration failed(5)")
- } /* end if */
- }
-
- /* Set the number of objects currently open */
- *obj_id_count_ptr = obj_id_count;
-
-done:
- FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5F_get_objects() */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5F_get_objects_cb
- *
- * Purpose: H5F_get_objects' callback function. It verifies if an
- * object is in the file, and either count it or put its ID
- * on the list.
- *
- * Return: H5_ITER_STOP if the array of object IDs is filled up.
- * H5_ITER_CONT otherwise.
- *
- * Programmer: Raymond Lu
- * Wednesday, Dec 5, 2001
- *
- *-------------------------------------------------------------------------
- */
-static int
-H5F_get_objects_cb(void *obj_ptr, hid_t obj_id, void *key)
-{
- H5F_olist_t *olist = (H5F_olist_t *)key; /* Alias for search info */
- int ret_value = H5_ITER_CONT; /* Return value */
- hbool_t add_obj = FALSE;
-
- FUNC_ENTER_NOAPI_NOINIT
-
- HDassert(obj_ptr);
- HDassert(olist);
-
- /* Count file IDs */
- if(olist->obj_type == H5I_FILE) {
- if((olist->file_info.local &&
- (!olist->file_info.ptr.file || (olist->file_info.ptr.file && (H5F_t*)obj_ptr == olist->file_info.ptr.file) ))
- || (!olist->file_info.local &&
- ( !olist->file_info.ptr.shared || (olist->file_info.ptr.shared && ((H5F_t*)obj_ptr)->shared == olist->file_info.ptr.shared) ))) {
- add_obj = TRUE;
- }
- } /* end if */
- else { /* either count opened object IDs or put the IDs on the list */
- H5O_loc_t *oloc; /* Group entry info for object */
-
- switch(olist->obj_type) {
- case H5I_ATTR:
- oloc = H5A_oloc((H5A_t *)obj_ptr);
- break;
-
- case H5I_GROUP:
- oloc = H5G_oloc((H5G_t *)obj_ptr);
- break;
-
- case H5I_DATASET:
- oloc = H5D_oloc((H5D_t *)obj_ptr);
- break;
-
- case H5I_DATATYPE:
- if(H5T_is_named((H5T_t*)obj_ptr)==TRUE)
- oloc = H5T_oloc((H5T_t*)obj_ptr);
- else
- oloc = NULL;
- break;
-
- case H5I_UNINIT:
- case H5I_BADID:
- case H5I_FILE:
- case H5I_DATASPACE:
- case H5I_REFERENCE:
- case H5I_VFL:
- case H5I_GENPROP_CLS:
- case H5I_GENPROP_LST:
- case H5I_ERROR_CLASS:
- case H5I_ERROR_MSG:
- case H5I_ERROR_STACK:
- case H5I_NTYPES:
- default:
- HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, H5_ITER_ERROR, "unknown data object")
- } /* end switch */
-
- if((olist->file_info.local &&
- ( (!olist->file_info.ptr.file && olist->obj_type == H5I_DATATYPE && H5T_is_immutable((H5T_t *)obj_ptr) == FALSE)
- || (!olist->file_info.ptr.file && olist->obj_type != H5I_DATATYPE)
- || (oloc && oloc->file == olist->file_info.ptr.file)))
- || (!olist->file_info.local &&
- ((!olist->file_info.ptr.shared && olist->obj_type == H5I_DATATYPE && H5T_is_immutable((H5T_t *)obj_ptr) == FALSE)
- || (!olist->file_info.ptr.shared && olist->obj_type != H5I_DATATYPE)
- || (oloc && oloc->file && oloc->file->shared == olist->file_info.ptr.shared)))) {
- add_obj = TRUE;
- } /* end if */
- } /* end else */
-
- if(TRUE==add_obj) {
- /* Add the object's ID to the ID list, if appropriate */
- if(olist->obj_id_list) {
- olist->obj_id_list[olist->list_index] = obj_id;
- olist->list_index++;
- } /* end if */
-
- /* Increment the number of open objects */
- if(olist->obj_id_count)
- (*olist->obj_id_count)++;
-
- /* Check if we've filled up the array. Return H5_ITER_STOP only if
- * we have filled up the array. Otherwise return H5_ITER_CONT(RET_VALUE is
- * preset to H5_ITER_CONT) because H5I_iterate needs the return value of
- * H5_ITER_CONT to continue the iteration. */
- if(olist->max_nobjs>0 && olist->list_index>=olist->max_nobjs)
- HGOTO_DONE(H5_ITER_STOP) /* Indicate that the iterator should stop */
- }
-
-done:
- FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5F_get_objects_cb() */
-
-
-/*-------------------------------------------------------------------------
* Function: H5Fget_vfd_handle
*
* Purpose: Returns a pointer to the file handle of the low-level file
@@ -845,8 +425,6 @@ done:
htri_t
H5Fis_hdf5(const char *name)
{
- H5FD_t *file = NULL; /* Low-level file struct */
- haddr_t sig_addr; /* Address of hdf5 file signature */
htri_t ret_value; /* Return value */
FUNC_ENTER_API(FAIL)
@@ -856,679 +434,111 @@ H5Fis_hdf5(const char *name)
if(!name || !*name)
HGOTO_ERROR(H5E_ARGS, H5E_BADRANGE, FAIL, "no file name specified")
- /* Open the file at the virtual file layer */
- if(NULL == (file = H5FD_open(name, H5F_ACC_RDONLY, H5P_FILE_ACCESS_DEFAULT, HADDR_UNDEF)))
- HGOTO_ERROR(H5E_IO, H5E_CANTINIT, FAIL, "unable to open file")
-
- /* The file is an hdf5 file if the hdf5 file signature can be found */
- if(H5F_locate_signature(file, H5AC_ind_dxpl_id, &sig_addr) < 0)
- HGOTO_ERROR(H5E_FILE, H5E_NOTHDF5, FAIL, "unable to locate file signature")
- ret_value = (HADDR_UNDEF != sig_addr);
+ /* call the private is_HDF5 function */
+ if((ret_value = H5F_is_hdf5(name)) < 0)
+ HGOTO_ERROR(H5E_FILE, H5E_NOTHDF5, FAIL, "unable open file")
done:
- /* Close the file */
- if(file)
- if(H5FD_close(file) < 0 && ret_value >= 0)
- HDONE_ERROR(H5E_IO, H5E_CANTCLOSEFILE, FAIL, "unable to close file")
FUNC_LEAVE_API(ret_value)
} /* end H5Fis_hdf5() */
/*-------------------------------------------------------------------------
- * Function: H5F_new
+ * Function: H5Fcreate
+ *
+ * Purpose: This is the primary function for creating HDF5 files . The
+ * flags parameter determines whether an existing file will be
+ * overwritten or not. All newly created files are opened for
+ * both reading and writing. All flags may be combined with the
+ * bit-wise OR operator (`|') to change the behavior of the file
+ * create call.
*
- * Purpose: Creates a new file object and initializes it. The
- * H5Fopen and H5Fcreate functions then fill in various
- * fields. If SHARED is a non-null pointer then the shared info
- * to which it points has the reference count incremented.
- * Otherwise a new, empty shared info struct is created and
- * initialized with the specified file access property list.
+ * The more complex behaviors of a file's creation and access
+ * are controlled through the file-creation and file-access
+ * property lists. The value of H5P_DEFAULT for a template
+ * value indicates that the library should use the default
+ * values for the appropriate template.
*
- * Errors:
+ * See also: H5Fpublic.h for the list of supported flags. H5Ppublic.h for
+ * the list of file creation and file access properties.
*
- * Return: Success: Ptr to a new file struct.
+ * Return: Success: A file ID
*
- * Failure: NULL
+ * Failure: FAIL
*
- * Programmer: Robb Matzke
- * matzke at llnl.gov
- * Jul 18 1997
+ * Programmer: Unknown
*
*-------------------------------------------------------------------------
*/
-static H5F_t *
-H5F_new(H5F_file_t *shared, unsigned flags, hid_t fcpl_id, hid_t fapl_id, H5FD_t *lf)
+hid_t
+H5Fcreate(const char *filename, unsigned flags, hid_t fcpl_id, hid_t fapl_id)
{
- H5F_t *f = NULL, *ret_value;
+ H5F_t *new_file = NULL; /*file struct for new file */
+ hid_t ret_value; /*return value */
+
+ FUNC_ENTER_API(FAIL)
+ H5TRACE4("i", "*sIuii", filename, flags, fcpl_id, fapl_id);
- FUNC_ENTER_NOAPI_NOINIT
+ /* Check/fix arguments */
+ if(!filename || !*filename)
+ HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid file name")
+ /* In this routine, we only accept the following flags:
+ * H5F_ACC_EXCL, H5F_ACC_TRUNC and H5F_ACC_DEBUG
+ */
+ if(flags & ~(H5F_ACC_EXCL | H5F_ACC_TRUNC | H5F_ACC_DEBUG))
+ HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid flags")
+ /* The H5F_ACC_EXCL and H5F_ACC_TRUNC flags are mutually exclusive */
+ if((flags & H5F_ACC_EXCL) && (flags & H5F_ACC_TRUNC))
+ HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "mutually exclusive flags for file creation")
- if(NULL == (f = H5FL_CALLOC(H5F_t)))
- HGOTO_ERROR(H5E_FILE, H5E_NOSPACE, NULL, "can't allocate top file structure")
- f->file_id = -1;
+ /* Check file creation property list */
+ if(H5P_DEFAULT == fcpl_id)
+ fcpl_id = H5P_FILE_CREATE_DEFAULT;
+ else
+ if(TRUE != H5P_isa_class(fcpl_id, H5P_FILE_CREATE))
+ HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not file create property list")
- if(shared) {
- HDassert(lf == NULL);
- f->shared = shared;
- } /* end if */
- else {
- H5P_genplist_t *plist; /* Property list */
- unsigned efc_size; /* External file cache size */
- size_t u; /* Local index variable */
-
- HDassert(lf != NULL);
- if(NULL == (f->shared = H5FL_CALLOC(H5F_file_t)))
- HGOTO_ERROR(H5E_FILE, H5E_NOSPACE, NULL, "can't allocate shared file structure")
-
- f->shared->flags = flags;
- f->shared->sohm_addr = HADDR_UNDEF;
- f->shared->sohm_vers = HDF5_SHAREDHEADER_VERSION;
- for(u = 0; u < NELMTS(f->shared->fs_addr); u++)
- f->shared->fs_addr[u] = HADDR_UNDEF;
- f->shared->accum.loc = HADDR_UNDEF;
- f->shared->lf = lf;
-
- /*
- * Copy the file creation and file access property lists into the
- * new file handle. We do this early because some values might need
- * to change as the file is being opened.
- */
- if(NULL == (plist = (H5P_genplist_t *)H5I_object(fcpl_id)))
- HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "not property list")
- f->shared->fcpl_id = H5P_copy_plist(plist, FALSE);
-
- /* Get the FCPL values to cache */
- if(H5P_get(plist, H5F_CRT_ADDR_BYTE_NUM_NAME, &f->shared->sizeof_addr) < 0)
- HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, NULL, "can't get byte number for address")
- if(H5P_get(plist, H5F_CRT_OBJ_BYTE_NUM_NAME, &f->shared->sizeof_size) < 0)
- HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, NULL, "can't get byte number for object size")
- if(H5P_get(plist, H5F_CRT_SHMSG_NINDEXES_NAME, &f->shared->sohm_nindexes) < 0)
- HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, NULL, "can't get number of SOHM indexes")
- HDassert(f->shared->sohm_nindexes < 255);
-
- /* Get the FAPL values to cache */
- if(NULL == (plist = (H5P_genplist_t *)H5I_object(fapl_id)))
- HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "not file access property list")
- if(H5P_get(plist, H5F_ACS_META_CACHE_INIT_CONFIG_NAME, &(f->shared->mdc_initCacheCfg)) < 0)
- HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, NULL, "can't get initial metadata cache resize config")
- if(H5P_get(plist, H5F_ACS_DATA_CACHE_NUM_SLOTS_NAME, &(f->shared->rdcc_nslots)) < 0)
- HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, NULL, "can't get data cache number of slots")
- if(H5P_get(plist, H5F_ACS_DATA_CACHE_BYTE_SIZE_NAME, &(f->shared->rdcc_nbytes)) < 0)
- HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, NULL, "can't get data cache byte size")
- if(H5P_get(plist, H5F_ACS_PREEMPT_READ_CHUNKS_NAME, &(f->shared->rdcc_w0)) < 0)
- HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, NULL, "can't get preempt read chunk")
- if(H5P_get(plist, H5F_ACS_ALIGN_THRHD_NAME, &(f->shared->threshold)) < 0)
- HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, NULL, "can't get alignment threshold")
- if(H5P_get(plist, H5F_ACS_ALIGN_NAME, &(f->shared->alignment)) < 0)
- HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, NULL, "can't get alignment")
- if(H5P_get(plist, H5F_ACS_GARBG_COLCT_REF_NAME,&(f->shared->gc_ref)) < 0)
- HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, NULL, "can't get garbage collect reference")
- if(H5P_get(plist, H5F_ACS_SIEVE_BUF_SIZE_NAME, &(f->shared->sieve_buf_size)) < 0)
- HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, NULL, "can't get sieve buffer size")
- if(H5P_get(plist, H5F_ACS_LATEST_FORMAT_NAME, &(f->shared->latest_format)) < 0)
- HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, NULL, "can't get 'latest format' flag")
- if(H5P_get(plist, H5F_ACS_META_BLOCK_SIZE_NAME, &(f->shared->meta_aggr.alloc_size)) < 0)
- HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, NULL, "can't get metadata cache size")
- f->shared->meta_aggr.feature_flag = H5FD_FEAT_AGGREGATE_METADATA;
- if(H5P_get(plist, H5F_ACS_SDATA_BLOCK_SIZE_NAME, &(f->shared->sdata_aggr.alloc_size)) < 0)
- HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, NULL, "can't get 'small data' cache size")
- f->shared->sdata_aggr.feature_flag = H5FD_FEAT_AGGREGATE_SMALLDATA;
- if(H5P_get(plist, H5F_ACS_EFC_SIZE_NAME, &efc_size) < 0)
- HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, NULL, "can't get elink file cache size")
- if(efc_size > 0)
- if(NULL == (f->shared->efc = H5F_efc_create(efc_size)))
- HGOTO_ERROR(H5E_FILE, H5E_CANTINIT, NULL, "can't create external file cache")
-
- /* Get the VFD values to cache */
- f->shared->maxaddr = H5FD_get_maxaddr(lf);
- if(!H5F_addr_defined(f->shared->maxaddr))
- HGOTO_ERROR(H5E_FILE, H5E_BADVALUE, NULL, "bad maximum address from VFD")
- if(H5FD_get_feature_flags(lf, &f->shared->feature_flags) < 0)
- HGOTO_ERROR(H5E_FILE, H5E_CANTGET, NULL, "can't get feature flags from VFD")
- if(H5FD_get_fs_type_map(lf, f->shared->fs_type_map) < 0)
- HGOTO_ERROR(H5E_FILE, H5E_CANTGET, NULL, "can't get free space type mapping from VFD")
- if(H5MF_init_merge_flags(f) < 0)
- HGOTO_ERROR(H5E_FILE, H5E_CANTINIT, NULL, "problem initializing free space merge flags")
- f->shared->tmp_addr = f->shared->maxaddr;
- /* Disable temp. space allocation for parallel I/O (for now) */
- /* (When we've arranged to have the relocated metadata addresses (and
- * sizes) broadcast during the "end of epoch" metadata operations,
- * this can be enabled - QAK)
- */
- /* (This should be disabled when the metadata journaling branch is
- * merged into the trunk and journaling is enabled, at least until
- * we make it work. - QAK)
- */
- f->shared->use_tmp_space = !(IS_H5FD_MPI(f));
-
- /*
- * Create a metadata cache with the specified number of elements.
- * The cache might be created with a different number of elements and
- * the access property list should be updated to reflect that.
- */
- if(H5AC_create(f, &(f->shared->mdc_initCacheCfg)) < 0)
- HGOTO_ERROR(H5E_FILE, H5E_CANTINIT, NULL, "unable to create metadata cache")
-
- /* Create the file's "open object" information */
- if(H5FO_create(f) < 0)
- HGOTO_ERROR(H5E_FILE, H5E_CANTINIT, NULL, "unable to create open object data structure")
-
- /* Add new "shared" struct to list of open files */
- if(H5F_sfile_add(f->shared) < 0)
- HGOTO_ERROR(H5E_FILE, H5E_CANTINIT, NULL, "unable to append to list of open files")
- } /* end else */
+ /* Check the file access property list */
+ if(H5P_DEFAULT == fapl_id)
+ fapl_id = H5P_FILE_ACCESS_DEFAULT;
+ else
+ if(TRUE != H5P_isa_class(fapl_id, H5P_FILE_ACCESS))
+ HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not file access property list")
- f->shared->nrefs++;
+ /*
+ * Adjust bit flags by turning on the creation bit and making sure that
+ * the EXCL or TRUNC bit is set. All newly-created files are opened for
+ * reading and writing.
+ */
+ if (0==(flags & (H5F_ACC_EXCL|H5F_ACC_TRUNC)))
+ flags |= H5F_ACC_EXCL; /*default*/
+ flags |= H5F_ACC_RDWR | H5F_ACC_CREAT;
- /* Create the file's "top open object" information */
- if(H5FO_top_create(f) < 0)
- HGOTO_ERROR(H5E_FILE, H5E_CANTINIT, NULL, "unable to create open object data structure")
+ /*
+ * Create a new file or truncate an existing file.
+ */
+ if(NULL == (new_file = H5F_open(filename, flags, fcpl_id, fapl_id, H5AC_dxpl_id)))
+ HGOTO_ERROR(H5E_FILE, H5E_CANTOPENFILE, FAIL, "unable to create file")
- /* Set return value */
- ret_value = f;
+ /* Get an atom for the file */
+ if((ret_value = H5I_register(H5I_FILE, new_file, TRUE)) < 0)
+ HGOTO_ERROR(H5E_ATOM, H5E_CANTREGISTER, FAIL, "unable to atomize file")
+
+ /* Keep this ID in file object structure */
+ new_file->file_id = ret_value;
done:
- if(!ret_value && f) {
- if(!shared) {
- /* Attempt to clean up some of the shared file structures */
- if(f->shared->efc)
- if(H5F_efc_destroy(f->shared->efc) < 0)
- HDONE_ERROR(H5E_FILE, H5E_CANTRELEASE, NULL, "can't destroy external file cache")
- if(f->shared->fcpl_id > 0)
- if(H5I_dec_ref(f->shared->fcpl_id) < 0)
- HDONE_ERROR(H5E_FILE, H5E_CANTDEC, NULL, "can't close property list")
-
- f->shared = H5FL_FREE(H5F_file_t, f->shared);
- } /* end if */
- f = H5FL_FREE(H5F_t, f);
- } /* end if */
+ if(ret_value < 0 && new_file)
+ if(H5F_close(new_file) < 0)
+ HDONE_ERROR(H5E_FILE, H5E_CANTCLOSEFILE, FAIL, "problems closing file")
- FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5F_new() */
+ FUNC_LEAVE_API(ret_value)
+} /* end H5Fcreate() */
/*-------------------------------------------------------------------------
- * Function: H5F_dest
- *
- * Purpose: Destroys a file structure. This function flushes the cache
- * but doesn't do any other cleanup other than freeing memory
- * for the file struct. The shared info for the file is freed
- * only when its reference count reaches zero.
- *
- * Return: Non-negative on success/Negative on failure
- *
- * Programmer: Robb Matzke
- * matzke at llnl.gov
- * Jul 18 1997
- *
- *-------------------------------------------------------------------------
- */
-static herr_t
-H5F_dest(H5F_t *f, hid_t dxpl_id, hbool_t flush)
-{
- herr_t ret_value = SUCCEED; /* Return value */
-
- FUNC_ENTER_NOAPI_NOINIT
-
- /* Sanity check */
- HDassert(f);
- HDassert(f->shared);
-
- if(1 == f->shared->nrefs) {
- /* Flush at this point since the file will be closed.
- * Only try to flush the file if it was opened with write access, and if
- * the caller requested a flush.
- */
- if((f->shared->flags & H5F_ACC_RDWR) && flush)
- if(H5F_flush(f, dxpl_id, TRUE) < 0)
- HDONE_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "unable to flush cache")
-
- /* Release the external file cache */
- if(f->shared->efc) {
- if(H5F_efc_destroy(f->shared->efc) < 0)
- HDONE_ERROR(H5E_FILE, H5E_CANTRELEASE, FAIL, "can't destroy external file cache")
- f->shared->efc = NULL;
- } /* end if */
-
- /* Release objects that depend on the superblock being initialized */
- if(f->shared->sblock) {
- /* Shutdown file free space manager(s) */
- /* (We should release the free space information now (before truncating
- * the file and before the metadata cache is shut down) since the
- * free space manager is holding some data structures in memory
- * and also because releasing free space can shrink the file's
- * 'eoa' value)
- */
- if(H5MF_close(f, dxpl_id) < 0)
- /* Push error, but keep going*/
- HDONE_ERROR(H5E_FILE, H5E_CANTRELEASE, FAIL, "can't release file free space info")
-
- /* Unpin the superblock, since we're about to destroy the cache */
- if(H5AC_unpin_entry(f->shared->sblock) < 0)
- /* Push error, but keep going*/
- HDONE_ERROR(H5E_FSPACE, H5E_CANTUNPIN, FAIL, "unable to unpin superblock")
- f->shared->sblock = NULL;
- } /* end if */
-
- /* Remove shared file struct from list of open files */
- if(H5F_sfile_remove(f->shared) < 0)
- /* Push error, but keep going*/
- HDONE_ERROR(H5E_FILE, H5E_CANTRELEASE, FAIL, "problems closing file")
-
- /* Shutdown the metadata cache */
- if(H5AC_dest(f, dxpl_id))
- /* Push error, but keep going*/
- HDONE_ERROR(H5E_FILE, H5E_CANTRELEASE, FAIL, "problems closing file")
-
- /*
- * Do not close the root group since we didn't count it, but free
- * the memory associated with it.
- */
- if(f->shared->root_grp) {
- /* Free the root group */
- if(H5G_root_free(f->shared->root_grp) < 0)
- /* Push error, but keep going*/
- HDONE_ERROR(H5E_FILE, H5E_CANTRELEASE, FAIL, "problems closing file")
- f->shared->root_grp = NULL;
- } /* end if */
-
- /* Destroy other components of the file */
- if(H5F_accum_reset(f, dxpl_id, TRUE) < 0)
- /* Push error, but keep going*/
- HDONE_ERROR(H5E_FILE, H5E_CANTRELEASE, FAIL, "problems closing file")
- if(H5FO_dest(f) < 0)
- /* Push error, but keep going*/
- HDONE_ERROR(H5E_FILE, H5E_CANTRELEASE, FAIL, "problems closing file")
- f->shared->cwfs = (struct H5HG_heap_t **)H5MM_xfree(f->shared->cwfs);
- if(H5G_node_close(f) < 0)
- /* Push error, but keep going*/
- HDONE_ERROR(H5E_FILE, H5E_CANTRELEASE, FAIL, "problems closing file")
-
- /* Destroy file creation properties */
- if(H5I_GENPROP_LST != H5I_get_type(f->shared->fcpl_id))
- /* Push error, but keep going*/
- HDONE_ERROR(H5E_FILE, H5E_BADTYPE, FAIL, "not a property list")
- if(H5I_dec_ref(f->shared->fcpl_id) < 0)
- /* Push error, but keep going*/
- HDONE_ERROR(H5E_FILE, H5E_CANTDEC, FAIL, "can't close property list")
-
- /* Only truncate the file on an orderly close, with write-access */
- if(f->closing && (H5F_ACC_RDWR & H5F_INTENT(f))) {
- /* Truncate the file to the current allocated size */
- if(H5FD_truncate(f->shared->lf, dxpl_id, (unsigned)TRUE) < 0)
- /* Push error, but keep going*/
- HDONE_ERROR(H5E_FILE, H5E_WRITEERROR, FAIL, "low level truncate failed")
- } /* end if */
-
- /* Close the file */
- if(H5FD_close(f->shared->lf) < 0)
- /* Push error, but keep going*/
- HDONE_ERROR(H5E_FILE, H5E_CANTCLOSEFILE, FAIL, "unable to close file")
-
- /* Free mount table */
- f->shared->mtab.child = (H5F_mount_t *)H5MM_xfree(f->shared->mtab.child);
- f->shared->mtab.nalloc = 0;
-
- /* Destroy shared file struct */
- f->shared = (H5F_file_t *)H5FL_FREE(H5F_file_t, f->shared);
-
- } else if(f->shared->nrefs > 0) {
- /*
- * There are other references to the shared part of the file.
- * Only decrement the reference count.
- */
- --f->shared->nrefs;
- }
-
- /* Free the non-shared part of the file */
- f->open_name = (char *)H5MM_xfree(f->open_name);
- f->actual_name = (char *)H5MM_xfree(f->actual_name);
- f->extpath = (char *)H5MM_xfree(f->extpath);
- if(H5FO_top_dest(f) < 0)
- HDONE_ERROR(H5E_FILE, H5E_CANTINIT, FAIL, "problems closing file")
- f->shared = NULL;
- f = H5FL_FREE(H5F_t, f);
-
- FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5F_dest() */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5F_open
- *
- * Purpose: Opens (or creates) a file. This function understands the
- * following flags which are similar in nature to the Posix
- * open(2) flags.
- *
- * H5F_ACC_RDWR: Open with read/write access. If the file is
- * currently open for read-only access then it
- * will be reopened. Absence of this flag
- * implies read-only access.
- *
- * H5F_ACC_CREAT: Create a new file if it doesn't exist yet.
- * The permissions are 0666 bit-wise AND with
- * the current umask. H5F_ACC_WRITE must also
- * be specified.
- *
- * H5F_ACC_EXCL: This flag causes H5F_open() to fail if the
- * file already exists.
- *
- * H5F_ACC_TRUNC: The file is truncated and a new HDF5 superblock
- * is written. This operation will fail if the
- * file is already open.
- *
- * Unlinking the file name from the group directed graph while
- * the file is opened causes the file to continue to exist but
- * one will not be able to upgrade the file from read-only
- * access to read-write access by reopening it. Disk resources
- * for the file are released when all handles to the file are
- * closed. NOTE: This paragraph probably only applies to Unix;
- * deleting the file name in other OS's has undefined results.
- *
- * The CREATE_PARMS argument is optional. A null pointer will
- * cause the default file creation parameters to be used.
- *
- * The ACCESS_PARMS argument is optional. A null pointer will
- * cause the default file access parameters to be used.
- *
- * Return: Success: A new file pointer.
- * Failure: NULL
- *
- * Programmer: Robb Matzke
- * Tuesday, September 23, 1997
- *
- *-------------------------------------------------------------------------
- */
-H5F_t *
-H5F_open(const char *name, unsigned flags, hid_t fcpl_id, hid_t fapl_id,
- hid_t dxpl_id)
-{
- H5F_t *file = NULL; /*the success return value */
- H5F_file_t *shared = NULL; /*shared part of `file' */
- H5FD_t *lf = NULL; /*file driver part of `shared' */
- unsigned tent_flags; /*tentative flags */
- H5FD_class_t *drvr; /*file driver class info */
- H5P_genplist_t *a_plist; /*file access property list */
- H5F_close_degree_t fc_degree; /*file close degree */
- H5F_t *ret_value; /*actual return value */
-
- FUNC_ENTER_NOAPI(NULL)
-
- /*
- * If the driver has a `cmp' method then the driver is capable of
- * determining when two file handles refer to the same file and the
- * library can insure that when the application opens a file twice
- * that the two handles coordinate their operations appropriately.
- * Otherwise it is the application's responsibility to never open the
- * same file more than once at a time.
- */
- if(NULL == (drvr = H5FD_get_class(fapl_id)))
- HGOTO_ERROR(H5E_FILE, H5E_CANTGET, NULL, "unable to retrieve VFL class")
-
- /*
- * Opening a file is a two step process. First we try to open the
- * file in a way which doesn't affect its state (like not truncating
- * or creating it) so we can compare it with files that are already
- * open. If that fails then we try again with the full set of flags
- * (only if they're different than the original failed attempt).
- * However, if the file driver can't distinquish between files then
- * there's no reason to open the file tentatively because it's the
- * application's responsibility to prevent this situation (there's no
- * way for us to detect it here anyway).
- */
- if(drvr->cmp)
- tent_flags = flags & ~(H5F_ACC_CREAT|H5F_ACC_TRUNC|H5F_ACC_EXCL);
- else
- tent_flags = flags;
-
- if(NULL == (lf = H5FD_open(name, tent_flags, fapl_id, HADDR_UNDEF))) {
- if(tent_flags == flags) {
-#ifndef H5_USING_MEMCHECKER
- time_t mytime = HDtime(NULL);
-
- HGOTO_ERROR(H5E_FILE, H5E_CANTOPENFILE, NULL, "unable to open file: time = %s, name = '%s', tent_flags = %x", HDctime(&mytime), name, tent_flags)
-#else /* H5_USING_MEMCHECKER */
- HGOTO_ERROR(H5E_FILE, H5E_CANTOPENFILE, NULL, "unable to open file: name = '%s', tent_flags = %x", name, tent_flags)
-#endif /* H5_USING_MEMCHECKER */
- } /* end if */
- H5E_clear_stack(NULL);
- tent_flags = flags;
- if(NULL == (lf = H5FD_open(name, tent_flags, fapl_id, HADDR_UNDEF))) {
-#ifndef H5_USING_MEMCHECKER
- time_t mytime = HDtime(NULL);
-
- HGOTO_ERROR(H5E_FILE, H5E_CANTOPENFILE, NULL, "unable to open file: time = %s, name = '%s', tent_flags = %x", HDctime(&mytime), name, tent_flags)
-#else /* H5_USING_MEMCHECKER */
- HGOTO_ERROR(H5E_FILE, H5E_CANTOPENFILE, NULL, "unable to open file: name = '%s', tent_flags = %x", name, tent_flags)
-#endif /* H5_USING_MEMCHECKER */
- } /* end if */
- } /* end if */
-
- /* Is the file already open? */
- if((shared = H5F_sfile_search(lf)) != NULL) {
- /*
- * The file is already open, so use that one instead of the one we
- * just opened. We only one one H5FD_t* per file so one doesn't
- * confuse the other. But fail if this request was to truncate the
- * file (since we can't do that while the file is open), or if the
- * request was to create a non-existent file (since the file already
- * exists), or if the new request adds write access (since the
- * readers don't expect the file to change under them).
- */
- if(H5FD_close(lf) < 0)
- HGOTO_ERROR(H5E_FILE, H5E_CANTOPENFILE, NULL, "unable to close low-level file info")
- if(flags & H5F_ACC_TRUNC)
- HGOTO_ERROR(H5E_FILE, H5E_CANTOPENFILE, NULL, "unable to truncate a file which is already open")
- if(flags & H5F_ACC_EXCL)
- HGOTO_ERROR(H5E_FILE, H5E_CANTOPENFILE, NULL, "file exists")
- if((flags & H5F_ACC_RDWR) && 0 == (shared->flags & H5F_ACC_RDWR))
- HGOTO_ERROR(H5E_FILE, H5E_CANTOPENFILE, NULL, "file is already open for read-only")
-
- /* Allocate new "high-level" file struct */
- if((file = H5F_new(shared, flags, fcpl_id, fapl_id, NULL)) == NULL)
- HGOTO_ERROR(H5E_FILE, H5E_CANTOPENFILE, NULL, "unable to create new file object")
- } /* end if */
- else {
- /* Check if tentative open was good enough */
- if(flags != tent_flags) {
- /*
- * This file is not yet open by the library and the flags we used to
- * open it are different than the desired flags. Close the tentative
- * file and open it for real.
- */
- if(H5FD_close(lf) < 0) {
- file = NULL; /*to prevent destruction of wrong file*/
- HGOTO_ERROR(H5E_FILE, H5E_CANTOPENFILE, NULL, "unable to close low-level file info")
- } /* end if */
- if(NULL == (lf = H5FD_open(name, flags, fapl_id, HADDR_UNDEF))) {
- file = NULL; /*to prevent destruction of wrong file*/
- HGOTO_ERROR(H5E_FILE, H5E_CANTOPENFILE, NULL, "unable to open file")
- } /* end if */
- } /* end if */
-
- if(NULL == (file = H5F_new(NULL, flags, fcpl_id, fapl_id, lf)))
- HGOTO_ERROR(H5E_FILE, H5E_CANTOPENFILE, NULL, "unable to create new file object")
- } /* end else */
-
- /* Retain the name the file was opened with */
- file->open_name = H5MM_xstrdup(name);
-
- /* Short cuts */
- shared = file->shared;
- lf = shared->lf;
-
- /*
- * Read or write the file superblock, depending on whether the file is
- * empty or not.
- */
- if(0 == H5FD_get_eof(lf) && (flags & H5F_ACC_RDWR)) {
- /*
- * We've just opened a fresh new file (or truncated one). We need
- * to create & write the superblock.
- */
-
- /* Initialize information about the superblock and allocate space for it */
- /* (Writes superblock extension messages, if there are any) */
- if(H5F_super_init(file, dxpl_id) < 0)
- HGOTO_ERROR(H5E_FILE, H5E_CANTINIT, NULL, "unable to allocate file superblock")
-
- /* Create and open the root group */
- /* (This must be after the space for the superblock is allocated in
- * the file, since the superblock must be at offset 0)
- */
- if(H5G_mkroot(file, dxpl_id, TRUE) < 0)
- HGOTO_ERROR(H5E_FILE, H5E_CANTINIT, NULL, "unable to create/open root group")
- } else if (1 == shared->nrefs) {
- /* Read the superblock if it hasn't been read before. */
- if(H5F_super_read(file, dxpl_id) < 0)
- HGOTO_ERROR(H5E_FILE, H5E_READERROR, NULL, "unable to read superblock")
-
- /* Open the root group */
- if(H5G_mkroot(file, dxpl_id, FALSE) < 0)
- HGOTO_ERROR(H5E_FILE, H5E_CANTOPENFILE, NULL, "unable to read root group")
- } /* end if */
-
- /* 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")
-
- /*
- * Decide the file close degree. If it's the first time to open the
- * file, set the degree to access property list value; if it's the
- * second time or later, verify the access property list value matches
- * the degree in shared file structure.
- */
- if(H5P_get(a_plist, H5F_ACS_CLOSE_DEGREE_NAME, &fc_degree) < 0)
- HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, NULL, "can't get file close degree")
-
- if(shared->nrefs == 1) {
- if(fc_degree == H5F_CLOSE_DEFAULT)
- shared->fc_degree = lf->cls->fc_degree;
- else
- shared->fc_degree = fc_degree;
- } else if(shared->nrefs > 1) {
- if(fc_degree == H5F_CLOSE_DEFAULT && shared->fc_degree != lf->cls->fc_degree)
- HGOTO_ERROR(H5E_FILE, H5E_CANTINIT, NULL, "file close degree doesn't match")
- if(fc_degree != H5F_CLOSE_DEFAULT && fc_degree != shared->fc_degree)
- HGOTO_ERROR(H5E_FILE, H5E_CANTINIT, NULL, "file close degree doesn't match")
- } /* end if */
-
- /* Formulate the absolute path for later search of target file for external links */
- if(H5_build_extpath(name, &file->extpath) < 0)
- HGOTO_ERROR(H5E_FILE, H5E_CANTINIT, NULL, "unable to build extpath")
-
- /* Formulate the actual file name, after following symlinks, etc. */
- if(H5F_build_actual_name(file, a_plist, name, &file->actual_name) < 0)
- HGOTO_ERROR(H5E_FILE, H5E_CANTINIT, NULL, "unable to build actual name")
-
- /* Success */
- ret_value = file;
-
-done:
- if(!ret_value && file)
- if(H5F_dest(file, dxpl_id, FALSE) < 0)
- HDONE_ERROR(H5E_FILE, H5E_CANTCLOSEFILE, NULL, "problems closing file")
-
- FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5F_open() */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5Fcreate
- *
- * Purpose: This is the primary function for creating HDF5 files . The
- * flags parameter determines whether an existing file will be
- * overwritten or not. All newly created files are opened for
- * both reading and writing. All flags may be combined with the
- * bit-wise OR operator (`|') to change the behavior of the file
- * create call.
- *
- * The more complex behaviors of a file's creation and access
- * are controlled through the file-creation and file-access
- * property lists. The value of H5P_DEFAULT for a template
- * value indicates that the library should use the default
- * values for the appropriate template.
- *
- * See also: H5Fpublic.h for the list of supported flags. H5Ppublic.h for
- * the list of file creation and file access properties.
- *
- * Return: Success: A file ID
- *
- * Failure: FAIL
- *
- * Programmer: Unknown
- *
- *-------------------------------------------------------------------------
- */
-hid_t
-H5Fcreate(const char *filename, unsigned flags, hid_t fcpl_id, hid_t fapl_id)
-{
- H5F_t *new_file = NULL; /*file struct for new file */
- hid_t ret_value; /*return value */
-
- FUNC_ENTER_API(FAIL)
- H5TRACE4("i", "*sIuii", filename, flags, fcpl_id, fapl_id);
-
- /* Check/fix arguments */
- if(!filename || !*filename)
- HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid file name")
- /* In this routine, we only accept the following flags:
- * H5F_ACC_EXCL, H5F_ACC_TRUNC and H5F_ACC_DEBUG
- */
- if(flags & ~(H5F_ACC_EXCL | H5F_ACC_TRUNC | H5F_ACC_DEBUG))
- HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid flags")
- /* The H5F_ACC_EXCL and H5F_ACC_TRUNC flags are mutually exclusive */
- if((flags & H5F_ACC_EXCL) && (flags & H5F_ACC_TRUNC))
- HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "mutually exclusive flags for file creation")
-
- /* Check file creation property list */
- if(H5P_DEFAULT == fcpl_id)
- fcpl_id = H5P_FILE_CREATE_DEFAULT;
- else
- if(TRUE != H5P_isa_class(fcpl_id, H5P_FILE_CREATE))
- HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not file create property list")
-
- /* Check the file access property list */
- if(H5P_DEFAULT == fapl_id)
- fapl_id = H5P_FILE_ACCESS_DEFAULT;
- else
- if(TRUE != H5P_isa_class(fapl_id, H5P_FILE_ACCESS))
- HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not file access property list")
-
- /*
- * Adjust bit flags by turning on the creation bit and making sure that
- * the EXCL or TRUNC bit is set. All newly-created files are opened for
- * reading and writing.
- */
- if (0==(flags & (H5F_ACC_EXCL|H5F_ACC_TRUNC)))
- flags |= H5F_ACC_EXCL; /*default*/
- flags |= H5F_ACC_RDWR | H5F_ACC_CREAT;
-
- /*
- * Create a new file or truncate an existing file.
- */
- if(NULL == (new_file = H5F_open(filename, flags, fcpl_id, fapl_id, H5AC_dxpl_id)))
- HGOTO_ERROR(H5E_FILE, H5E_CANTOPENFILE, FAIL, "unable to create file")
-
- /* Get an atom for the file */
- if((ret_value = H5I_register(H5I_FILE, new_file, TRUE)) < 0)
- HGOTO_ERROR(H5E_ATOM, H5E_CANTREGISTER, FAIL, "unable to atomize file")
-
- /* Keep this ID in file object structure */
- new_file->file_id = ret_value;
-
-done:
- if(ret_value < 0 && new_file)
- if(H5F_close(new_file) < 0)
- HDONE_ERROR(H5E_FILE, H5E_CANTCLOSEFILE, FAIL, "problems closing file")
-
- FUNC_LEAVE_API(ret_value)
-} /* end H5Fcreate() */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5Fopen
+ * Function: H5Fopen
*
* Purpose: This is the primary function for accessing existing HDF5
* files. The FLAGS argument determines whether writing to an
@@ -1717,840 +727,179 @@ H5Fflush(hid_t object_id, H5F_scope_t scope)
HGOTO_ERROR(H5E_FILE, H5E_CANTFLUSH, FAIL, "unable to flush mounted file hierarchy")
} /* end if */
else {
- /* Call the flush routine, for this file */
- if(H5F_flush(f, H5AC_dxpl_id, FALSE) < 0)
- HGOTO_ERROR(H5E_FILE, H5E_CANTFLUSH, FAIL, "unable to flush file's cached information")
- } /* end else */
- } /* end if */
-
-done:
- FUNC_LEAVE_API(ret_value)
-} /* end H5Fflush() */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5F_flush
- *
- * Purpose: Flushes cached data.
- *
- * Return: Non-negative on success/Negative on failure
- *
- * Programmer: Robb Matzke
- * matzke at llnl.gov
- * Aug 29 1997
- *
- *-------------------------------------------------------------------------
- */
-herr_t
-H5F_flush(H5F_t *f, hid_t dxpl_id, hbool_t closing)
-{
- herr_t ret_value = SUCCEED; /* Return value */
-
- FUNC_ENTER_NOAPI(FAIL)
-
- /* Sanity check arguments */
- HDassert(f);
-
- /* Flush any cached dataset storage raw data */
- if(H5D_flush(f, dxpl_id) < 0)
- /* Push error, but keep going*/
- HDONE_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "unable to flush dataset cache")
-
- /* Release any space allocated to space aggregators, so that the eoa value
- * corresponds to the end of the space written to in the file.
- */
- /* (needs to happen before cache flush, with superblock write, since the
- * 'eoa' value is written in superblock -QAK)
- */
- if(H5MF_free_aggrs(f, dxpl_id) < 0)
- /* Push error, but keep going*/
- HDONE_ERROR(H5E_FILE, H5E_CANTRELEASE, FAIL, "can't release file space")
-
- /* Flush the entire metadata cache */
- if(H5AC_flush(f, dxpl_id) < 0)
- /* Push error, but keep going*/
- HDONE_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "unable to flush metadata cache")
-
- /* Flush out the metadata accumulator */
- if(H5F_accum_flush(f, dxpl_id) < 0)
- /* Push error, but keep going*/
- HDONE_ERROR(H5E_IO, H5E_CANTFLUSH, FAIL, "unable to flush metadata accumulator")
-
- /* Flush file buffers to disk. */
- if(H5FD_flush(f->shared->lf, dxpl_id, closing) < 0)
- /* Push error, but keep going*/
- HDONE_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, "low level flush failed")
-
-done:
- FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5F_flush() */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5F_close
- *
- * Purpose: Closes a file or causes the close operation to be pended.
- * This function is called two ways: from the API it gets called
- * by H5Fclose->H5I_dec_ref->H5F_close 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() 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).
- *
- * This function is also called directly from H5O_close() when
- * the last object header is closed for the file and the file
- * has a pending close.
- *
- * Return: Non-negative on success/Negative on failure
- *
- * Programmer: Robb Matzke
- * Tuesday, September 23, 1997
- *
- *-------------------------------------------------------------------------
- */
-static herr_t
-H5F_close(H5F_t *f)
-{
- herr_t ret_value = SUCCEED; /* Return value */
-
- FUNC_ENTER_NOAPI_NOINIT
-
- /* Sanity check */
- HDassert(f);
- HDassert(f->file_id > 0); /* This routine should only be called when a file ID's ref count drops to zero */
-
- /* Perform checks for "semi" file close degree here, since closing the
- * file is not allowed if there are objects still open */
- if(f->shared->fc_degree == H5F_CLOSE_SEMI) {
- unsigned nopen_files = 0; /* Number of open files in file/mount hierarchy */
- unsigned nopen_objs = 0; /* Number of open objects in file/mount hierarchy */
-
- /* Get the number of open objects and open files on this file/mount hierarchy */
- if(H5F_mount_count_ids(f, &nopen_files, &nopen_objs) < 0)
- HGOTO_ERROR(H5E_SYM, H5E_MOUNT, FAIL, "problem checking mount hierarchy")
-
- /* If there are no other file IDs open on this file/mount hier., but
- * there are still open objects, issue an error and bail out now,
- * without decrementing the file ID's reference count and triggering
- * a "real" attempt at closing the file */
- if(nopen_files == 1 && nopen_objs > 0)
- HGOTO_ERROR(H5E_FILE, H5E_CANTCLOSEFILE, FAIL, "can't close file, there are objects still open")
- } /* end if */
-
- /* Reset the file ID for this file */
- f->file_id = -1;
-
- /* Attempt to close the file/mount hierarchy */
- if(H5F_try_close(f) < 0)
- HGOTO_ERROR(H5E_FILE, H5E_CANTCLOSEFILE, FAIL, "can't close file")
-
-done:
- FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5F_close() */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5F_try_close
- *
- * Purpose: Attempts to close a file due to one of several actions:
- * - The reference count on the file ID dropped to zero
- * - The last open object was closed in the file
- * - The file was unmounted
- *
- * Return: Non-negative on success/Negative on failure
- *
- * Programmer: Quincey Koziol
- * Tuesday, July 19, 2005
- *
- *-------------------------------------------------------------------------
- */
-herr_t
-H5F_try_close(H5F_t *f)
-{
- unsigned nopen_files = 0; /* Number of open files in file/mount hierarchy */
- unsigned nopen_objs = 0; /* Number of open objects in file/mount hierarchy */
- herr_t ret_value = SUCCEED; /* Return value */
-
- FUNC_ENTER_NOAPI_NOINIT
-
- /* Sanity check */
- HDassert(f);
- HDassert(f->shared);
-
- /* Check if this file is already in the process of closing */
- if(f->closing)
- HGOTO_DONE(SUCCEED)
-
- /* Get the number of open objects and open files on this file/mount hierarchy */
- if(H5F_mount_count_ids(f, &nopen_files, &nopen_objs) < 0)
- HGOTO_ERROR(H5E_SYM, H5E_MOUNT, FAIL, "problem checking mount hierarchy")
-
- /*
- * Close file according to close degree:
- *
- * H5F_CLOSE_WEAK: if there are still objects open, wait until
- * they are all closed.
- * H5F_CLOSE_SEMI: if there are still objects open, return fail;
- * otherwise, close file.
- * H5F_CLOSE_STRONG: if there are still objects open, close them
- * first, then close file.
- */
- switch(f->shared->fc_degree) {
- case H5F_CLOSE_WEAK:
- /*
- * If file or object IDS are still open then delay deletion of
- * resources until they have all been closed. Flush all
- * caches and update the object header anyway so that failing to
- * close all objects isn't a major problem.
- */
- if((nopen_files + nopen_objs) > 0)
- HGOTO_DONE(SUCCEED)
- break;
-
- case H5F_CLOSE_SEMI:
- /* Can leave safely if file IDs are still open on this file */
- if(nopen_files > 0)
- HGOTO_DONE(SUCCEED)
-
- /* Sanity check: If close degree if "semi" and we have gotten this
- * far and there are objects left open, bail out now */
- HDassert(nopen_files == 0 && nopen_objs == 0);
-
- /* If we've gotten this far (ie. there are no open objects in the file), fall through to flush & close */
- break;
-
- case H5F_CLOSE_STRONG:
- /* If there are other open files in the hierarchy, we can leave now */
- if(nopen_files > 0)
- HGOTO_DONE(SUCCEED)
-
- /* If we've gotten this far (ie. there are no open file IDs in the file/mount hierarchy), fall through to flush & close */
- break;
-
- case H5F_CLOSE_DEFAULT:
- default:
- HGOTO_ERROR(H5E_FILE, H5E_CANTCLOSEFILE, FAIL, "can't close file, unknown file close degree")
- } /* end switch */
-
- /* Mark this file as closing (prevents re-entering file shutdown code below) */
- f->closing = TRUE;
-
- /* If the file close degree is "strong", close all the open objects in this file */
- if(f->shared->fc_degree == H5F_CLOSE_STRONG) {
- HDassert(nopen_files == 0);
-
- /* Forced close of all opened objects in this file */
- if(f->nopen_objs > 0) {
- size_t obj_count; /* # of open objects */
- hid_t objs[128]; /* Array of objects to close */
- herr_t result; /* Local result from obj ID query */
- size_t u; /* Local index variable */
-
- /* Get the list of IDs of open dataset, group, & attribute objects */
- while((result = H5F_get_obj_ids(f, H5F_OBJ_LOCAL | H5F_OBJ_DATASET | H5F_OBJ_GROUP | H5F_OBJ_ATTR, (int)(sizeof(objs) / sizeof(objs[0])), objs, FALSE, &obj_count)) <= 0
- && obj_count != 0 ) {
-
- /* Try to close all the open objects in this file */
- for(u = 0; u < obj_count; u++)
- if(H5I_dec_ref(objs[u]) < 0)
- HGOTO_ERROR(H5E_ATOM, H5E_CLOSEERROR, FAIL, "can't close object")
- } /* end while */
- if(result < 0)
- HGOTO_ERROR(H5E_INTERNAL, H5E_BADITER, FAIL, "H5F_get_obj_ids failed(1)")
-
- /* Get the list of IDs of open named datatype objects */
- /* (Do this separately from the dataset & attribute IDs, because
- * they could be using one of the named datatypes and then the
- * open named datatype ID will get closed twice)
- */
- while((result = H5F_get_obj_ids(f, H5F_OBJ_LOCAL | H5F_OBJ_DATATYPE, (int)(sizeof(objs) / sizeof(objs[0])), objs, FALSE, &obj_count)) <= 0
- && obj_count != 0) {
-
- /* Try to close all the open objects in this file */
- for(u = 0; u < obj_count; u++)
- if(H5I_dec_ref(objs[u]) < 0)
- HGOTO_ERROR(H5E_ATOM, H5E_CLOSEERROR, FAIL, "can't close object")
- } /* end while */
- if(result < 0)
- HGOTO_ERROR(H5E_INTERNAL, H5E_BADITER, FAIL, "H5F_get_obj_ids failed(2)")
- } /* end if */
- } /* end if */
-
- /* Check if this is a child file in a mounting hierarchy & proceed up the
- * hierarchy if so.
- */
- if(f->parent)
- if(H5F_try_close(f->parent) < 0)
- HGOTO_ERROR(H5E_FILE, H5E_CANTCLOSEFILE, FAIL, "can't close parent file")
-
- /* Unmount and close each child before closing the current file. */
- if(H5F_close_mounts(f) < 0)
- HGOTO_ERROR(H5E_FILE, H5E_CANTCLOSEFILE, FAIL, "can't unmount child files")
-
- /* If there is more than one reference to the shared file struct and the
- * file has an external file cache, we should see if it can be closed. This
- * can happen if a cycle is formed with external file caches */
- if(f->shared->efc && (f->shared->nrefs > 1))
- if(H5F_efc_try_close(f) < 0)
- HGOTO_ERROR(H5E_FILE, H5E_CANTRELEASE, FAIL, "can't attempt to close EFC")
-
- /* Delay flush until the shared file struct is closed, in H5F_dest. If the
- * application called H5Fclose, it would have been flushed in that function
- * (unless it will have been flushed in H5F_dest anyways). */
-
- /*
- * Destroy the H5F_t struct and decrement the reference count for the
- * shared H5F_file_t struct. If the reference count for the H5F_file_t
- * struct reaches zero then destroy it also.
- */
- if(H5F_dest(f, H5AC_dxpl_id, TRUE) < 0)
- HGOTO_ERROR(H5E_FILE, H5E_CANTCLOSEFILE, FAIL, "problems closing file")
-
-done:
- FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5F_try_close() */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5Fclose
- *
- * Purpose: This function closes the file specified by FILE_ID by
- * flushing all data to storage, and terminating access to the
- * file through FILE_ID. If objects (e.g., datasets, groups,
- * etc.) are open in the file then the underlying storage is not
- * closed until those objects are closed; however, all data for
- * the file and the open objects is flushed.
- *
- * Return: Success: Non-negative
- *
- * Failure: Negative
- *
- * Programmer: Robb Matzke
- * Saturday, February 20, 1999
- *
- * Modifications:
- *
- *-------------------------------------------------------------------------
- */
-herr_t
-H5Fclose(hid_t file_id)
-{
- H5F_t *f = NULL;
- int nref;
- herr_t ret_value = SUCCEED;
-
- FUNC_ENTER_API(FAIL)
- H5TRACE1("e", "i", file_id);
-
- /* Check/fix arguments. */
- if(H5I_FILE != H5I_get_type(file_id))
- HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a file ID")
-
- /* Flush file if this is the last reference to this id and we have write
- * intent, unless it will be flushed by the "shared" file being closed.
- * This is only necessary to replicate previous behaviour, and could be
- * disabled by an option/property to improve performance. */
- if(NULL == (f = (H5F_t *)H5I_object(file_id)))
- HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid file identifier")
- if((f->shared->nrefs > 1) && (H5F_INTENT(f) & H5F_ACC_RDWR)) {
- if((nref = H5I_get_ref(file_id, FALSE)) < 0)
- HGOTO_ERROR(H5E_ATOM, H5E_CANTGET, FAIL, "can't get ID ref count")
- if(nref == 1)
- if(H5F_flush(f, H5AC_dxpl_id, FALSE) < 0)
- HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "unable to flush cache")
- } /* end if */
-
- /*
- * Decrement reference count on atom. When it reaches zero the file will
- * be closed.
- */
- if(H5I_dec_app_ref(file_id) < 0)
- HGOTO_ERROR(H5E_ATOM, H5E_CANTCLOSEFILE, FAIL, "decrementing file ID failed")
-
-done:
- FUNC_LEAVE_API(ret_value)
-} /* end H5Fclose() */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5Freopen
- *
- * Purpose: Reopen a file. The new file handle which is returned points
- * to the same file as the specified file handle. Both handles
- * share caches and other information. The only difference
- * between the handles is that the new handle is not mounted
- * anywhere and no files are mounted on it.
- *
- * Return: Success: New file ID
- *
- * Failure: FAIL
- *
- * Programmer: Robb Matzke
- * Friday, October 16, 1998
- *
- * Modifications:
- * Quincey Koziol, May 14, 2002
- * Keep old file's read/write intent in reopened file.
- *
- *-------------------------------------------------------------------------
- */
-hid_t
-H5Freopen(hid_t file_id)
-{
- H5F_t *old_file = NULL;
- H5F_t *new_file = NULL;
- hid_t ret_value;
-
- FUNC_ENTER_API(FAIL)
- H5TRACE1("i", "i", file_id);
-
- /* Check arguments */
- if(NULL == (old_file = (H5F_t *)H5I_object_verify(file_id, H5I_FILE)))
- HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a file")
-
- /* Get a new "top level" file struct, sharing the same "low level" file struct */
- if(NULL == (new_file = H5F_new(old_file->shared, 0, H5P_FILE_CREATE_DEFAULT, H5P_FILE_ACCESS_DEFAULT, NULL)))
- HGOTO_ERROR(H5E_FILE, H5E_CANTINIT, FAIL, "unable to reopen file")
-
- /* Duplicate old file's names */
- new_file->open_name = H5MM_xstrdup(old_file->open_name);
- new_file->actual_name = H5MM_xstrdup(old_file->actual_name);
-
- if((ret_value = H5I_register(H5I_FILE, new_file, TRUE)) < 0)
- HGOTO_ERROR(H5E_ATOM, H5E_CANTREGISTER, FAIL, "unable to atomize file handle")
-
- /* Keep this ID in file object structure */
- new_file->file_id = ret_value;
-
-done:
- if(ret_value < 0 && new_file)
- if(H5F_dest(new_file, H5AC_dxpl_id, FALSE) < 0)
- HDONE_ERROR(H5E_FILE, H5E_CANTCLOSEFILE, FAIL, "can't close file")
-
- FUNC_LEAVE_API(ret_value)
-} /* end H5Freopen() */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5Fget_intent
- *
- * Purpose: Public API to retrieve the file's 'intent' flags passed
- * during H5Fopen()
- *
- * Return: Non-negative on success/negative on failure
- *
- * Programmer: James Laird
- * August 23, 2006
- *
- *-------------------------------------------------------------------------
- */
-herr_t
-H5Fget_intent(hid_t file_id, unsigned *intent_flags)
-{
- herr_t ret_value = SUCCEED;
-
- FUNC_ENTER_API(FAIL)
- H5TRACE2("e", "i*Iu", file_id, intent_flags);
-
- /* If no intent flags were passed in, exit quietly */
- if(intent_flags) {
- H5F_t * file; /* Pointer to file structure */
-
- /* Get the internal file structure */
- if(NULL == (file = (H5F_t *)H5I_object_verify(file_id, H5I_FILE)))
- HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a file")
-
- /* HDF5 uses some flags internally that users don't know about.
- * Simplify things for them so that they only get either H5F_ACC_RDWR
- * or H5F_ACC_RDONLY.
- */
- if(H5F_INTENT(file) & H5F_ACC_RDWR)
- *intent_flags = H5F_ACC_RDWR;
- else
- *intent_flags = H5F_ACC_RDONLY;
- } /* end if */
-
-done:
- FUNC_LEAVE_API(ret_value)
-} /* end H5Fget_intent() */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5F_get_id
- *
- * Purpose: Get the file ID, incrementing it, or "resurrecting" it as
- * appropriate.
- *
- * Return: Non-negative on success/Negative on failure
- *
- * Programmer: Raymond Lu
- * Oct 29, 2003
- *
- *-------------------------------------------------------------------------
- */
-hid_t
-H5F_get_id(H5F_t *file, hbool_t app_ref)
-{
- hid_t ret_value;
-
- FUNC_ENTER_NOAPI_NOINIT
-
- HDassert(file);
-
- if(file->file_id == -1) {
- /* Get an atom for the file */
- if((file->file_id = H5I_register(H5I_FILE, file, app_ref)) < 0)
- HGOTO_ERROR(H5E_ATOM, H5E_CANTREGISTER, FAIL, "unable to atomize file")
- } else {
- /* Increment reference count on atom. */
- if(H5I_inc_ref(file->file_id, app_ref) < 0)
- HGOTO_ERROR(H5E_ATOM, H5E_CANTSET, FAIL, "incrementing file ID failed")
- } /* end else */
-
- ret_value = file->file_id;
-
-done:
- FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5F_get_id() */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5F_incr_nopen_objs
- *
- * Purpose: Increment the number of open objects for a file.
- *
- * Return: Success: The number of open objects, after the increment
- *
- * Failure: (can't happen)
- *
- * Programmer: Quincey Koziol
- * koziol at hdfgroup.org
- * Mar 6 2007
- *
- *-------------------------------------------------------------------------
- */
-unsigned
-H5F_incr_nopen_objs(H5F_t *f)
-{
- /* Use FUNC_ENTER_NOAPI_NOINIT_NOERR here to avoid performance issues */
- FUNC_ENTER_NOAPI_NOINIT_NOERR
-
- HDassert(f);
-
- FUNC_LEAVE_NOAPI(++f->nopen_objs)
-} /* end H5F_incr_nopen_objs() */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5F_decr_nopen_objs
- *
- * Purpose: Decrement the number of open objects for a file.
- *
- * Return: Success: The number of open objects, after the decrement
- *
- * Failure: (can't happen)
- *
- * Programmer: Quincey Koziol
- * koziol at hdfgroup.org
- * Mar 6 2007
- *
- *-------------------------------------------------------------------------
- */
-unsigned
-H5F_decr_nopen_objs(H5F_t *f)
-{
- /* Use FUNC_ENTER_NOAPI_NOINIT_NOERR here to avoid performance issues */
- FUNC_ENTER_NOAPI_NOINIT_NOERR
-
- HDassert(f);
-
- FUNC_LEAVE_NOAPI(--f->nopen_objs)
-} /* end H5F_decr_nopen_objs() */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5F_build_actual_name
- *
- * Purpose: Retrieve the name of a file, after following symlinks, etc.
- *
- * Note: Currently only working for "POSIX I/O compatible" VFDs
- *
- * Return: Success: 0
- * Failure: -1
- *
- * Programmer: Quincey Koziol
- * November 25, 2009
- *
- *-------------------------------------------------------------------------
- */
-static herr_t
-H5F_build_actual_name(const H5F_t *f, const H5P_genplist_t *fapl, const char *name,
- char **actual_name/*out*/)
-{
- hid_t new_fapl_id = -1; /* ID for duplicated FAPL */
- herr_t ret_value = SUCCEED; /* Return value */
-
- FUNC_ENTER_NOAPI_NOINIT
-
- /* Sanity check */
- HDassert(f);
- HDassert(fapl);
- HDassert(name);
- HDassert(actual_name);
-
- /* Clear actual name pointer to begin with */
- *actual_name = NULL;
-
-/* Assume that if the OS can't create symlinks, that we don't need to worry
- * about resolving them either. -QAK
- */
-#ifdef H5_HAVE_SYMLINK
- /* Check for POSIX I/O compatible file handle */
- if(H5F_HAS_FEATURE(f, H5FD_FEAT_POSIX_COMPAT_HANDLE)) {
- h5_stat_t lst; /* Stat info from lstat() call */
-
- /* Call lstat() on the file's name */
- if(HDlstat(name, &lst) < 0)
- HGOTO_ERROR(H5E_FILE, H5E_CANTGET, FAIL, "can't retrieve stat info for file")
-
- /* Check for symbolic link */
- if(S_IFLNK == (lst.st_mode & S_IFMT)) {
- H5P_genplist_t *new_fapl; /* Duplicated FAPL */
- int *fd; /* POSIX I/O file descriptor */
- h5_stat_t st; /* Stat info from stat() call */
- h5_stat_t fst; /* Stat info from fstat() call */
- char realname[PATH_MAX]; /* Fully resolved path name of file */
- hbool_t want_posix_fd; /* Flag for retrieving file descriptor from VFD */
-
- /* Perform a sanity check that the file or link wasn't switched
- * between when we opened it and when we called lstat(). This is
- * according to the security best practices for lstat() documented
- * here: https://www.securecoding.cert.org/confluence/display/seccode/POS35-C.+Avoid+race+conditions+while+checking+for+the+existence+of+a+symbolic+link
- */
-
- /* Copy the FAPL object to modify */
- if((new_fapl_id = H5P_copy_plist(fapl, FALSE)) < 0)
- HGOTO_ERROR(H5E_FILE, H5E_CANTCOPY, FAIL, "unable to copy file access property list")
- if(NULL == (new_fapl = (H5P_genplist_t *)H5I_object(new_fapl_id)))
- HGOTO_ERROR(H5E_FILE, H5E_CANTCREATE, FAIL, "can't get property list")
-
- /* Set the character encoding on the new property list */
- want_posix_fd = TRUE;
- if(H5P_set(new_fapl, H5F_ACS_WANT_POSIX_FD_NAME, &want_posix_fd) < 0)
- HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set character encoding")
-
- /* Retrieve the file handle */
- if(H5F_get_vfd_handle(f, new_fapl_id, (void **)&fd) < 0)
- HGOTO_ERROR(H5E_FILE, H5E_CANTGET, FAIL, "can't retrieve POSIX file descriptor")
-
- /* Stat the filename we're resolving */
- if(HDstat(name, &st) < 0)
- HSYS_GOTO_ERROR(H5E_FILE, H5E_BADFILE, FAIL, "unable to stat file")
-
- /* Stat the file we opened */
- if(HDfstat(*fd, &fst) < 0)
- HSYS_GOTO_ERROR(H5E_FILE, H5E_BADFILE, FAIL, "unable to fstat file")
-
- /* Verify that the files are really the same */
- if(st.st_mode != fst.st_mode || st.st_ino != fst.st_ino || st.st_dev != fst.st_dev)
- HGOTO_ERROR(H5E_FILE, H5E_BADVALUE, FAIL, "files' st_ino or st_dev fields changed!")
-
- /* Get the resolved path for the file name */
- if(NULL == HDrealpath(name, realname))
- HGOTO_ERROR(H5E_FILE, H5E_CANTGET, FAIL, "can't retrieve real path for file")
-
- /* Duplicate the resolved path for the file name */
- if(NULL == (*actual_name = (char *)H5MM_strdup(realname)))
- HGOTO_ERROR(H5E_FILE, H5E_CANTALLOC, FAIL, "can't duplicate real path")
- } /* end if */
+ /* Call the flush routine, for this file */
+ if(H5F_flush(f, H5AC_dxpl_id, FALSE) < 0)
+ HGOTO_ERROR(H5E_FILE, H5E_CANTFLUSH, FAIL, "unable to flush file's cached information")
+ } /* end else */
} /* end if */
-#endif /* H5_HAVE_SYMLINK */
-
- /* Check if we've resolved the file's name */
- if(NULL == *actual_name) {
- /* Just duplicate the name used to open the file */
- if(NULL == (*actual_name = (char *)H5MM_strdup(name)))
- HGOTO_ERROR(H5E_FILE, H5E_CANTALLOC, FAIL, "can't duplicate open name")
- } /* end else */
done:
- /* Close the property list */
- if(new_fapl_id > 0)
- if(H5I_dec_app_ref(new_fapl_id) < 0)
- HDONE_ERROR(H5E_FILE, H5E_CANTCLOSEOBJ, FAIL, "can't close duplicated FAPL")
-
- FUNC_LEAVE_NOAPI(ret_value)
-} /* H5F_build_actual_name() */
+ FUNC_LEAVE_API(ret_value)
+} /* end H5Fflush() */
/*-------------------------------------------------------------------------
- * Function: H5F_addr_encode_len
+ * Function: H5Fclose
+ *
+ * Purpose: This function closes the file specified by FILE_ID by
+ * flushing all data to storage, and terminating access to the
+ * file through FILE_ID. If objects (e.g., datasets, groups,
+ * etc.) are open in the file then the underlying storage is not
+ * closed until those objects are closed; however, all data for
+ * the file and the open objects is flushed.
*
- * Purpose: Encodes an address into the buffer pointed to by *PP and
- * then increments the pointer to the first byte after the
- * address. An undefined value is stored as all 1's.
+ * Return: Success: Non-negative
*
- * Return: void
+ * Failure: Negative
*
* Programmer: Robb Matzke
- * Friday, November 7, 1997
+ * Saturday, February 20, 1999
+ *
+ * Modifications:
*
*-------------------------------------------------------------------------
*/
-void
-H5F_addr_encode_len(size_t addr_len, uint8_t **pp/*in,out*/, haddr_t addr)
+herr_t
+H5Fclose(hid_t file_id)
{
- unsigned u; /* Local index variable */
+ H5F_t *f = NULL;
+ int nref;
+ herr_t ret_value = SUCCEED;
- /* Use FUNC_ENTER_NOAPI_NOINIT_NOERR here to avoid performance issues */
- FUNC_ENTER_NOAPI_NOINIT_NOERR
+ FUNC_ENTER_API(FAIL)
+ H5TRACE1("e", "i", file_id);
- HDassert(addr_len);
- HDassert(pp && *pp);
+ /* Check/fix arguments. */
+ if(H5I_FILE != H5I_get_type(file_id))
+ HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a file ID")
- if(H5F_addr_defined(addr)) {
- for(u = 0; u < addr_len; u++) {
- *(*pp)++ = (uint8_t)(addr & 0xff);
- addr >>= 8;
- } /* end for */
- HDassert("overflow" && 0 == addr);
+ /* Flush file if this is the last reference to this id and we have write
+ * intent, unless it will be flushed by the "shared" file being closed.
+ * This is only necessary to replicate previous behaviour, and could be
+ * disabled by an option/property to improve performance. */
+ if(NULL == (f = (H5F_t *)H5I_object(file_id)))
+ HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid file identifier")
+ if((f->shared->nrefs > 1) && (H5F_INTENT(f) & H5F_ACC_RDWR)) {
+ if((nref = H5I_get_ref(file_id, FALSE)) < 0)
+ HGOTO_ERROR(H5E_ATOM, H5E_CANTGET, FAIL, "can't get ID ref count")
+ if(nref == 1)
+ if(H5F_flush(f, H5AC_dxpl_id, FALSE) < 0)
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "unable to flush cache")
} /* end if */
- else {
- for(u = 0; u < addr_len; u++)
- *(*pp)++ = 0xff;
- } /* end else */
- FUNC_LEAVE_NOAPI_VOID
-} /* end H5F_addr_encode_len() */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5F_addr_encode
- *
- * Purpose: Encodes an address into the buffer pointed to by *PP and
- * then increments the pointer to the first byte after the
- * address. An undefined value is stored as all 1's.
- *
- * Return: void
- *
- * Programmer: Robb Matzke
- * Friday, November 7, 1997
- *
- *-------------------------------------------------------------------------
- */
-void
-H5F_addr_encode(const H5F_t *f, uint8_t **pp/*in,out*/, haddr_t addr)
-{
- /* Use FUNC_ENTER_NOAPI_NOINIT_NOERR here to avoid performance issues */
- FUNC_ENTER_NOAPI_NOINIT_NOERR
-
- HDassert(f);
-
- H5F_addr_encode_len(H5F_SIZEOF_ADDR(f), pp, addr);
+ /*
+ * Decrement reference count on atom. When it reaches zero the file will
+ * be closed.
+ */
+ if(H5I_dec_app_ref(file_id) < 0)
+ HGOTO_ERROR(H5E_ATOM, H5E_CANTCLOSEFILE, FAIL, "decrementing file ID failed")
- FUNC_LEAVE_NOAPI_VOID
-} /* end H5F_addr_encode() */
+done:
+ FUNC_LEAVE_API(ret_value)
+} /* end H5Fclose() */
/*-------------------------------------------------------------------------
- * Function: H5F_addr_decode_len
+ * Function: H5Freopen
*
- * Purpose: Decodes an address from the buffer pointed to by *PP and
- * updates the pointer to point to the next byte after the
- * address.
+ * Purpose: Reopen a file. The new file handle which is returned points
+ * to the same file as the specified file handle. Both handles
+ * share caches and other information. The only difference
+ * between the handles is that the new handle is not mounted
+ * anywhere and no files are mounted on it.
*
- * If the value read is all 1's then the address is returned
- * with an undefined value.
+ * Return: Success: New file ID
*
- * Return: void
+ * Failure: FAIL
*
* Programmer: Robb Matzke
- * Friday, November 7, 1997
+ * Friday, October 16, 1998
+ *
+ * Modifications:
+ * Quincey Koziol, May 14, 2002
+ * Keep old file's read/write intent in reopened file.
*
*-------------------------------------------------------------------------
*/
-void
-H5F_addr_decode_len(size_t addr_len, const uint8_t **pp/*in,out*/, haddr_t *addr_p/*out*/)
+hid_t
+H5Freopen(hid_t file_id)
{
- hbool_t all_zero = TRUE; /* True if address was all zeroes */
- unsigned u; /* Local index variable */
-
- /* Use FUNC_ENTER_NOAPI_NOINIT_NOERR here to avoid performance issues */
- FUNC_ENTER_NOAPI_NOINIT_NOERR
-
- HDassert(addr_len);
- HDassert(pp && *pp);
- HDassert(addr_p);
-
- /* Reset value in destination */
- *addr_p = 0;
+ H5F_t *old_file = NULL;
+ H5F_t *new_file = NULL;
+ hid_t ret_value;
- /* Decode bytes from address */
- for(u = 0; u < addr_len; u++) {
- uint8_t c; /* Local decoded byte */
+ FUNC_ENTER_API(FAIL)
+ H5TRACE1("i", "i", file_id);
- /* Get decoded byte (and advance pointer) */
- c = *(*pp)++;
+ /* Check arguments */
+ if(NULL == (old_file = (H5F_t *)H5I_object_verify(file_id, H5I_FILE)))
+ HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a file")
- /* Check for non-undefined address byte value */
- if(c != 0xff)
- all_zero = FALSE;
+ /* Get a new "top level" file struct, sharing the same "low level" file struct */
+ if(NULL == (new_file = H5F_new(old_file->shared, 0, H5P_FILE_CREATE_DEFAULT, H5P_FILE_ACCESS_DEFAULT, NULL)))
+ HGOTO_ERROR(H5E_FILE, H5E_CANTINIT, FAIL, "unable to reopen file")
- if(u < sizeof(*addr_p)) {
- haddr_t tmp = c; /* Local copy of address, for casting */
+ /* Duplicate old file's names */
+ new_file->open_name = H5MM_xstrdup(old_file->open_name);
+ new_file->actual_name = H5MM_xstrdup(old_file->actual_name);
- /* Shift decoded byte to correct position */
- tmp <<= (u * 8); /*use tmp to get casting right */
+ if((ret_value = H5I_register(H5I_FILE, new_file, TRUE)) < 0)
+ HGOTO_ERROR(H5E_ATOM, H5E_CANTREGISTER, FAIL, "unable to atomize file handle")
- /* Merge into already decoded bytes */
- *addr_p |= tmp;
- } /* end if */
- else
- if(!all_zero)
- HDassert(0 == **pp); /*overflow */
- } /* end for */
+ /* Keep this ID in file object structure */
+ new_file->file_id = ret_value;
- /* If 'all_zero' is still TRUE, the address was entirely composed of '0xff'
- * bytes, which is the encoded form of 'HADDR_UNDEF', so set the destination
- * to that value */
- if(all_zero)
- *addr_p = HADDR_UNDEF;
+done:
+ if(ret_value < 0 && new_file)
+ if(H5F_dest(new_file, H5AC_dxpl_id, FALSE) < 0)
+ HDONE_ERROR(H5E_FILE, H5E_CANTCLOSEFILE, FAIL, "can't close file")
- FUNC_LEAVE_NOAPI_VOID
-} /* end H5F_addr_decode_len() */
+ FUNC_LEAVE_API(ret_value)
+} /* end H5Freopen() */
/*-------------------------------------------------------------------------
- * Function: H5F_addr_decode
- *
- * Purpose: Decodes an address from the buffer pointed to by *PP and
- * updates the pointer to point to the next byte after the
- * address.
+ * Function: H5Fget_intent
*
- * If the value read is all 1's then the address is returned
- * with an undefined value.
+ * Purpose: Public API to retrieve the file's 'intent' flags passed
+ * during H5Fopen()
*
- * Return: void
+ * Return: Non-negative on success/negative on failure
*
- * Programmer: Robb Matzke
- * Friday, November 7, 1997
+ * Programmer: James Laird
+ * August 23, 2006
*
*-------------------------------------------------------------------------
*/
-void
-H5F_addr_decode(const H5F_t *f, const uint8_t **pp/*in,out*/, haddr_t *addr_p/*out*/)
+herr_t
+H5Fget_intent(hid_t file_id, unsigned *intent_flags)
{
- /* Use FUNC_ENTER_NOAPI_NOINIT_NOERR here to avoid performance issues */
- FUNC_ENTER_NOAPI_NOINIT_NOERR
+ herr_t ret_value = SUCCEED;
- HDassert(f);
+ FUNC_ENTER_API(FAIL)
+ H5TRACE2("e", "i*Iu", file_id, intent_flags);
+
+ /* If no intent flags were passed in, exit quietly */
+ if(intent_flags) {
+ H5F_t * file; /* Pointer to file structure */
+
+ /* Get the internal file structure */
+ if(NULL == (file = (H5F_t *)H5I_object_verify(file_id, H5I_FILE)))
+ HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a file")
- H5F_addr_decode_len(H5F_SIZEOF_ADDR(f), pp, addr_p);
+ /* HDF5 uses some flags internally that users don't know about.
+ * Simplify things for them so that they only get either H5F_ACC_RDWR
+ * or H5F_ACC_RDONLY.
+ */
+ if(H5F_INTENT(file) & H5F_ACC_RDWR)
+ *intent_flags = H5F_ACC_RDWR;
+ else
+ *intent_flags = H5F_ACC_RDONLY;
+ } /* end if */
- FUNC_LEAVE_NOAPI_VOID
-} /* end H5F_addr_decode() */
+done:
+ FUNC_LEAVE_API(ret_value)
+} /* end H5Fget_intent() */
/*-------------------------------------------------------------------------
@@ -2681,8 +1030,6 @@ ssize_t
H5Fget_file_image(hid_t file_id, void *buf_ptr, size_t buf_len)
{
H5F_t *file; /* File object for file ID */
- H5FD_t *fd_ptr; /* file driver */
- haddr_t eoa; /* End of file address */
ssize_t ret_value; /* Return value */
FUNC_ENTER_API(FAIL)
@@ -2691,79 +1038,11 @@ H5Fget_file_image(hid_t file_id, void *buf_ptr, size_t buf_len)
/* Check args */
if(NULL == (file = (H5F_t *)H5I_object_verify(file_id, H5I_FILE)))
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "not a file ID")
- if(!file || !file->shared || !file->shared->lf)
- HGOTO_ERROR(H5E_FILE, H5E_BADVALUE, FAIL, "file_id yields invalid file pointer")
- fd_ptr = file->shared->lf;
- if(!fd_ptr->cls)
- HGOTO_ERROR(H5E_FILE, H5E_BADVALUE, FAIL, "fd_ptr yields invalid class pointer")
-
- /* the address space used by the split and multi file drivers is not
- * a good fit for this call. Since the plan is to depreciate these
- * drivers anyway, don't bother to do a "force fit".
- *
- * The following clause tests for the multi file driver, and fails
- * if the supplied file has the multi file driver as its top level
- * file driver. However, this test will not work if there is some
- * other file driver sitting on top of the multi file driver.
- *
- * I'm not sure if this is possible at present, but in all likelyhood,
- * it will become possible in the future. On the other hand, we may
- * remove the split/multi file drivers before then.
- *
- * I am leaving this solution in for now, but we should review it,
- * and improve the solution if necessary.
- *
- * JRM -- 11/11/22
- */
- if(HDstrcmp(fd_ptr->cls->name, "multi") == 0)
- HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "Not supported for multi file driver.")
-
- /* While the family file driver is conceptually fully compatible
- * with the get file image operation, it sets a file driver message
- * in the super block that prevents the image being opened with any
- * driver other than the family file driver. Needless to say, this
- * rather defeats the purpose of the get file image operation.
- *
- * While this problem is quire solvable, the required time and
- * resources are lacking at present. Hence, for now, we don't
- * allow the get file image operation to be perfomed on files
- * opened with the family file driver.
- *
- * Observe that the following test only looks at the top level
- * driver, and fails if there is some other driver sitting on to
- * of the family file driver.
- *
- * I don't think this can happen at present, but that may change
- * in the future.
- * JRM -- 12/21/11
- */
- if(HDstrcmp(fd_ptr->cls->name, "family") == 0)
- HGOTO_ERROR(H5E_FILE, H5E_BADVALUE, FAIL, "Not supported for family file driver.")
+ /* call private get_file_image function */
+ if((ret_value = H5F_get_file_image(file, buf_ptr, buf_len)) < 0)
+ HGOTO_ERROR(H5E_FILE, H5E_CANTGET, FAIL, "unable to get file image")
- /* Go get the actual file size */
- if(HADDR_UNDEF == (eoa = H5FD_get_eoa(file->shared->lf, H5FD_MEM_DEFAULT)))
- HGOTO_ERROR(H5E_FILE, H5E_CANTGET, FAIL, "unable to get file size")
-
- /* set ret_value = to eoa -- will overwrite this if appropriate */
- ret_value = (ssize_t)eoa;
-
- /* test to see if a buffer was provided -- if not, we are done */
- if(buf_ptr != NULL) {
- size_t space_needed; /* size of file image */
-
- /* Check for buffer too small */
- if((haddr_t)buf_len < eoa)
- HGOTO_ERROR(H5E_FILE, H5E_BADVALUE, FAIL, "supplied buffer too small")
-
- space_needed = (size_t)eoa;
-
- /* read in the file image */
- /* (Note compensation for base address addition in internal routine) */
- if(H5FD_read(fd_ptr, H5AC_ind_dxpl_id, H5FD_MEM_DEFAULT, 0, space_needed, buf_ptr) < 0)
- HGOTO_ERROR(H5E_FILE, H5E_READERROR, FAIL, "file image read request failed")
- } /* end if */
-
done:
FUNC_LEAVE_API(ret_value)
} /* H5Fget_file_image() */
@@ -3140,150 +1419,3 @@ H5Fclear_elink_file_cache(hid_t file_id)
done:
FUNC_LEAVE_API(ret_value)
} /* end H5Fclear_elink_file_cache() */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5F_set_grp_btree_shared
- *
- * Purpose: Set the grp_btree_shared field with a valid ref-count pointer.
- *
- * Return: Success: SUCCEED
- * Failure: FAIL
- *
- * Programmer: Quincey Koziol
- * 7/19/11
- *
- *-------------------------------------------------------------------------
- */
-herr_t
-H5F_set_grp_btree_shared(H5F_t *f, H5RC_t *rc)
-{
- /* Use FUNC_ENTER_NOAPI_NOINIT_NOERR here to avoid performance issues */
- FUNC_ENTER_NOAPI_NOINIT_NOERR
-
- /* Sanity check */
- HDassert(f);
- HDassert(f->shared);
- HDassert(rc);
-
- f->shared->grp_btree_shared = rc;
-
- FUNC_LEAVE_NOAPI(SUCCEED)
-} /* H5F_set_grp_btree_shared() */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5F_set_sohm_addr
- *
- * Purpose: Set the sohm_addr field with a new value.
- *
- * Return: Success: SUCCEED
- * Failure: FAIL
- *
- * Programmer: Quincey Koziol
- * 7/20/11
- *
- *-------------------------------------------------------------------------
- */
-herr_t
-H5F_set_sohm_addr(H5F_t *f, haddr_t addr)
-{
- /* Use FUNC_ENTER_NOAPI_NOINIT_NOERR here to avoid performance issues */
- FUNC_ENTER_NOAPI_NOINIT_NOERR
-
- /* Sanity check */
- HDassert(f);
- HDassert(f->shared);
-
- f->shared->sohm_addr = addr;
-
- FUNC_LEAVE_NOAPI(SUCCEED)
-} /* H5F_set_sohm_addr() */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5F_set_sohm_vers
- *
- * Purpose: Set the sohm_vers field with a new value.
- *
- * Return: Success: SUCCEED
- * Failure: FAIL
- *
- * Programmer: Quincey Koziol
- * 7/20/11
- *
- *-------------------------------------------------------------------------
- */
-herr_t
-H5F_set_sohm_vers(H5F_t *f, unsigned vers)
-{
- /* Use FUNC_ENTER_NOAPI_NOINIT_NOERR here to avoid performance issues */
- FUNC_ENTER_NOAPI_NOINIT_NOERR
-
- /* Sanity check */
- HDassert(f);
- HDassert(f->shared);
-
- f->shared->sohm_vers = vers;
-
- FUNC_LEAVE_NOAPI(SUCCEED)
-} /* H5F_set_sohm_vers() */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5F_set_sohm_nindexes
- *
- * Purpose: Set the sohm_nindexes field with a new value.
- *
- * Return: Success: SUCCEED
- * Failure: FAIL
- *
- * Programmer: Quincey Koziol
- * 7/20/11
- *
- *-------------------------------------------------------------------------
- */
-herr_t
-H5F_set_sohm_nindexes(H5F_t *f, unsigned nindexes)
-{
- /* Use FUNC_ENTER_NOAPI_NOINIT_NOERR here to avoid performance issues */
- FUNC_ENTER_NOAPI_NOINIT_NOERR
-
- /* Sanity check */
- HDassert(f);
- HDassert(f->shared);
-
- f->shared->sohm_nindexes = nindexes;
-
- FUNC_LEAVE_NOAPI(SUCCEED)
-} /* H5F_set_sohm_nindexes() */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5F_set_store_msg_crt_idx
- *
- * Purpose: Set the store_msg_crt_idx field with a new value.
- *
- * Return: Success: SUCCEED
- * Failure: FAIL
- *
- * Programmer: Quincey Koziol
- * 7/20/11
- *
- *-------------------------------------------------------------------------
- */
-herr_t
-H5F_set_store_msg_crt_idx(H5F_t *f, hbool_t flag)
-{
- /* Use FUNC_ENTER_NOAPI_NOINIT_NOERR here to avoid performance issues */
- FUNC_ENTER_NOAPI_NOINIT_NOERR
-
- /* Sanity check */
- HDassert(f);
- HDassert(f->shared);
-
- f->shared->store_msg_crt_idx = flag;
-
- FUNC_LEAVE_NOAPI(SUCCEED)
-} /* H5F_set_store_msg_crt_idx() */
-
diff --git a/src/H5FD.c b/src/H5FD.c
index a261818..947854d 100644
--- a/src/H5FD.c
+++ b/src/H5FD.c
@@ -111,7 +111,7 @@ static int H5FD_driver_query(const H5FD_class_t *driver, unsigned long *flags/*o
* object and the file is closed and re-opened, the 'fileno' value will
* be different.
*/
-static unsigned long file_serial_no;
+static unsigned long H5FD_file_serial_no_g;
/* File driver ID class */
static const H5I_class_t H5I_VFL_CLS[1] = {{
@@ -176,7 +176,7 @@ H5FD_init_interface(void)
HGOTO_ERROR(H5E_VFL, H5E_CANTINIT, FAIL, "unable to initialize interface")
/* Reset the file serial numbers */
- file_serial_no = 0;
+ H5FD_file_serial_no_g = 0;
done:
FUNC_LEAVE_NOAPI(ret_value)
@@ -211,8 +211,8 @@ H5FD_term_interface(void)
FUNC_ENTER_NOAPI_NOINIT_NOERR
if(H5_interface_initialize_g) {
- if((n=H5I_nmembers(H5I_VFL))!=0) {
- H5I_clear_type(H5I_VFL, FALSE, FALSE);
+ if(H5I_nmembers(H5I_VFL) > 0) {
+ (void)H5I_clear_type(H5I_VFL, FALSE, FALSE);
/* Reset the VFL drivers, if they've been closed */
if(H5I_nmembers(H5I_VFL)==0) {
@@ -232,14 +232,21 @@ H5FD_term_interface(void)
H5FD_mpio_term();
#endif /* H5_HAVE_PARALLEL */
} /* end if */
- } else {
- H5I_dec_type_ref(H5I_VFL);
+
+ n++; /*H5I*/
+ } /* end if */
+ else {
+ /* Destroy the VFL driver id group */
+ (void)H5I_dec_type_ref(H5I_VFL);
+ n++; /*H5I*/
+
+ /* Mark closed */
H5_interface_initialize_g = 0;
- n = 1; /*H5I*/
- }
- }
+ } /* end else */
+ } /* end if */
+
FUNC_LEAVE_NOAPI(n)
-}
+} /* end H5FD_term_interface() */
/*-------------------------------------------------------------------------
@@ -1003,11 +1010,11 @@ H5FD_open(const char *name, unsigned flags, hid_t fapl_id, haddr_t maxaddr)
HGOTO_ERROR(H5E_VFL, H5E_CANTINIT, NULL, "unable to query file driver")
/* Increment the global serial number & assign it to this H5FD_t object */
- if(++file_serial_no == 0) {
+ if(++H5FD_file_serial_no_g == 0) {
/* (Just error out if we wrap around for now...) */
HGOTO_ERROR(H5E_VFL, H5E_CANTINIT, NULL, "unable to get file serial number")
} /* end if */
- file->fileno = file_serial_no;
+ file->fileno = H5FD_file_serial_no_g;
/* Start with base address set to 0 */
/* (This will be changed later, when the superblock is located) */
@@ -1669,15 +1676,14 @@ done:
* Programmer: Robb Matzke
* Thursday, July 29, 1999
*
- * Modifications:
- *
*-------------------------------------------------------------------------
*/
herr_t
H5FDread(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, haddr_t addr, size_t size,
void *buf/*out*/)
{
- herr_t ret_value = SUCCEED; /* Return value */
+ H5P_genplist_t *dxpl; /* DXPL object */
+ herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
H5TRACE6("e", "*xMtiazx", file, type, dxpl_id, addr, size, buf);
@@ -1695,9 +1701,13 @@ H5FDread(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, haddr_t addr, size_t size
if(!buf)
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "null result buffer")
+ /* Get the DXPL plist object for DXPL ID */
+ if(NULL == (dxpl = (H5P_genplist_t *)H5I_object(dxpl_id)))
+ HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "can't get property list")
+
/* Do the real work */
/* (Note compensating for base address addition in internal routine) */
- if(H5FD_read(file, dxpl_id, type, addr - file->base_addr, size, buf) < 0)
+ if(H5FD_read(file, dxpl, type, addr - file->base_addr, size, buf) < 0)
HGOTO_ERROR(H5E_VFL, H5E_READERROR, FAIL, "file read request failed")
done:
@@ -1720,15 +1730,14 @@ done:
* Programmer: Robb Matzke
* Thursday, July 29, 1999
*
- * Modifications:
- *
*-------------------------------------------------------------------------
*/
herr_t
H5FDwrite(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, haddr_t addr, size_t size,
const void *buf)
{
- herr_t ret_value = SUCCEED; /* Return value */
+ H5P_genplist_t *dxpl; /* DXPL object */
+ herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
H5TRACE6("e", "*xMtiaz*x", file, type, dxpl_id, addr, size, buf);
@@ -1745,9 +1754,13 @@ H5FDwrite(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, haddr_t addr, size_t siz
if(!buf)
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "null buffer")
+ /* Get the DXPL plist object for DXPL ID */
+ if(NULL == (dxpl = (H5P_genplist_t *)H5I_object(dxpl_id)))
+ HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "can't get property list")
+
/* The real work */
/* (Note compensating for base address addition in internal routine) */
- if(H5FD_write(file, dxpl_id, type, addr - file->base_addr, size, buf) < 0)
+ if(H5FD_write(file, dxpl, type, addr - file->base_addr, size, buf) < 0)
HGOTO_ERROR(H5E_VFL, H5E_WRITEERROR, FAIL, "file write request failed")
done:
diff --git a/src/H5FDint.c b/src/H5FDint.c
index c9e9a67..9f02a25 100644
--- a/src/H5FDint.c
+++ b/src/H5FDint.c
@@ -42,7 +42,6 @@
#include "H5Fprivate.h" /* File access */
#include "H5FDpkg.h" /* File Drivers */
#include "H5Iprivate.h" /* IDs */
-#include "H5Pprivate.h" /* Property lists */
/****************/
@@ -104,6 +103,70 @@ H5FD_int_init_interface(void)
/*-------------------------------------------------------------------------
+ * Function: H5FD_locate_signature
+ *
+ * Purpose: Finds the HDF5 superblock signature in a file. The
+ * signature can appear at address 0, or any power of two
+ * beginning with 512.
+ *
+ * Return: Success: SUCCEED
+ * Failure: FAIL
+ *
+ * Programmer: Robb Matzke
+ * Friday, November 7, 1997
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5FD_locate_signature(H5FD_t *file, const H5P_genplist_t *dxpl, haddr_t *sig_addr)
+{
+ haddr_t addr, eoa;
+ uint8_t buf[H5F_SIGNATURE_LEN];
+ unsigned n, maxpow;
+ herr_t ret_value = SUCCEED; /* Return value */
+
+ FUNC_ENTER_NOAPI_NOINIT
+
+ /* Find the least N such that 2^N is larger than the file size */
+ if(HADDR_UNDEF == (addr = H5FD_get_eof(file)) || HADDR_UNDEF == (eoa = H5FD_get_eoa(file, H5FD_MEM_SUPER)))
+ HGOTO_ERROR(H5E_IO, H5E_CANTINIT, FAIL, "unable to obtain EOF/EOA value")
+ for(maxpow = 0; addr; maxpow++)
+ addr >>= 1;
+ maxpow = MAX(maxpow, 9);
+
+ /*
+ * Search for the file signature at format address zero followed by
+ * powers of two larger than 9.
+ */
+ for(n = 8; n < maxpow; n++) {
+ addr = (8 == n) ? 0 : (haddr_t)1 << n;
+ if(H5FD_set_eoa(file, H5FD_MEM_SUPER, addr + H5F_SIGNATURE_LEN) < 0)
+ HGOTO_ERROR(H5E_IO, H5E_CANTINIT, FAIL, "unable to set EOA value for file signature")
+ if(H5FD_read(file, dxpl, H5FD_MEM_SUPER, addr, (size_t)H5F_SIGNATURE_LEN, buf) < 0)
+ HGOTO_ERROR(H5E_IO, H5E_CANTINIT, FAIL, "unable to read file signature")
+ if(!HDmemcmp(buf, H5F_SIGNATURE, (size_t)H5F_SIGNATURE_LEN))
+ break;
+ } /* end for */
+
+ /*
+ * If the signature was not found then reset the EOA value and return
+ * HADDR_UNDEF.
+ */
+ if(n >= maxpow) {
+ if(H5FD_set_eoa(file, H5FD_MEM_SUPER, eoa) < 0)
+ HGOTO_ERROR(H5E_IO, H5E_CANTINIT, FAIL, "unable to reset EOA value")
+ *sig_addr = HADDR_UNDEF;
+ } /* end if */
+ else
+ /* Set return value */
+ *sig_addr = addr;
+
+done:
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5FD_locate_signature() */
+
+
+/*-------------------------------------------------------------------------
* Function: H5FD_read
*
* Purpose: Private version of H5FDread()
@@ -117,7 +180,7 @@ H5FD_int_init_interface(void)
*-------------------------------------------------------------------------
*/
herr_t
-H5FD_read(H5FD_t *file, hid_t dxpl_id, H5FD_mem_t type, haddr_t addr,
+H5FD_read(H5FD_t *file, const H5P_genplist_t *dxpl, H5FD_mem_t type, haddr_t addr,
size_t size, void *buf/*out*/)
{
herr_t ret_value = SUCCEED; /* Return value */
@@ -125,8 +188,7 @@ H5FD_read(H5FD_t *file, hid_t dxpl_id, H5FD_mem_t type, haddr_t addr,
FUNC_ENTER_NOAPI(FAIL)
HDassert(file && file->cls);
- HDassert(H5I_GENPROP_LST == H5I_get_type(dxpl_id));
- HDassert(TRUE == H5P_isa_class(dxpl_id, H5P_DATASET_XFER));
+ HDassert(TRUE == H5P_class_isa(H5P_CLASS(dxpl), H5P_CLS_DATASET_XFER_g));
HDassert(buf);
#ifndef H5_HAVE_PARALLEL
@@ -138,7 +200,7 @@ H5FD_read(H5FD_t *file, hid_t dxpl_id, H5FD_mem_t type, haddr_t addr,
#endif /* H5_HAVE_PARALLEL */
/* Dispatch to driver */
- if((file->cls->read)(file, type, dxpl_id, addr + file->base_addr, size, buf) < 0)
+ if((file->cls->read)(file, type, H5P_PLIST_ID(dxpl), addr + file->base_addr, size, buf) < 0)
HGOTO_ERROR(H5E_VFL, H5E_READERROR, FAIL, "driver read request failed")
done:
@@ -160,7 +222,7 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5FD_write(H5FD_t *file, hid_t dxpl_id, H5FD_mem_t type, haddr_t addr,
+H5FD_write(H5FD_t *file, const H5P_genplist_t *dxpl, H5FD_mem_t type, haddr_t addr,
size_t size, const void *buf)
{
herr_t ret_value = SUCCEED; /* Return value */
@@ -168,8 +230,7 @@ H5FD_write(H5FD_t *file, hid_t dxpl_id, H5FD_mem_t type, haddr_t addr,
FUNC_ENTER_NOAPI(FAIL)
HDassert(file && file->cls);
- HDassert(H5I_GENPROP_LST == H5I_get_type(dxpl_id));
- HDassert(TRUE == H5P_isa_class(dxpl_id, H5P_DATASET_XFER));
+ HDassert(TRUE == H5P_class_isa(H5P_CLASS(dxpl), H5P_CLS_DATASET_XFER_g));
HDassert(buf);
#ifndef H5_HAVE_PARALLEL
@@ -181,7 +242,7 @@ H5FD_write(H5FD_t *file, hid_t dxpl_id, H5FD_mem_t type, haddr_t addr,
#endif /* H5_HAVE_PARALLEL */
/* Dispatch to driver */
- if((file->cls->write)(file, type, dxpl_id, addr + file->base_addr, size, buf) < 0)
+ if((file->cls->write)(file, type, H5P_PLIST_ID(dxpl), addr + file->base_addr, size, buf) < 0)
HGOTO_ERROR(H5E_VFL, H5E_WRITEERROR, FAIL, "driver write request failed")
done:
diff --git a/src/H5FDmpio.c b/src/H5FDmpio.c
index 2c97282..5189939 100644
--- a/src/H5FDmpio.c
+++ b/src/H5FDmpio.c
@@ -1004,9 +1004,6 @@ H5FD_mpio_open(const char *name, unsigned flags, hid_t fapl_id,
MPI_Comm comm_dup=MPI_COMM_NULL;
MPI_Info info_dup=MPI_INFO_NULL;
H5FD_t *ret_value; /* Return value */
-#ifndef H5_HAVE_MPI_GET_SIZE
- h5_stat_t stat_buf;
-#endif
FUNC_ENTER_NOAPI_NOINIT
@@ -1081,18 +1078,8 @@ H5FD_mpio_open(const char *name, unsigned flags, hid_t fapl_id,
/* Only processor p0 will get the filesize and broadcast it. */
if (mpi_rank == 0) {
- /* Get current file size. If MPI_File_get_size is disabled in configuration
- * because it doesn't return correct value (SGI Altix Propack 4),
- * use stat to get the file size. */
-#ifdef H5_HAVE_MPI_GET_SIZE
if (MPI_SUCCESS != (mpi_code=MPI_File_get_size(fh, &size)))
HMPI_GOTO_ERROR(NULL, "MPI_File_get_size failed", mpi_code)
-#else
- if((mpi_code=HDstat(name, &stat_buf))<0)
- HMPI_GOTO_ERROR(NULL, "stat failed", mpi_code)
- /* Hopefully this casting is safe */
- size = (MPI_Offset)(stat_buf.st_size);
-#endif
} /* end if */
/* Broadcast file size */
@@ -1987,38 +1974,14 @@ H5FD_mpio_truncate(H5FD_t *_file, hid_t UNUSED dxpl_id, hbool_t UNUSED closing)
int mpi_code; /* mpi return code */
MPI_Offset mpi_off;
-#ifdef H5_MPI_FILE_SET_SIZE_BIG
if(H5FD_mpi_haddr_to_MPIOff(file->eoa, &mpi_off) < 0)
HGOTO_ERROR(H5E_INTERNAL, H5E_BADRANGE, FAIL, "cannot convert from haddr_t to MPI_Offset")
/* Extend the file's size */
if(MPI_SUCCESS != (mpi_code = MPI_File_set_size(file->f, mpi_off)))
HMPI_GOTO_ERROR(FAIL, "MPI_File_set_size failed", mpi_code)
-#else /* H5_MPI_FILE_SET_SIZE_BIG */
- /* Wait until all processes are here before reading/writing the byte at
- * process 0's end of address space. The window for corruption is
- * probably tiny, but does exist...
- */
- if(MPI_SUCCESS != (mpi_code = MPI_Barrier(file->comm)))
- HMPI_GOTO_ERROR(FAIL, "MPI_Barrier failed", mpi_code)
-
- if(0 == file->mpi_rank) {
- uint8_t byte = 0;
- MPI_Status mpi_stat;
-
- /* Portably initialize MPI status variable */
- HDmemset(&mpi_stat, 0, sizeof(MPI_Status));
-
- if(H5FD_mpi_haddr_to_MPIOff(file->eoa-1, &mpi_off) < 0)
- HGOTO_ERROR(H5E_INTERNAL, H5E_BADRANGE, FAIL, "cannot convert from haddr_t to MPI_Offset")
- if(MPI_SUCCESS != (mpi_code = MPI_File_read_at(file->f, mpi_off, &byte, 1, MPI_BYTE, &mpi_stat)))
- HMPI_GOTO_ERROR(FAIL, "MPI_File_read_at failed", mpi_code)
- if(MPI_SUCCESS != (mpi_code = MPI_File_write_at(file->f, mpi_off, &byte, 1, MPI_BYTE, &mpi_stat)))
- HMPI_GOTO_ERROR(FAIL, "MPI_File_write_at failed", mpi_code)
- } /* end if */
-#endif /* H5_MPI_FILE_SET_SIZE_BIG */
- /* Don't let any proc return until all have extended the file.
+ /* Don't let any proc return until all have extended the file.
* (Prevents race condition where some processes go ahead and write
* more data to the file before all the processes have finished making
* it the shorter length, potentially truncating the file and dropping
diff --git a/src/H5FDmulti.c b/src/H5FDmulti.c
index bd192fd..c0cab02 100644
--- a/src/H5FDmulti.c
+++ b/src/H5FDmulti.c
@@ -490,7 +490,7 @@ H5Pset_fapl_multi(hid_t fapl_id, const H5FD_mem_t *memb_map,
}
if (!memb_addr) {
for (mt=H5FD_MEM_DEFAULT; mt<H5FD_MEM_NTYPES; mt=(H5FD_mem_t)(mt+1))
- _memb_addr[mt] = (hsize_t)(mt ? (mt - 1) : 0) * HADDR_MAX / H5FD_MEM_NTYPES;
+ _memb_addr[mt] = (hsize_t)(mt ? (mt - 1) : 0) * (HADDR_MAX / (H5FD_MEM_NTYPES-1));
memb_addr = _memb_addr;
}
diff --git a/src/H5FDprivate.h b/src/H5FDprivate.h
index cdd2023..37aad3f 100644
--- a/src/H5FDprivate.h
+++ b/src/H5FDprivate.h
@@ -24,6 +24,7 @@
#include "H5FDpublic.h"
/* Private headers needed by this file */
+#include "H5Pprivate.h" /* Property lists */
/*
* The MPI drivers are needed because there are
@@ -112,6 +113,7 @@ struct H5P_genplist_t;
struct H5F_t;
H5_DLL int H5FD_term_interface(void);
+H5_DLL herr_t H5FD_locate_signature(H5FD_t *file, const H5P_genplist_t *dxpl, haddr_t *sig_addr);
H5_DLL H5FD_class_t *H5FD_get_class(hid_t id);
H5_DLL hsize_t H5FD_sb_size(H5FD_t *file);
H5_DLL herr_t H5FD_sb_encode(H5FD_t *file, char *name/*out*/, uint8_t *buf);
@@ -136,9 +138,9 @@ H5_DLL haddr_t H5FD_get_eof(const H5FD_t *file);
H5_DLL haddr_t H5FD_get_maxaddr(const H5FD_t *file);
H5_DLL herr_t H5FD_get_feature_flags(const H5FD_t *file, unsigned long *feature_flags);
H5_DLL herr_t H5FD_get_fs_type_map(const H5FD_t *file, H5FD_mem_t *type_map);
-H5_DLL herr_t H5FD_read(H5FD_t *file, hid_t dxpl_id, H5FD_mem_t type,
+H5_DLL herr_t H5FD_read(H5FD_t *file, const H5P_genplist_t *dxpl, H5FD_mem_t type,
haddr_t addr, size_t size, void *buf/*out*/);
-H5_DLL herr_t H5FD_write(H5FD_t *file, hid_t dxpl_id, H5FD_mem_t type,
+H5_DLL herr_t H5FD_write(H5FD_t *file, const H5P_genplist_t *dxpl, H5FD_mem_t type,
haddr_t addr, size_t size, const void *buf);
H5_DLL herr_t H5FD_flush(H5FD_t *file, hid_t dxpl_id, hbool_t closing);
H5_DLL herr_t H5FD_truncate(H5FD_t *file, hid_t dxpl_id, hbool_t closing);
diff --git a/src/H5FDwindows.h b/src/H5FDwindows.h
index ecc28a7..7b547bf 100644
--- a/src/H5FDwindows.h
+++ b/src/H5FDwindows.h
@@ -1,49 +1,49 @@
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * Copyright by The HDF Group. *
- * Copyright by the Board of Trustees of the University of Illinois. *
- * All rights reserved. *
- * *
- * This file is part of HDF5. The full HDF5 copyright notice, including *
- * terms governing use, modification, and redistribution, is contained in *
- * the files COPYING and Copyright.html. COPYING can be found at the root *
- * of the source code distribution tree; Copyright.html can be found at the *
- * root level of an installed copy of the electronic HDF5 document set and *
- * is linked from the top-level documents page. It can also be found at *
- * http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have *
- * access to either file, you may request a copy from help at hdfgroup.org. *
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-
-/*
- * Programmer: Scott Wegner <swegner at hdfgroup.org>
- * Based on code by Robb Matzke
- * Thursday, May 24 2007
- *
- * Purpose: The public header file for the windows driver.
- */
-#ifndef H5FDwindows_H
-#define H5FDwindows_H
-
-#include "H5Ipublic.h"
-#include "H5FDsec2.h"
-
-#define H5FD_WINDOWS (H5FD_windows_init())
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* The code behind the windows VFD has been removed and the windows
- * VFD initialization has been redirected to the SEC2 driver. The
- * "Windows" VFD was actually identical to the SEC2 driver code
- * (a planned Win32 API driver never happened) so this change
- * should be transparent to users.
- */
-#define H5FD_windows_init H5FD_sec2_init
-#define H5FD_windows_term H5FD_sec2_term
-H5_DLL herr_t H5Pset_fapl_windows(hid_t fapl_id);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group. *
+ * Copyright by the Board of Trustees of the University of Illinois. *
+ * All rights reserved. *
+ * *
+ * This file is part of HDF5. The full HDF5 copyright notice, including *
+ * terms governing use, modification, and redistribution, is contained in *
+ * the files COPYING and Copyright.html. COPYING can be found at the root *
+ * of the source code distribution tree; Copyright.html can be found at the *
+ * root level of an installed copy of the electronic HDF5 document set and *
+ * is linked from the top-level documents page. It can also be found at *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have *
+ * access to either file, you may request a copy from help at hdfgroup.org. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer: Scott Wegner <swegner at hdfgroup.org>
+ * Based on code by Robb Matzke
+ * Thursday, May 24 2007
+ *
+ * Purpose: The public header file for the windows driver.
+ */
+#ifndef H5FDwindows_H
+#define H5FDwindows_H
+
+#include "H5Ipublic.h"
+#include "H5FDsec2.h"
+
+#define H5FD_WINDOWS (H5FD_windows_init())
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* The code behind the windows VFD has been removed and the windows
+ * VFD initialization has been redirected to the SEC2 driver. The
+ * "Windows" VFD was actually identical to the SEC2 driver code
+ * (a planned Win32 API driver never happened) so this change
+ * should be transparent to users.
+ */
+#define H5FD_windows_init H5FD_sec2_init
+#define H5FD_windows_term H5FD_sec2_term
+H5_DLL herr_t H5Pset_fapl_windows(hid_t fapl_id);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/H5Faccum.c b/src/H5Faccum.c
index 6855918..5d884d6 100644
--- a/src/H5Faccum.c
+++ b/src/H5Faccum.c
@@ -40,7 +40,7 @@
#include "H5Eprivate.h" /* Error handling */
#include "H5Fpkg.h" /* File access */
#include "H5FDprivate.h" /* File drivers */
-#include "H5VMprivate.h" /* Vectors and arrays */
+#include "H5VMprivate.h" /* Vectors and arrays */
/****************/
@@ -94,7 +94,7 @@ H5FL_BLK_DEFINE_STATIC(meta_accum);
/*-------------------------------------------------------------------------
- * Function: H5F_accum_read
+ * Function: H5F__accum_read
*
* Purpose: Attempts to read some data from the metadata accumulator for
* a file into a buffer.
@@ -112,106 +112,111 @@ H5FL_BLK_DEFINE_STATIC(meta_accum);
*-------------------------------------------------------------------------
*/
herr_t
-H5F_accum_read(const H5F_t *f, hid_t dxpl_id, H5FD_mem_t type, haddr_t addr,
+H5F__accum_read(const H5F_io_info_t *fio_info, H5FD_mem_t type, haddr_t addr,
size_t size, void *buf/*out*/)
{
H5FD_mem_t map_type; /* Mapped memory type */
herr_t ret_value = SUCCEED; /* Return value */
- FUNC_ENTER_NOAPI(FAIL)
+ FUNC_ENTER_PACKAGE
- HDassert(f);
- HDassert(f->shared);
+ HDassert(fio_info);
+ HDassert(fio_info->f);
+ HDassert(fio_info->dxpl);
HDassert(buf);
/* Treat global heap as raw data */
map_type = (type == H5FD_MEM_GHEAP) ? H5FD_MEM_DRAW : type;
/* Check if this information is in the metadata accumulator */
- if((f->shared->feature_flags & H5FD_FEAT_ACCUMULATE_METADATA) && map_type != H5FD_MEM_DRAW) {
+ if((fio_info->f->shared->feature_flags & H5FD_FEAT_ACCUMULATE_METADATA) && map_type != H5FD_MEM_DRAW) {
+ H5F_meta_accum_t *accum; /* Alias for file's metadata accumulator */
+
+ /* Set up alias for file's metadata accumulator info */
+ accum = &fio_info->f->shared->accum;
+
if(size < H5F_ACCUM_MAX_SIZE) {
/* Sanity check */
- HDassert(!f->shared->accum.buf || (f->shared->accum.alloc_size >= f->shared->accum.size));
+ HDassert(!accum->buf || (accum->alloc_size >= accum->size));
/* Current read adjoins or overlaps with metadata accumulator */
- if(H5F_addr_overlap(addr, size, f->shared->accum.loc, f->shared->accum.size)
- || ((addr + size) == f->shared->accum.loc)
- || (f->shared->accum.loc + f->shared->accum.size) == addr) {
+ if(H5F_addr_overlap(addr, size, accum->loc, accum->size)
+ || ((addr + size) == accum->loc)
+ || (accum->loc + accum->size) == addr) {
size_t amount_before; /* Amount to read before current accumulator */
haddr_t new_addr; /* New address of the accumulator buffer */
size_t new_size; /* New size of the accumulator buffer */
/* Compute new values for accumulator */
- new_addr = MIN(addr, f->shared->accum.loc);
- new_size = (size_t)(MAX((addr + size), (f->shared->accum.loc + f->shared->accum.size))
- - new_addr);
+ new_addr = MIN(addr, accum->loc);
+ new_size = (size_t)(MAX((addr + size), (accum->loc + accum->size)) - new_addr);
/* Check if we need more buffer space */
- if(new_size > f->shared->accum.alloc_size) {
+ if(new_size > accum->alloc_size) {
size_t new_alloc_size; /* New size of accumulator */
/* Adjust the buffer size to be a power of 2 that is large enough to hold data */
new_alloc_size = (size_t)1 << (1 + H5VM_log2_gen((uint64_t)(new_size - 1)));
/* Reallocate the metadata accumulator buffer */
- if(NULL == (f->shared->accum.buf = H5FL_BLK_REALLOC(meta_accum, f->shared->accum.buf, new_alloc_size)))
+ if(NULL == (accum->buf = H5FL_BLK_REALLOC(meta_accum, accum->buf, new_alloc_size)))
HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "unable to allocate metadata accumulator buffer")
/* Note the new buffer size */
- f->shared->accum.alloc_size = new_alloc_size;
+ accum->alloc_size = new_alloc_size;
#ifdef H5_CLEAR_MEMORY
- HDmemset(f->shared->accum.buf + f->shared->accum.size, 0, (f->shared->accum.alloc_size - f->shared->accum.size));
+ HDmemset(accum->buf + accum->size, 0, (accum->alloc_size - accum->size));
#endif /* H5_CLEAR_MEMORY */
} /* end if */
/* Read the part before the metadata accumulator */
- if(addr < f->shared->accum.loc) {
+ if(addr < accum->loc) {
/* Set the amount to read */
- H5_ASSIGN_OVERFLOW(amount_before, (f->shared->accum.loc - addr), hsize_t, size_t);
+ H5_ASSIGN_OVERFLOW(amount_before, (accum->loc - addr), hsize_t, size_t);
/* Make room for the metadata to read in */
- HDmemmove(f->shared->accum.buf + amount_before, f->shared->accum.buf, f->shared->accum.size);
+ HDmemmove(accum->buf + amount_before, accum->buf, accum->size);
/* Adjust dirty region tracking info, if present */
- if(f->shared->accum.dirty)
- f->shared->accum.dirty_off += amount_before;
+ if(accum->dirty)
+ accum->dirty_off += amount_before;
/* Dispatch to driver */
- if(H5FD_read(f->shared->lf, dxpl_id, map_type, addr, amount_before, f->shared->accum.buf) < 0)
+ if(H5FD_read(fio_info->f->shared->lf, fio_info->dxpl, map_type, addr, amount_before, accum->buf) < 0)
HGOTO_ERROR(H5E_IO, H5E_READERROR, FAIL, "driver read request failed")
} /* end if */
else
amount_before = 0;
/* Read the part after the metadata accumulator */
- if((addr + size) > (f->shared->accum.loc + f->shared->accum.size)) {
+ if((addr + size) > (accum->loc + accum->size)) {
size_t amount_after; /* Amount to read at a time */
/* Set the amount to read */
- H5_ASSIGN_OVERFLOW(amount_after, ((addr + size) - (f->shared->accum.loc + f->shared->accum.size)), hsize_t, size_t);
+ H5_ASSIGN_OVERFLOW(amount_after, ((addr + size) - (accum->loc + accum->size)), hsize_t, size_t);
/* Dispatch to driver */
- if(H5FD_read(f->shared->lf, dxpl_id, map_type, (f->shared->accum.loc + f->shared->accum.size), amount_after, (f->shared->accum.buf + f->shared->accum.size + amount_before)) < 0)
+ if(H5FD_read(fio_info->f->shared->lf, fio_info->dxpl, map_type, (accum->loc + accum->size), amount_after, (accum->buf + accum->size + amount_before)) < 0)
HGOTO_ERROR(H5E_IO, H5E_READERROR, FAIL, "driver read request failed")
} /* end if */
/* Copy the data out of the buffer */
- HDmemcpy(buf, f->shared->accum.buf + (addr - new_addr), size);
+ HDmemcpy(buf, accum->buf + (addr - new_addr), size);
/* Adjust the accumulator address & size */
- f->shared->accum.loc = new_addr;
- f->shared->accum.size = new_size;
+ accum->loc = new_addr;
+ accum->size = new_size;
} /* end if */
/* Current read doesn't overlap with metadata accumulator, read it from file */
else {
/* Dispatch to driver */
- if(H5FD_read(f->shared->lf, dxpl_id, map_type, addr, size, buf) < 0)
+ if(H5FD_read(fio_info->f->shared->lf, fio_info->dxpl, map_type, addr, size, buf) < 0)
HGOTO_ERROR(H5E_IO, H5E_READERROR, FAIL, "driver read request failed")
} /* end else */
} /* end if */
else {
/* Read the data */
- if(H5FD_read(f->shared->lf, dxpl_id, map_type, addr, size, buf) < 0)
+ if(H5FD_read(fio_info->f->shared->lf, fio_info->dxpl, map_type, addr, size, buf) < 0)
HGOTO_ERROR(H5E_IO, H5E_READERROR, FAIL, "driver read request failed")
/* Check for overlap w/dirty accumulator */
@@ -219,9 +224,9 @@ H5F_accum_read(const H5F_t *f, hid_t dxpl_id, H5FD_mem_t type, haddr_t addr,
* information in the accumulator with [some of] the information
* just read in. -QAK)
*/
- if(f->shared->accum.dirty &&
- H5F_addr_overlap(addr, size, f->shared->accum.loc + f->shared->accum.dirty_off, f->shared->accum.dirty_len)) {
- haddr_t dirty_loc = f->shared->accum.loc + f->shared->accum.dirty_off; /* File offset of dirty information */
+ if(accum->dirty &&
+ H5F_addr_overlap(addr, size, accum->loc + accum->dirty_off, accum->dirty_len)) {
+ haddr_t dirty_loc = accum->loc + accum->dirty_off; /* File offset of dirty information */
size_t buf_off; /* Offset of dirty region in buffer */
size_t dirty_off; /* Offset within dirty region */
size_t overlap_size; /* Size of overlap with dirty region */
@@ -235,36 +240,36 @@ H5F_accum_read(const H5F_t *f, hid_t dxpl_id, H5FD_mem_t type, haddr_t addr,
dirty_off = 0;
/* Check for read ending within dirty region */
- if(H5F_addr_lt(addr + size, dirty_loc + f->shared->accum.dirty_len))
+ if(H5F_addr_lt(addr + size, dirty_loc + accum->dirty_len))
overlap_size = (size_t)((addr + size) - buf_off);
else /* Access covers whole dirty region */
- overlap_size = f->shared->accum.dirty_len;
+ overlap_size = accum->dirty_len;
} /* end if */
else { /* Read starts after beginning of dirty region */
/* Compute dirty offset within buffer and overlap size */
buf_off = 0;
dirty_off = (size_t)(addr - dirty_loc);
- overlap_size = (size_t)((dirty_loc + f->shared->accum.dirty_len) - addr);
+ overlap_size = (size_t)((dirty_loc + accum->dirty_len) - addr);
} /* end else */
/* Copy the dirty region to buffer */
- HDmemcpy((unsigned char *)buf + buf_off, (unsigned char *)f->shared->accum.buf + f->shared->accum.dirty_off + dirty_off, overlap_size);
+ HDmemcpy((unsigned char *)buf + buf_off, (unsigned char *)accum->buf + accum->dirty_off + dirty_off, overlap_size);
} /* end if */
} /* end else */
} /* end if */
else {
/* Read the data */
- if(H5FD_read(f->shared->lf, dxpl_id, map_type, addr, size, buf) < 0)
+ if(H5FD_read(fio_info->f->shared->lf, fio_info->dxpl, map_type, addr, size, buf) < 0)
HGOTO_ERROR(H5E_IO, H5E_READERROR, FAIL, "driver read request failed")
} /* end else */
done:
FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5F_accum_read() */
+} /* end H5F__accum_read() */
/*-------------------------------------------------------------------------
- * Function: H5F_accum_adjust
+ * Function: H5F__accum_adjust
*
* Purpose: Adjust accumulator size, if necessary
*
@@ -277,15 +282,15 @@ done:
*-------------------------------------------------------------------------
*/
static herr_t
-H5F_accum_adjust(H5F_meta_accum_t *accum, H5FD_t *lf, hid_t dxpl_id,
+H5F__accum_adjust(H5F_meta_accum_t *accum, const H5F_io_info_t *fio_info,
H5F_accum_adjust_t adjust, size_t size)
{
herr_t ret_value = SUCCEED; /* Return value */
- FUNC_ENTER_NOAPI_NOINIT
+ FUNC_ENTER_STATIC
HDassert(accum);
- HDassert(lf);
+ HDassert(fio_info);
HDassert(H5F_ACCUM_APPEND == adjust || H5F_ACCUM_PREPEND == adjust);
HDassert(size > 0);
HDassert(size <= H5F_ACCUM_MAX_SIZE);
@@ -343,7 +348,7 @@ H5F_accum_adjust(H5F_meta_accum_t *accum, H5FD_t *lf, hid_t dxpl_id,
/* Check if the dirty region overlaps the region to eliminate from the accumulator */
if((accum->size - shrink_size) < (accum->dirty_off + accum->dirty_len)) {
/* Write out the dirty region from the metadata accumulator, with dispatch to driver */
- if(H5FD_write(lf, dxpl_id, H5FD_MEM_DEFAULT, (accum->loc + accum->dirty_off), accum->dirty_len, (accum->buf + accum->dirty_off)) < 0)
+ if(H5FD_write(fio_info->f->shared->lf, fio_info->dxpl, H5FD_MEM_DEFAULT, (accum->loc + accum->dirty_off), accum->dirty_len, (accum->buf + accum->dirty_off)) < 0)
HGOTO_ERROR(H5E_FILE, H5E_WRITEERROR, FAIL, "file write failed")
/* Reset accumulator dirty flag */
@@ -354,7 +359,7 @@ H5F_accum_adjust(H5F_meta_accum_t *accum, H5FD_t *lf, hid_t dxpl_id,
/* Check if the dirty region overlaps the region to eliminate from the accumulator */
if(shrink_size > accum->dirty_off) {
/* Write out the dirty region from the metadata accumulator, with dispatch to driver */
- if(H5FD_write(lf, dxpl_id, H5FD_MEM_DEFAULT, (accum->loc + accum->dirty_off), accum->dirty_len, (accum->buf + accum->dirty_off)) < 0)
+ if(H5FD_write(fio_info->f->shared->lf, fio_info->dxpl, H5FD_MEM_DEFAULT, (accum->loc + accum->dirty_off), accum->dirty_len, (accum->buf + accum->dirty_off)) < 0)
HGOTO_ERROR(H5E_FILE, H5E_WRITEERROR, FAIL, "file write failed")
/* Reset accumulator dirty flag */
@@ -398,11 +403,11 @@ HDmemset(accum->buf + accum->size, 0, (accum->alloc_size - (accum->size + size))
done:
FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5F_accum_adjust() */
+} /* end H5F__accum_adjust() */
/*-------------------------------------------------------------------------
- * Function: H5F_accum_write
+ * Function: H5F__accum_write
*
* Purpose: Attempts to write some data to the metadata accumulator for
* a file from a buffer.
@@ -416,7 +421,7 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5F_accum_write(const H5F_t *f, hid_t dxpl_id, H5FD_mem_t type, haddr_t addr,
+H5F__accum_write(const H5F_io_info_t *fio_info, H5FD_mem_t type, haddr_t addr,
size_t size, const void *buf)
{
H5FD_mem_t map_type; /* Mapped memory type */
@@ -424,355 +429,359 @@ H5F_accum_write(const H5F_t *f, hid_t dxpl_id, H5FD_mem_t type, haddr_t addr,
FUNC_ENTER_NOAPI(FAIL)
- HDassert(f);
- HDassert(f->shared);
- HDassert(H5F_INTENT(f) & H5F_ACC_RDWR);
+ HDassert(fio_info);
+ HDassert(fio_info->f);
+ HDassert(H5F_INTENT(fio_info->f) & H5F_ACC_RDWR);
+ HDassert(fio_info->dxpl);
HDassert(buf);
/* Treat global heap as raw data */
map_type = (type == H5FD_MEM_GHEAP) ? H5FD_MEM_DRAW : type;
/* Check for accumulating metadata */
- if((f->shared->feature_flags & H5FD_FEAT_ACCUMULATE_METADATA) && map_type != H5FD_MEM_DRAW) {
+ if((fio_info->f->shared->feature_flags & H5FD_FEAT_ACCUMULATE_METADATA) && map_type != H5FD_MEM_DRAW) {
+ H5F_meta_accum_t *accum; /* Alias for file's metadata accumulator */
+
+ /* Set up alias for file's metadata accumulator info */
+ accum = &fio_info->f->shared->accum;
+
if(size < H5F_ACCUM_MAX_SIZE) {
/* Sanity check */
- HDassert(!f->shared->accum.buf || (f->shared->accum.alloc_size >= f->shared->accum.size));
+ HDassert(!accum->buf || (accum->alloc_size >= accum->size));
/* Check if there is already metadata in the accumulator */
- if(f->shared->accum.size > 0) {
+ if(accum->size > 0) {
/* Check if the new metadata adjoins the beginning of the current accumulator */
- if((addr + size) == f->shared->accum.loc) {
+ if((addr + size) == accum->loc) {
/* Check if we need to adjust accumulator size */
- if(H5F_accum_adjust(&f->shared->accum, f->shared->lf, dxpl_id, H5F_ACCUM_PREPEND, size) < 0)
+ if(H5F__accum_adjust(accum, fio_info, H5F_ACCUM_PREPEND, size) < 0)
HGOTO_ERROR(H5E_IO, H5E_CANTRESIZE, FAIL, "can't adjust metadata accumulator")
/* Move the existing metadata to the proper location */
- HDmemmove(f->shared->accum.buf + size, f->shared->accum.buf, f->shared->accum.size);
+ HDmemmove(accum->buf + size, accum->buf, accum->size);
/* Copy the new metadata at the front */
- HDmemcpy(f->shared->accum.buf, buf, size);
+ HDmemcpy(accum->buf, buf, size);
/* Set the new size & location of the metadata accumulator */
- f->shared->accum.loc = addr;
- f->shared->accum.size += size;
+ accum->loc = addr;
+ accum->size += size;
/* Adjust the dirty region and mark accumulator dirty */
- if(f->shared->accum.dirty)
- f->shared->accum.dirty_len = size + f->shared->accum.dirty_off
- + f->shared->accum.dirty_len;
+ if(accum->dirty)
+ accum->dirty_len = size + accum->dirty_off + accum->dirty_len;
else {
- f->shared->accum.dirty_len = size;
- f->shared->accum.dirty = TRUE;
+ accum->dirty_len = size;
+ accum->dirty = TRUE;
} /* end else */
- f->shared->accum.dirty_off = 0;
+ accum->dirty_off = 0;
} /* end if */
/* Check if the new metadata adjoins the end of the current accumulator */
- else if(addr == (f->shared->accum.loc + f->shared->accum.size)) {
+ else if(addr == (accum->loc + accum->size)) {
/* Check if we need to adjust accumulator size */
- if(H5F_accum_adjust(&f->shared->accum, f->shared->lf, dxpl_id, H5F_ACCUM_APPEND, size) < 0)
+ if(H5F__accum_adjust(accum, fio_info, H5F_ACCUM_APPEND, size) < 0)
HGOTO_ERROR(H5E_IO, H5E_CANTRESIZE, FAIL, "can't adjust metadata accumulator")
/* Copy the new metadata to the end */
- HDmemcpy(f->shared->accum.buf + f->shared->accum.size, buf, size);
+ HDmemcpy(accum->buf + accum->size, buf, size);
/* Adjust the dirty region and mark accumulator dirty */
- if(f->shared->accum.dirty)
- f->shared->accum.dirty_len = size + (f->shared->accum.size -
- f->shared->accum.dirty_off);
+ if(accum->dirty)
+ accum->dirty_len = size + (accum->size - accum->dirty_off);
else {
- f->shared->accum.dirty_off = f->shared->accum.size;
- f->shared->accum.dirty_len = size;
- f->shared->accum.dirty = TRUE;
+ accum->dirty_off = accum->size;
+ accum->dirty_len = size;
+ accum->dirty = TRUE;
} /* end else */
/* Set the new size of the metadata accumulator */
- f->shared->accum.size += size;
+ accum->size += size;
} /* end if */
/* Check if the piece of metadata being written overlaps the metadata accumulator */
- else if(H5F_addr_overlap(addr, size, f->shared->accum.loc, f->shared->accum.size)) {
+ else if(H5F_addr_overlap(addr, size, accum->loc, accum->size)) {
size_t add_size; /* New size of the accumulator buffer */
/* Check if the new metadata is entirely within the current accumulator */
- if(addr >= f->shared->accum.loc && (addr + size) <= (f->shared->accum.loc + f->shared->accum.size)) {
- size_t dirty_off = (size_t)(addr - f->shared->accum.loc);
+ if(addr >= accum->loc && (addr + size) <= (accum->loc + accum->size)) {
+ size_t dirty_off = (size_t)(addr - accum->loc);
/* Copy the new metadata to the proper location within the accumulator */
- HDmemcpy(f->shared->accum.buf + dirty_off, buf, size);
+ HDmemcpy(accum->buf + dirty_off, buf, size);
/* Adjust the dirty region and mark accumulator dirty */
- if(f->shared->accum.dirty) {
+ if(accum->dirty) {
/* Check for new metadata starting before current dirty region */
- if(dirty_off <= f->shared->accum.dirty_off) {
- if((dirty_off + size) <= (f->shared->accum.dirty_off + f->shared->accum.dirty_len))
- f->shared->accum.dirty_len = (f->shared->accum.dirty_off + f->shared->accum.dirty_len) - dirty_off;
+ if(dirty_off <= accum->dirty_off) {
+ if((dirty_off + size) <= (accum->dirty_off + accum->dirty_len))
+ accum->dirty_len = (accum->dirty_off + accum->dirty_len) - dirty_off;
else
- f->shared->accum.dirty_len = size;
- f->shared->accum.dirty_off = dirty_off;
+ accum->dirty_len = size;
+ accum->dirty_off = dirty_off;
} /* end if */
else {
- if((dirty_off + size) <= (f->shared->accum.dirty_off + f->shared->accum.dirty_len))
- ; /* f->shared->accum.dirty_len doesn't change */
+ if((dirty_off + size) <= (accum->dirty_off + accum->dirty_len))
+ ; /* accum->dirty_len doesn't change */
else
- f->shared->accum.dirty_len = (dirty_off + size) - f->shared->accum.dirty_off;
+ accum->dirty_len = (dirty_off + size) - accum->dirty_off;
} /* end else */
} /* end if */
else {
- f->shared->accum.dirty_off = dirty_off;
- f->shared->accum.dirty_len = size;
- f->shared->accum.dirty = TRUE;
+ accum->dirty_off = dirty_off;
+ accum->dirty_len = size;
+ accum->dirty = TRUE;
} /* end else */
} /* end if */
/* Check if the new metadata overlaps the beginning of the current accumulator */
- else if(addr < f->shared->accum.loc && (addr + size) <= (f->shared->accum.loc + f->shared->accum.size)) {
+ else if(addr < accum->loc && (addr + size) <= (accum->loc + accum->size)) {
size_t old_offset; /* Offset of old data within the accumulator buffer */
/* Calculate the amount we will need to add to the accumulator size, based on the amount of overlap */
- H5_ASSIGN_OVERFLOW(add_size, (f->shared->accum.loc - addr), hsize_t, size_t);
+ H5_ASSIGN_OVERFLOW(add_size, (accum->loc - addr), hsize_t, size_t);
/* Check if we need to adjust accumulator size */
- if(H5F_accum_adjust(&f->shared->accum, f->shared->lf, dxpl_id, H5F_ACCUM_PREPEND, add_size) < 0)
+ if(H5F__accum_adjust(accum, fio_info, H5F_ACCUM_PREPEND, add_size) < 0)
HGOTO_ERROR(H5E_IO, H5E_CANTRESIZE, FAIL, "can't adjust metadata accumulator")
/* Calculate the proper offset of the existing metadata */
- H5_ASSIGN_OVERFLOW(old_offset, (addr + size) - f->shared->accum.loc, hsize_t, size_t);
+ H5_ASSIGN_OVERFLOW(old_offset, (addr + size) - accum->loc, hsize_t, size_t);
/* Move the existing metadata to the proper location */
- HDmemmove(f->shared->accum.buf + size, f->shared->accum.buf + old_offset, (f->shared->accum.size - old_offset));
+ HDmemmove(accum->buf + size, accum->buf + old_offset, (accum->size - old_offset));
/* Copy the new metadata at the front */
- HDmemcpy(f->shared->accum.buf, buf, size);
+ HDmemcpy(accum->buf, buf, size);
/* Set the new size & location of the metadata accumulator */
- f->shared->accum.loc = addr;
- f->shared->accum.size += add_size;
+ accum->loc = addr;
+ accum->size += add_size;
/* Adjust the dirty region and mark accumulator dirty */
- if(f->shared->accum.dirty) {
- size_t curr_dirty_end = add_size + f->shared->accum.dirty_off + f->shared->accum.dirty_len;
+ if(accum->dirty) {
+ size_t curr_dirty_end = add_size + accum->dirty_off + accum->dirty_len;
- f->shared->accum.dirty_off = 0;
+ accum->dirty_off = 0;
if(size <= curr_dirty_end)
- f->shared->accum.dirty_len = curr_dirty_end;
+ accum->dirty_len = curr_dirty_end;
else
- f->shared->accum.dirty_len = size;
+ accum->dirty_len = size;
} /* end if */
else {
- f->shared->accum.dirty_off = 0;
- f->shared->accum.dirty_len = size;
- f->shared->accum.dirty = TRUE;
+ accum->dirty_off = 0;
+ accum->dirty_len = size;
+ accum->dirty = TRUE;
} /* end else */
} /* end if */
/* Check if the new metadata overlaps the end of the current accumulator */
- else if(addr >= f->shared->accum.loc && (addr + size) > (f->shared->accum.loc + f->shared->accum.size)) {
+ else if(addr >= accum->loc && (addr + size) > (accum->loc + accum->size)) {
size_t dirty_off; /* Offset of dirty region */
/* Calculate the amount we will need to add to the accumulator size, based on the amount of overlap */
- H5_ASSIGN_OVERFLOW(add_size, (addr + size) - (f->shared->accum.loc + f->shared->accum.size), hsize_t, size_t);
+ H5_ASSIGN_OVERFLOW(add_size, (addr + size) - (accum->loc + accum->size), hsize_t, size_t);
/* Check if we need to adjust accumulator size */
- if(H5F_accum_adjust(&f->shared->accum, f->shared->lf, dxpl_id, H5F_ACCUM_APPEND, add_size) < 0)
+ if(H5F__accum_adjust(accum, fio_info, H5F_ACCUM_APPEND, add_size) < 0)
HGOTO_ERROR(H5E_IO, H5E_CANTRESIZE, FAIL, "can't adjust metadata accumulator")
/* Compute offset of dirty region (after adjusting accumulator) */
- dirty_off = (size_t)(addr - f->shared->accum.loc);
+ dirty_off = (size_t)(addr - accum->loc);
/* Copy the new metadata to the end */
- HDmemcpy(f->shared->accum.buf + dirty_off, buf, size);
+ HDmemcpy(accum->buf + dirty_off, buf, size);
/* Set the new size of the metadata accumulator */
- f->shared->accum.size += add_size;
+ accum->size += add_size;
/* Adjust the dirty region and mark accumulator dirty */
- if(f->shared->accum.dirty) {
+ if(accum->dirty) {
/* Check for new metadata starting before current dirty region */
- if(dirty_off <= f->shared->accum.dirty_off) {
- f->shared->accum.dirty_off = dirty_off;
- f->shared->accum.dirty_len = size;
+ if(dirty_off <= accum->dirty_off) {
+ accum->dirty_off = dirty_off;
+ accum->dirty_len = size;
} /* end if */
else {
- f->shared->accum.dirty_len = (dirty_off + size) - f->shared->accum.dirty_off;
+ accum->dirty_len = (dirty_off + size) - accum->dirty_off;
} /* end else */
} /* end if */
else {
- f->shared->accum.dirty_off = dirty_off;
- f->shared->accum.dirty_len = size;
- f->shared->accum.dirty = TRUE;
+ accum->dirty_off = dirty_off;
+ accum->dirty_len = size;
+ accum->dirty = TRUE;
} /* end else */
} /* end if */
/* New metadata overlaps both ends of the current accumulator */
else {
/* Check if we need more buffer space */
- if(size > f->shared->accum.alloc_size) {
+ if(size > accum->alloc_size) {
size_t new_alloc_size; /* New size of accumulator */
/* Adjust the buffer size to be a power of 2 that is large enough to hold data */
new_alloc_size = (size_t)1 << (1 + H5VM_log2_gen((uint64_t)(size - 1)));
/* Reallocate the metadata accumulator buffer */
- if(NULL == (f->shared->accum.buf = H5FL_BLK_REALLOC(meta_accum, f->shared->accum.buf, new_alloc_size)))
+ if(NULL == (accum->buf = H5FL_BLK_REALLOC(meta_accum, accum->buf, new_alloc_size)))
HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "unable to allocate metadata accumulator buffer")
/* Note the new buffer size */
- f->shared->accum.alloc_size = new_alloc_size;
+ accum->alloc_size = new_alloc_size;
#ifdef H5_CLEAR_MEMORY
-HDmemset(f->shared->accum.buf + size, 0, (f->shared->accum.alloc_size - size));
+HDmemset(accum->buf + size, 0, (accum->alloc_size - size));
#endif /* H5_CLEAR_MEMORY */
} /* end if */
/* Copy the new metadata to the buffer */
- HDmemcpy(f->shared->accum.buf, buf, size);
+ HDmemcpy(accum->buf, buf, size);
/* Set the new size & location of the metadata accumulator */
- f->shared->accum.loc = addr;
- f->shared->accum.size = size;
+ accum->loc = addr;
+ accum->size = size;
/* Adjust the dirty region and mark accumulator dirty */
- f->shared->accum.dirty_off = 0;
- f->shared->accum.dirty_len = size;
- f->shared->accum.dirty = TRUE;
+ accum->dirty_off = 0;
+ accum->dirty_len = size;
+ accum->dirty = TRUE;
} /* end else */
} /* end if */
/* New piece of metadata doesn't adjoin or overlap the existing accumulator */
else {
/* Write out the existing metadata accumulator, with dispatch to driver */
- if(f->shared->accum.dirty) {
- if(H5FD_write(f->shared->lf, dxpl_id, H5FD_MEM_DEFAULT, f->shared->accum.loc + f->shared->accum.dirty_off, f->shared->accum.dirty_len, f->shared->accum.buf + f->shared->accum.dirty_off) < 0)
+ if(accum->dirty) {
+ if(H5FD_write(fio_info->f->shared->lf, fio_info->dxpl, H5FD_MEM_DEFAULT, accum->loc + accum->dirty_off, accum->dirty_len, accum->buf + accum->dirty_off) < 0)
HGOTO_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, "file write failed")
/* Reset accumulator dirty flag */
- f->shared->accum.dirty = FALSE;
+ accum->dirty = FALSE;
} /* end if */
/* Cache the new piece of metadata */
/* Check if we need to resize the buffer */
- if(size > f->shared->accum.alloc_size) {
+ if(size > accum->alloc_size) {
size_t new_size; /* New size of accumulator */
/* Adjust the buffer size to be a power of 2 that is large enough to hold data */
new_size = (size_t)1 << (1 + H5VM_log2_gen((uint64_t)(size - 1)));
/* Grow the metadata accumulator buffer */
- if(NULL == (f->shared->accum.buf = H5FL_BLK_REALLOC(meta_accum, f->shared->accum.buf, new_size)))
+ if(NULL == (accum->buf = H5FL_BLK_REALLOC(meta_accum, accum->buf, new_size)))
HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "unable to allocate metadata accumulator buffer")
/* Note the new buffer size */
- f->shared->accum.alloc_size = new_size;
+ accum->alloc_size = new_size;
#ifdef H5_CLEAR_MEMORY
{
-size_t clear_size = MAX(f->shared->accum.size, size);
-HDmemset(f->shared->accum.buf + clear_size, 0, (f->shared->accum.alloc_size - clear_size));
+size_t clear_size = MAX(accum->size, size);
+HDmemset(accum->buf + clear_size, 0, (accum->alloc_size - clear_size));
}
#endif /* H5_CLEAR_MEMORY */
} /* end if */
else {
/* Check if we should shrink the accumulator buffer */
- if(size < (f->shared->accum.alloc_size / H5F_ACCUM_THROTTLE) &&
- f->shared->accum.alloc_size > H5F_ACCUM_THRESHOLD) {
- size_t tmp_size = (f->shared->accum.alloc_size / H5F_ACCUM_THROTTLE); /* New size of accumulator buffer */
+ if(size < (accum->alloc_size / H5F_ACCUM_THROTTLE) &&
+ accum->alloc_size > H5F_ACCUM_THRESHOLD) {
+ size_t tmp_size = (accum->alloc_size / H5F_ACCUM_THROTTLE); /* New size of accumulator buffer */
/* Shrink the accumulator buffer */
- if(NULL == (f->shared->accum.buf = H5FL_BLK_REALLOC(meta_accum, f->shared->accum.buf, tmp_size)))
+ if(NULL == (accum->buf = H5FL_BLK_REALLOC(meta_accum, accum->buf, tmp_size)))
HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "unable to allocate metadata accumulator buffer")
/* Note the new buffer size */
- f->shared->accum.alloc_size = tmp_size;
+ accum->alloc_size = tmp_size;
} /* end if */
} /* end else */
/* Update the metadata accumulator information */
- f->shared->accum.loc = addr;
- f->shared->accum.size = size;
+ accum->loc = addr;
+ accum->size = size;
/* Store the piece of metadata in the accumulator */
- HDmemcpy(f->shared->accum.buf, buf, size);
+ HDmemcpy(accum->buf, buf, size);
/* Adjust the dirty region and mark accumulator dirty */
- f->shared->accum.dirty_off = 0;
- f->shared->accum.dirty_len = size;
- f->shared->accum.dirty = TRUE;
+ accum->dirty_off = 0;
+ accum->dirty_len = size;
+ accum->dirty = TRUE;
} /* end else */
} /* end if */
/* No metadata in the accumulator, grab this piece and keep it */
else {
/* Check if we need to reallocate the buffer */
- if(size > f->shared->accum.alloc_size) {
+ if(size > accum->alloc_size) {
size_t new_size; /* New size of accumulator */
/* Adjust the buffer size to be a power of 2 that is large enough to hold data */
new_size = (size_t)1 << (1 + H5VM_log2_gen((uint64_t)(size - 1)));
/* Reallocate the metadata accumulator buffer */
- if(NULL == (f->shared->accum.buf = H5FL_BLK_REALLOC(meta_accum, f->shared->accum.buf, new_size)))
+ if(NULL == (accum->buf = H5FL_BLK_REALLOC(meta_accum, accum->buf, new_size)))
HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "unable to allocate metadata accumulator buffer")
/* Note the new buffer size */
- f->shared->accum.alloc_size = new_size;
+ accum->alloc_size = new_size;
#ifdef H5_CLEAR_MEMORY
-HDmemset(f->shared->accum.buf + size, 0, (f->shared->accum.alloc_size - size));
+HDmemset(accum->buf + size, 0, (accum->alloc_size - size));
#endif /* H5_CLEAR_MEMORY */
} /* end if */
/* Update the metadata accumulator information */
- f->shared->accum.loc = addr;
- f->shared->accum.size = size;
+ accum->loc = addr;
+ accum->size = size;
/* Store the piece of metadata in the accumulator */
- HDmemcpy(f->shared->accum.buf, buf, size);
+ HDmemcpy(accum->buf, buf, size);
/* Adjust the dirty region and mark accumulator dirty */
- f->shared->accum.dirty_off = 0;
- f->shared->accum.dirty_len = size;
- f->shared->accum.dirty = TRUE;
+ accum->dirty_off = 0;
+ accum->dirty_len = size;
+ accum->dirty = TRUE;
} /* end else */
} /* end if */
else {
/* Write the data */
- if(H5FD_write(f->shared->lf, dxpl_id, map_type, addr, size, buf) < 0)
+ if(H5FD_write(fio_info->f->shared->lf, fio_info->dxpl, map_type, addr, size, buf) < 0)
HGOTO_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, "file write failed")
/* Check for overlap w/accumulator */
/* (Note that this could be improved by updating the accumulator
* with [some of] the information just read in. -QAK)
*/
- if(H5F_addr_overlap(addr, size, f->shared->accum.loc, f->shared->accum.size)) {
+ if(H5F_addr_overlap(addr, size, accum->loc, accum->size)) {
/* Check for write starting before beginning of accumulator */
- if(H5F_addr_le(addr, f->shared->accum.loc)) {
+ if(H5F_addr_le(addr, accum->loc)) {
/* Check for write ending within accumulator */
- if(H5F_addr_le(addr + size, f->shared->accum.loc + f->shared->accum.size)) {
+ if(H5F_addr_le(addr + size, accum->loc + accum->size)) {
size_t overlap_size; /* Size of overlapping region */
/* Compute overlap size */
- overlap_size = (size_t)((addr + size) - f->shared->accum.loc);
+ overlap_size = (size_t)((addr + size) - accum->loc);
/* Check for dirty region */
- if(f->shared->accum.dirty) {
- haddr_t dirty_start = f->shared->accum.loc + f->shared->accum.dirty_off; /* File address of start of dirty region */
- haddr_t dirty_end = dirty_start + f->shared->accum.dirty_len; /* File address of end of dirty region */
+ if(accum->dirty) {
+ haddr_t dirty_start = accum->loc + accum->dirty_off; /* File address of start of dirty region */
+ haddr_t dirty_end = dirty_start + accum->dirty_len; /* File address of end of dirty region */
/* Check if entire dirty region is overwritten */
if(H5F_addr_le(dirty_end, addr + size)) {
- f->shared->accum.dirty = FALSE;
- f->shared->accum.dirty_len = 0;
+ accum->dirty = FALSE;
+ accum->dirty_len = 0;
} /* end if */
else {
/* Check for dirty region falling after write */
if(H5F_addr_le(addr + size, dirty_start))
- f->shared->accum.dirty_off = overlap_size;
+ accum->dirty_off = overlap_size;
else { /* Dirty region overlaps w/written region */
- f->shared->accum.dirty_off = 0;
- f->shared->accum.dirty_len -= (size_t)((addr + size) - dirty_start);
+ accum->dirty_off = 0;
+ accum->dirty_len -= (size_t)((addr + size) - dirty_start);
} /* end else */
} /* end if */
} /* end if */
/* Trim bottom of accumulator off */
- f->shared->accum.loc += overlap_size;
- f->shared->accum.size -= overlap_size;
- HDmemmove(f->shared->accum.buf, f->shared->accum.buf + overlap_size, f->shared->accum.size);
+ accum->loc += overlap_size;
+ accum->size -= overlap_size;
+ HDmemmove(accum->buf, accum->buf + overlap_size, accum->size);
} /* end if */
else { /* Access covers whole accumulator */
/* Reset accumulator, but don't flush */
- if(H5F_accum_reset(f, dxpl_id, FALSE) < 0)
+ if(H5F__accum_reset(fio_info, FALSE) < 0)
HGOTO_ERROR(H5E_IO, H5E_CANTRESET, FAIL, "can't reset accumulator")
} /* end else */
} /* end if */
@@ -780,49 +789,49 @@ HDmemset(f->shared->accum.buf + size, 0, (f->shared->accum.alloc_size - size));
size_t overlap_size; /* Size of overlapping region */
/* Sanity check */
- HDassert(H5F_addr_gt(addr + size, f->shared->accum.loc + f->shared->accum.size));
+ HDassert(H5F_addr_gt(addr + size, accum->loc + accum->size));
/* Compute overlap size */
- overlap_size = (size_t)((f->shared->accum.loc + f->shared->accum.size) - addr);
+ overlap_size = (size_t)((accum->loc + accum->size) - addr);
/* Check for dirty region */
- if(f->shared->accum.dirty) {
- haddr_t dirty_start = f->shared->accum.loc + f->shared->accum.dirty_off; /* File address of start of dirty region */
- haddr_t dirty_end = dirty_start + f->shared->accum.dirty_len; /* File address of end of dirty region */
+ if(accum->dirty) {
+ haddr_t dirty_start = accum->loc + accum->dirty_off; /* File address of start of dirty region */
+ haddr_t dirty_end = dirty_start + accum->dirty_len; /* File address of end of dirty region */
/* Check if entire dirty region is overwritten */
if(H5F_addr_ge(dirty_start, addr)) {
- f->shared->accum.dirty = FALSE;
- f->shared->accum.dirty_len = 0;
+ accum->dirty = FALSE;
+ accum->dirty_len = 0;
} /* end if */
else {
/* Check for dirty region falling before write */
if(H5F_addr_le(dirty_end, addr))
; /* noop */
else /* Dirty region overlaps w/written region */
- f->shared->accum.dirty_len = (size_t)(addr - dirty_start);
+ accum->dirty_len = (size_t)(addr - dirty_start);
} /* end if */
} /* end if */
/* Trim top of accumulator off */
- f->shared->accum.size -= overlap_size;
+ accum->size -= overlap_size;
} /* end else */
} /* end if */
} /* end else */
} /* end if */
else {
/* Write the data */
- if(H5FD_write(f->shared->lf, dxpl_id, map_type, addr, size, buf) < 0)
+ if(H5FD_write(fio_info->f->shared->lf, fio_info->dxpl, map_type, addr, size, buf) < 0)
HGOTO_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, "file write failed")
} /* end else */
done:
FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5F_accum_write() */
+} /* end H5F__accum_write() */
/*-------------------------------------------------------------------------
- * Function: H5F_accum_free
+ * Function: H5F__accum_free
*
* Purpose: Check for free space invalidating [part of] a metadata
* accumulator.
@@ -836,19 +845,25 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5F_accum_free(H5F_t *f, hid_t dxpl_id, H5FD_mem_t UNUSED type, haddr_t addr,
+H5F__accum_free(const H5F_io_info_t *fio_info, H5FD_mem_t UNUSED type, haddr_t addr,
hsize_t size)
{
+ H5F_meta_accum_t *accum; /* Alias for file's metadata accumulator */
herr_t ret_value = SUCCEED; /* Return value */
- FUNC_ENTER_NOAPI(FAIL)
+ FUNC_ENTER_PACKAGE
/* check arguments */
- HDassert(f);
+ HDassert(fio_info);
+ HDassert(fio_info->f);
+ HDassert(fio_info->dxpl);
+
+ /* Set up alias for file's metadata accumulator info */
+ accum = &fio_info->f->shared->accum;
/* Adjust the metadata accumulator to remove the freed block, if it overlaps */
- if((f->shared->feature_flags & H5FD_FEAT_ACCUMULATE_METADATA)
- && H5F_addr_overlap(addr, size, f->shared->accum.loc, f->shared->accum.size)) {
+ if((fio_info->f->shared->feature_flags & H5FD_FEAT_ACCUMULATE_METADATA)
+ && H5F_addr_overlap(addr, size, accum->loc, accum->size)) {
size_t overlap_size; /* Size of overlap with accumulator */
/* Sanity check */
@@ -857,57 +872,57 @@ H5F_accum_free(H5F_t *f, hid_t dxpl_id, H5FD_mem_t UNUSED type, haddr_t addr,
HDassert(H5FD_MEM_GHEAP != type); /* (global heap data is being treated as raw data currently) */
/* Check for overlapping the beginning of the accumulator */
- if(H5F_addr_le(addr, f->shared->accum.loc)) {
+ if(H5F_addr_le(addr, accum->loc)) {
/* Check for completely overlapping the accumulator */
- if(H5F_addr_ge(addr + size, f->shared->accum.loc + f->shared->accum.size)) {
+ if(H5F_addr_ge(addr + size, accum->loc + accum->size)) {
/* Reset the accumulator, but don't free buffer */
- f->shared->accum.loc = HADDR_UNDEF;
- f->shared->accum.size = 0;
- f->shared->accum.dirty = FALSE;
+ accum->loc = HADDR_UNDEF;
+ accum->size = 0;
+ accum->dirty = FALSE;
} /* end if */
/* Block to free must end within the accumulator */
else {
size_t new_accum_size; /* Size of new accumulator buffer */
/* Calculate the size of the overlap with the accumulator, etc. */
- H5_ASSIGN_OVERFLOW(overlap_size, (addr + size) - f->shared->accum.loc, haddr_t, size_t);
- new_accum_size = f->shared->accum.size - overlap_size;
+ H5_ASSIGN_OVERFLOW(overlap_size, (addr + size) - accum->loc, haddr_t, size_t);
+ new_accum_size = accum->size - overlap_size;
/* Move the accumulator buffer information to eliminate the freed block */
- HDmemmove(f->shared->accum.buf, f->shared->accum.buf + overlap_size, new_accum_size);
+ HDmemmove(accum->buf, accum->buf + overlap_size, new_accum_size);
/* Adjust the accumulator information */
- f->shared->accum.loc += overlap_size;
- f->shared->accum.size = new_accum_size;
+ accum->loc += overlap_size;
+ accum->size = new_accum_size;
/* Adjust the dirty region and possibly mark accumulator clean */
- if(f->shared->accum.dirty) {
+ if(accum->dirty) {
/* Check if block freed is entirely before dirty region */
- if(overlap_size < f->shared->accum.dirty_off)
- f->shared->accum.dirty_off -= overlap_size;
+ if(overlap_size < accum->dirty_off)
+ accum->dirty_off -= overlap_size;
else {
/* Check if block freed ends within dirty region */
- if(overlap_size < (f->shared->accum.dirty_off + f->shared->accum.dirty_len)) {
- f->shared->accum.dirty_len = (f->shared->accum.dirty_off + f->shared->accum.dirty_len) - overlap_size;
- f->shared->accum.dirty_off = 0;
+ if(overlap_size < (accum->dirty_off + accum->dirty_len)) {
+ accum->dirty_len = (accum->dirty_off + accum->dirty_len) - overlap_size;
+ accum->dirty_off = 0;
} /* end if */
/* Block freed encompasses dirty region */
else
- f->shared->accum.dirty = FALSE;
+ accum->dirty = FALSE;
} /* end else */
} /* end if */
} /* end else */
} /* end if */
/* Block to free must start within the accumulator */
else {
- haddr_t dirty_end = f->shared->accum.loc + f->shared->accum.dirty_off + f->shared->accum.dirty_len;
- haddr_t dirty_start = f->shared->accum.loc + f->shared->accum.dirty_off;
+ haddr_t dirty_end = accum->loc + accum->dirty_off + accum->dirty_len;
+ haddr_t dirty_start = accum->loc + accum->dirty_off;
/* Calculate the size of the overlap with the accumulator */
- H5_ASSIGN_OVERFLOW(overlap_size, (f->shared->accum.loc + f->shared->accum.size) - addr, haddr_t, size_t);
+ H5_ASSIGN_OVERFLOW(overlap_size, (accum->loc + accum->size) - addr, haddr_t, size_t);
/* Check if block to free begins before end of dirty region */
- if(f->shared->accum.dirty && H5F_addr_lt(addr, dirty_end)) {
+ if(accum->dirty && H5F_addr_lt(addr, dirty_end)) {
haddr_t tail_addr;
/* Calculate the address of the tail to write */
@@ -918,7 +933,7 @@ H5F_accum_free(H5F_t *f, hid_t dxpl_id, H5FD_mem_t UNUSED type, haddr_t addr,
/* Check if block to free is entirely before dirty region */
if(H5F_addr_le(tail_addr, dirty_start)) {
/* Write out the entire dirty region of the accumulator */
- if(H5FD_write(f->shared->lf, dxpl_id, H5FD_MEM_DEFAULT, dirty_start, f->shared->accum.dirty_len, f->shared->accum.buf + f->shared->accum.dirty_off) < 0)
+ if(H5FD_write(fio_info->f->shared->lf, fio_info->dxpl, H5FD_MEM_DEFAULT, dirty_start, accum->dirty_len, accum->buf + accum->dirty_off) < 0)
HGOTO_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, "file write failed")
} /* end if */
/* Block to free overlaps with some/all of dirty region */
@@ -928,17 +943,17 @@ H5F_accum_free(H5F_t *f, hid_t dxpl_id, H5FD_mem_t UNUSED type, haddr_t addr,
size_t dirty_delta;
write_size = (size_t)(dirty_end - tail_addr);
- dirty_delta = f->shared->accum.dirty_len - write_size;
+ dirty_delta = accum->dirty_len - write_size;
HDassert(write_size > 0);
/* Write out the unfreed dirty region of the accumulator */
- if(H5FD_write(f->shared->lf, dxpl_id, H5FD_MEM_DEFAULT, dirty_start + dirty_delta, write_size, f->shared->accum.buf + f->shared->accum.dirty_off + dirty_delta) < 0)
+ if(H5FD_write(fio_info->f->shared->lf, fio_info->dxpl, H5FD_MEM_DEFAULT, dirty_start + dirty_delta, write_size, accum->buf + accum->dirty_off + dirty_delta) < 0)
HGOTO_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, "file write failed")
} /* end if */
/* Reset dirty flag */
- f->shared->accum.dirty = FALSE;
+ accum->dirty = FALSE;
} /* end if */
/* Block to free begins at beginning of or in middle of dirty region */
else {
@@ -948,40 +963,40 @@ H5F_accum_free(H5F_t *f, hid_t dxpl_id, H5FD_mem_t UNUSED type, haddr_t addr,
size_t dirty_delta;
write_size = (size_t)(dirty_end - tail_addr);
- dirty_delta = f->shared->accum.dirty_len - write_size;
+ dirty_delta = accum->dirty_len - write_size;
HDassert(write_size > 0);
/* Write out the unfreed end of the dirty region of the accumulator */
- if(H5FD_write(f->shared->lf, dxpl_id, H5FD_MEM_DEFAULT, dirty_start + dirty_delta, write_size, f->shared->accum.buf + f->shared->accum.dirty_off + dirty_delta) < 0)
+ if(H5FD_write(fio_info->f->shared->lf, fio_info->dxpl, H5FD_MEM_DEFAULT, dirty_start + dirty_delta, write_size, accum->buf + accum->dirty_off + dirty_delta) < 0)
HGOTO_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, "file write failed")
} /* end if */
/* Check for block to free beginning at same location as dirty region */
if(H5F_addr_eq(addr, dirty_start)) {
/* Reset dirty flag */
- f->shared->accum.dirty = FALSE;
+ accum->dirty = FALSE;
} /* end if */
/* Block to free eliminates end of dirty region */
else {
- f->shared->accum.dirty_len = (size_t)(addr - dirty_start);
+ accum->dirty_len = (size_t)(addr - dirty_start);
} /* end else */
} /* end else */
} /* end if */
/* Adjust the accumulator information */
- f->shared->accum.size = f->shared->accum.size - overlap_size;
+ accum->size = accum->size - overlap_size;
} /* end else */
} /* end if */
done:
FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5F_accum_free() */
+} /* end H5F__accum_free() */
/*-------------------------------------------------------------------------
- * Function: H5F_accum_flush
+ * Function: H5F__accum_flush
*
* Purpose: Flush the metadata accumulator to the file
*
@@ -994,32 +1009,33 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5F_accum_flush(const H5F_t *f, hid_t dxpl_id)
+H5F__accum_flush(const H5F_io_info_t *fio_info)
{
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_NOAPI(FAIL)
- HDassert(f);
- HDassert(f->shared);
+ HDassert(fio_info);
+ HDassert(fio_info->f);
+ HDassert(fio_info->dxpl);
/* Check if we need to flush out the metadata accumulator */
- if((f->shared->feature_flags & H5FD_FEAT_ACCUMULATE_METADATA) && f->shared->accum.dirty) {
+ if((fio_info->f->shared->feature_flags & H5FD_FEAT_ACCUMULATE_METADATA) && fio_info->f->shared->accum.dirty) {
/* Flush the metadata contents */
- if(H5FD_write(f->shared->lf, dxpl_id, H5FD_MEM_DEFAULT, f->shared->accum.loc + f->shared->accum.dirty_off, f->shared->accum.dirty_len, f->shared->accum.buf + f->shared->accum.dirty_off) < 0)
+ if(H5FD_write(fio_info->f->shared->lf, fio_info->dxpl, H5FD_MEM_DEFAULT, fio_info->f->shared->accum.loc + fio_info->f->shared->accum.dirty_off, fio_info->f->shared->accum.dirty_len, fio_info->f->shared->accum.buf + fio_info->f->shared->accum.dirty_off) < 0)
HGOTO_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, "file write failed")
/* Reset the dirty flag */
- f->shared->accum.dirty = FALSE;
+ fio_info->f->shared->accum.dirty = FALSE;
} /* end if */
done:
FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5F_accum_flush() */
+} /* end H5F__accum_flush() */
/*-------------------------------------------------------------------------
- * Function: H5F_accum_reset
+ * Function: H5F__accum_reset
*
* Purpose: Reset the metadata accumulator for the file
*
@@ -1032,37 +1048,38 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5F_accum_reset(const H5F_t *f, hid_t dxpl_id, hbool_t flush)
+H5F__accum_reset(const H5F_io_info_t *fio_info, hbool_t flush)
{
herr_t ret_value = SUCCEED; /* Return value */
- FUNC_ENTER_NOAPI(FAIL)
+ FUNC_ENTER_PACKAGE
- HDassert(f);
- HDassert(f->shared);
+ HDassert(fio_info);
+ HDassert(fio_info->f);
+ HDassert(fio_info->dxpl);
/* Flush any dirty data in accumulator, if requested */
if(flush)
- if(H5F_accum_flush(f, dxpl_id) < 0)
+ if(H5F__accum_flush(fio_info) < 0)
HGOTO_ERROR(H5E_FILE, H5E_CANTFLUSH, FAIL, "can't flush metadata accumulator")
/* Check if we need to reset the metadata accumulator information */
- if(f->shared->feature_flags & H5FD_FEAT_ACCUMULATE_METADATA) {
+ if(fio_info->f->shared->feature_flags & H5FD_FEAT_ACCUMULATE_METADATA) {
/* Sanity check */
- HDassert(!f->closing || FALSE == f->shared->accum.dirty);
+ HDassert(!fio_info->f->closing || FALSE == fio_info->f->shared->accum.dirty);
/* Free the buffer */
- if(f->shared->accum.buf)
- f->shared->accum.buf = H5FL_BLK_FREE(meta_accum, f->shared->accum.buf);
+ if(fio_info->f->shared->accum.buf)
+ fio_info->f->shared->accum.buf = H5FL_BLK_FREE(meta_accum, fio_info->f->shared->accum.buf);
/* Reset the buffer sizes & location */
- f->shared->accum.alloc_size = f->shared->accum.size = 0;
- f->shared->accum.loc = HADDR_UNDEF;
- f->shared->accum.dirty = FALSE;
- f->shared->accum.dirty_len = 0;
+ fio_info->f->shared->accum.alloc_size = fio_info->f->shared->accum.size = 0;
+ fio_info->f->shared->accum.loc = HADDR_UNDEF;
+ fio_info->f->shared->accum.dirty = FALSE;
+ fio_info->f->shared->accum.dirty_len = 0;
} /* end if */
done:
FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5F_accum_reset() */
+} /* end H5F__accum_reset() */
diff --git a/src/H5Fefc.c b/src/H5Fefc.c
index 08d27a1..9916002 100644
--- a/src/H5Fefc.c
+++ b/src/H5Fefc.c
@@ -36,7 +36,6 @@
#include "H5MMprivate.h" /* Memory management */
#include "H5Pprivate.h" /* Property lists */
-
/* Special values for the "tag" field below */
#define H5F_EFC_TAG_DEFAULT -1
#define H5F_EFC_TAG_LOCK -2
@@ -164,7 +163,7 @@ H5F_efc_open(H5F_t *parent, const char *name, unsigned flags, hid_t fcpl_id,
* on the state of the efc. */
if(!efc) {
if(NULL == (ret_value = H5F_open(name, flags, fcpl_id, fapl_id,
- dxpl_id)))
+ dxpl_id)))
HGOTO_ERROR(H5E_FILE, H5E_CANTOPENFILE, NULL, "can't open file")
/* Increment the number of open objects to prevent the file from being
@@ -237,7 +236,7 @@ H5F_efc_open(H5F_t *parent, const char *name, unsigned flags, hid_t fcpl_id,
else {
/* Cannot cache file, just open file and return */
if(NULL == (ret_value = H5F_open(name, flags, fcpl_id, fapl_id,
- dxpl_id)))
+ dxpl_id)))
HGOTO_ERROR(H5E_FILE, H5E_CANTOPENFILE, NULL, "can't open file")
/* Increment the number of open objects to prevent the file from
@@ -259,7 +258,7 @@ H5F_efc_open(H5F_t *parent, const char *name, unsigned flags, hid_t fcpl_id,
/* Open the file */
if(NULL == (ent->file = H5F_open(name, flags, fcpl_id, fapl_id,
- dxpl_id)))
+ dxpl_id)))
HGOTO_ERROR(H5E_FILE, H5E_CANTOPENFILE, NULL, "can't open file")
open_file = TRUE;
diff --git a/src/H5F.c b/src/H5Fint.c
similarity index 64%
copy from src/H5F.c
copy to src/H5Fint.c
index 2413c73..4e8fe65 100644
--- a/src/H5F.c
+++ b/src/H5Fint.c
@@ -54,12 +54,10 @@
#endif
#include "H5FDdirect.h" /*Linux direct I/O */
-
/****************/
/* Local Macros */
/****************/
-
/******************/
/* Local Typedefs */
/******************/
@@ -89,14 +87,10 @@ typedef struct H5F_olist_t {
/********************/
/* Local Prototypes */
/********************/
-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 H5F_t *H5F_new(H5F_file_t *shared, unsigned flags, hid_t fcpl_id,
- hid_t fapl_id, H5FD_t *lf);
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_dest(H5F_t *f, hid_t dxpl_id, hbool_t flush);
-static herr_t H5F_close(H5F_t *f);
+ const char *name, char ** /*out*/ actual_name);/* Declare a free list to manage the H5F_t struct */
/*********************/
@@ -119,41 +113,6 @@ H5FL_DEFINE(H5F_t);
/* Declare a free list to manage the H5F_file_t struct */
H5FL_DEFINE(H5F_file_t);
-/* File ID class */
-static const H5I_class_t H5I_FILE_CLS[1] = {{
- H5I_FILE, /* ID class value */
- H5I_CLASS_REUSE_IDS, /* Class flags */
- 0, /* # of reserved IDs for class */
- (H5I_free_t)H5F_close /* 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
- *
- * Programmer: Robb Matzke
- * Wednesday, December 16, 1998
- *
- *-------------------------------------------------------------------------
- */
-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() */
-
/*-------------------------------------------------------------------------
* Function: H5F_init_interface
@@ -173,145 +132,13 @@ H5F_init_interface(void)
{
herr_t ret_value = SUCCEED; /* Return value */
- FUNC_ENTER_NOAPI_NOINIT
-
- /*
- * 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")
+ FUNC_ENTER_NOAPI_NOINIT_NOERR
-done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5F_init_interface() */
/*-------------------------------------------------------------------------
- * Function: H5F_term_interface
- *
- * 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.
- *
- * Programmer: Robb Matzke
- * Friday, February 19, 1999
- *
- *-------------------------------------------------------------------------
- */
-int
-H5F_term_interface(void)
-{
- int n = 0;
-
- FUNC_ENTER_NOAPI_NOINIT_NOERR
-
- if(H5_interface_initialize_g) {
- if((n = H5I_nmembers(H5I_FILE)) != 0) {
- H5I_clear_type(H5I_FILE, FALSE, FALSE);
- } else {
- /* Make certain we've cleaned up all the shared file objects */
- H5F_sfile_assert_num(0);
-
- H5I_dec_type_ref(H5I_FILE);
- H5_interface_initialize_g = 0;
- n = 1; /*H5I*/
- } /* end else */
- } /* end if */
-
- FUNC_LEAVE_NOAPI(n)
-} /* H5F_term_interface() */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5Fget_create_plist
- *
- * Purpose: Get an atom for a copy of the file-creation property list for
- * this file. This function returns an atom with a copy of the
- * properties used to create a file.
- *
- * Return: Success: template ID
- *
- * Failure: FAIL
- *
- * Programmer: Unknown
- *
- *-------------------------------------------------------------------------
- */
-hid_t
-H5Fget_create_plist(hid_t file_id)
-{
- H5F_t *file; /* File info */
- H5P_genplist_t *plist; /* Property list */
- hid_t ret_value; /* Return value */
-
- FUNC_ENTER_API(FAIL)
- H5TRACE1("i", "i", file_id);
-
- /* check args */
- if(NULL == (file = (H5F_t *)H5I_object_verify(file_id, H5I_FILE)))
- HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a file")
- if(NULL == (plist = (H5P_genplist_t *)H5I_object(file->shared->fcpl_id)))
- HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a property list")
-
- /* Create the property list object to return */
- if((ret_value = H5P_copy_plist(plist, TRUE)) < 0)
- HGOTO_ERROR(H5E_INTERNAL, H5E_CANTINIT, FAIL, "unable to copy file creation properties")
-
-done:
- FUNC_LEAVE_API(ret_value)
-} /* end H5Fget_create_plist() */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5Fget_access_plist
- *
- * Purpose: Returns a copy of the file access property list of the
- * specified file.
- *
- * NOTE: Make sure that, if you are going to overwrite
- * information in the copied property list that was
- * previously opened and assigned to the property list, then
- * you must close it before overwriting the values.
- *
- * Return: Success: Object ID for a copy of the file access
- * property list.
- *
- * Failure: FAIL
- *
- * Programmer: Robb Matzke
- * Wednesday, February 18, 1998
- *
- *-------------------------------------------------------------------------
- */
-hid_t
-H5Fget_access_plist(hid_t file_id)
-{
- H5F_t *f; /* File info */
- hid_t ret_value; /* Return value */
-
- FUNC_ENTER_API(FAIL)
- H5TRACE1("i", "i", file_id);
-
- /* Check args */
- if(NULL == (f = (H5F_t *)H5I_object_verify(file_id, H5I_FILE)))
- HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a file")
-
- /* Retrieve the file's access property list */
- if((ret_value = H5F_get_access_plist(f, TRUE)) < 0)
- HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't get file access property list")
-
-done:
- FUNC_LEAVE_API(ret_value)
-} /* end H5Fget_access_plist() */
-
-
-/*-------------------------------------------------------------------------
* Function: H5F_get_access_plist
*
* Purpose: Returns a copy of the file access property list of the
@@ -349,7 +176,7 @@ H5F_get_access_plist(H5F_t *f, hbool_t app_ref)
HDassert(f);
/* Make a copy of the default file access property list */
- if(NULL == (old_plist = (H5P_genplist_t *)H5I_object(H5P_LST_FILE_ACCESS_g)))
+ if(NULL == (old_plist = (H5P_genplist_t *)H5I_object(H5P_LST_FILE_ACCESS_ID_g)))
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a property list")
if((ret_value = H5P_copy_plist(old_plist, app_ref)) < 0)
HGOTO_ERROR(H5E_INTERNAL, H5E_CANTINIT, FAIL, "can't copy file access property list")
@@ -415,47 +242,6 @@ done:
/*-------------------------------------------------------------------------
- * Function: H5Fget_obj_count
- *
- * Purpose: Public function returning the number of opened object IDs
- * (files, datasets, groups and datatypes) in the same file.
- *
- * Return: Non-negative on success; negative on failure.
- *
- * Programmer: Raymond Lu
- * Wednesday, Dec 5, 2001
- *
- *-------------------------------------------------------------------------
- */
-ssize_t
-H5Fget_obj_count(hid_t file_id, unsigned types)
-{
- H5F_t *f = NULL; /* File to query */
- size_t obj_count = 0; /* Number of opened objects */
- ssize_t ret_value; /* Return value */
-
- FUNC_ENTER_API(FAIL)
- H5TRACE2("Zs", "iIu", file_id, types);
-
- /* Check arguments */
- if(file_id != (hid_t)H5F_OBJ_ALL && (NULL == (f = (H5F_t *)H5I_object_verify(file_id, H5I_FILE))))
- HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "not a file id")
- if(0 == (types & H5F_OBJ_ALL))
- HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "not an object type")
-
- /* Perform the query */
- if(H5F_get_obj_count(f, types, TRUE, &obj_count) < 0)
- HGOTO_ERROR(H5E_INTERNAL, H5E_BADITER, FAIL, "H5F_get_obj_count failed")
-
- /* Set the return value */
- ret_value = (ssize_t)obj_count;
-
-done:
- FUNC_LEAVE_API(ret_value)
-} /* end H5Fget_obj_count() */
-
-
-/*-------------------------------------------------------------------------
* Function: H5F_get_obj_count
*
* Purpose: Private function return the number of opened object IDs
@@ -488,54 +274,6 @@ done:
/*-------------------------------------------------------------------------
- * Function: H5Fget_object_ids
- *
- * Purpose: Public function to return a list of opened object IDs.
- *
- * Return: Non-negative on success; negative on failure.
- *
- * Programmer: Raymond Lu
- * Wednesday, Dec 5, 2001
- *
- * Modification:
- * Raymond Lu
- * 24 September 2008
- * Changed the return value to ssize_t and MAX_OBJTS to size_t to
- * accommadate potential large number of objects.
- *
- *-------------------------------------------------------------------------
- */
-ssize_t
-H5Fget_obj_ids(hid_t file_id, unsigned types, size_t max_objs, hid_t *oid_list)
-{
- H5F_t *f = NULL; /* File to query */
- size_t obj_id_count = 0; /* Number of open objects */
- ssize_t ret_value; /* Return value */
-
- FUNC_ENTER_API(FAIL)
- H5TRACE4("Zs", "iIuz*i", file_id, types, max_objs, oid_list);
-
- /* Check arguments */
- if(file_id != (hid_t)H5F_OBJ_ALL && (NULL == (f = (H5F_t *)H5I_object_verify(file_id, H5I_FILE))))
- HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "not a file id")
- if(0 == (types & H5F_OBJ_ALL))
- HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "not an object type")
- if(!oid_list)
- HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "object ID list is NULL")
-
- /* Perform the query */
- if(H5F_get_obj_ids(f, types, max_objs, oid_list, TRUE, &obj_id_count) < 0)
- HGOTO_ERROR(H5E_INTERNAL, H5E_BADITER, FAIL, "H5F_get_obj_ids failed")
-
- /* Set the return value */
- ret_value = (ssize_t)obj_id_count;
-
-done:
- FUNC_LEAVE_API(ret_value)
-} /* end H5Fget_obj_ids() */
-
-
-/*-------------------------------------------------------------------------
* Function: H5F_get_obj_ids
*
* Purpose: Private function to return a list of opened object IDs.
@@ -579,7 +317,7 @@ done:
*
*---------------------------------------------------------------------------
*/
-static herr_t
+herr_t
H5F_get_objects(const H5F_t *f, unsigned types, size_t max_nobjs, hid_t *obj_id_list, hbool_t app_ref, size_t *obj_id_count_ptr)
{
size_t obj_id_count=0; /* Number of open IDs */
@@ -783,47 +521,7 @@ done:
/*-------------------------------------------------------------------------
- * Function: H5Fget_vfd_handle
- *
- * Purpose: Returns a pointer to the file handle of the low-level file
- * driver.
- *
- * Return: Success: non-negative value.
- * Failure: negative.
- *
- * Programmer: Raymond Lu
- * Sep. 16, 2002
- *
- *-------------------------------------------------------------------------
- */
-herr_t
-H5Fget_vfd_handle(hid_t file_id, hid_t fapl, void **file_handle)
-{
- H5F_t *file; /* File to query */
- herr_t ret_value = SUCCEED; /* Return value */
-
- FUNC_ENTER_API(FAIL)
- H5TRACE3("e", "ii**x", file_id, fapl, file_handle);
-
- /* Check args */
- if(!file_handle)
- HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid file handle pointer")
-
- /* Get the file */
- if(NULL == (file = (H5F_t *)H5I_object_verify(file_id, H5I_FILE)))
- HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "not a file id")
-
- /* Retrieve the VFD handle for the file */
- if(H5F_get_vfd_handle(file, fapl, file_handle) < 0)
- HGOTO_ERROR(H5E_FILE, H5E_CANTGET, FAIL, "can't retrieve VFD handle")
-
-done:
- FUNC_LEAVE_API(ret_value)
-} /* end H5Fget_vfd_handle() */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5Fis_hdf5
+ * Function: H5F_is_hdf5
*
* Purpose: Check the file signature to detect an HDF5 file.
*
@@ -843,25 +541,20 @@ done:
*-------------------------------------------------------------------------
*/
htri_t
-H5Fis_hdf5(const char *name)
+H5F_is_hdf5(const char *name)
{
- H5FD_t *file = NULL; /* Low-level file struct */
- haddr_t sig_addr; /* Address of hdf5 file signature */
- htri_t ret_value; /* Return value */
-
- FUNC_ENTER_API(FAIL)
- H5TRACE1("t", "*s", name);
+ H5FD_t *file = NULL; /* Low-level file struct */
+ haddr_t sig_addr; /* Addess of hdf5 file signature */
+ htri_t ret_value; /* Return value */
- /* Check args and all the boring stuff. */
- if(!name || !*name)
- HGOTO_ERROR(H5E_ARGS, H5E_BADRANGE, FAIL, "no file name specified")
+ FUNC_ENTER_NOAPI_NOINIT
/* Open the file at the virtual file layer */
if(NULL == (file = H5FD_open(name, H5F_ACC_RDONLY, H5P_FILE_ACCESS_DEFAULT, HADDR_UNDEF)))
- HGOTO_ERROR(H5E_IO, H5E_CANTINIT, FAIL, "unable to open file")
+ HGOTO_ERROR(H5E_IO, H5E_CANTINIT, FAIL, "unable to open file")
/* The file is an hdf5 file if the hdf5 file signature can be found */
- if(H5F_locate_signature(file, H5AC_ind_dxpl_id, &sig_addr) < 0)
+ if(H5FD_locate_signature(file, H5AC_ind_dxpl_g, &sig_addr) < 0)
HGOTO_ERROR(H5E_FILE, H5E_NOTHDF5, FAIL, "unable to locate file signature")
ret_value = (HADDR_UNDEF != sig_addr);
@@ -871,8 +564,8 @@ done:
if(H5FD_close(file) < 0 && ret_value >= 0)
HDONE_ERROR(H5E_IO, H5E_CANTCLOSEFILE, FAIL, "unable to close file")
- FUNC_LEAVE_API(ret_value)
-} /* end H5Fis_hdf5() */
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5F_is_hdf5() */
/*-------------------------------------------------------------------------
@@ -897,7 +590,7 @@ done:
*
*-------------------------------------------------------------------------
*/
-static H5F_t *
+H5F_t *
H5F_new(H5F_file_t *shared, unsigned flags, hid_t fcpl_id, hid_t fapl_id, H5FD_t *lf)
{
H5F_t *f = NULL, *ret_value;
@@ -1064,7 +757,7 @@ done:
*
*-------------------------------------------------------------------------
*/
-static herr_t
+herr_t
H5F_dest(H5F_t *f, hid_t dxpl_id, hbool_t flush)
{
herr_t ret_value = SUCCEED; /* Return value */
@@ -1076,6 +769,8 @@ H5F_dest(H5F_t *f, hid_t dxpl_id, hbool_t flush)
HDassert(f->shared);
if(1 == f->shared->nrefs) {
+ H5F_io_info_t fio_info; /* I/O info for operation */
+
/* Flush at this point since the file will be closed.
* Only try to flush the file if it was opened with write access, and if
* the caller requested a flush.
@@ -1133,8 +828,13 @@ H5F_dest(H5F_t *f, hid_t dxpl_id, hbool_t flush)
f->shared->root_grp = NULL;
} /* end if */
+ /* Set up I/O info for operation */
+ fio_info.f = f;
+ if(NULL == (fio_info.dxpl = (H5P_genplist_t *)H5I_object(dxpl_id)))
+ HDONE_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "can't get property list")
+
/* Destroy other components of the file */
- if(H5F_accum_reset(f, dxpl_id, TRUE) < 0)
+ if(H5F__accum_reset(&fio_info, TRUE) < 0)
/* Push error, but keep going*/
HDONE_ERROR(H5E_FILE, H5E_CANTRELEASE, FAIL, "problems closing file")
if(H5FO_dest(f) < 0)
@@ -1435,387 +1135,99 @@ done:
/*-------------------------------------------------------------------------
- * Function: H5Fcreate
- *
- * Purpose: This is the primary function for creating HDF5 files . The
- * flags parameter determines whether an existing file will be
- * overwritten or not. All newly created files are opened for
- * both reading and writing. All flags may be combined with the
- * bit-wise OR operator (`|') to change the behavior of the file
- * create call.
- *
- * The more complex behaviors of a file's creation and access
- * are controlled through the file-creation and file-access
- * property lists. The value of H5P_DEFAULT for a template
- * value indicates that the library should use the default
- * values for the appropriate template.
- *
- * See also: H5Fpublic.h for the list of supported flags. H5Ppublic.h for
- * the list of file creation and file access properties.
+ * Function: H5F_flush
*
- * Return: Success: A file ID
+ * Purpose: Flushes cached data.
*
- * Failure: FAIL
+ * Return: Non-negative on success/Negative on failure
*
- * Programmer: Unknown
+ * Programmer: Robb Matzke
+ * matzke at llnl.gov
+ * Aug 29 1997
*
*-------------------------------------------------------------------------
*/
-hid_t
-H5Fcreate(const char *filename, unsigned flags, hid_t fcpl_id, hid_t fapl_id)
+herr_t
+H5F_flush(H5F_t *f, hid_t dxpl_id, hbool_t closing)
{
- H5F_t *new_file = NULL; /*file struct for new file */
- hid_t ret_value; /*return value */
+ H5F_io_info_t fio_info; /* I/O info for operation */
+ herr_t ret_value = SUCCEED; /* Return value */
- FUNC_ENTER_API(FAIL)
- H5TRACE4("i", "*sIuii", filename, flags, fcpl_id, fapl_id);
+ FUNC_ENTER_NOAPI(FAIL)
- /* Check/fix arguments */
- if(!filename || !*filename)
- HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid file name")
- /* In this routine, we only accept the following flags:
- * H5F_ACC_EXCL, H5F_ACC_TRUNC and H5F_ACC_DEBUG
- */
- if(flags & ~(H5F_ACC_EXCL | H5F_ACC_TRUNC | H5F_ACC_DEBUG))
- HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid flags")
- /* The H5F_ACC_EXCL and H5F_ACC_TRUNC flags are mutually exclusive */
- if((flags & H5F_ACC_EXCL) && (flags & H5F_ACC_TRUNC))
- HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "mutually exclusive flags for file creation")
-
- /* Check file creation property list */
- if(H5P_DEFAULT == fcpl_id)
- fcpl_id = H5P_FILE_CREATE_DEFAULT;
- else
- if(TRUE != H5P_isa_class(fcpl_id, H5P_FILE_CREATE))
- HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not file create property list")
+ /* Sanity check arguments */
+ HDassert(f);
- /* Check the file access property list */
- if(H5P_DEFAULT == fapl_id)
- fapl_id = H5P_FILE_ACCESS_DEFAULT;
- else
- if(TRUE != H5P_isa_class(fapl_id, H5P_FILE_ACCESS))
- HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not file access property list")
+ /* Flush any cached dataset storage raw data */
+ if(H5D_flush(f, dxpl_id) < 0)
+ /* Push error, but keep going*/
+ HDONE_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "unable to flush dataset cache")
- /*
- * Adjust bit flags by turning on the creation bit and making sure that
- * the EXCL or TRUNC bit is set. All newly-created files are opened for
- * reading and writing.
+ /* Release any space allocated to space aggregators, so that the eoa value
+ * corresponds to the end of the space written to in the file.
*/
- if (0==(flags & (H5F_ACC_EXCL|H5F_ACC_TRUNC)))
- flags |= H5F_ACC_EXCL; /*default*/
- flags |= H5F_ACC_RDWR | H5F_ACC_CREAT;
-
- /*
- * Create a new file or truncate an existing file.
+ /* (needs to happen before cache flush, with superblock write, since the
+ * 'eoa' value is written in superblock -QAK)
*/
- if(NULL == (new_file = H5F_open(filename, flags, fcpl_id, fapl_id, H5AC_dxpl_id)))
- HGOTO_ERROR(H5E_FILE, H5E_CANTOPENFILE, FAIL, "unable to create file")
-
- /* Get an atom for the file */
- if((ret_value = H5I_register(H5I_FILE, new_file, TRUE)) < 0)
- HGOTO_ERROR(H5E_ATOM, H5E_CANTREGISTER, FAIL, "unable to atomize file")
-
- /* Keep this ID in file object structure */
- new_file->file_id = ret_value;
-
-done:
- if(ret_value < 0 && new_file)
- if(H5F_close(new_file) < 0)
- HDONE_ERROR(H5E_FILE, H5E_CANTCLOSEFILE, FAIL, "problems closing file")
-
- FUNC_LEAVE_API(ret_value)
-} /* end H5Fcreate() */
+ if(H5MF_free_aggrs(f, dxpl_id) < 0)
+ /* Push error, but keep going*/
+ HDONE_ERROR(H5E_FILE, H5E_CANTRELEASE, FAIL, "can't release file space")
-
-/*-------------------------------------------------------------------------
- * Function: H5Fopen
- *
- * Purpose: This is the primary function for accessing existing HDF5
- * files. The FLAGS argument determines whether writing to an
- * existing file will be allowed or not. All flags may be
- * combined with the bit-wise OR operator (`|') to change the
- * behavior of the file open call. The more complex behaviors
- * of a file's access are controlled through the file-access
- * property list.
- *
- * See Also: H5Fpublic.h for a list of possible values for FLAGS.
- *
- * Return: Success: A file ID
- *
- * Failure: FAIL
- *
- * Programmer: Unknown
- *
- * Modifications:
- * Robb Matzke, 1997-07-18
- * File struct creation and destruction is through H5F_new() and
- * H5F_dest(). Reading the root symbol table entry is done with
- * H5G_decode().
- *
- * Robb Matzke, 1997-09-23
- * Most of the work is now done by H5F_open() since H5Fcreate()
- * and H5Fopen() originally contained almost identical code.
- *
- * Robb Matzke, 1998-02-18
- * Added better error checking for the flags and the file access
- * property list. It used to be possible to make the library
- * dump core by passing an object ID that was not a file access
- * property list.
- *
- * Robb Matzke, 1999-08-02
- * The file access property list is passed to the H5F_open() as
- * object IDs.
- *-------------------------------------------------------------------------
- */
-hid_t
-H5Fopen(const char *filename, unsigned flags, hid_t fapl_id)
-{
- H5F_t *new_file = NULL; /*file struct for new file */
- hid_t ret_value; /*return value */
-
- FUNC_ENTER_API(FAIL)
- H5TRACE3("i", "*sIui", filename, flags, fapl_id);
-
- /* Check/fix arguments. */
- if(!filename || !*filename)
- HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid file name")
- /* Reject undefined flags (~H5F_ACC_PUBLIC_FLAGS) and the H5F_ACC_TRUNC & H5F_ACC_EXCL flags */
- if((flags & ~H5F_ACC_PUBLIC_FLAGS) ||
- (flags & H5F_ACC_TRUNC) || (flags & H5F_ACC_EXCL))
- HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid file open flags")
- if(H5P_DEFAULT == fapl_id)
- fapl_id = H5P_FILE_ACCESS_DEFAULT;
- else
- if(TRUE != H5P_isa_class(fapl_id, H5P_FILE_ACCESS))
- HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not file access property list")
+ /* Flush the entire metadata cache */
+ if(H5AC_flush(f, dxpl_id) < 0)
+ /* Push error, but keep going*/
+ HDONE_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "unable to flush metadata cache")
- /* Open the file */
- if(NULL == (new_file = H5F_open(filename, flags, H5P_FILE_CREATE_DEFAULT, fapl_id, H5AC_dxpl_id)))
- HGOTO_ERROR(H5E_FILE, H5E_CANTOPENFILE, FAIL, "unable to open file")
+ /* Set up I/O info for operation */
+ fio_info.f = f;
+ if(NULL == (fio_info.dxpl = (H5P_genplist_t *)H5I_object(dxpl_id)))
+ HDONE_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "can't get property list")
- /* Get an atom for the file */
- if((ret_value = H5I_register(H5I_FILE, new_file, TRUE)) < 0)
- HGOTO_ERROR(H5E_ATOM, H5E_CANTREGISTER, FAIL, "unable to atomize file handle")
+ /* Flush out the metadata accumulator */
+ if(H5F__accum_flush(&fio_info) < 0)
+ /* Push error, but keep going*/
+ HDONE_ERROR(H5E_IO, H5E_CANTFLUSH, FAIL, "unable to flush metadata accumulator")
- /* Keep this ID in file object structure */
- new_file->file_id = ret_value;
+ /* Flush file buffers to disk. */
+ if(H5FD_flush(f->shared->lf, dxpl_id, closing) < 0)
+ /* Push error, but keep going*/
+ HDONE_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, "low level flush failed")
done:
- if(ret_value < 0 && new_file && H5F_try_close(new_file) < 0)
- HDONE_ERROR(H5E_FILE, H5E_CANTCLOSEFILE, FAIL, "problems closing file")
-
- FUNC_LEAVE_API(ret_value)
-} /* end H5Fopen() */
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5F_flush() */
/*-------------------------------------------------------------------------
- * Function: H5Fflush
+ * Function: H5F_close
+ *
+ * Purpose: Closes a file or causes the close operation to be pended.
+ * This function is called two ways: from the API it gets called
+ * by H5Fclose->H5I_dec_ref->H5F_close 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() 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).
*
- * Purpose: Flushes all outstanding buffers of a file to disk but does
- * not remove them from the cache. The OBJECT_ID can be a file,
- * dataset, group, attribute, or named data type.
+ * This function is also called directly from H5O_close() when
+ * the last object header is closed for the file and the file
+ * has a pending close.
*
* Return: Non-negative on success/Negative on failure
*
* Programmer: Robb Matzke
- * Thursday, August 6, 1998
+ * Tuesday, September 23, 1997
*
*-------------------------------------------------------------------------
*/
herr_t
-H5Fflush(hid_t object_id, H5F_scope_t scope)
+H5F_close(H5F_t *f)
{
- H5F_t *f = NULL; /* File to flush */
- H5O_loc_t *oloc = NULL; /* Object location for ID */
- herr_t ret_value = SUCCEED; /* Return value */
-
- FUNC_ENTER_API(FAIL)
- H5TRACE2("e", "iFs", object_id, scope);
+ herr_t ret_value = SUCCEED; /* Return value */
- switch(H5I_get_type(object_id)) {
- case H5I_FILE:
- if(NULL == (f = (H5F_t *)H5I_object(object_id)))
- HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid file identifier")
- break;
-
- case H5I_GROUP:
- {
- H5G_t *grp;
-
- if(NULL == (grp = (H5G_t *)H5I_object(object_id)))
- HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid group identifier")
- oloc = H5G_oloc(grp);
- }
- break;
-
- case H5I_DATATYPE:
- {
- H5T_t *type;
-
- if(NULL == (type = (H5T_t *)H5I_object(object_id)))
- HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid type identifier")
- oloc = H5T_oloc(type);
- }
- break;
-
- case H5I_DATASET:
- {
- H5D_t *dset;
-
- if(NULL == (dset = (H5D_t *)H5I_object(object_id)))
- HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid dataset identifier")
- oloc = H5D_oloc(dset);
- }
- break;
-
- case H5I_ATTR:
- {
- H5A_t *attr;
-
- if(NULL == (attr = (H5A_t *)H5I_object(object_id)))
- HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid attribute identifier")
- oloc = H5A_oloc(attr);
- }
- break;
-
- case H5I_UNINIT:
- case H5I_BADID:
- case H5I_DATASPACE:
- case H5I_REFERENCE:
- case H5I_VFL:
- case H5I_GENPROP_CLS:
- case H5I_GENPROP_LST:
- case H5I_ERROR_CLASS:
- case H5I_ERROR_MSG:
- case H5I_ERROR_STACK:
- case H5I_NTYPES:
- default:
- HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a file or file object")
- } /* end switch */
-
- if(!f) {
- if(!oloc)
- HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "object is not assocated with a file")
- f = oloc->file;
- } /* end if */
- if(!f)
- HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "object is not associated with a file")
-
- /* Flush the file */
- /*
- * Nothing to do if the file is read only. This determination is
- * made at the shared open(2) flags level, implying that opening a
- * file twice, once for read-only and once for read-write, and then
- * calling H5Fflush() with the read-only handle, still causes data
- * to be flushed.
- */
- if(H5F_ACC_RDWR & H5F_INTENT(f)) {
- /* Flush other files, depending on scope */
- if(H5F_SCOPE_GLOBAL == scope) {
- /* Call the flush routine for mounted file hierarchies */
- if(H5F_flush_mounts(f, H5AC_dxpl_id) < 0)
- HGOTO_ERROR(H5E_FILE, H5E_CANTFLUSH, FAIL, "unable to flush mounted file hierarchy")
- } /* end if */
- else {
- /* Call the flush routine, for this file */
- if(H5F_flush(f, H5AC_dxpl_id, FALSE) < 0)
- HGOTO_ERROR(H5E_FILE, H5E_CANTFLUSH, FAIL, "unable to flush file's cached information")
- } /* end else */
- } /* end if */
-
-done:
- FUNC_LEAVE_API(ret_value)
-} /* end H5Fflush() */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5F_flush
- *
- * Purpose: Flushes cached data.
- *
- * Return: Non-negative on success/Negative on failure
- *
- * Programmer: Robb Matzke
- * matzke at llnl.gov
- * Aug 29 1997
- *
- *-------------------------------------------------------------------------
- */
-herr_t
-H5F_flush(H5F_t *f, hid_t dxpl_id, hbool_t closing)
-{
- herr_t ret_value = SUCCEED; /* Return value */
-
- FUNC_ENTER_NOAPI(FAIL)
-
- /* Sanity check arguments */
- HDassert(f);
-
- /* Flush any cached dataset storage raw data */
- if(H5D_flush(f, dxpl_id) < 0)
- /* Push error, but keep going*/
- HDONE_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "unable to flush dataset cache")
-
- /* Release any space allocated to space aggregators, so that the eoa value
- * corresponds to the end of the space written to in the file.
- */
- /* (needs to happen before cache flush, with superblock write, since the
- * 'eoa' value is written in superblock -QAK)
- */
- if(H5MF_free_aggrs(f, dxpl_id) < 0)
- /* Push error, but keep going*/
- HDONE_ERROR(H5E_FILE, H5E_CANTRELEASE, FAIL, "can't release file space")
-
- /* Flush the entire metadata cache */
- if(H5AC_flush(f, dxpl_id) < 0)
- /* Push error, but keep going*/
- HDONE_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "unable to flush metadata cache")
-
- /* Flush out the metadata accumulator */
- if(H5F_accum_flush(f, dxpl_id) < 0)
- /* Push error, but keep going*/
- HDONE_ERROR(H5E_IO, H5E_CANTFLUSH, FAIL, "unable to flush metadata accumulator")
-
- /* Flush file buffers to disk. */
- if(H5FD_flush(f->shared->lf, dxpl_id, closing) < 0)
- /* Push error, but keep going*/
- HDONE_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, "low level flush failed")
-
-done:
- FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5F_flush() */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5F_close
- *
- * Purpose: Closes a file or causes the close operation to be pended.
- * This function is called two ways: from the API it gets called
- * by H5Fclose->H5I_dec_ref->H5F_close 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() 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).
- *
- * This function is also called directly from H5O_close() when
- * the last object header is closed for the file and the file
- * has a pending close.
- *
- * Return: Non-negative on success/Negative on failure
- *
- * Programmer: Robb Matzke
- * Tuesday, September 23, 1997
- *
- *-------------------------------------------------------------------------
- */
-static herr_t
-H5F_close(H5F_t *f)
-{
- herr_t ret_value = SUCCEED; /* Return value */
-
- FUNC_ENTER_NOAPI_NOINIT
+ FUNC_ENTER_NOAPI_NOINIT
/* Sanity check */
HDassert(f);
@@ -2014,170 +1426,6 @@ done:
/*-------------------------------------------------------------------------
- * Function: H5Fclose
- *
- * Purpose: This function closes the file specified by FILE_ID by
- * flushing all data to storage, and terminating access to the
- * file through FILE_ID. If objects (e.g., datasets, groups,
- * etc.) are open in the file then the underlying storage is not
- * closed until those objects are closed; however, all data for
- * the file and the open objects is flushed.
- *
- * Return: Success: Non-negative
- *
- * Failure: Negative
- *
- * Programmer: Robb Matzke
- * Saturday, February 20, 1999
- *
- * Modifications:
- *
- *-------------------------------------------------------------------------
- */
-herr_t
-H5Fclose(hid_t file_id)
-{
- H5F_t *f = NULL;
- int nref;
- herr_t ret_value = SUCCEED;
-
- FUNC_ENTER_API(FAIL)
- H5TRACE1("e", "i", file_id);
-
- /* Check/fix arguments. */
- if(H5I_FILE != H5I_get_type(file_id))
- HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a file ID")
-
- /* Flush file if this is the last reference to this id and we have write
- * intent, unless it will be flushed by the "shared" file being closed.
- * This is only necessary to replicate previous behaviour, and could be
- * disabled by an option/property to improve performance. */
- if(NULL == (f = (H5F_t *)H5I_object(file_id)))
- HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid file identifier")
- if((f->shared->nrefs > 1) && (H5F_INTENT(f) & H5F_ACC_RDWR)) {
- if((nref = H5I_get_ref(file_id, FALSE)) < 0)
- HGOTO_ERROR(H5E_ATOM, H5E_CANTGET, FAIL, "can't get ID ref count")
- if(nref == 1)
- if(H5F_flush(f, H5AC_dxpl_id, FALSE) < 0)
- HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "unable to flush cache")
- } /* end if */
-
- /*
- * Decrement reference count on atom. When it reaches zero the file will
- * be closed.
- */
- if(H5I_dec_app_ref(file_id) < 0)
- HGOTO_ERROR(H5E_ATOM, H5E_CANTCLOSEFILE, FAIL, "decrementing file ID failed")
-
-done:
- FUNC_LEAVE_API(ret_value)
-} /* end H5Fclose() */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5Freopen
- *
- * Purpose: Reopen a file. The new file handle which is returned points
- * to the same file as the specified file handle. Both handles
- * share caches and other information. The only difference
- * between the handles is that the new handle is not mounted
- * anywhere and no files are mounted on it.
- *
- * Return: Success: New file ID
- *
- * Failure: FAIL
- *
- * Programmer: Robb Matzke
- * Friday, October 16, 1998
- *
- * Modifications:
- * Quincey Koziol, May 14, 2002
- * Keep old file's read/write intent in reopened file.
- *
- *-------------------------------------------------------------------------
- */
-hid_t
-H5Freopen(hid_t file_id)
-{
- H5F_t *old_file = NULL;
- H5F_t *new_file = NULL;
- hid_t ret_value;
-
- FUNC_ENTER_API(FAIL)
- H5TRACE1("i", "i", file_id);
-
- /* Check arguments */
- if(NULL == (old_file = (H5F_t *)H5I_object_verify(file_id, H5I_FILE)))
- HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a file")
-
- /* Get a new "top level" file struct, sharing the same "low level" file struct */
- if(NULL == (new_file = H5F_new(old_file->shared, 0, H5P_FILE_CREATE_DEFAULT, H5P_FILE_ACCESS_DEFAULT, NULL)))
- HGOTO_ERROR(H5E_FILE, H5E_CANTINIT, FAIL, "unable to reopen file")
-
- /* Duplicate old file's names */
- new_file->open_name = H5MM_xstrdup(old_file->open_name);
- new_file->actual_name = H5MM_xstrdup(old_file->actual_name);
-
- if((ret_value = H5I_register(H5I_FILE, new_file, TRUE)) < 0)
- HGOTO_ERROR(H5E_ATOM, H5E_CANTREGISTER, FAIL, "unable to atomize file handle")
-
- /* Keep this ID in file object structure */
- new_file->file_id = ret_value;
-
-done:
- if(ret_value < 0 && new_file)
- if(H5F_dest(new_file, H5AC_dxpl_id, FALSE) < 0)
- HDONE_ERROR(H5E_FILE, H5E_CANTCLOSEFILE, FAIL, "can't close file")
-
- FUNC_LEAVE_API(ret_value)
-} /* end H5Freopen() */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5Fget_intent
- *
- * Purpose: Public API to retrieve the file's 'intent' flags passed
- * during H5Fopen()
- *
- * Return: Non-negative on success/negative on failure
- *
- * Programmer: James Laird
- * August 23, 2006
- *
- *-------------------------------------------------------------------------
- */
-herr_t
-H5Fget_intent(hid_t file_id, unsigned *intent_flags)
-{
- herr_t ret_value = SUCCEED;
-
- FUNC_ENTER_API(FAIL)
- H5TRACE2("e", "i*Iu", file_id, intent_flags);
-
- /* If no intent flags were passed in, exit quietly */
- if(intent_flags) {
- H5F_t * file; /* Pointer to file structure */
-
- /* Get the internal file structure */
- if(NULL == (file = (H5F_t *)H5I_object_verify(file_id, H5I_FILE)))
- HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a file")
-
- /* HDF5 uses some flags internally that users don't know about.
- * Simplify things for them so that they only get either H5F_ACC_RDWR
- * or H5F_ACC_RDONLY.
- */
- if(H5F_INTENT(file) & H5F_ACC_RDWR)
- *intent_flags = H5F_ACC_RDWR;
- else
- *intent_flags = H5F_ACC_RDONLY;
- } /* end if */
-
-done:
- FUNC_LEAVE_API(ret_value)
-} /* end H5Fget_intent() */
-
-
-/*-------------------------------------------------------------------------
* Function: H5F_get_id
*
* Purpose: Get the file ID, incrementing it, or "resurrecting" it as
@@ -2554,628 +1802,97 @@ H5F_addr_decode(const H5F_t *f, const uint8_t **pp/*in,out*/, haddr_t *addr_p/*o
/*-------------------------------------------------------------------------
- * Function: H5Fget_freespace
+ * Function: H5F_set_grp_btree_shared
*
- * Purpose: Retrieves the amount of free space in the file.
+ * Purpose: Set the grp_btree_shared field with a valid ref-count pointer.
*
- * Return: Success: Amount of free space for type
- * Failure: Negative
+ * Return: Success: SUCCEED
+ * Failure: FAIL
*
* Programmer: Quincey Koziol
- * koziol at ncsa.uiuc.edu
- * Oct 6, 2003
+ * 7/19/11
*
*-------------------------------------------------------------------------
*/
-hssize_t
-H5Fget_freespace(hid_t file_id)
+herr_t
+H5F_set_grp_btree_shared(H5F_t *f, H5RC_t *rc)
{
- H5F_t *file; /* File object for file ID */
- hsize_t tot_space; /* Amount of free space in the file */
- hssize_t ret_value; /* Return value */
-
- FUNC_ENTER_API(FAIL)
- H5TRACE1("Hs", "i", file_id);
-
- /* Check args */
- if(NULL == (file = (H5F_t *)H5I_object_verify(file_id, H5I_FILE)))
- HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "not a file ID")
+ /* Use FUNC_ENTER_NOAPI_NOINIT_NOERR here to avoid performance issues */
+ FUNC_ENTER_NOAPI_NOINIT_NOERR
- /* Go get the actual amount of free space in the file */
- if(H5MF_get_freespace(file, H5AC_ind_dxpl_id, &tot_space, NULL) < 0)
- HGOTO_ERROR(H5E_FILE, H5E_CANTGET, FAIL, "unable to check free space for file")
+ /* Sanity check */
+ HDassert(f);
+ HDassert(f->shared);
+ HDassert(rc);
- ret_value = (hssize_t)tot_space;
+ f->shared->grp_btree_shared = rc;
-done:
- FUNC_LEAVE_API(ret_value)
-} /* end H5Fget_freespace() */
+ FUNC_LEAVE_NOAPI(SUCCEED)
+} /* H5F_set_grp_btree_shared() */
/*-------------------------------------------------------------------------
- * Function: H5Fget_filesize
+ * Function: H5F_set_sohm_addr
*
- * Purpose: Retrieves the file size of the HDF5 file. This function
- * is called after an existing file is opened in order
- * to learn the true size of the underlying file.
+ * Purpose: Set the sohm_addr field with a new value.
*
- * Return: Success: Non-negative
- * Failure: Negative
+ * Return: Success: SUCCEED
+ * Failure: FAIL
*
- * Programmer: David Pitt
- * david.pitt at bigpond.com
- * Apr 27, 2004
+ * Programmer: Quincey Koziol
+ * 7/20/11
*
*-------------------------------------------------------------------------
*/
herr_t
-H5Fget_filesize(hid_t file_id, hsize_t *size)
+H5F_set_sohm_addr(H5F_t *f, haddr_t addr)
{
- H5F_t *file; /* File object for file ID */
- haddr_t eof; /* End of file address */
- haddr_t base_addr; /* Base address for the file */
- herr_t ret_value = SUCCEED; /* Return value */
-
- FUNC_ENTER_API(FAIL)
- H5TRACE2("e", "i*h", file_id, size);
-
- /* Check args */
- if(NULL == (file = (H5F_t *)H5I_object_verify(file_id, H5I_FILE)))
- HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "not a file ID")
+ /* Use FUNC_ENTER_NOAPI_NOINIT_NOERR here to avoid performance issues */
+ FUNC_ENTER_NOAPI_NOINIT_NOERR
- /* Go get the actual file size */
- if(HADDR_UNDEF == (eof = H5FD_get_eof(file->shared->lf)))
- HGOTO_ERROR(H5E_FILE, H5E_CANTGET, FAIL, "unable to get file size")
- base_addr = H5FD_get_base_addr(file->shared->lf);
+ /* Sanity check */
+ HDassert(f);
+ HDassert(f->shared);
- if(size)
- *size = (hsize_t)(eof + base_addr); /* Convert relative base address for file to absolute address */
+ f->shared->sohm_addr = addr;
-done:
- FUNC_LEAVE_API(ret_value)
-} /* end H5Fget_filesize() */
+ FUNC_LEAVE_NOAPI(SUCCEED)
+} /* H5F_set_sohm_addr() */
/*-------------------------------------------------------------------------
- * Function: H5Fget_file_image
- *
- * Purpose: If a buffer is provided (via the buf_ptr argument) and is
- * big enough (size in buf_len argument), load *buf_ptr with
- * an image of the open file whose ID is provided in the
- * file_id parameter, and return the number of bytes copied
- * to the buffer.
- *
- * If the buffer exists, but is too small to contain an image
- * of the indicated file, return a negative number.
- *
- * Finally, if no buffer is provided, return the size of the
- * buffer needed. This value is simply the eoa of the target
- * file.
- *
- * Note that any user block is skipped.
- *
- * Also note that the function may not be used on files
- * opened with either the split/multi file driver or the
- * family file driver.
- *
- * In the former case, the sparse address space makes the
- * get file image operation impractical, due to the size of
- * the image typically required.
+ * Function: H5F_set_sohm_vers
*
- * In the case of the family file driver, the problem is
- * the driver message in the super block, which will prevent
- * the image being opened with any driver other than the
- * family file driver -- which negates the purpose of the
- * operation. This can be fixed, but no resources for
- * this now.
+ * Purpose: Set the sohm_vers field with a new value.
*
- * Return: Success: Bytes copied / number of bytes needed.
- * Failure: negative value
+ * Return: Success: SUCCEED
+ * Failure: FAIL
*
- * Programmer: John Mainzer
- * 11/15/11
+ * Programmer: Quincey Koziol
+ * 7/20/11
*
*-------------------------------------------------------------------------
*/
-ssize_t
-H5Fget_file_image(hid_t file_id, void *buf_ptr, size_t buf_len)
+herr_t
+H5F_set_sohm_vers(H5F_t *f, unsigned vers)
{
- H5F_t *file; /* File object for file ID */
- H5FD_t *fd_ptr; /* file driver */
- haddr_t eoa; /* End of file address */
- ssize_t ret_value; /* Return value */
+ /* Use FUNC_ENTER_NOAPI_NOINIT_NOERR here to avoid performance issues */
+ FUNC_ENTER_NOAPI_NOINIT_NOERR
- FUNC_ENTER_API(FAIL)
- H5TRACE3("Zs", "i*xz", file_id, buf_ptr, buf_len);
+ /* Sanity check */
+ HDassert(f);
+ HDassert(f->shared);
- /* Check args */
- if(NULL == (file = (H5F_t *)H5I_object_verify(file_id, H5I_FILE)))
- HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "not a file ID")
- if(!file || !file->shared || !file->shared->lf)
- HGOTO_ERROR(H5E_FILE, H5E_BADVALUE, FAIL, "file_id yields invalid file pointer")
- fd_ptr = file->shared->lf;
- if(!fd_ptr->cls)
- HGOTO_ERROR(H5E_FILE, H5E_BADVALUE, FAIL, "fd_ptr yields invalid class pointer")
-
- /* the address space used by the split and multi file drivers is not
- * a good fit for this call. Since the plan is to depreciate these
- * drivers anyway, don't bother to do a "force fit".
- *
- * The following clause tests for the multi file driver, and fails
- * if the supplied file has the multi file driver as its top level
- * file driver. However, this test will not work if there is some
- * other file driver sitting on top of the multi file driver.
- *
- * I'm not sure if this is possible at present, but in all likelyhood,
- * it will become possible in the future. On the other hand, we may
- * remove the split/multi file drivers before then.
- *
- * I am leaving this solution in for now, but we should review it,
- * and improve the solution if necessary.
- *
- * JRM -- 11/11/22
- */
- if(HDstrcmp(fd_ptr->cls->name, "multi") == 0)
- HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "Not supported for multi file driver.")
-
- /* While the family file driver is conceptually fully compatible
- * with the get file image operation, it sets a file driver message
- * in the super block that prevents the image being opened with any
- * driver other than the family file driver. Needless to say, this
- * rather defeats the purpose of the get file image operation.
- *
- * While this problem is quire solvable, the required time and
- * resources are lacking at present. Hence, for now, we don't
- * allow the get file image operation to be perfomed on files
- * opened with the family file driver.
- *
- * Observe that the following test only looks at the top level
- * driver, and fails if there is some other driver sitting on to
- * of the family file driver.
- *
- * I don't think this can happen at present, but that may change
- * in the future.
- * JRM -- 12/21/11
- */
- if(HDstrcmp(fd_ptr->cls->name, "family") == 0)
- HGOTO_ERROR(H5E_FILE, H5E_BADVALUE, FAIL, "Not supported for family file driver.")
-
-
- /* Go get the actual file size */
- if(HADDR_UNDEF == (eoa = H5FD_get_eoa(file->shared->lf, H5FD_MEM_DEFAULT)))
- HGOTO_ERROR(H5E_FILE, H5E_CANTGET, FAIL, "unable to get file size")
-
- /* set ret_value = to eoa -- will overwrite this if appropriate */
- ret_value = (ssize_t)eoa;
-
- /* test to see if a buffer was provided -- if not, we are done */
- if(buf_ptr != NULL) {
- size_t space_needed; /* size of file image */
-
- /* Check for buffer too small */
- if((haddr_t)buf_len < eoa)
- HGOTO_ERROR(H5E_FILE, H5E_BADVALUE, FAIL, "supplied buffer too small")
-
- space_needed = (size_t)eoa;
-
- /* read in the file image */
- /* (Note compensation for base address addition in internal routine) */
- if(H5FD_read(fd_ptr, H5AC_ind_dxpl_id, H5FD_MEM_DEFAULT, 0, space_needed, buf_ptr) < 0)
- HGOTO_ERROR(H5E_FILE, H5E_READERROR, FAIL, "file image read request failed")
- } /* end if */
-
-done:
- FUNC_LEAVE_API(ret_value)
-} /* H5Fget_file_image() */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5Fget_mdc_config
- *
- * Purpose: Retrieves the current automatic cache resize configuration
- * from the metadata cache, and return it in *config_ptr.
- *
- * Note that the version field of *config_Ptr must be correctly
- * filled in by the caller. This allows us to adapt for
- * obsolete versions of the structure.
- *
- * Return: Success: SUCCEED
- * Failure: FAIL
- *
- * Programmer: John Mainzer
- * 3/24/05
- *
- *-------------------------------------------------------------------------
- */
-herr_t
-H5Fget_mdc_config(hid_t file_id, H5AC_cache_config_t *config_ptr)
-{
- H5F_t *file; /* File object for file ID */
- herr_t ret_value = SUCCEED; /* Return value */
-
- FUNC_ENTER_API(FAIL)
- H5TRACE2("e", "i*x", file_id, config_ptr);
-
- /* Check args */
- if(NULL == (file = (H5F_t *)H5I_object_verify(file_id, H5I_FILE)))
- HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "not a file ID")
- if((NULL == config_ptr) || (config_ptr->version != H5AC__CURR_CACHE_CONFIG_VERSION))
- HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "Bad config_ptr")
-
- /* Go get the resize configuration */
- if(H5AC_get_cache_auto_resize_config(file->shared->cache, config_ptr) < 0)
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "H5AC_get_cache_auto_resize_config() failed.")
-
-done:
- FUNC_LEAVE_API(ret_value)
-} /* H5Fget_mdc_config() */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5Fset_mdc_config
- *
- * Purpose: Sets the current metadata cache automatic resize
- * configuration, using the contents of the instance of
- * H5AC_cache_config_t pointed to by config_ptr.
- *
- * Return: Success: SUCCEED
- * Failure: FAIL
- *
- * Programmer: John Mainzer
- * 3/24/05
- *
- *-------------------------------------------------------------------------
- */
-herr_t
-H5Fset_mdc_config(hid_t file_id, H5AC_cache_config_t *config_ptr)
-{
- H5F_t *file; /* File object for file ID */
- herr_t ret_value = SUCCEED; /* Return value */
-
- FUNC_ENTER_API(FAIL)
- H5TRACE2("e", "i*x", file_id, config_ptr);
-
- /* Check args */
- if(NULL == (file = (H5F_t *)H5I_object_verify(file_id, H5I_FILE)))
- HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "not a file ID")
-
- /* set the resize configuration */
- if(H5AC_set_cache_auto_resize_config(file->shared->cache, config_ptr) < 0)
- HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "H5AC_set_cache_auto_resize_config() failed.")
-
-done:
- FUNC_LEAVE_API(ret_value)
-} /* H5Fset_mdc_config() */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5Fget_mdc_hit_rate
- *
- * Purpose: Retrieves the current hit rate from the metadata cache.
- * This rate is the overall hit rate since the last time
- * the hit rate statistics were reset either manually or
- * automatically.
- *
- * Return: Success: SUCCEED
- * Failure: FAIL
- *
- * Programmer: John Mainzer
- * 3/24/05
- *
- *-------------------------------------------------------------------------
- */
-herr_t
-H5Fget_mdc_hit_rate(hid_t file_id, double *hit_rate_ptr)
-{
- H5F_t *file; /* File object for file ID */
- herr_t ret_value = SUCCEED; /* Return value */
-
- FUNC_ENTER_API(FAIL)
- H5TRACE2("e", "i*d", file_id, hit_rate_ptr);
-
- /* Check args */
- if(NULL == (file = (H5F_t *)H5I_object_verify(file_id, H5I_FILE)))
- HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "not a file ID")
-
- if(NULL == hit_rate_ptr)
- HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "NULL hit rate pointer")
-
- /* Go get the current hit rate */
- if(H5AC_get_cache_hit_rate(file->shared->cache, hit_rate_ptr) < 0)
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "H5AC_get_cache_hit_rate() failed.")
-
-done:
- FUNC_LEAVE_API(ret_value)
-} /* H5Fget_mdc_hit_rate() */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5Fget_mdc_size
- *
- * Purpose: Retrieves the maximum size, minimum clean size, current
- * size, and current number of entries from the metadata
- * cache associated with the specified file. If any of
- * the ptr parameters are NULL, the associated datum is
- * not returned.
- *
- * Return: Success: SUCCEED
- * Failure: FAIL
- *
- * Programmer: John Mainzer
- * 3/24/05
- *
- *-------------------------------------------------------------------------
- */
-herr_t
-H5Fget_mdc_size(hid_t file_id, size_t *max_size_ptr, size_t *min_clean_size_ptr,
- size_t *cur_size_ptr, int *cur_num_entries_ptr)
-{
- H5F_t *file; /* File object for file ID */
- int32_t cur_num_entries;
- herr_t ret_value = SUCCEED; /* Return value */
-
- FUNC_ENTER_API(FAIL)
- H5TRACE5("e", "i*z*z*z*Is", file_id, max_size_ptr, min_clean_size_ptr,
- cur_size_ptr, cur_num_entries_ptr);
-
- /* Check args */
- if(NULL == (file = (H5F_t *)H5I_object_verify(file_id, H5I_FILE)))
- HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "not a file ID")
-
- /* Go get the size data */
- if(H5AC_get_cache_size(file->shared->cache, max_size_ptr,
- min_clean_size_ptr, cur_size_ptr, &cur_num_entries) < 0)
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "H5AC_get_cache_size() failed.")
-
- if(cur_num_entries_ptr != NULL)
- *cur_num_entries_ptr = (int)cur_num_entries;
-
-done:
- FUNC_LEAVE_API(ret_value)
-} /* H5Fget_mdc_size() */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5Freset_mdc_hit_rate_stats
- *
- * Purpose: Reset the hit rate statistic whose current value can
- * be obtained via the H5Fget_mdc_hit_rate() call. Note
- * that this statistic will also be reset once per epoch
- * by the automatic cache resize code if it is enabled.
- *
- * It is probably a bad idea to call this function unless
- * you are controlling cache size from your program instead
- * of using our cache size control code.
- *
- * Return: Success: SUCCEED
- * Failure: FAIL
- *
- * Programmer: John Mainzer
- * 3/24/05
- *
- *-------------------------------------------------------------------------
- */
-herr_t
-H5Freset_mdc_hit_rate_stats(hid_t file_id)
-{
- H5F_t *file; /* File object for file ID */
- herr_t ret_value = SUCCEED; /* Return value */
-
- FUNC_ENTER_API(FAIL)
- H5TRACE1("e", "i", file_id);
-
- /* Check args */
- if(NULL == (file = (H5F_t *)H5I_object_verify(file_id, H5I_FILE)))
- HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "not a file ID")
-
- /* Reset the hit rate statistic */
- if(H5AC_reset_cache_hit_rate_stats(file->shared->cache) < 0)
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "can't reset cache hit rate")
-
-done:
- FUNC_LEAVE_API(ret_value)
-} /* H5Freset_mdc_hit_rate_stats() */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5Fget_name
- *
- * Purpose: Gets the name of the file to which object OBJ_ID belongs.
- * If `name' is non-NULL then write up to `size' bytes into that
- * buffer and always return the length of the entry name.
- * Otherwise `size' is ignored and the function does not store the name,
- * just returning the number of characters required to store the name.
- * If an error occurs then the buffer pointed to by `name' (NULL or non-NULL)
- * is unchanged and the function returns a negative value.
- *
- * Note: This routine returns the name that was used to open the file,
- * not the actual name after resolving symlinks, etc.
- *
- * Return: Success: The length of the file name
- * Failure: Negative
- *
- * Programmer: Raymond Lu
- * June 29, 2004
- *
- *-------------------------------------------------------------------------
- */
-ssize_t
-H5Fget_name(hid_t obj_id, char *name/*out*/, size_t size)
-{
- H5F_t *f; /* Top file in mount hierarchy */
- size_t len;
- ssize_t ret_value;
-
- FUNC_ENTER_API(FAIL)
- H5TRACE3("Zs", "ixz", obj_id, name, size);
-
- /* For file IDs, get the file object directly */
- /* (This prevents the H5G_loc() call from returning the file pointer for
- * the top file in a mount hierarchy)
- */
- if(H5I_get_type(obj_id) == H5I_FILE ) {
- if(NULL == (f = (H5F_t *)H5I_object(obj_id)))
- HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a file")
- } /* end if */
- else {
- H5G_loc_t loc; /* Object location */
-
- /* Get symbol table entry */
- if(H5G_loc(obj_id, &loc) < 0)
- HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "not a valid object ID")
- f = loc.oloc->file;
- } /* end else */
-
- len = HDstrlen(H5F_OPEN_NAME(f));
-
- if(name) {
- HDstrncpy(name, H5F_OPEN_NAME(f), MIN(len + 1,size));
- if(len >= size)
- name[size-1]='\0';
- } /* end if */
-
- /* Set return value */
- ret_value = (ssize_t)len;
-
-done:
- FUNC_LEAVE_API(ret_value)
-} /* end H5Fget_name() */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5Fget_info
- * 1. Get storage size for superblock extension if there is one
- * 2. Get the amount of btree and heap storage for entries
- * in the SOHM table if there is one.
- * Consider success when there is no superblock extension and/or SOHM table
- *
- * Return: Success: non-negative on success
- * Failure: Negative
- *
- * Programmer: Vailin Choi
- * July 11, 2007
- *
- *-------------------------------------------------------------------------
- */
-herr_t
-H5Fget_info(hid_t obj_id, H5F_info_t *finfo)
-{
- H5F_t *f; /* Top file in mount hierarchy */
- herr_t ret_value = SUCCEED; /* Return value */
-
- FUNC_ENTER_API(FAIL)
- H5TRACE2("e", "i*x", obj_id, finfo);
-
- /* Check args */
- if(!finfo)
- HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no info struct")
-
- /* For file IDs, get the file object directly */
- /* (This prevents the H5G_loc() call from returning the file pointer for
- * the top file in a mount hierarchy)
- */
- if(H5I_get_type(obj_id) == H5I_FILE ) {
- if(NULL == (f = (H5F_t *)H5I_object(obj_id)))
- HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a file")
- } /* end if */
- else {
- H5G_loc_t loc; /* Object location */
-
- /* Get symbol table entry */
- if(H5G_loc(obj_id, &loc) < 0)
- HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "not a valid object ID")
- f = loc.oloc->file;
- } /* end else */
- HDassert(f->shared);
-
- /* Reset file info struct */
- HDmemset(finfo, 0, sizeof(H5F_info_t));
-
- /* Check for superblock extension info */
- if(H5F_super_size(f, H5AC_ind_dxpl_id, NULL, &finfo->super_ext_size) < 0)
- HGOTO_ERROR(H5E_FILE, H5E_CANTGET, FAIL, "Unable to retrieve superblock extension size")
-
- /* Check for SOHM info */
- if(H5F_addr_defined(f->shared->sohm_addr))
- if(H5SM_ih_size(f, H5AC_ind_dxpl_id, finfo) < 0)
- HGOTO_ERROR(H5E_FILE, H5E_CANTGET, FAIL, "Unable to retrieve SOHM btree & heap storage info")
-
-done:
- FUNC_LEAVE_API(ret_value)
-} /* end H5Fget_info() */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5Fclear_elink_file_cache
- *
- * Purpose: Releases the external file cache associated with the
- * provided file, potentially closing any cached files
- * unless they are held open from somewhere\ else.
- *
- * Return: Success: non-negative
- * Failure: negative
- *
- * Programmer: Neil Fortner; December 30, 2010
- *
- *-------------------------------------------------------------------------
- */
-herr_t
-H5Fclear_elink_file_cache(hid_t file_id)
-{
- H5F_t *file; /* File */
- herr_t ret_value = SUCCEED; /* Return value */
-
- FUNC_ENTER_API(FAIL)
- H5TRACE1("e", "i", file_id);
-
- /* Check args */
- if(NULL == (file = (H5F_t *)H5I_object_verify(file_id, H5I_FILE)))
- HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "not a file ID")
-
- /* Release the EFC */
- if(file->shared->efc)
- if(H5F_efc_release(file->shared->efc) < 0)
- HGOTO_ERROR(H5E_FILE, H5E_CANTRELEASE, FAIL, "can't release external file cache")
-
-done:
- FUNC_LEAVE_API(ret_value)
-} /* end H5Fclear_elink_file_cache() */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5F_set_grp_btree_shared
- *
- * Purpose: Set the grp_btree_shared field with a valid ref-count pointer.
- *
- * Return: Success: SUCCEED
- * Failure: FAIL
- *
- * Programmer: Quincey Koziol
- * 7/19/11
- *
- *-------------------------------------------------------------------------
- */
-herr_t
-H5F_set_grp_btree_shared(H5F_t *f, H5RC_t *rc)
-{
- /* Use FUNC_ENTER_NOAPI_NOINIT_NOERR here to avoid performance issues */
- FUNC_ENTER_NOAPI_NOINIT_NOERR
-
- /* Sanity check */
- HDassert(f);
- HDassert(f->shared);
- HDassert(rc);
-
- f->shared->grp_btree_shared = rc;
+ f->shared->sohm_vers = vers;
FUNC_LEAVE_NOAPI(SUCCEED)
-} /* H5F_set_grp_btree_shared() */
+} /* H5F_set_sohm_vers() */
/*-------------------------------------------------------------------------
- * Function: H5F_set_sohm_addr
+ * Function: H5F_set_sohm_nindexes
*
- * Purpose: Set the sohm_addr field with a new value.
+ * Purpose: Set the sohm_nindexes field with a new value.
*
* Return: Success: SUCCEED
* Failure: FAIL
@@ -3186,7 +1903,7 @@ H5F_set_grp_btree_shared(H5F_t *f, H5RC_t *rc)
*-------------------------------------------------------------------------
*/
herr_t
-H5F_set_sohm_addr(H5F_t *f, haddr_t addr)
+H5F_set_sohm_nindexes(H5F_t *f, unsigned nindexes)
{
/* Use FUNC_ENTER_NOAPI_NOINIT_NOERR here to avoid performance issues */
FUNC_ENTER_NOAPI_NOINIT_NOERR
@@ -3195,16 +1912,16 @@ H5F_set_sohm_addr(H5F_t *f, haddr_t addr)
HDassert(f);
HDassert(f->shared);
- f->shared->sohm_addr = addr;
+ f->shared->sohm_nindexes = nindexes;
FUNC_LEAVE_NOAPI(SUCCEED)
-} /* H5F_set_sohm_addr() */
+} /* H5F_set_sohm_nindexes() */
/*-------------------------------------------------------------------------
- * Function: H5F_set_sohm_vers
+ * Function: H5F_set_store_msg_crt_idx
*
- * Purpose: Set the sohm_vers field with a new value.
+ * Purpose: Set the store_msg_crt_idx field with a new value.
*
* Return: Success: SUCCEED
* Failure: FAIL
@@ -3215,7 +1932,7 @@ H5F_set_sohm_addr(H5F_t *f, haddr_t addr)
*-------------------------------------------------------------------------
*/
herr_t
-H5F_set_sohm_vers(H5F_t *f, unsigned vers)
+H5F_set_store_msg_crt_idx(H5F_t *f, hbool_t flag)
{
/* Use FUNC_ENTER_NOAPI_NOINIT_NOERR here to avoid performance issues */
FUNC_ENTER_NOAPI_NOINIT_NOERR
@@ -3224,66 +1941,107 @@ H5F_set_sohm_vers(H5F_t *f, unsigned vers)
HDassert(f);
HDassert(f->shared);
- f->shared->sohm_vers = vers;
+ f->shared->store_msg_crt_idx = flag;
FUNC_LEAVE_NOAPI(SUCCEED)
-} /* H5F_set_sohm_vers() */
+} /* H5F_set_store_msg_crt_idx() */
/*-------------------------------------------------------------------------
- * Function: H5F_set_sohm_nindexes
+ * Function: H5F_get_file_image
*
- * Purpose: Set the sohm_nindexes field with a new value.
+ * Purpose: Private version of H5Fget_file_image
*
- * Return: Success: SUCCEED
- * Failure: FAIL
+ * Return: Success: Bytes copied / number of bytes needed.
+ * Failure: negative value
*
- * Programmer: Quincey Koziol
- * 7/20/11
+ * Programmer: John Mainzer
+ * 11/15/11
*
*-------------------------------------------------------------------------
*/
-herr_t
-H5F_set_sohm_nindexes(H5F_t *f, unsigned nindexes)
+ssize_t
+H5F_get_file_image(H5F_t *file, void *buf_ptr, size_t buf_len)
{
- /* Use FUNC_ENTER_NOAPI_NOINIT_NOERR here to avoid performance issues */
- FUNC_ENTER_NOAPI_NOINIT_NOERR
+ H5FD_t *fd_ptr; /* file driver */
+ haddr_t eoa; /* End of file address */
+ ssize_t ret_value; /* Return value */
- /* Sanity check */
- HDassert(f);
- HDassert(f->shared);
+ FUNC_ENTER_NOAPI_NOINIT
- f->shared->sohm_nindexes = nindexes;
+ /* Check args */
+ if(!file || !file->shared || !file->shared->lf)
+ HGOTO_ERROR(H5E_FILE, H5E_BADVALUE, FAIL, "file_id yields invalid file pointer")
+ fd_ptr = file->shared->lf;
+ if(!fd_ptr->cls)
+ HGOTO_ERROR(H5E_FILE, H5E_BADVALUE, FAIL, "fd_ptr yields invalid class pointer")
- FUNC_LEAVE_NOAPI(SUCCEED)
-} /* H5F_set_sohm_nindexes() */
+ /* the address space used by the split and multi file drivers is not
+ * a good fit for this call. Since the plan is to depreciate these
+ * drivers anyway, don't bother to do a "force fit".
+ *
+ * The following clause tests for the multi file driver, and fails
+ * if the supplied file has the multi file driver as its top level
+ * file driver. However, this test will not work if there is some
+ * other file driver sitting on top of the multi file driver.
+ *
+ * I'm not sure if this is possible at present, but in all likelyhood,
+ * it will become possible in the future. On the other hand, we may
+ * remove the split/multi file drivers before then.
+ *
+ * I am leaving this solution in for now, but we should review it,
+ * and improve the solution if necessary.
+ *
+ * JRM -- 11/11/22
+ */
+ if(HDstrcmp(fd_ptr->cls->name, "multi") == 0)
+ HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "Not supported for multi file driver.")
-
-/*-------------------------------------------------------------------------
- * Function: H5F_set_store_msg_crt_idx
- *
- * Purpose: Set the store_msg_crt_idx field with a new value.
- *
- * Return: Success: SUCCEED
- * Failure: FAIL
- *
- * Programmer: Quincey Koziol
- * 7/20/11
- *
- *-------------------------------------------------------------------------
- */
-herr_t
-H5F_set_store_msg_crt_idx(H5F_t *f, hbool_t flag)
-{
- /* Use FUNC_ENTER_NOAPI_NOINIT_NOERR here to avoid performance issues */
- FUNC_ENTER_NOAPI_NOINIT_NOERR
+ /* While the family file driver is conceptually fully compatible
+ * with the get file image operation, it sets a file driver message
+ * in the super block that prevents the image being opened with any
+ * driver other than the family file driver. Needless to say, this
+ * rather defeats the purpose of the get file image operation.
+ *
+ * While this problem is quire solvable, the required time and
+ * resources are lacking at present. Hence, for now, we don't
+ * allow the get file image operation to be perfomed on files
+ * opened with the family file driver.
+ *
+ * Observe that the following test only looks at the top level
+ * driver, and fails if there is some other driver sitting on to
+ * of the family file driver.
+ *
+ * I don't think this can happen at present, but that may change
+ * in the future.
+ * JRM -- 12/21/11
+ */
+ if(HDstrcmp(fd_ptr->cls->name, "family") == 0)
+ HGOTO_ERROR(H5E_FILE, H5E_BADVALUE, FAIL, "Not supported for family file driver.")
- /* Sanity check */
- HDassert(f);
- HDassert(f->shared);
+ /* Go get the actual file size */
+ if(HADDR_UNDEF == (eoa = H5FD_get_eoa(file->shared->lf, H5FD_MEM_DEFAULT)))
+ HGOTO_ERROR(H5E_FILE, H5E_CANTGET, FAIL, "unable to get file size")
- f->shared->store_msg_crt_idx = flag;
+ /* set ret_value = to eoa -- will overwrite this if appropriate */
+ ret_value = (ssize_t)eoa;
- FUNC_LEAVE_NOAPI(SUCCEED)
-} /* H5F_set_store_msg_crt_idx() */
+ /* test to see if a buffer was provided -- if not, we are done */
+ if(buf_ptr != NULL) {
+ size_t space_needed; /* size of file image */
+ /* Check for buffer too small */
+ if((haddr_t)buf_len < eoa)
+ HGOTO_ERROR(H5E_FILE, H5E_BADVALUE, FAIL, "supplied buffer too small")
+
+ space_needed = (size_t)eoa;
+
+ /* read in the file image */
+ /* (Note compensation for base address addition in internal routine) */
+ if(H5FD_read(fd_ptr, H5AC_ind_dxpl_g, H5FD_MEM_DEFAULT, 0, space_needed, buf_ptr) < 0)
+ HGOTO_ERROR(H5E_FILE, H5E_READERROR, FAIL, "file image read request failed")
+ } /* end if */
+
+done:
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* H5F_get_file_image() */
diff --git a/src/H5Fio.c b/src/H5Fio.c
index d494488..1d05cd0 100644
--- a/src/H5Fio.c
+++ b/src/H5Fio.c
@@ -38,6 +38,7 @@
#include "H5Eprivate.h" /* Error handling */
#include "H5Fpkg.h" /* File access */
#include "H5FDprivate.h" /* File drivers */
+#include "H5Iprivate.h" /* IDs */
/****************/
@@ -95,6 +96,7 @@ herr_t
H5F_block_read(const H5F_t *f, H5FD_mem_t type, haddr_t addr, size_t size,
hid_t dxpl_id, void *buf/*out*/)
{
+ H5F_io_info_t fio_info; /* I/O info for operation */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_NOAPI(FAIL)
@@ -108,8 +110,13 @@ H5F_block_read(const H5F_t *f, H5FD_mem_t type, haddr_t addr, size_t size,
if(H5F_addr_le(f->shared->tmp_addr, (addr + size)))
HGOTO_ERROR(H5E_IO, H5E_BADRANGE, FAIL, "attempting I/O in temporary file space")
+ /* Set up I/O info for operation */
+ fio_info.f = f;
+ if(NULL == (fio_info.dxpl = (H5P_genplist_t *)H5I_object(dxpl_id)))
+ HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "can't get property list")
+
/* Pass through metadata accumulator layer */
- if(H5F_accum_read(f, dxpl_id, type, addr, size, buf) < 0)
+ if(H5F__accum_read(&fio_info, type, addr, size, buf) < 0)
HGOTO_ERROR(H5E_IO, H5E_READERROR, FAIL, "read through metadata accumulator failed")
done:
@@ -136,6 +143,7 @@ herr_t
H5F_block_write(const H5F_t *f, H5FD_mem_t type, haddr_t addr, size_t size,
hid_t dxpl_id, const void *buf)
{
+ H5F_io_info_t fio_info; /* I/O info for operation */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_NOAPI(FAIL)
@@ -153,8 +161,13 @@ HDfprintf(stderr, "%s: write to addr = %a, size = %Zu\n", FUNC, addr, size);
if(H5F_addr_le(f->shared->tmp_addr, (addr + size)))
HGOTO_ERROR(H5E_IO, H5E_BADRANGE, FAIL, "attempting I/O in temporary file space")
+ /* Set up I/O info for operation */
+ fio_info.f = f;
+ if(NULL == (fio_info.dxpl = (H5P_genplist_t *)H5I_object(dxpl_id)))
+ HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "can't get property list")
+
/* Pass through metadata accumulator layer */
- if(H5F_accum_write(f, dxpl_id, type, addr, size, buf) < 0)
+ if(H5F__accum_write(&fio_info, type, addr, size, buf) < 0)
HGOTO_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, "write through metadata accumulator failed")
done:
diff --git a/src/H5Fpkg.h b/src/H5Fpkg.h
index 1f10dbc..21034d7 100644
--- a/src/H5Fpkg.h
+++ b/src/H5Fpkg.h
@@ -53,10 +53,6 @@
# undef H5F_DEBUG
#endif
-/* Define the HDF5 file signature */
-#define H5F_SIGNATURE "\211HDF\r\n\032\n"
-#define H5F_SIGNATURE_LEN 8
-
/* Superblock status flags */
#define H5F_SUPER_WRITE_ACCESS 0x01
#define H5F_SUPER_FILE_OK 0x02
@@ -292,8 +288,13 @@ H5_DLLVAR const H5AC_class_t H5AC_SUPERBLOCK[1];
/* General routines */
H5_DLL herr_t H5F_init(void);
H5_DLL herr_t H5F__term_deprec_interface(void);
-H5_DLL herr_t H5F_locate_signature(H5FD_t *file, hid_t dxpl_id, haddr_t *sig_addr);
+H5F_t *H5F_new(H5F_file_t *shared, unsigned flags, hid_t fcpl_id,
+ hid_t fapl_id, H5FD_t *lf);
+herr_t H5F_dest(H5F_t *f, hid_t dxpl_id, hbool_t flush);
H5_DLL herr_t H5F_flush(H5F_t *f, hid_t dxpl_id, hbool_t closing);
+H5_DLL htri_t H5F_is_hdf5(const char *name);
+H5_DLL 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);
+H5_DLL herr_t H5F_close(H5F_t *f);
/* File mount related routines */
H5_DLL herr_t H5F_close_mounts(H5F_t *f);
@@ -314,14 +315,14 @@ H5_DLL herr_t H5F_super_ext_close(H5F_t *f, H5O_loc_t *ext_ptr, hid_t dxpl_id,
hbool_t was_created);
/* Metadata accumulator routines */
-H5_DLL herr_t H5F_accum_read(const H5F_t *f, hid_t dxpl_id, H5FD_mem_t type,
+H5_DLL herr_t H5F__accum_read(const H5F_io_info_t *fio_info, H5FD_mem_t type,
haddr_t addr, size_t size, void *buf);
-H5_DLL herr_t H5F_accum_write(const H5F_t *f, hid_t dxpl_id, H5FD_mem_t type,
+H5_DLL herr_t H5F__accum_write(const H5F_io_info_t *fio_info, H5FD_mem_t type,
haddr_t addr, size_t size, const void *buf);
-H5_DLL herr_t H5F_accum_free(H5F_t *f, hid_t dxpl_id, H5FD_mem_t type,
+H5_DLL herr_t H5F__accum_free(const H5F_io_info_t *fio_info, H5FD_mem_t type,
haddr_t addr, hsize_t size);
-H5_DLL herr_t H5F_accum_flush(const H5F_t *f, hid_t dxpl_id);
-H5_DLL herr_t H5F_accum_reset(const H5F_t *f, hid_t dxpl_id, hbool_t flush);
+H5_DLL herr_t H5F__accum_flush(const H5F_io_info_t *fio_info);
+H5_DLL herr_t H5F__accum_reset(const H5F_io_info_t *fio_info, hbool_t flush);
/* Shared file list related routines */
H5_DLL herr_t H5F_sfile_add(H5F_file_t *shared);
diff --git a/src/H5Fprivate.h b/src/H5Fprivate.h
index 4d6e5ba..80266fd 100644
--- a/src/H5Fprivate.h
+++ b/src/H5Fprivate.h
@@ -29,17 +29,9 @@
/* Private headers needed by this file */
-/****************************/
-/* Library Private Typedefs */
-/****************************/
-
-/* Main file structure */
-typedef struct H5F_t H5F_t;
-typedef struct H5F_file_t H5F_file_t;
-
-/* Block aggregation structure */
-typedef struct H5F_blk_aggr_t H5F_blk_aggr_t;
-
+/**************************/
+/* Library Private Macros */
+/**************************/
/*
* Encode and decode macros for file meta-data.
@@ -414,6 +406,10 @@ typedef struct H5F_blk_aggr_t H5F_blk_aggr_t;
#define H5_PAR_META_WRITE 0
#endif /* H5_HAVE_PARALLEL */
+/* Define the HDF5 file signature */
+#define H5F_SIGNATURE "\211HDF\r\n\032\n"
+#define H5F_SIGNATURE_LEN 8
+
/* Version #'s of the major components of the file format */
#define HDF5_SUPERBLOCK_VERSION_DEF 0 /* The default super block format */
#define HDF5_SUPERBLOCK_VERSION_1 1 /* Version with non-default B-tree 'K' value */
@@ -479,11 +475,42 @@ typedef struct H5F_blk_aggr_t H5F_blk_aggr_t;
#define H5SM_LIST_MAGIC "SMLI" /* Shared Message List */
-/* Forward declarations for prototype arguments */
+/****************************/
+/* Library Private Typedefs */
+/****************************/
+
+/* Forward declarations (for prototypes & type definitions) */
struct H5B_class_t;
struct H5RC_t;
struct H5O_loc_t;
struct H5HG_heap_t;
+struct H5P_genplist_t;
+
+/* Forward declarations for anonymous H5F objects */
+
+/* Main file structures */
+typedef struct H5F_t H5F_t;
+typedef struct H5F_file_t H5F_file_t;
+
+/* Block aggregation structure */
+typedef struct H5F_blk_aggr_t H5F_blk_aggr_t;
+
+/* I/O Info for an operation */
+typedef struct H5F_io_info_t {
+ const H5F_t *f; /* File object */
+ const struct H5P_genplist_t *dxpl; /* DXPL object */
+} H5F_io_info_t;
+
+
+/*****************************/
+/* Library-private Variables */
+/*****************************/
+
+
+/***************************************/
+/* Library-private Function Prototypes */
+/***************************************/
+
/* Private functions */
H5_DLL H5F_t *H5F_open(const char *name, unsigned flags, hid_t fcpl_id,
@@ -501,6 +528,7 @@ H5_DLL unsigned H5F_get_nopen_objs(const H5F_t *f);
H5_DLL unsigned H5F_incr_nopen_objs(H5F_t *f);
H5_DLL unsigned H5F_decr_nopen_objs(H5F_t *f);
H5_DLL hid_t H5F_get_file_id(const H5F_t *f);
+H5_DLL ssize_t H5F_get_file_image(H5F_t *f, void *buf_ptr, size_t buf_len);
H5_DLL H5F_t *H5F_get_parent(const H5F_t *f);
H5_DLL unsigned H5F_get_nmounts(const H5F_t *f);
H5_DLL hid_t H5F_get_access_plist(H5F_t *f, hbool_t app_ref);
diff --git a/src/H5Fsuper.c b/src/H5Fsuper.c
index 68dd17a..43ab0ec 100644
--- a/src/H5Fsuper.c
+++ b/src/H5Fsuper.c
@@ -100,70 +100,6 @@ H5F_init_super_interface(void)
/*-------------------------------------------------------------------------
- * Function: H5F_locate_signature
- *
- * Purpose: Finds the HDF5 superblock signature in a file. The
- * signature can appear at address 0, or any power of two
- * beginning with 512.
- *
- * Return: Success: SUCCEED
- * Failure: FAIL
- *
- * Programmer: Robb Matzke
- * Friday, November 7, 1997
- *
- *-------------------------------------------------------------------------
- */
-herr_t
-H5F_locate_signature(H5FD_t *file, hid_t dxpl_id, haddr_t *sig_addr)
-{
- haddr_t addr, eoa;
- uint8_t buf[H5F_SIGNATURE_LEN];
- unsigned n, maxpow;
- herr_t ret_value = SUCCEED; /* Return value */
-
- FUNC_ENTER_NOAPI_NOINIT
-
- /* Find the least N such that 2^N is larger than the file size */
- if(HADDR_UNDEF == (addr = H5FD_get_eof(file)) || HADDR_UNDEF == (eoa = H5FD_get_eoa(file, H5FD_MEM_SUPER)))
- HGOTO_ERROR(H5E_IO, H5E_CANTINIT, FAIL, "unable to obtain EOF/EOA value")
- for(maxpow = 0; addr; maxpow++)
- addr >>= 1;
- maxpow = MAX(maxpow, 9);
-
- /*
- * Search for the file signature at format address zero followed by
- * powers of two larger than 9.
- */
- for(n = 8; n < maxpow; n++) {
- addr = (8 == n) ? 0 : (haddr_t)1 << n;
- if(H5FD_set_eoa(file, H5FD_MEM_SUPER, addr + H5F_SIGNATURE_LEN) < 0)
- HGOTO_ERROR(H5E_IO, H5E_CANTINIT, FAIL, "unable to set EOA value for file signature")
- if(H5FD_read(file, dxpl_id, H5FD_MEM_SUPER, addr, (size_t)H5F_SIGNATURE_LEN, buf) < 0)
- HGOTO_ERROR(H5E_IO, H5E_CANTINIT, FAIL, "unable to read file signature")
- if(!HDmemcmp(buf, H5F_SIGNATURE, (size_t)H5F_SIGNATURE_LEN))
- break;
- } /* end for */
-
- /*
- * If the signature was not found then reset the EOA value and return
- * HADDR_UNDEF.
- */
- if(n >= maxpow) {
- if(H5FD_set_eoa(file, H5FD_MEM_SUPER, eoa) < 0)
- HGOTO_ERROR(H5E_IO, H5E_CANTINIT, FAIL, "unable to reset EOA value")
- *sig_addr = HADDR_UNDEF;
- } /* end if */
- else
- /* Set return value */
- *sig_addr = addr;
-
-done:
- FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5F_locate_signature() */
-
-
-/*-------------------------------------------------------------------------
* Function: H5F_super_ext_create
*
* Purpose: Create the superblock extension
@@ -320,6 +256,7 @@ done:
herr_t
H5F_super_read(H5F_t *f, hid_t dxpl_id)
{
+ H5P_genplist_t *dxpl; /* DXPL object */
H5F_super_t * sblock = NULL; /* superblock structure */
unsigned sblock_flags = H5AC__NO_FLAGS_SET; /* flags used in superblock unprotect call */
haddr_t super_addr; /* Absolute address of superblock */
@@ -329,8 +266,12 @@ H5F_super_read(H5F_t *f, hid_t dxpl_id)
FUNC_ENTER_NOAPI(FAIL)
+ /* Get the DXPL plist object for DXPL ID */
+ if(NULL == (dxpl = (H5P_genplist_t *)H5I_object(dxpl_id)))
+ HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "can't get property list")
+
/* Find the superblock */
- if(H5F_locate_signature(f->shared->lf, dxpl_id, &super_addr) < 0)
+ if(H5FD_locate_signature(f->shared->lf, dxpl, &super_addr) < 0)
HGOTO_ERROR(H5E_FILE, H5E_NOTHDF5, FAIL, "unable to locate file signature")
if(HADDR_UNDEF == super_addr)
HGOTO_ERROR(H5E_FILE, H5E_NOTHDF5, FAIL, "file signature not found")
diff --git a/src/H5Fsuper_cache.c b/src/H5Fsuper_cache.c
index a437451..9c02bc1 100644
--- a/src/H5Fsuper_cache.c
+++ b/src/H5Fsuper_cache.c
@@ -115,6 +115,7 @@ H5F_sblock_load(H5F_t *f, hid_t dxpl_id, haddr_t UNUSED addr, void *_udata)
H5F_super_t *sblock = NULL; /* File's superblock */
haddr_t base_addr = HADDR_UNDEF; /* Base address of file */
uint8_t sbuf[H5F_MAX_SUPERBLOCK_SIZE]; /* Buffer for superblock */
+ H5P_genplist_t *dxpl; /* DXPL object */
H5P_genplist_t *c_plist; /* File creation property list */
H5F_file_t *shared; /* shared part of `file' */
H5FD_t *lf; /* file driver part of `shared' */
@@ -152,12 +153,16 @@ H5F_sblock_load(H5F_t *f, hid_t dxpl_id, haddr_t UNUSED addr, void *_udata)
if(NULL == (sblock = H5FL_CALLOC(H5F_super_t)))
HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed")
+ /* Get the DXPL plist object for DXPL ID */
+ if(NULL == (dxpl = (H5P_genplist_t *)H5I_object(dxpl_id)))
+ HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "can't get property list")
+
/* Read fixed-size portion of the superblock */
p = sbuf;
H5_CHECK_OVERFLOW(fixed_size, size_t, haddr_t);
if(H5FD_set_eoa(lf, H5FD_MEM_SUPER, (haddr_t)fixed_size) < 0)
HGOTO_ERROR(H5E_FILE, H5E_CANTINIT, NULL, "set end of space allocation request failed")
- if(H5FD_read(lf, dxpl_id, H5FD_MEM_SUPER, (haddr_t)0, fixed_size, p) < 0)
+ if(H5FD_read(lf, dxpl, H5FD_MEM_SUPER, (haddr_t)0, fixed_size, p) < 0)
HGOTO_ERROR(H5E_FILE, H5E_READERROR, NULL, "unable to read superblock")
/* Skip over signature (already checked when locating the superblock) */
@@ -184,7 +189,7 @@ H5F_sblock_load(H5F_t *f, hid_t dxpl_id, haddr_t UNUSED addr, void *_udata)
/* Read in variable-sized portion of superblock */
if(H5FD_set_eoa(lf, H5FD_MEM_SUPER, (haddr_t)(fixed_size + variable_size)) < 0)
HGOTO_ERROR(H5E_FILE, H5E_CANTINIT, NULL, "set end of space allocation request failed")
- if(H5FD_read(lf, dxpl_id, H5FD_MEM_SUPER, (haddr_t)fixed_size, variable_size, p) < 0)
+ if(H5FD_read(lf, dxpl, H5FD_MEM_SUPER, (haddr_t)fixed_size, variable_size, p) < 0)
HGOTO_ERROR(H5E_FILE, H5E_CANTOPENFILE, NULL, "unable to read superblock")
/* Check for older version of superblock format */
@@ -338,7 +343,7 @@ H5F_sblock_load(H5F_t *f, hid_t dxpl_id, haddr_t UNUSED addr, void *_udata)
p = dbuf;
if(H5FD_set_eoa(lf, H5FD_MEM_SUPER, sblock->driver_addr + H5F_DRVINFOBLOCK_HDR_SIZE) < 0)
HGOTO_ERROR(H5E_FILE, H5E_CANTINIT, NULL, "set end of space allocation request failed")
- if(H5FD_read(lf, dxpl_id, H5FD_MEM_SUPER, sblock->driver_addr, (size_t)H5F_DRVINFOBLOCK_HDR_SIZE, p) < 0)
+ if(H5FD_read(lf, dxpl, H5FD_MEM_SUPER, sblock->driver_addr, (size_t)H5F_DRVINFOBLOCK_HDR_SIZE, p) < 0)
HGOTO_ERROR(H5E_FILE, H5E_CANTOPENFILE, NULL, "unable to read driver information block")
/* Version number */
@@ -370,7 +375,7 @@ H5F_sblock_load(H5F_t *f, hid_t dxpl_id, haddr_t UNUSED addr, void *_udata)
/* Read in variable-sized portion of driver info block */
if(H5FD_set_eoa(lf, H5FD_MEM_SUPER, sblock->driver_addr + H5F_DRVINFOBLOCK_HDR_SIZE + drv_variable_size) < 0)
HGOTO_ERROR(H5E_FILE, H5E_CANTINIT, NULL, "set end of space allocation request failed")
- if(H5FD_read(lf, dxpl_id, H5FD_MEM_SUPER, sblock->driver_addr + H5F_DRVINFOBLOCK_HDR_SIZE, drv_variable_size, p) < 0)
+ if(H5FD_read(lf, dxpl, H5FD_MEM_SUPER, sblock->driver_addr + H5F_DRVINFOBLOCK_HDR_SIZE, drv_variable_size, p) < 0)
HGOTO_ERROR(H5E_FILE, H5E_CANTOPENFILE, NULL, "unable to read file driver information")
/* Decode driver information */
@@ -607,11 +612,12 @@ H5F_sblock_flush(H5F_t *f, hid_t dxpl_id, hbool_t destroy, haddr_t UNUSED addr,
HDassert(sblock);
if(sblock->cache_info.is_dirty) {
+ H5P_genplist_t *dxpl; /* DXPL object */
uint8_t buf[H5F_MAX_SUPERBLOCK_SIZE + H5F_MAX_DRVINFOBLOCK_SIZE]; /* Superblock & driver info blockencoding buffer */
- uint8_t *p; /* Ptr into encoding buffer */
- haddr_t rel_eoa; /* Relative EOA for file */
- size_t superblock_size; /* Size of superblock, in bytes */
- size_t driver_size; /* Size of driver info block (bytes)*/
+ uint8_t *p; /* Ptr into encoding buffer */
+ haddr_t rel_eoa; /* Relative EOA for file */
+ size_t superblock_size; /* Size of superblock, in bytes */
+ size_t driver_size; /* Size of driver info block (bytes)*/
/* Encode the common portion of the file superblock for all versions */
p = buf;
@@ -727,9 +733,13 @@ H5F_sblock_flush(H5F_t *f, hid_t dxpl_id, hbool_t destroy, haddr_t UNUSED addr,
/* Double check we didn't overrun the block (unlikely) */
HDassert(superblock_size <= sizeof(buf));
+ /* Get the DXPL plist object for DXPL ID */
+ if(NULL == (dxpl = (H5P_genplist_t *)H5I_object(dxpl_id)))
+ HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "can't get property list")
+
/* Write superblock */
/* (always at relative address 0) */
- if(H5FD_write(f->shared->lf, dxpl_id, H5FD_MEM_SUPER, (haddr_t)0, superblock_size, buf) < 0)
+ if(H5FD_write(f->shared->lf, dxpl, H5FD_MEM_SUPER, (haddr_t)0, superblock_size, buf) < 0)
HGOTO_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, "unable to write superblock")
/* Check for newer version of superblock format & superblock extension */
diff --git a/src/H5G.c b/src/H5G.c
index cbd47ba..fb0a946 100644
--- a/src/H5G.c
+++ b/src/H5G.c
@@ -224,18 +224,20 @@ H5G_term_interface(void)
FUNC_ENTER_NOAPI_NOINIT_NOERR
if(H5_interface_initialize_g) {
- if((n = H5I_nmembers(H5I_GROUP)))
- H5I_clear_type(H5I_GROUP, FALSE, FALSE);
+ if(H5I_nmembers(H5I_GROUP) > 0) {
+ (void)H5I_clear_type(H5I_GROUP, FALSE, FALSE);
+ n++; /*H5I*/
+ } /* end if */
else {
/* Close deprecated interface */
n += H5G__term_deprec_interface();
/* Destroy the group object id group */
- H5I_dec_type_ref(H5I_GROUP);
+ (void)H5I_dec_type_ref(H5I_GROUP);
+ n++; /*H5I*/
/* Mark closed */
H5_interface_initialize_g = 0;
- n = 1; /*H5I*/
} /* end else */
} /* end if */
@@ -514,7 +516,6 @@ done:
FUNC_LEAVE_API(ret_value)
} /* end H5Gget_create_plist() */
-
/*-------------------------------------------------------------------------
* Function: H5G_get_create_plist
@@ -547,7 +548,7 @@ H5G_get_create_plist(H5G_t *grp)
FUNC_ENTER_NOAPI(FAIL)
/* Copy the default group creation property list */
- if(NULL == (gcpl_plist = (H5P_genplist_t *)H5I_object(H5P_LST_GROUP_CREATE_g)))
+ if(NULL == (gcpl_plist = (H5P_genplist_t *)H5I_object(H5P_LST_GROUP_CREATE_ID_g)))
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "can't get default group creation property list")
if((new_gcpl_id = H5P_copy_plist(gcpl_plist, TRUE)) < 0)
HGOTO_ERROR(H5E_SYM, H5E_CANTGET, FAIL, "unable to copy the creation property list")
diff --git a/src/H5Gint.c b/src/H5Gint.c
index fe8b995..6f42cc2 100644
--- a/src/H5Gint.c
+++ b/src/H5Gint.c
@@ -992,7 +992,7 @@ H5G_visit_cb(const H5O_link_t *lnk, void *_udata)
/* Add the path separator to the current path */
HDassert(udata->path[udata->curr_path_len] == '\0');
- HDstrncpy(&(udata->path[udata->curr_path_len]), "/", 2);
+ HDstrncpy(&(udata->path[udata->curr_path_len]), "/", (size_t)2);
udata->curr_path_len++;
/* Attempt to get the link info for this group */
diff --git a/src/H5Gname.c b/src/H5Gname.c
index 8e21109..277d08f 100644
--- a/src/H5Gname.c
+++ b/src/H5Gname.c
@@ -325,7 +325,7 @@ H5G_build_fullpath(const char *prefix, const char *name)
/* Build full path */
HDstrncpy(full_path, prefix, orig_path_len + 1);
if(need_sep)
- HDstrncat(full_path, "/", 1);
+ HDstrncat(full_path, "/", (size_t)1);
HDstrncat(full_path, name, name_len);
/* Create reference counted string for path */
@@ -1331,7 +1331,7 @@ H5G_get_name_by_addr(hid_t file, hid_t lapl_id, hid_t dxpl_id, const H5O_loc_t *
/* If there's a buffer provided, copy into it, up to the limit of its size */
if(name) {
/* Copy the initial path separator */
- HDstrncpy(name, "/", 2);
+ HDstrncpy(name, "/", (size_t)2);
/* Append the rest of the path */
/* (less one character, for the initial path separator) */
diff --git a/src/H5Gtraverse.c b/src/H5Gtraverse.c
index 8ac6aab..dfe5172 100644
--- a/src/H5Gtraverse.c
+++ b/src/H5Gtraverse.c
@@ -276,7 +276,7 @@ H5G_traverse_ud(const H5G_loc_t *grp_loc/*in,out*/, const H5O_link_t *lnk,
*/
if(H5I_dec_ref(cb_return) < 0)
HGOTO_ERROR(H5E_SYM, H5E_CANTRELEASE, FAIL, "unable to close atom from UD callback")
- cb_return = (-1);
+ cb_return = (hid_t)(-1);
done:
/* Close location given to callback. */
diff --git a/src/H5HG.c b/src/H5HG.c
index 6776307..a5d779e 100644
--- a/src/H5HG.c
+++ b/src/H5HG.c
@@ -208,7 +208,7 @@ HDmemset(heap->chunk, 0, size);
HGOTO_ERROR(H5E_HEAP, H5E_CANTINIT, HADDR_UNDEF, "unable to add global heap collection to file's CWFS")
/* Add the heap to the cache */
- if(H5AC_insert_entry(f, dxpl_id, H5AC_GHEAP, addr, heap, H5AC__NO_FLAGS_SET)<0)
+ if(H5AC_insert_entry(f, dxpl_id, H5AC_GHEAP, addr, heap, H5AC__NO_FLAGS_SET) < 0)
HGOTO_ERROR(H5E_HEAP, H5E_CANTINIT, HADDR_UNDEF, "unable to cache global heap collection")
ret_value = addr;
diff --git a/src/H5I.c b/src/H5I.c
index d4654da..38c1100 100644
--- a/src/H5I.c
+++ b/src/H5I.c
@@ -68,8 +68,8 @@
#define MAX_FREE_ID_STRUCTS 1000
/* Combine a Type number and an atom index into an atom */
-#define H5I_MAKE(g,i) ((((hid_t)(g)&TYPE_MASK)<<ID_BITS)| \
- ((hid_t)(i)&ID_MASK))
+#define H5I_MAKE(g,i) ((((hid_t)(g) & TYPE_MASK) << ID_BITS) | \
+ ((hid_t)(i) & ID_MASK))
/* Local typedefs */
@@ -454,7 +454,7 @@ H5Inmembers(H5I_type_t type, hsize_t *num_members)
if((members = H5I_nmembers(type)) < 0)
HGOTO_ERROR(H5E_ATOM, H5E_CANTCOUNT, FAIL, "can't compute number of members")
- *num_members = (hsize_t)members;
+ H5_ASSIGN_OVERFLOW(*num_members, members, int, hsize_t);
} /* end if */
done:
@@ -814,7 +814,7 @@ H5I__wrapped_cb(void *_item, void UNUSED *_key, void *_udata)
HDassert(udata);
/* Break out if we see a free ID */
- if(udata->nextid != item->id) {
+ if(udata->nextid != (ID_MASK & item->id)) {
/* Sanity check */
HDassert(item->id > udata->nextid);
@@ -874,6 +874,40 @@ H5I_register(H5I_type_t type, const void *object, hbool_t app_ref)
/* If no available ID structure, then create a new id for use, and
* allocate a new struct to house it. */
else {
+ /*
+ * This next section of code checks for the 'nextid' getting too large and
+ * wrapping around, thus necessitating checking for duplicate IDs being
+ * handed out.
+ */
+ if(type_ptr->nextid > (hid_t)ID_MASK)
+ type_ptr->wrapped = TRUE;
+
+ /*
+ * If we've wrapped around then we need to check for duplicate id's being
+ * handed out.
+ */
+ if(type_ptr->wrapped) {
+ H5I_wrap_ud_t udata; /* User data for iteration */
+ herr_t iter_status; /* Iteration status */
+
+ /* Set up user data for iteration */
+ udata.nextid = (hid_t)type_ptr->cls->reserved;
+
+ /* Iterate over all the ID nodes, looking for a gap in the ID sequence */
+ if((iter_status = H5SL_iterate(type_ptr->ids, H5I__wrapped_cb, &udata)) < 0)
+ HGOTO_ERROR(H5E_ATOM, H5E_BADITER, FAIL, "ID iteration failed")
+
+ /* If we didn't break out of the iteration and we're at the max. ID, we've used all the IDs */
+ if(0 == iter_status && udata.nextid >= ID_MASK)
+ HGOTO_ERROR(H5E_ATOM, H5E_NOIDS, FAIL, "no IDs available in type")
+
+ /* Sanity check */
+ HDassert(udata.nextid < ID_MASK);
+
+ /* Retain the next ID for the class */
+ type_ptr->nextid = udata.nextid;
+ } /* end if */
+
/* Allocate new ID struct */
if(NULL == (id_ptr = H5FL_MALLOC(H5I_id_info_t)))
HGOTO_ERROR(H5E_ATOM, H5E_NOSPACE, FAIL, "memory allocation failed")
@@ -895,40 +929,6 @@ H5I_register(H5I_type_t type, const void *object, hbool_t app_ref)
HGOTO_ERROR(H5E_ATOM, H5E_CANTINSERT, FAIL, "can't insert ID node into skip list")
type_ptr->id_count++;
- /*
- * This next section of code checks for the 'nextid' getting too large and
- * wrapping around, thus necessitating checking for duplicate IDs being
- * handed out.
- */
- if(type_ptr->nextid > (hid_t)ID_MASK)
- type_ptr->wrapped = TRUE;
-
- /*
- * If we've wrapped around then we need to check for duplicate id's being
- * handed out.
- */
- if(type_ptr->wrapped) {
- H5I_wrap_ud_t udata; /* User data for iteration */
- herr_t iter_status; /* Iteration status */
-
- /* Set up user data for iteration */
- udata.nextid = (hid_t)type_ptr->cls->reserved;
-
- /* Iterate over all the ID nodes, looking for a gap in the ID sequence */
- if((iter_status = H5SL_iterate(type_ptr->ids, H5I__wrapped_cb, &udata)) < 0)
- HGOTO_ERROR(H5E_ATOM, H5E_BADITER, FAIL, "ID iteration failed")
-
- /* If we didn't break out of the iteration and we're at the max. ID, we've used all the IDs */
- if(0 == iter_status && udata.nextid >= ID_MASK)
- HGOTO_ERROR(H5E_ATOM, H5E_NOIDS, FAIL, "no IDs available in type")
-
- /* Sanity check */
- HDassert(udata.nextid < ID_MASK);
-
- /* Retain the next ID for the class */
- type_ptr->nextid = udata.nextid;
- } /* end if */
-
/* Set return value */
ret_value = id_ptr->id;
@@ -1249,13 +1249,24 @@ H5I__remove_common(H5I_id_type_t *type_ptr, hid_t id)
/* (Casting away const OK -QAK) */
ret_value = (void *)curr_id->obj_ptr;
- /* If there's room, and we can save IDs of this type, then
- save the struct (and its ID) for future re-use */
- if((type_ptr->cls->flags & H5I_CLASS_REUSE_IDS)
- && (type_ptr->avail_count < MAX_FREE_ID_STRUCTS)) {
- if(H5SL_insert(type_ptr->avail_ids, curr_id, &curr_id->id) < 0)
- HGOTO_ERROR(H5E_ATOM, H5E_CANTINSERT, NULL, "can't insert available ID node into skip list")
- type_ptr->avail_count++;
+ /* See if we can reuse IDs of this type */
+ if(type_ptr->cls->flags & H5I_CLASS_REUSE_IDS) {
+ /* See if we can decrement the next ID for the ID class */
+ if(type_ptr->nextid == (ID_MASK & (curr_id->id + 1))) {
+ type_ptr->nextid--;
+ curr_id = H5FL_FREE(H5I_id_info_t, curr_id);
+ } /* end if */
+ else {
+ /* Store the ID on the available ID list, for later */
+ if((type_ptr->avail_count < MAX_FREE_ID_STRUCTS)
+ && (type_ptr->id_count > 1)) {
+ if(H5SL_insert(type_ptr->avail_ids, curr_id, &curr_id->id) < 0)
+ HGOTO_ERROR(H5E_ATOM, H5E_CANTINSERT, NULL, "can't insert available ID node into skip list")
+ type_ptr->avail_count++;
+ }
+ else
+ curr_id = H5FL_FREE(H5I_id_info_t, curr_id);
+ } /* end else */
} /* end if */
/* Otherwise, just toss it. */
else
diff --git a/src/H5Ipkg.h b/src/H5Ipkg.h
index dc8e867..1666b76 100644
--- a/src/H5Ipkg.h
+++ b/src/H5Ipkg.h
@@ -44,7 +44,7 @@
* field sizes and masks are calculated from TYPE_BITS.
*/
#define TYPE_BITS 7
-#define TYPE_MASK ((1<<TYPE_BITS)-1)
+#define TYPE_MASK (((hid_t)1 << TYPE_BITS) - 1)
#define H5I_MAX_NUM_TYPES TYPE_MASK
@@ -52,11 +52,11 @@
* Number of bits to use for the Atom index in each atom (assumes 8-bit
* bytes). We don't use the sign bit.
*/
-#define ID_BITS ((sizeof(hid_t)*8)-(TYPE_BITS+1))
-#define ID_MASK ((1<<ID_BITS)-1)
+#define ID_BITS ((sizeof(hid_t) * 8) - (TYPE_BITS + 1))
+#define ID_MASK (((hid_t)1 << ID_BITS) - 1)
/* Map an atom to an ID type number */
-#define H5I_TYPE(a) ((H5I_type_t)(((hid_t)(a)>>ID_BITS) & TYPE_MASK))
+#define H5I_TYPE(a) ((H5I_type_t)(((hid_t)(a) >> ID_BITS) & TYPE_MASK))
/****************************/
diff --git a/src/H5Ipublic.h b/src/H5Ipublic.h
index d630556..5160434 100644
--- a/src/H5Ipublic.h
+++ b/src/H5Ipublic.h
@@ -36,8 +36,8 @@
typedef enum H5I_type_t {
H5I_UNINIT = (-2), /*uninitialized type */
H5I_BADID = (-1), /*invalid Type */
- H5I_FILE = 1, /*type ID for File objects */
- H5I_GROUP, /*type ID for Group objects */
+ H5I_FILE = 1, /*type ID for File objects */
+ H5I_GROUP, /*type ID for Group objects */
H5I_DATATYPE, /*type ID for Datatype objects */
H5I_DATASPACE, /*type ID for Dataspace objects */
H5I_DATASET, /*type ID for Dataset objects */
diff --git a/src/H5Lpublic.h b/src/H5Lpublic.h
index 620d2e9..ff2322f 100644
--- a/src/H5Lpublic.h
+++ b/src/H5Lpublic.h
@@ -40,7 +40,7 @@
#define H5L_MAX_LINK_NAME_LEN ((uint32_t)(-1)) /* (4GB - 1) */
/* Macro to indicate operation occurs on same location */
-#define H5L_SAME_LOC 0
+#define H5L_SAME_LOC (hid_t)0
/* Current version of the H5L_class_t struct */
#define H5L_LINK_CLASS_T_VERS 0
@@ -101,7 +101,7 @@ typedef herr_t (*H5L_copy_func_t)(const char *new_name, hid_t new_loc,
const void *lnkdata, size_t lnkdata_size);
/* Callback during link traversal */
-typedef herr_t (*H5L_traverse_func_t)(const char *link_name, hid_t cur_group,
+typedef hid_t (*H5L_traverse_func_t)(const char *link_name, hid_t cur_group,
const void *lnkdata, size_t lnkdata_size, hid_t lapl_id);
/* Callback for when the link is deleted */
diff --git a/src/H5MF.c b/src/H5MF.c
index 763d15e..82a87f1 100644
--- a/src/H5MF.c
+++ b/src/H5MF.c
@@ -38,8 +38,9 @@
#include "H5private.h" /* Generic Functions */
#include "H5Eprivate.h" /* Error handling */
#include "H5Fpkg.h" /* File access */
+#include "H5Iprivate.h" /* IDs */
#include "H5MFpkg.h" /* File memory management */
-#include "H5VMprivate.h" /* Vectors and arrays */
+#include "H5VMprivate.h" /* Vectors and arrays */
/****************/
@@ -593,6 +594,7 @@ herr_t
H5MF_xfree(H5F_t *f, H5FD_mem_t alloc_type, hid_t dxpl_id, haddr_t addr,
hsize_t size)
{
+ H5F_io_info_t fio_info; /* I/O info for operation */
H5MF_free_section_t *node = NULL; /* Free space section pointer */
H5MF_sect_ud_t udata; /* User data for callback */
H5FD_mem_t fs_type; /* Free space type (mapped from allocation type) */
@@ -613,8 +615,13 @@ HDfprintf(stderr, "%s: Entering - alloc_type = %u, addr = %a, size = %Hu\n", FUN
if(H5F_addr_le(f->shared->tmp_addr, addr))
HGOTO_ERROR(H5E_RESOURCE, H5E_BADRANGE, FAIL, "attempting to free temporary file space")
+ /* Set up I/O info for operation */
+ fio_info.f = f;
+ if(NULL == (fio_info.dxpl = (H5P_genplist_t *)H5I_object(dxpl_id)))
+ HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "can't get property list")
+
/* Check if the space to free intersects with the file's metadata accumulator */
- if(H5F_accum_free(f, dxpl_id, alloc_type, addr, size) < 0)
+ if(H5F__accum_free(&fio_info, alloc_type, addr, size) < 0)
HGOTO_ERROR(H5E_RESOURCE, H5E_CANTFREE, FAIL, "can't check free space intersection w/metadata accumulator")
/* Get free space type from allocation type */
@@ -816,7 +823,7 @@ H5MF_get_freespace(H5F_t *f, hid_t dxpl_id, hsize_t *tot_space, hsize_t *meta_si
hsize_t tot_fs_size = 0; /* Amount of all free space managed */
hsize_t tot_meta_size = 0; /* Amount of metadata for free space managers */
H5FD_mem_t type; /* Memory type for iteration */
- H5FD_mem_t fs_started[H5FD_MEM_NTYPES]; /* Indicate whether the free-space manager has been started */
+ hbool_t fs_started[H5FD_MEM_NTYPES]; /* Indicate whether the free-space manager has been started */
hbool_t eoa_shrank; /* Whether an EOA shrink occurs */
herr_t ret_value = SUCCEED; /* Return value */
diff --git a/src/H5PL.c b/src/H5PL.c
index 2de59eb..6aa4ec6 100644
--- a/src/H5PL.c
+++ b/src/H5PL.c
@@ -19,6 +19,7 @@
/* Interface initialization */
#define H5_INTERFACE_INIT_FUNC H5PL__init_interface
+
/***********/
/* Headers */
/***********/
diff --git a/src/H5PLextern.h b/src/H5PLextern.h
index f94101d..7f10575 100644
--- a/src/H5PLextern.h
+++ b/src/H5PLextern.h
@@ -36,40 +36,14 @@ typedef enum H5PL_type_t {
} H5PL_type_t;
-#ifdef H5_BUILT_AS_DYNAMIC_LIB
-
- #if defined (hdf5_EXPORTS)
- /* hdf5 library imports from plugin */
- #if defined (_MSC_VER) /* MSVC Compiler Case */
- #define H5PLUGIN_DLL __declspec(dllimport)
- #elif (__GNUC__ >= 4) /* GCC 4.x has support for visibility options */
- #define H5PLUGIN_DLL __attribute__ ((visibility("default")))
- #endif
- #else
- /* plugins always export */
- #if defined (_MSC_VER) /* MSVC Compiler Case */
- #define H5PLUGIN_DLL __declspec(dllexport)
- #elif (__GNUC__ >= 4) /* GCC 4.x has support for visibility options */
- #define H5PLUGIN_DLL __attribute__ ((visibility("default")))
- #endif
- #endif
-
-#elif defined(H5_BUILT_AS_STATIC_LIB)
- #define H5PLUGIN_DLL
+/* plugins always export */
+#if defined (_MSC_VER) /* MSVC Compiler Case */
+ #define H5PLUGIN_DLL __declspec(dllexport)
+#elif (__GNUC__ >= 4) /* GCC 4.x has support for visibility options */
+ #define H5PLUGIN_DLL __attribute__ ((visibility("default")))
#else
-
- #if defined(H5_HAVE_WIN32_API)
- #if defined(_HDF5DLL_)
- #pragma warning(disable: 4273) /* Disable the dll linkage warnings */
- #define H5PLUGIN_DLL __declspec(dllimport)
- #elif defined(_HDF5USEDLL_)
- #define H5PLUGIN_DLL __declspec(dllexport)
- #endif /* _HDF5DLL_ */
- #else /*H5_HAVE_WIN32_API*/
- #define H5PLUGIN_DLL
- #endif /*H5_HAVE_WIN32_API*/
-
-#endif /* H5_BUILT_AS_xxx_LIB */
+ #define H5PLUGIN_DLL
+#endif
#ifdef __cplusplus
extern "C" {
diff --git a/src/H5PLprivate.h b/src/H5PLprivate.h
index ee03def..a1b77ea 100644
--- a/src/H5PLprivate.h
+++ b/src/H5PLprivate.h
@@ -19,8 +19,18 @@
#ifndef _H5PLprivate_H
#define _H5PLprivate_H
-/* Include package's "external" header */
-#include "H5PLextern.h"
+/* Keep the following in sync with the package's "external" header */
+
+/*******************/
+/* Public Typedefs */
+/*******************/
+
+/* Plugin type */
+typedef enum H5PL_type_t {
+ H5PL_TYPE_ERROR = -1, /*error */
+ H5PL_TYPE_FILTER = 0, /*filter */
+ H5PL_TYPE_NONE = 1 /*this must be last! */
+} H5PL_type_t;
/* Private headers needed by this file */
#include "H5private.h" /* Generic Functions */
diff --git a/src/H5Pacpl.c b/src/H5Pacpl.c
index b30bf1e..0a0641c 100644
--- a/src/H5Pacpl.c
+++ b/src/H5Pacpl.c
@@ -65,10 +65,13 @@
const H5P_libclass_t H5P_CLS_ACRT[1] = {{
"attribute create", /* Class name for debugging */
H5P_TYPE_ATTRIBUTE_CREATE, /* Class type */
- &H5P_CLS_STRING_CREATE_g, /* Parent class ID */
- &H5P_CLS_ATTRIBUTE_CREATE_g, /* Pointer to class ID */
- &H5P_LST_ATTRIBUTE_CREATE_g, /* Pointer to default property list ID */
+
+ &H5P_CLS_STRING_CREATE_g, /* Parent class */
+ &H5P_CLS_ATTRIBUTE_CREATE_g, /* Pointer to class */
+ &H5P_CLS_ATTRIBUTE_CREATE_ID_g, /* Pointer to class ID */
+ &H5P_LST_ATTRIBUTE_CREATE_ID_g, /* Pointer to default property list ID */
NULL, /* Default property registration routine */
+
NULL, /* Class creation callback */
NULL, /* Class creation callback info */
NULL, /* Class copy callback */
diff --git a/src/H5Pdapl.c b/src/H5Pdapl.c
index d21cdbf..485fcba 100644
--- a/src/H5Pdapl.c
+++ b/src/H5Pdapl.c
@@ -83,10 +83,13 @@ static herr_t H5P__dacc_reg_prop(H5P_genclass_t *pclass);
const H5P_libclass_t H5P_CLS_DACC[1] = {{
"dataset access", /* Class name for debugging */
H5P_TYPE_DATASET_ACCESS, /* Class type */
- &H5P_CLS_LINK_ACCESS_g, /* Parent class ID */
- &H5P_CLS_DATASET_ACCESS_g, /* Pointer to class ID */
- &H5P_LST_DATASET_ACCESS_g, /* Pointer to default property list ID */
+
+ &H5P_CLS_LINK_ACCESS_g, /* Parent class */
+ &H5P_CLS_DATASET_ACCESS_g, /* Pointer to class */
+ &H5P_CLS_DATASET_ACCESS_ID_g, /* Pointer to class ID */
+ &H5P_LST_DATASET_ACCESS_ID_g, /* Pointer to default property list ID */
H5P__dacc_reg_prop, /* Default property registration routine */
+
NULL, /* Class creation callback */
NULL, /* Class creation callback info */
NULL, /* Class copy callback */
@@ -187,7 +190,7 @@ H5Pset_chunk_cache(hid_t dapl_id, size_t rdcc_nslots, size_t rdcc_nbytes, double
/* Check arguments. Note that we allow negative values - they are
* considered to "unset" the property. */
- if(rdcc_w0 > 1.0)
+ if(rdcc_w0 > (double)1.0f)
HGOTO_ERROR (H5E_ARGS, H5E_BADVALUE, FAIL, "raw data cache w0 value must be between 0.0 and 1.0 inclusive, or H5D_CHUNK_CACHE_W0_DEFAULT");
/* Get the plist structure */
diff --git a/src/H5Pdcpl.c b/src/H5Pdcpl.c
index 6e106ea..0841e5b 100644
--- a/src/H5Pdcpl.c
+++ b/src/H5Pdcpl.c
@@ -129,10 +129,13 @@ static int H5P__dcrt_ext_file_list_cmp(const void *value1, const void *value2, s
const H5P_libclass_t H5P_CLS_DCRT[1] = {{
"dataset create", /* Class name for debugging */
H5P_TYPE_DATASET_CREATE, /* Class type */
- &H5P_CLS_OBJECT_CREATE_g, /* Parent class ID */
- &H5P_CLS_DATASET_CREATE_g, /* Pointer to class ID */
- &H5P_LST_DATASET_CREATE_g, /* Pointer to default property list ID */
+
+ &H5P_CLS_OBJECT_CREATE_g, /* Parent class */
+ &H5P_CLS_DATASET_CREATE_g, /* Pointer to class */
+ &H5P_CLS_DATASET_CREATE_ID_g, /* Pointer to class ID */
+ &H5P_LST_DATASET_CREATE_ID_g, /* Pointer to default property list ID */
H5P__dcrt_reg_prop, /* Default property registration routine */
+
NULL, /* Class creation callback */
NULL, /* Class creation callback info */
H5P__dcrt_copy, /* Class copy callback */
@@ -1502,7 +1505,7 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5P_get_fill_value(H5P_genplist_t *plist, H5T_t *type, void *value/*out*/,
+H5P_get_fill_value(H5P_genplist_t *plist, const H5T_t *type, void *value/*out*/,
hid_t dxpl_id)
{
H5O_fill_t fill; /* Fill value to retrieve */
diff --git a/src/H5Pdeprec.c b/src/H5Pdeprec.c
index e525327..e265c50 100644
--- a/src/H5Pdeprec.c
+++ b/src/H5Pdeprec.c
@@ -42,6 +42,7 @@
/***********/
#include "H5private.h" /* Generic Functions */
#include "H5Eprivate.h" /* Error handling */
+#include "H5Fprivate.h" /* Files */
#include "H5Iprivate.h" /* IDs */
#include "H5Ppkg.h" /* Property lists */
diff --git a/src/H5Pdxpl.c b/src/H5Pdxpl.c
index 9e25a59..7688ecf 100644
--- a/src/H5Pdxpl.c
+++ b/src/H5Pdxpl.c
@@ -170,10 +170,13 @@ static herr_t H5P__dxfr_xform_close(const char* name, size_t size, void* value);
const H5P_libclass_t H5P_CLS_DXFR[1] = {{
"data transfer", /* Class name for debugging */
H5P_TYPE_DATASET_XFER, /* Class type */
- &H5P_CLS_ROOT_g, /* Parent class ID */
- &H5P_CLS_DATASET_XFER_g, /* Pointer to class ID */
- &H5P_LST_DATASET_XFER_g, /* Pointer to default property list ID */
+
+ &H5P_CLS_ROOT_g, /* Parent class */
+ &H5P_CLS_DATASET_XFER_g, /* Pointer to class */
+ &H5P_CLS_DATASET_XFER_ID_g, /* Pointer to class ID */
+ &H5P_LST_DATASET_XFER_ID_g, /* Pointer to default property list ID */
H5P__dxfr_reg_prop, /* Default property registration routine */
+
NULL, /* Class creation callback */
NULL, /* Class creation callback info */
NULL, /* Class copy callback */
diff --git a/src/H5Pfapl.c b/src/H5Pfapl.c
index ee483cd..d743441 100644
--- a/src/H5Pfapl.c
+++ b/src/H5Pfapl.c
@@ -37,17 +37,17 @@
#include "H5ACprivate.h" /* Metadata cache */
#include "H5Dprivate.h" /* Datasets */
#include "H5Eprivate.h" /* Error handling */
-#include "H5Fprivate.h" /* Files */
+#include "H5Fprivate.h" /* Files */
#include "H5FDprivate.h" /* File drivers */
#include "H5Iprivate.h" /* IDs */
-#include "H5MMprivate.h" /* Memory Management */
+#include "H5MMprivate.h" /* Memory Management */
#include "H5Ppkg.h" /* Property lists */
/* Includes needed to set as default file driver */
#include "H5FDsec2.h" /* Posix unbuffered I/O file driver */
#include "H5FDstdio.h" /* Standard C buffered I/O */
#ifdef H5_HAVE_WINDOWS
-#include "H5FDwindows.h" /* Windows buffered I/O */
+#include "H5FDwindows.h" /* Windows buffered I/O */
#endif
@@ -169,10 +169,13 @@ static herr_t H5P_file_image_info_close(const char *name, size_t size, void *val
const H5P_libclass_t H5P_CLS_FACC[1] = {{
"file access", /* Class name for debugging */
H5P_TYPE_FILE_ACCESS, /* Class type */
- &H5P_CLS_ROOT_g, /* Parent class ID */
- &H5P_CLS_FILE_ACCESS_g, /* Pointer to class ID */
- &H5P_LST_FILE_ACCESS_g, /* Pointer to default property list ID */
+
+ &H5P_CLS_ROOT_g, /* Parent class */
+ &H5P_CLS_FILE_ACCESS_g, /* Pointer to class */
+ &H5P_CLS_FILE_ACCESS_ID_g, /* Pointer to class ID */
+ &H5P_LST_FILE_ACCESS_ID_g, /* Pointer to default property list ID */
H5P_facc_reg_prop, /* Default property registration routine */
+
H5P_facc_create, /* Class creation callback */
NULL, /* Class creation callback info */
H5P_facc_copy, /* Class copy callback */
@@ -1033,7 +1036,7 @@ H5Pset_cache(hid_t plist_id, int UNUSED mdc_nelmts,
rdcc_w0);
/* Check arguments */
- if(rdcc_w0 < 0.0 || rdcc_w0 > 1.0)
+ if(rdcc_w0 < (double)0.0f || rdcc_w0 > (double)1.0f)
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "raw data cache w0 value must be between 0.0 and 1.0 inclusive")
/* Get the plist structure */
@@ -2383,6 +2386,10 @@ H5Pset_core_write_tracking(hid_t plist_id, hbool_t is_enabled, size_t page_size)
FUNC_ENTER_API(FAIL)
H5TRACE3("e", "ibz", plist_id, is_enabled, page_size);
+ /* The page size cannot be zero */
+ if(page_size == 0)
+ HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "page_size cannot be zero")
+
/* Get the plist structure */
if(NULL == (plist = H5P_object_verify(plist_id, H5P_FILE_ACCESS)))
HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID")
diff --git a/src/H5Pfcpl.c b/src/H5Pfcpl.c
index e1f83b0..d114650 100644
--- a/src/H5Pfcpl.c
+++ b/src/H5Pfcpl.c
@@ -103,10 +103,13 @@ static herr_t H5P_fcrt_reg_prop(H5P_genclass_t *pclass);
const H5P_libclass_t H5P_CLS_FCRT[1] = {{
"file create", /* Class name for debugging */
H5P_TYPE_FILE_CREATE, /* Class type */
- &H5P_CLS_GROUP_CREATE_g, /* Parent class ID */
- &H5P_CLS_FILE_CREATE_g, /* Pointer to class ID */
- &H5P_LST_FILE_CREATE_g, /* Pointer to default property list ID */
+
+ &H5P_CLS_GROUP_CREATE_g, /* Parent class */
+ &H5P_CLS_FILE_CREATE_g, /* Pointer to class */
+ &H5P_CLS_FILE_CREATE_ID_g, /* Pointer to class ID */
+ &H5P_LST_FILE_CREATE_ID_g, /* Pointer to default property list ID */
H5P_fcrt_reg_prop, /* Default property registration routine */
+
NULL, /* Class creation callback */
NULL, /* Class creation callback info */
NULL, /* Class copy callback */
diff --git a/src/H5Pfmpl.c b/src/H5Pfmpl.c
index 0158bf1..3d1f9b2 100644
--- a/src/H5Pfmpl.c
+++ b/src/H5Pfmpl.c
@@ -35,6 +35,7 @@
/***********/
#include "H5private.h" /* Generic Functions */
#include "H5Eprivate.h" /* Error handling */
+#include "H5Fprivate.h" /* Files */
#include "H5Iprivate.h" /* IDs */
#include "H5Ppkg.h" /* Property lists */
@@ -75,10 +76,13 @@ static herr_t H5P_fmnt_reg_prop(H5P_genclass_t *pclass);
const H5P_libclass_t H5P_CLS_FMNT[1] = {{
"file mount", /* Class name for debugging */
H5P_TYPE_FILE_MOUNT, /* Class type */
- &H5P_CLS_ROOT_g, /* Parent class ID */
- &H5P_CLS_FILE_MOUNT_g, /* Pointer to class ID */
- &H5P_LST_FILE_MOUNT_g, /* Pointer to default property list ID */
+
+ &H5P_CLS_ROOT_g, /* Parent class */
+ &H5P_CLS_FILE_MOUNT_g, /* Pointer to class */
+ &H5P_CLS_FILE_MOUNT_ID_g, /* Pointer to class ID */
+ &H5P_LST_FILE_MOUNT_ID_g, /* Pointer to default property list ID */
H5P_fmnt_reg_prop, /* Default property registration routine */
+
NULL, /* Class creation callback */
NULL, /* Class creation callback info */
NULL, /* Class copy callback */
diff --git a/src/H5Pgcpl.c b/src/H5Pgcpl.c
index 394cf8b..754e44d 100644
--- a/src/H5Pgcpl.c
+++ b/src/H5Pgcpl.c
@@ -34,7 +34,9 @@
/***********/
#include "H5private.h" /* Generic Functions */
#include "H5Eprivate.h" /* Error handling */
+#include "H5Gprivate.h" /* Groups */
#include "H5Iprivate.h" /* IDs */
+#include "H5Oprivate.h" /* Object headers */
#include "H5Ppkg.h" /* Property lists */
@@ -69,10 +71,13 @@ static herr_t H5P__gcrt_reg_prop(H5P_genclass_t *pclass);
const H5P_libclass_t H5P_CLS_GCRT[1] = {{
"group create", /* Class name for debugging */
H5P_TYPE_GROUP_CREATE, /* Class type */
- &H5P_CLS_OBJECT_CREATE_g, /* Parent class ID */
- &H5P_CLS_GROUP_CREATE_g, /* Pointer to class ID */
- &H5P_LST_GROUP_CREATE_g, /* Pointer to default property list ID */
+
+ &H5P_CLS_OBJECT_CREATE_g, /* Parent class */
+ &H5P_CLS_GROUP_CREATE_g, /* Pointer to class */
+ &H5P_CLS_GROUP_CREATE_ID_g, /* Pointer to class ID */
+ &H5P_LST_GROUP_CREATE_ID_g, /* Pointer to default property list ID */
H5P__gcrt_reg_prop, /* Default property registration routine */
+
NULL, /* Class creation callback */
NULL, /* Class creation callback info */
NULL, /* Class copy callback */
diff --git a/src/H5Pint.c b/src/H5Pint.c
index 2d5f609..8bc0b6a 100644
--- a/src/H5Pint.c
+++ b/src/H5Pint.c
@@ -98,51 +98,71 @@ static int H5P_cmp_prop(const H5P_genprop_t *prop1, const H5P_genprop_t *prop2);
* Predefined property list classes. These are initialized at runtime by
* H5P_init_interface() in this source file.
*/
-hid_t H5P_CLS_ROOT_g = FAIL;
-hid_t H5P_CLS_OBJECT_CREATE_g = FAIL;
-hid_t H5P_CLS_FILE_CREATE_g = FAIL;
-hid_t H5P_CLS_FILE_ACCESS_g = FAIL;
-hid_t H5P_CLS_DATASET_CREATE_g = FAIL;
-hid_t H5P_CLS_DATASET_ACCESS_g = FAIL;
-hid_t H5P_CLS_DATASET_XFER_g = FAIL;
-hid_t H5P_CLS_FILE_MOUNT_g = FAIL;
-hid_t H5P_CLS_GROUP_CREATE_g = FAIL;
-hid_t H5P_CLS_GROUP_ACCESS_g = FAIL;
-hid_t H5P_CLS_DATATYPE_CREATE_g = FAIL;
-hid_t H5P_CLS_DATATYPE_ACCESS_g = FAIL;
-hid_t H5P_CLS_ATTRIBUTE_CREATE_g = FAIL;
-hid_t H5P_CLS_OBJECT_COPY_g = FAIL;
-hid_t H5P_CLS_LINK_CREATE_g = FAIL;
-hid_t H5P_CLS_LINK_ACCESS_g = FAIL;
-hid_t H5P_CLS_STRING_CREATE_g = FAIL;
+hid_t H5P_CLS_ROOT_ID_g = FAIL;
+H5P_genclass_t *H5P_CLS_ROOT_g = NULL;
+hid_t H5P_CLS_OBJECT_CREATE_ID_g = FAIL;
+H5P_genclass_t *H5P_CLS_OBJECT_CREATE_g = NULL;
+hid_t H5P_CLS_FILE_CREATE_ID_g = FAIL;
+H5P_genclass_t *H5P_CLS_FILE_CREATE_g = NULL;
+hid_t H5P_CLS_FILE_ACCESS_ID_g = FAIL;
+H5P_genclass_t *H5P_CLS_FILE_ACCESS_g = NULL;
+hid_t H5P_CLS_DATASET_CREATE_ID_g = FAIL;
+H5P_genclass_t *H5P_CLS_DATASET_CREATE_g = NULL;
+hid_t H5P_CLS_DATASET_ACCESS_ID_g = FAIL;
+H5P_genclass_t *H5P_CLS_DATASET_ACCESS_g = NULL;
+hid_t H5P_CLS_DATASET_XFER_ID_g = FAIL;
+H5P_genclass_t *H5P_CLS_DATASET_XFER_g = NULL;
+hid_t H5P_CLS_FILE_MOUNT_ID_g = FAIL;
+H5P_genclass_t *H5P_CLS_FILE_MOUNT_g = NULL;
+hid_t H5P_CLS_GROUP_CREATE_ID_g = FAIL;
+H5P_genclass_t *H5P_CLS_GROUP_CREATE_g = NULL;
+hid_t H5P_CLS_GROUP_ACCESS_ID_g = FAIL;
+H5P_genclass_t *H5P_CLS_GROUP_ACCESS_g = NULL;
+hid_t H5P_CLS_DATATYPE_CREATE_ID_g = FAIL;
+H5P_genclass_t *H5P_CLS_DATATYPE_CREATE_g = NULL;
+hid_t H5P_CLS_DATATYPE_ACCESS_ID_g = FAIL;
+H5P_genclass_t *H5P_CLS_DATATYPE_ACCESS_g = NULL;
+hid_t H5P_CLS_ATTRIBUTE_CREATE_ID_g = FAIL;
+H5P_genclass_t *H5P_CLS_ATTRIBUTE_CREATE_g = NULL;
+hid_t H5P_CLS_OBJECT_COPY_ID_g = FAIL;
+H5P_genclass_t *H5P_CLS_OBJECT_COPY_g = NULL;
+hid_t H5P_CLS_LINK_CREATE_ID_g = FAIL;
+H5P_genclass_t *H5P_CLS_LINK_CREATE_g = NULL;
+hid_t H5P_CLS_LINK_ACCESS_ID_g = FAIL;
+H5P_genclass_t *H5P_CLS_LINK_ACCESS_g = NULL;
+hid_t H5P_CLS_STRING_CREATE_ID_g = FAIL;
+H5P_genclass_t *H5P_CLS_STRING_CREATE_g = NULL;
/*
* Predefined property lists for each predefined class. These are initialized
* at runtime by H5P_init_interface() in this source file.
*/
-hid_t H5P_LST_FILE_CREATE_g = FAIL;
-hid_t H5P_LST_FILE_ACCESS_g = FAIL;
-hid_t H5P_LST_DATASET_CREATE_g = FAIL;
-hid_t H5P_LST_DATASET_ACCESS_g = FAIL;
-hid_t H5P_LST_DATASET_XFER_g = FAIL;
-hid_t H5P_LST_FILE_MOUNT_g = FAIL;
-hid_t H5P_LST_GROUP_CREATE_g = FAIL;
-hid_t H5P_LST_GROUP_ACCESS_g = FAIL;
-hid_t H5P_LST_DATATYPE_CREATE_g = FAIL;
-hid_t H5P_LST_DATATYPE_ACCESS_g = FAIL;
-hid_t H5P_LST_ATTRIBUTE_CREATE_g = FAIL;
-hid_t H5P_LST_OBJECT_COPY_g = FAIL;
-hid_t H5P_LST_LINK_CREATE_g = FAIL;
-hid_t H5P_LST_LINK_ACCESS_g = FAIL;
+hid_t H5P_LST_FILE_CREATE_ID_g = FAIL;
+hid_t H5P_LST_FILE_ACCESS_ID_g = FAIL;
+hid_t H5P_LST_DATASET_CREATE_ID_g = FAIL;
+hid_t H5P_LST_DATASET_ACCESS_ID_g = FAIL;
+hid_t H5P_LST_DATASET_XFER_ID_g = FAIL;
+hid_t H5P_LST_FILE_MOUNT_ID_g = FAIL;
+hid_t H5P_LST_GROUP_CREATE_ID_g = FAIL;
+hid_t H5P_LST_GROUP_ACCESS_ID_g = FAIL;
+hid_t H5P_LST_DATATYPE_CREATE_ID_g = FAIL;
+hid_t H5P_LST_DATATYPE_ACCESS_ID_g = FAIL;
+hid_t H5P_LST_ATTRIBUTE_CREATE_ID_g = FAIL;
+hid_t H5P_LST_OBJECT_COPY_ID_g = FAIL;
+hid_t H5P_LST_LINK_CREATE_ID_g = FAIL;
+hid_t H5P_LST_LINK_ACCESS_ID_g = FAIL;
/* Root property list class library initialization object */
const H5P_libclass_t H5P_CLS_ROOT[1] = {{
"root", /* Class name for debugging */
H5P_TYPE_ROOT, /* Class type */
- NULL, /* Parent class ID */
- &H5P_CLS_ROOT_g, /* Pointer to class ID */
+
+ NULL, /* Parent class */
+ &H5P_CLS_ROOT_g, /* Pointer to class */
+ &H5P_CLS_ROOT_ID_g, /* Pointer to class ID */
NULL, /* Pointer to default property list ID */
NULL, /* Default property registration routine */
+
NULL, /* Class creation callback */
NULL, /* Class creation callback info */
NULL, /* Class copy callback */
@@ -156,10 +176,13 @@ const H5P_libclass_t H5P_CLS_ROOT[1] = {{
const H5P_libclass_t H5P_CLS_GACC[1] = {{
"group access", /* Class name for debugging */
H5P_TYPE_GROUP_ACCESS, /* Class type */
- &H5P_CLS_LINK_ACCESS_g, /* Parent class ID */
- &H5P_CLS_GROUP_ACCESS_g, /* Pointer to class ID */
- &H5P_LST_GROUP_ACCESS_g, /* Pointer to default property list ID */
+
+ &H5P_CLS_LINK_ACCESS_g, /* Parent class */
+ &H5P_CLS_GROUP_ACCESS_g, /* Pointer to class */
+ &H5P_CLS_GROUP_ACCESS_ID_g, /* Pointer to class ID */
+ &H5P_LST_GROUP_ACCESS_ID_g, /* Pointer to default property list ID */
NULL, /* Default property registration routine */
+
NULL, /* Class creation callback */
NULL, /* Class creation callback info */
NULL, /* Class copy callback */
@@ -173,10 +196,13 @@ const H5P_libclass_t H5P_CLS_GACC[1] = {{
const H5P_libclass_t H5P_CLS_TCRT[1] = {{
"datatype create", /* Class name for debugging */
H5P_TYPE_DATATYPE_CREATE, /* Class type */
- &H5P_CLS_OBJECT_CREATE_g, /* Parent class ID */
- &H5P_CLS_DATATYPE_CREATE_g, /* Pointer to class ID */
- &H5P_LST_DATATYPE_CREATE_g, /* Pointer to default property list ID */
+
+ &H5P_CLS_OBJECT_CREATE_g, /* Parent class */
+ &H5P_CLS_DATATYPE_CREATE_g, /* Pointer to class */
+ &H5P_CLS_DATATYPE_CREATE_ID_g, /* Pointer to class ID */
+ &H5P_LST_DATATYPE_CREATE_ID_g, /* Pointer to default property list ID */
NULL, /* Default property registration routine */
+
NULL, /* Class creation callback */
NULL, /* Class creation callback info */
NULL, /* Class copy callback */
@@ -190,10 +216,13 @@ const H5P_libclass_t H5P_CLS_TCRT[1] = {{
const H5P_libclass_t H5P_CLS_TACC[1] = {{
"datatype access", /* Class name for debugging */
H5P_TYPE_DATATYPE_ACCESS, /* Class type */
- &H5P_CLS_LINK_ACCESS_g, /* Parent class ID */
- &H5P_CLS_DATATYPE_ACCESS_g, /* Pointer to class ID */
- &H5P_LST_DATATYPE_ACCESS_g, /* Pointer to default property list ID */
+
+ &H5P_CLS_LINK_ACCESS_g, /* Parent class */
+ &H5P_CLS_DATATYPE_ACCESS_g, /* Pointer to class */
+ &H5P_CLS_DATATYPE_ACCESS_ID_g, /* Pointer to class ID */
+ &H5P_LST_DATATYPE_ACCESS_ID_g, /* Pointer to default property list ID */
NULL, /* Default property registration routine */
+
NULL, /* Class creation callback */
NULL, /* Class creation callback info */
NULL, /* Class copy callback */
@@ -276,7 +305,7 @@ static const H5I_class_t H5I_GENPROPCLS_CLS[1] = {{
/* Generic Property List ID class */
static const H5I_class_t H5I_GENPROPLST_CLS[1] = {{
H5I_GENPROP_LST, /* ID class value */
- 0, /* Class flags */
+ H5I_CLASS_REUSE_IDS, /* Class flags */
0, /* # of reserved IDs for class */
(H5I_free_t)H5P_close /* Callback routine for closing objects of this class */
}};
@@ -425,37 +454,27 @@ H5P_init_interface(void)
/* Check if the current class hasn't been initialized and can be now */
HDassert(lib_class->class_id);
- if(*lib_class->class_id == (-1) && (lib_class->par_class_id == NULL
- || *lib_class->par_class_id > 0)) {
- H5P_genclass_t *par_pclass = NULL; /* Parent class of new class */
- H5P_genclass_t *new_pclass; /* New property list class created */
-
+ if(*lib_class->class_id == (-1) && (lib_class->par_pclass == NULL
+ || *lib_class->par_pclass != NULL)) {
/* Sanity check - only the root class is not allowed to have a parent class */
- HDassert(lib_class->par_class_id || lib_class == H5P_CLS_ROOT);
-
- /* Check for parent class */
- if(lib_class->par_class_id) {
- /* Get the pointer to the parent class */
- if(NULL == (par_pclass = (H5P_genclass_t *)H5I_object(*lib_class->par_class_id)))
- HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a property list class")
- } /* end if */
+ HDassert(lib_class->par_pclass || lib_class == H5P_CLS_ROOT);
/* Allocate the new class */
- if(NULL == (new_pclass = H5P_create_class(par_pclass, lib_class->name, lib_class->type, lib_class->create_func, lib_class->create_data, lib_class->copy_func, lib_class->copy_data, lib_class->close_func, lib_class->close_data)))
+ if(NULL == (*lib_class->pclass = H5P_create_class(lib_class->par_pclass ? *lib_class->par_pclass : NULL, lib_class->name, lib_class->type, lib_class->create_func, lib_class->create_data, lib_class->copy_func, lib_class->copy_data, lib_class->close_func, lib_class->close_data)))
HGOTO_ERROR(H5E_PLIST, H5E_CANTINIT, FAIL, "class initialization failed")
/* Call routine to register properties for class */
- if(lib_class->reg_prop_func && (*lib_class->reg_prop_func)(new_pclass) < 0)
+ if(lib_class->reg_prop_func && (*lib_class->reg_prop_func)(*lib_class->pclass) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTREGISTER, FAIL, "can't register properties")
/* Register the new class */
- if((*lib_class->class_id = H5I_register(H5I_GENPROP_CLS, new_pclass, FALSE)) < 0)
+ if((*lib_class->class_id = H5I_register(H5I_GENPROP_CLS, *lib_class->pclass, FALSE)) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTREGISTER, FAIL, "can't register property list class")
/* Only register the default property list if it hasn't been created yet */
if(lib_class->def_plist_id && *lib_class->def_plist_id == (-1)) {
/* Register the default property list for the new class*/
- if((*lib_class->def_plist_id = H5P_create_id(new_pclass, FALSE)) < 0)
+ if((*lib_class->def_plist_id = H5P_create_id(*lib_class->pclass, FALSE)) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTREGISTER, FAIL, "can't register default property list for class")
} /* end if */
@@ -494,51 +513,50 @@ done:
int
H5P_term_interface(void)
{
- int nlist=0;
- int nclass=0;
- int n=0;
+ int n = 0;
FUNC_ENTER_NOAPI_NOINIT_NOERR
if(H5_interface_initialize_g) {
+ int nlist, nclass;
+
/* Destroy HDF5 library property classes & lists */
/* Check if there are any open property list classes or lists */
nclass = H5I_nmembers(H5I_GENPROP_CLS);
nlist = H5I_nmembers(H5I_GENPROP_LST);
- n=nclass+nlist;
/* If there are any open classes or groups, attempt to get rid of them. */
- if(n) {
+ if((nclass + nlist) > 0) {
/* Clear the lists */
- if(nlist>0) {
- H5I_clear_type(H5I_GENPROP_LST, FALSE, FALSE);
+ if(nlist > 0) {
+ (void)H5I_clear_type(H5I_GENPROP_LST, FALSE, FALSE);
/* Reset the default property lists, if they've been closed */
- if(H5I_nmembers(H5I_GENPROP_LST)==0) {
- H5P_LST_FILE_CREATE_g =
- H5P_LST_FILE_ACCESS_g =
- H5P_LST_DATASET_CREATE_g =
- H5P_LST_DATASET_ACCESS_g =
- H5P_LST_DATASET_XFER_g =
- H5P_LST_GROUP_CREATE_g =
- H5P_LST_GROUP_ACCESS_g =
- H5P_LST_DATATYPE_CREATE_g =
- H5P_LST_DATATYPE_ACCESS_g =
- H5P_LST_ATTRIBUTE_CREATE_g =
- H5P_LST_OBJECT_COPY_g =
- H5P_LST_LINK_CREATE_g =
- H5P_LST_LINK_ACCESS_g =
- H5P_LST_FILE_MOUNT_g = (-1);
+ if(H5I_nmembers(H5I_GENPROP_LST) == 0) {
+ H5P_LST_FILE_CREATE_ID_g =
+ H5P_LST_FILE_ACCESS_ID_g =
+ H5P_LST_DATASET_CREATE_ID_g =
+ H5P_LST_DATASET_ACCESS_ID_g =
+ H5P_LST_DATASET_XFER_ID_g =
+ H5P_LST_GROUP_CREATE_ID_g =
+ H5P_LST_GROUP_ACCESS_ID_g =
+ H5P_LST_DATATYPE_CREATE_ID_g =
+ H5P_LST_DATATYPE_ACCESS_ID_g =
+ H5P_LST_ATTRIBUTE_CREATE_ID_g =
+ H5P_LST_OBJECT_COPY_ID_g =
+ H5P_LST_LINK_CREATE_ID_g =
+ H5P_LST_LINK_ACCESS_ID_g =
+ H5P_LST_FILE_MOUNT_ID_g = (-1);
} /* end if */
} /* end if */
/* Only attempt to close the classes after all the lists are closed */
- if(nlist==0 && nclass>0) {
- H5I_clear_type(H5I_GENPROP_CLS, FALSE, FALSE);
+ if(nlist == 0 && nclass > 0) {
+ (void)H5I_clear_type(H5I_GENPROP_CLS, FALSE, FALSE);
/* Reset the default property lists, if they've been closed */
- if(H5I_nmembers(H5I_GENPROP_CLS)==0) {
+ if(H5I_nmembers(H5I_GENPROP_CLS) == 0) {
H5P_CLS_ROOT_g =
H5P_CLS_OBJECT_CREATE_g =
H5P_CLS_FILE_CREATE_g =
@@ -555,9 +573,29 @@ H5P_term_interface(void)
H5P_CLS_OBJECT_COPY_g =
H5P_CLS_LINK_CREATE_g =
H5P_CLS_LINK_ACCESS_g =
- H5P_CLS_FILE_MOUNT_g = (-1);
+ H5P_CLS_FILE_MOUNT_g = NULL;
+
+ H5P_CLS_ROOT_ID_g =
+ H5P_CLS_OBJECT_CREATE_ID_g =
+ H5P_CLS_FILE_CREATE_ID_g =
+ H5P_CLS_FILE_ACCESS_ID_g =
+ H5P_CLS_DATASET_CREATE_ID_g =
+ H5P_CLS_DATASET_ACCESS_ID_g =
+ H5P_CLS_DATASET_XFER_ID_g =
+ H5P_CLS_GROUP_CREATE_ID_g =
+ H5P_CLS_GROUP_ACCESS_ID_g =
+ H5P_CLS_DATATYPE_CREATE_ID_g =
+ H5P_CLS_DATATYPE_ACCESS_ID_g =
+ H5P_CLS_STRING_CREATE_ID_g =
+ H5P_CLS_ATTRIBUTE_CREATE_ID_g =
+ H5P_CLS_OBJECT_COPY_ID_g =
+ H5P_CLS_LINK_CREATE_ID_g =
+ H5P_CLS_LINK_ACCESS_ID_g =
+ H5P_CLS_FILE_MOUNT_ID_g = (-1);
} /* end if */
} /* end if */
+
+ n++; /*H5I*/
} else {
/* Close public interface */
n += H5P__term_pub_interface();
@@ -565,16 +603,19 @@ H5P_term_interface(void)
/* Close deprecated interface */
n += H5P__term_deprec_interface();
- H5I_dec_type_ref(H5I_GENPROP_LST);
+ /* Destroy the property list and class id groups */
+ (void)H5I_dec_type_ref(H5I_GENPROP_LST);
n++; /*H5I*/
- H5I_dec_type_ref(H5I_GENPROP_CLS);
+ (void)H5I_dec_type_ref(H5I_GENPROP_CLS);
n++; /*H5I*/
+ /* Mark closed */
H5_interface_initialize_g = 0;
- }
- }
+ } /* end else */
+ } /* end if */
+
FUNC_LEAVE_NOAPI(n)
-}
+} /* end H5P_term_interface() */
/*--------------------------------------------------------------------------
@@ -2784,41 +2825,6 @@ done:
/*--------------------------------------------------------------------------
NAME
- H5P_get_class
- PURPOSE
- Internal routine to query the class of a generic property list
- USAGE
- H5P_genclass_t *H5P_get_class(plist)
- H5P_genplist_t *plist; IN: Property list to check
- RETURNS
- Success: Pointer to the class for a property list
- Failure: NULL
- DESCRIPTION
- This routine retrieves a pointer to the class for a property list.
-
- GLOBAL VARIABLES
- COMMENTS, BUGS, ASSUMPTIONS
- EXAMPLES
- REVISION LOG
---------------------------------------------------------------------------*/
-H5P_genclass_t *
-H5P_get_class(const H5P_genplist_t *plist)
-{
- H5P_genclass_t *ret_value; /* return value */
-
- FUNC_ENTER_NOAPI_NOINIT_NOERR
-
- HDassert(plist);
-
- /* Get property size */
- ret_value = plist->pclass;
-
- FUNC_LEAVE_NOAPI(ret_value)
-} /* H5P_get_class() */
-
-
-/*--------------------------------------------------------------------------
- NAME
H5P_get_nprops_plist
PURPOSE
Internal routine to query the number of properties in a property list
@@ -3239,12 +3245,12 @@ done:
/*--------------------------------------------------------------------------
NAME
- H5P_isa_class_real
+ H5P_class_isa
PURPOSE
Internal routine to query whether a property class is the same as another
class.
USAGE
- htri_t H5P_isa_class_real(pclass1, pclass2)
+ htri_t H5P_class_isa(pclass1, pclass2)
H5P_genclass_t *pclass1; IN: Property class to check
H5P_genclass_t *pclass2; IN: Property class to compare with
RETURNS
@@ -3260,12 +3266,12 @@ done:
EXAMPLES
REVISION LOG
--------------------------------------------------------------------------*/
-static htri_t
-H5P_isa_class_real(H5P_genclass_t *pclass1, H5P_genclass_t *pclass2)
+htri_t
+H5P_class_isa(const H5P_genclass_t *pclass1, const H5P_genclass_t *pclass2)
{
htri_t ret_value;
- FUNC_ENTER_NOAPI_NOINIT_NOERR
+ FUNC_ENTER_NOAPI(FAIL)
HDassert(pclass1);
HDassert(pclass2);
@@ -3276,14 +3282,14 @@ H5P_isa_class_real(H5P_genclass_t *pclass1, H5P_genclass_t *pclass2)
} else {
/* Check if the class is derived, and walk up the chain, if so */
if(pclass1->parent != NULL)
- ret_value = H5P_isa_class_real(pclass1->parent, pclass2);
+ ret_value = H5P_class_isa(pclass1->parent, pclass2);
else
HGOTO_DONE(FALSE);
} /* end else */
done:
FUNC_LEAVE_NOAPI(ret_value)
-} /* H5P_isa_class_real() */
+} /* H5P_class_isa() */
/*--------------------------------------------------------------------------
@@ -3327,7 +3333,7 @@ H5P_isa_class(hid_t plist_id, hid_t pclass_id)
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a property class")
/* Compare the property list's class against the other class */
- if((ret_value = H5P_isa_class_real(plist->pclass, pclass)) < 0)
+ if((ret_value = H5P_class_isa(plist->pclass, pclass)) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTREGISTER, FAIL, "unable to compare property list classes")
done:
@@ -4871,3 +4877,59 @@ done:
FUNC_LEAVE_NOAPI(ret_value)
} /* H5P_close_class() */
+
+/*-------------------------------------------------------------------------
+ * Function: H5P_get_plist_id
+ *
+ * Purpose: Quick and dirty routine to retrieve property list ID from
+ * property list structure.
+ * (Mainly added to stop non-file routines from poking about in the
+ * H5P_genplist_t data structure)
+ *
+ * Return: Success: Non-negative ID of property list.
+ * Failure: negative.
+ *
+ * Programmer: Quincey Koziol <koziol at hdfgroup.org>
+ * April 22, 2014
+ *
+ *-------------------------------------------------------------------------
+ */
+hid_t
+H5P_get_plist_id(const H5P_genplist_t *plist)
+{
+ /* Use FUNC_ENTER_NOAPI_NOINIT_NOERR here to avoid performance issues */
+ FUNC_ENTER_NOAPI_NOINIT_NOERR
+
+ HDassert(plist);
+
+ FUNC_LEAVE_NOAPI(plist->plist_id)
+} /* end H5P_get_plist_id() */
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5P_get_class
+ *
+ * Purpose: Quick and dirty routine to retrieve property list class from
+ * property list structure.
+ * (Mainly added to stop non-file routines from poking about in the
+ * H5P_genplist_t data structure)
+ *
+ * Return: Success: Non-NULL class of property list.
+ * Failure: NULL
+ *
+ * Programmer: Quincey Koziol <koziol at hdfgroup.org>
+ * April 22, 2014
+ *
+ *-------------------------------------------------------------------------
+ */
+H5P_genclass_t *
+H5P_get_class(const H5P_genplist_t *plist)
+{
+ /* Use FUNC_ENTER_NOAPI_NOINIT_NOERR here to avoid performance issues */
+ FUNC_ENTER_NOAPI_NOINIT_NOERR
+
+ HDassert(plist);
+
+ FUNC_LEAVE_NOAPI(plist->pclass)
+} /* end H5P_get_class() */
+
diff --git a/src/H5Plapl.c b/src/H5Plapl.c
index 0697130..25ae661 100644
--- a/src/H5Plapl.c
+++ b/src/H5Plapl.c
@@ -110,10 +110,13 @@ static herr_t H5P_lacc_elink_fapl_close(const char* name, size_t size, void* val
const H5P_libclass_t H5P_CLS_LACC[1] = {{
"link access", /* Class name for debugging */
H5P_TYPE_LINK_ACCESS, /* Class type */
- &H5P_CLS_ROOT_g, /* Parent class ID */
- &H5P_CLS_LINK_ACCESS_g, /* Pointer to class ID */
- &H5P_LST_LINK_ACCESS_g, /* Pointer to default property list ID */
+
+ &H5P_CLS_ROOT_g, /* Parent class */
+ &H5P_CLS_LINK_ACCESS_g, /* Pointer to class */
+ &H5P_CLS_LINK_ACCESS_ID_g, /* Pointer to class ID */
+ &H5P_LST_LINK_ACCESS_ID_g, /* Pointer to default property list ID */
H5P_lacc_reg_prop, /* Default property registration routine */
+
NULL, /* Class creation callback */
NULL, /* Class creation callback info */
NULL, /* Class copy callback */
diff --git a/src/H5Plcpl.c b/src/H5Plcpl.c
index b327df9..21ee74b 100644
--- a/src/H5Plcpl.c
+++ b/src/H5Plcpl.c
@@ -76,10 +76,13 @@ static herr_t H5P_lcrt_reg_prop(H5P_genclass_t *pclass);
const H5P_libclass_t H5P_CLS_LCRT[1] = {{
"link create", /* Class name for debugging */
H5P_TYPE_LINK_CREATE, /* Class type */
- &H5P_CLS_STRING_CREATE_g, /* Parent class ID */
- &H5P_CLS_LINK_CREATE_g, /* Pointer to class ID */
- &H5P_LST_LINK_CREATE_g, /* Pointer to default property list ID */
+
+ &H5P_CLS_STRING_CREATE_g, /* Parent class */
+ &H5P_CLS_LINK_CREATE_g, /* Pointer to class */
+ &H5P_CLS_LINK_CREATE_ID_g, /* Pointer to class ID */
+ &H5P_LST_LINK_CREATE_ID_g, /* Pointer to default property list ID */
H5P_lcrt_reg_prop, /* Default property registration routine */
+
NULL, /* Class creation callback */
NULL, /* Class creation callback info */
NULL, /* Class copy callback */
diff --git a/src/H5Pocpl.c b/src/H5Pocpl.c
index 381dae4..838931c 100644
--- a/src/H5Pocpl.c
+++ b/src/H5Pocpl.c
@@ -93,10 +93,13 @@ static herr_t H5P__set_filter(H5P_genplist_t *plist, H5Z_filter_t filter,
const H5P_libclass_t H5P_CLS_OCRT[1] = {{
"object create", /* Class name for debugging */
H5P_TYPE_OBJECT_CREATE, /* Class type */
- &H5P_CLS_ROOT_g, /* Parent class ID */
- &H5P_CLS_OBJECT_CREATE_g, /* Pointer to class ID */
+
+ &H5P_CLS_ROOT_g, /* Parent class */
+ &H5P_CLS_OBJECT_CREATE_g, /* Pointer to class */
+ &H5P_CLS_OBJECT_CREATE_ID_g, /* Pointer to class ID */
NULL, /* Pointer to default property list ID */
H5P__ocrt_reg_prop, /* Default property registration routine */
+
NULL, /* Class creation callback */
NULL, /* Class creation callback info */
H5P__ocrt_copy, /* Class copy callback */
diff --git a/src/H5Pocpypl.c b/src/H5Pocpypl.c
index 0ba5625..895c8fe 100644
--- a/src/H5Pocpypl.c
+++ b/src/H5Pocpypl.c
@@ -38,6 +38,7 @@
#include "H5FLprivate.h" /* Free Lists */
#include "H5Iprivate.h" /* IDs */
#include "H5MMprivate.h" /* Memory management */
+#include "H5Oprivate.h" /* Object headers */
#include "H5Ppkg.h" /* Property lists */
@@ -94,10 +95,13 @@ static herr_t H5P__ocpy_merge_comm_dt_list_close(const char* name, size_t size,
const H5P_libclass_t H5P_CLS_OCPY[1] = {{
"object copy", /* Class name for debugging */
H5P_TYPE_OBJECT_COPY, /* Class type */
- &H5P_CLS_ROOT_g, /* Parent class ID */
- &H5P_CLS_OBJECT_COPY_g, /* Pointer to class ID */
- &H5P_LST_OBJECT_COPY_g, /* Pointer to default property list ID */
+
+ &H5P_CLS_ROOT_g, /* Parent class */
+ &H5P_CLS_OBJECT_COPY_g, /* Pointer to class */
+ &H5P_CLS_OBJECT_COPY_ID_g, /* Pointer to class ID */
+ &H5P_LST_OBJECT_COPY_ID_g, /* Pointer to default property list ID */
H5P__ocpy_reg_prop, /* Default property registration routine */
+
NULL, /* Class creation callback */
NULL, /* Class creation callback info */
NULL, /* Class copy callback */
diff --git a/src/H5Ppkg.h b/src/H5Ppkg.h
index 293420e..44ef473 100644
--- a/src/H5Ppkg.h
+++ b/src/H5Ppkg.h
@@ -125,7 +125,8 @@ typedef struct H5P_libclass_t {
const char *name; /* Class name */
H5P_plist_type_t type; /* Class type */
- hid_t const * const par_class_id; /* Pointer to global parent class property list class ID */
+ H5P_genclass_t * * par_pclass; /* Pointer to global parent class property list class */
+ H5P_genclass_t * * pclass; /* Pointer to global property list class */
hid_t * const class_id; /* Pointer to global property list class ID */
hid_t * const def_plist_id; /* Pointer to global default property list ID */
H5P_reg_prop_func_t reg_prop_func; /* Register class's properties */
@@ -142,6 +143,9 @@ typedef struct H5P_libclass_t {
/* Property list/class iterator callback function pointer */
typedef int (*H5P_iterate_int_t)(H5P_genprop_t *prop, void *udata);
+/* Forward declarations (for prototypes & struct definitions) */
+struct H5Z_filter_info_t;
+
/*****************************/
/* Package Private Variables */
/*****************************/
@@ -177,7 +181,6 @@ H5_DLL herr_t H5P_get_size_plist(const H5P_genplist_t *plist, const char *name,
size_t *size);
H5_DLL herr_t H5P_get_size_pclass(H5P_genclass_t *pclass, const char *name,
size_t *size);
-H5_DLL H5P_genclass_t *H5P_get_class(const H5P_genplist_t *plist);
H5_DLL herr_t H5P_get_nprops_plist(const H5P_genplist_t *plist, size_t *nprops);
H5_DLL int H5P_cmp_class(const H5P_genclass_t *pclass1, const H5P_genclass_t *pclass2);
H5_DLL herr_t H5P_cmp_plist(const H5P_genplist_t *plist1, const H5P_genplist_t *plist2,
@@ -193,10 +196,12 @@ H5_DLL char *H5P_get_class_path(H5P_genclass_t *pclass);
H5_DLL H5P_genclass_t *H5P_open_class_path(const char *path);
H5_DLL H5P_genclass_t *H5P_get_class_parent(const H5P_genclass_t *pclass);
H5_DLL herr_t H5P_close_class(void *_pclass);
-H5_DLL herr_t H5P_get_filter(const H5Z_filter_info_t *filter,
+H5_DLL H5P_genprop_t *H5P__find_prop_plist(const H5P_genplist_t *plist, const char *name);
+
+/* Private OCPL routines */
+H5_DLL herr_t H5P_get_filter(const struct H5Z_filter_info_t *filter,
unsigned int *flags, size_t *cd_nelmts, unsigned cd_values[],
size_t namelen, char name[], unsigned *filter_config);
-H5_DLL H5P_genprop_t *H5P__find_prop_plist(const H5P_genplist_t *plist, const char *name);
/* Testing functions */
#ifdef H5P_TESTING
diff --git a/src/H5Pprivate.h b/src/H5Pprivate.h
index 72157dc..542fd52 100644
--- a/src/H5Pprivate.h
+++ b/src/H5Pprivate.h
@@ -24,7 +24,6 @@
/* Private headers needed by this file */
#include "H5private.h" /* Generic Functions */
-#include "H5Oprivate.h" /* Object headers */
/**************************/
/* Library Private Macros */
@@ -33,11 +32,24 @@
/* ======== String creation property names ======== */
#define H5P_STRCRT_CHAR_ENCODING_NAME "character_encoding" /* Character set encoding for string */
+/* If the module using this macro is allowed access to the private variables, access them directly */
+#ifdef H5P_PACKAGE
+#define H5P_PLIST_ID(P) ((P)->plist_id)
+#define H5P_CLASS(P) ((P)->pclass)
+#else /* H5F_PACKAGE */
+#define H5P_PLIST_ID(P) (H5P_get_plist_id(P))
+#define H5P_CLASS(P) (H5P_get_class(P))
+#endif /* H5P_PACKAGE */
+
/****************************/
/* Library Private Typedefs */
/****************************/
+/* Forward declarations (for prototypes & type definitions) */
+struct H5O_fill_t;
+struct H5T_t;
+
/* Forward declarations for anonymous H5P objects */
typedef struct H5P_genplist_t H5P_genplist_t;
typedef struct H5P_genclass_t H5P_genclass_t;
@@ -68,6 +80,25 @@ typedef enum H5P_plist_type_t {
/* Library Private Variables */
/*****************************/
+/* Predefined property list classes. */
+H5_DLLVAR H5P_genclass_t *H5P_CLS_ROOT_g;
+H5_DLLVAR H5P_genclass_t *H5P_CLS_OBJECT_CREATE_g;
+H5_DLLVAR H5P_genclass_t *H5P_CLS_FILE_CREATE_g;
+H5_DLLVAR H5P_genclass_t *H5P_CLS_FILE_ACCESS_g;
+H5_DLLVAR H5P_genclass_t *H5P_CLS_DATASET_CREATE_g;
+H5_DLLVAR H5P_genclass_t *H5P_CLS_DATASET_ACCESS_g;
+H5_DLLVAR H5P_genclass_t *H5P_CLS_DATASET_XFER_g;
+H5_DLLVAR H5P_genclass_t *H5P_CLS_FILE_MOUNT_g;
+H5_DLLVAR H5P_genclass_t *H5P_CLS_GROUP_CREATE_g;
+H5_DLLVAR H5P_genclass_t *H5P_CLS_GROUP_ACCESS_g;
+H5_DLLVAR H5P_genclass_t *H5P_CLS_DATATYPE_CREATE_g;
+H5_DLLVAR H5P_genclass_t *H5P_CLS_DATATYPE_ACCESS_g;
+H5_DLLVAR H5P_genclass_t *H5P_CLS_ATTRIBUTE_CREATE_g;
+H5_DLLVAR H5P_genclass_t *H5P_CLS_OBJECT_COPY_g;
+H5_DLLVAR H5P_genclass_t *H5P_CLS_LINK_CREATE_g;
+H5_DLLVAR H5P_genclass_t *H5P_CLS_LINK_ACCESS_g;
+H5_DLLVAR H5P_genclass_t *H5P_CLS_STRING_CREATE_g;
+
/******************************/
/* Library Private Prototypes */
@@ -88,6 +119,7 @@ H5_DLL herr_t H5P_insert(H5P_genplist_t *plist, const char *name, size_t size,
H5P_prp_compare_func_t prp_cmp, H5P_prp_close_func_t prp_close);
H5_DLL herr_t H5P_remove(hid_t plist_id, H5P_genplist_t *plist, const char *name);
H5_DLL htri_t H5P_exist_plist(const H5P_genplist_t *plist, const char *name);
+H5_DLL htri_t H5P_class_isa(const H5P_genclass_t *pclass1, const H5P_genclass_t *pclass2);
H5_DLL char *H5P_get_class_name(H5P_genclass_t *pclass);
H5_DLL herr_t H5P_get_nprops_pclass(const H5P_genclass_t *pclass, size_t *nprops,
hbool_t recurse);
@@ -98,7 +130,7 @@ H5_DLL herr_t H5P_set_driver(H5P_genplist_t *plist, hid_t new_driver_id,
H5_DLL herr_t H5P_set_vlen_mem_manager(H5P_genplist_t *plist,
H5MM_allocate_t alloc_func, void *alloc_info, H5MM_free_t free_func,
void *free_info);
-H5_DLL herr_t H5P_is_fill_value_defined(const H5O_fill_t *fill,
+H5_DLL herr_t H5P_is_fill_value_defined(const struct H5O_fill_t *fill,
H5D_fill_value_t *status);
H5_DLL int H5P_fill_value_cmp(const void *value1, const void *value2,
size_t size);
@@ -109,6 +141,10 @@ H5_DLL herr_t H5P_get_filter_by_id(H5P_genplist_t *plist, H5Z_filter_t id,
size_t namelen, char name[], unsigned *filter_config);
H5_DLL htri_t H5P_filter_in_pline(H5P_genplist_t *plist, H5Z_filter_t id);
+/* Query internal fields of the property list struct */
+H5_DLL hid_t H5P_get_plist_id(const H5P_genplist_t *plist);
+H5_DLL H5P_genclass_t *H5P_get_class(const H5P_genplist_t *plist);
+
/* *SPECIAL* Don't make more of these! -QAK */
H5_DLL htri_t H5P_isa_class(hid_t plist_id, hid_t pclass_id);
H5_DLL H5P_genplist_t *H5P_object_verify(hid_t plist_id, hid_t pclass_id);
@@ -122,7 +158,7 @@ H5_DLL size_t H5P_peek_size_t(H5P_genplist_t *plist, const char *name);
/* Private DCPL routines */
H5_DLL herr_t H5P_fill_value_defined(H5P_genplist_t *plist,
H5D_fill_value_t *status);
-H5_DLL herr_t H5P_get_fill_value(H5P_genplist_t *plist, H5T_t *type,
+H5_DLL herr_t H5P_get_fill_value(H5P_genplist_t *plist, const struct H5T_t *type,
void *value, hid_t dxpl_id);
#endif /* _H5Pprivate_H */
diff --git a/src/H5Ppublic.h b/src/H5Ppublic.h
index 1d8ced4..b47576c 100644
--- a/src/H5Ppublic.h
+++ b/src/H5Ppublic.h
@@ -52,46 +52,49 @@
* The library's property list classes
*/
-#define H5P_ROOT (H5OPEN H5P_CLS_ROOT_g)
-#define H5P_OBJECT_CREATE (H5OPEN H5P_CLS_OBJECT_CREATE_g)
-#define H5P_FILE_CREATE (H5OPEN H5P_CLS_FILE_CREATE_g)
-#define H5P_FILE_ACCESS (H5OPEN H5P_CLS_FILE_ACCESS_g)
-#define H5P_DATASET_CREATE (H5OPEN H5P_CLS_DATASET_CREATE_g)
-#define H5P_DATASET_ACCESS (H5OPEN H5P_CLS_DATASET_ACCESS_g)
-#define H5P_DATASET_XFER (H5OPEN H5P_CLS_DATASET_XFER_g)
-#define H5P_FILE_MOUNT (H5OPEN H5P_CLS_FILE_MOUNT_g)
-#define H5P_GROUP_CREATE (H5OPEN H5P_CLS_GROUP_CREATE_g)
-#define H5P_GROUP_ACCESS (H5OPEN H5P_CLS_GROUP_ACCESS_g)
-#define H5P_DATATYPE_CREATE (H5OPEN H5P_CLS_DATATYPE_CREATE_g)
-#define H5P_DATATYPE_ACCESS (H5OPEN H5P_CLS_DATATYPE_ACCESS_g)
-#define H5P_STRING_CREATE (H5OPEN H5P_CLS_STRING_CREATE_g)
-#define H5P_ATTRIBUTE_CREATE (H5OPEN H5P_CLS_ATTRIBUTE_CREATE_g)
-#define H5P_OBJECT_COPY (H5OPEN H5P_CLS_OBJECT_COPY_g)
-#define H5P_LINK_CREATE (H5OPEN H5P_CLS_LINK_CREATE_g)
-#define H5P_LINK_ACCESS (H5OPEN H5P_CLS_LINK_ACCESS_g)
+#define H5P_ROOT (H5OPEN H5P_CLS_ROOT_ID_g)
+#define H5P_OBJECT_CREATE (H5OPEN H5P_CLS_OBJECT_CREATE_ID_g)
+#define H5P_FILE_CREATE (H5OPEN H5P_CLS_FILE_CREATE_ID_g)
+#define H5P_FILE_ACCESS (H5OPEN H5P_CLS_FILE_ACCESS_ID_g)
+#define H5P_DATASET_CREATE (H5OPEN H5P_CLS_DATASET_CREATE_ID_g)
+#define H5P_DATASET_ACCESS (H5OPEN H5P_CLS_DATASET_ACCESS_ID_g)
+#define H5P_DATASET_XFER (H5OPEN H5P_CLS_DATASET_XFER_ID_g)
+#define H5P_FILE_MOUNT (H5OPEN H5P_CLS_FILE_MOUNT_ID_g)
+#define H5P_GROUP_CREATE (H5OPEN H5P_CLS_GROUP_CREATE_ID_g)
+#define H5P_GROUP_ACCESS (H5OPEN H5P_CLS_GROUP_ACCESS_ID_g)
+#define H5P_DATATYPE_CREATE (H5OPEN H5P_CLS_DATATYPE_CREATE_ID_g)
+#define H5P_DATATYPE_ACCESS (H5OPEN H5P_CLS_DATATYPE_ACCESS_ID_g)
+#define H5P_STRING_CREATE (H5OPEN H5P_CLS_STRING_CREATE_ID_g)
+#define H5P_ATTRIBUTE_CREATE (H5OPEN H5P_CLS_ATTRIBUTE_CREATE_ID_g)
+#define H5P_OBJECT_COPY (H5OPEN H5P_CLS_OBJECT_COPY_ID_g)
+#define H5P_LINK_CREATE (H5OPEN H5P_CLS_LINK_CREATE_ID_g)
+#define H5P_LINK_ACCESS (H5OPEN H5P_CLS_LINK_ACCESS_ID_g)
/*
* The library's default property lists
*/
-#define H5P_FILE_CREATE_DEFAULT (H5OPEN H5P_LST_FILE_CREATE_g)
-#define H5P_FILE_ACCESS_DEFAULT (H5OPEN H5P_LST_FILE_ACCESS_g)
-#define H5P_DATASET_CREATE_DEFAULT (H5OPEN H5P_LST_DATASET_CREATE_g)
-#define H5P_DATASET_ACCESS_DEFAULT (H5OPEN H5P_LST_DATASET_ACCESS_g)
-#define H5P_DATASET_XFER_DEFAULT (H5OPEN H5P_LST_DATASET_XFER_g)
-#define H5P_FILE_MOUNT_DEFAULT (H5OPEN H5P_LST_FILE_MOUNT_g)
-#define H5P_GROUP_CREATE_DEFAULT (H5OPEN H5P_LST_GROUP_CREATE_g)
-#define H5P_GROUP_ACCESS_DEFAULT (H5OPEN H5P_LST_GROUP_ACCESS_g)
-#define H5P_DATATYPE_CREATE_DEFAULT (H5OPEN H5P_LST_DATATYPE_CREATE_g)
-#define H5P_DATATYPE_ACCESS_DEFAULT (H5OPEN H5P_LST_DATATYPE_ACCESS_g)
-#define H5P_ATTRIBUTE_CREATE_DEFAULT (H5OPEN H5P_LST_ATTRIBUTE_CREATE_g)
-#define H5P_OBJECT_COPY_DEFAULT (H5OPEN H5P_LST_OBJECT_COPY_g)
-#define H5P_LINK_CREATE_DEFAULT (H5OPEN H5P_LST_LINK_CREATE_g)
-#define H5P_LINK_ACCESS_DEFAULT (H5OPEN H5P_LST_LINK_ACCESS_g)
+#define H5P_FILE_CREATE_DEFAULT (H5OPEN H5P_LST_FILE_CREATE_ID_g)
+#define H5P_FILE_ACCESS_DEFAULT (H5OPEN H5P_LST_FILE_ACCESS_ID_g)
+#define H5P_DATASET_CREATE_DEFAULT (H5OPEN H5P_LST_DATASET_CREATE_ID_g)
+#define H5P_DATASET_ACCESS_DEFAULT (H5OPEN H5P_LST_DATASET_ACCESS_ID_g)
+#define H5P_DATASET_XFER_DEFAULT (H5OPEN H5P_LST_DATASET_XFER_ID_g)
+#define H5P_FILE_MOUNT_DEFAULT (H5OPEN H5P_LST_FILE_MOUNT_ID_g)
+#define H5P_GROUP_CREATE_DEFAULT (H5OPEN H5P_LST_GROUP_CREATE_ID_g)
+#define H5P_GROUP_ACCESS_DEFAULT (H5OPEN H5P_LST_GROUP_ACCESS_ID_g)
+#define H5P_DATATYPE_CREATE_DEFAULT (H5OPEN H5P_LST_DATATYPE_CREATE_ID_g)
+#define H5P_DATATYPE_ACCESS_DEFAULT (H5OPEN H5P_LST_DATATYPE_ACCESS_ID_g)
+#define H5P_ATTRIBUTE_CREATE_DEFAULT (H5OPEN H5P_LST_ATTRIBUTE_CREATE_ID_g)
+#define H5P_OBJECT_COPY_DEFAULT (H5OPEN H5P_LST_OBJECT_COPY_ID_g)
+#define H5P_LINK_CREATE_DEFAULT (H5OPEN H5P_LST_LINK_CREATE_ID_g)
+#define H5P_LINK_ACCESS_DEFAULT (H5OPEN H5P_LST_LINK_ACCESS_ID_g)
/* Common creation order flags (for links in groups and attributes on objects) */
#define H5P_CRT_ORDER_TRACKED 0x0001
#define H5P_CRT_ORDER_INDEXED 0x0002
+/* Default value for all property list classes */
+#define H5P_DEFAULT (hid_t)0
+
#ifdef __cplusplus
extern "C" {
#endif
@@ -170,40 +173,40 @@ typedef enum H5D_mpio_no_collective_cause_t {
/* Property list class IDs */
/* (Internal to library, do not use! Use macros above) */
-H5_DLLVAR hid_t H5P_CLS_ROOT_g;
-H5_DLLVAR hid_t H5P_CLS_OBJECT_CREATE_g;
-H5_DLLVAR hid_t H5P_CLS_FILE_CREATE_g;
-H5_DLLVAR hid_t H5P_CLS_FILE_ACCESS_g;
-H5_DLLVAR hid_t H5P_CLS_DATASET_CREATE_g;
-H5_DLLVAR hid_t H5P_CLS_DATASET_ACCESS_g;
-H5_DLLVAR hid_t H5P_CLS_DATASET_XFER_g;
-H5_DLLVAR hid_t H5P_CLS_FILE_MOUNT_g;
-H5_DLLVAR hid_t H5P_CLS_GROUP_CREATE_g;
-H5_DLLVAR hid_t H5P_CLS_GROUP_ACCESS_g;
-H5_DLLVAR hid_t H5P_CLS_DATATYPE_CREATE_g;
-H5_DLLVAR hid_t H5P_CLS_DATATYPE_ACCESS_g;
-H5_DLLVAR hid_t H5P_CLS_STRING_CREATE_g;
-H5_DLLVAR hid_t H5P_CLS_ATTRIBUTE_CREATE_g;
-H5_DLLVAR hid_t H5P_CLS_OBJECT_COPY_g;
-H5_DLLVAR hid_t H5P_CLS_LINK_CREATE_g;
-H5_DLLVAR hid_t H5P_CLS_LINK_ACCESS_g;
+H5_DLLVAR hid_t H5P_CLS_ROOT_ID_g;
+H5_DLLVAR hid_t H5P_CLS_OBJECT_CREATE_ID_g;
+H5_DLLVAR hid_t H5P_CLS_FILE_CREATE_ID_g;
+H5_DLLVAR hid_t H5P_CLS_FILE_ACCESS_ID_g;
+H5_DLLVAR hid_t H5P_CLS_DATASET_CREATE_ID_g;
+H5_DLLVAR hid_t H5P_CLS_DATASET_ACCESS_ID_g;
+H5_DLLVAR hid_t H5P_CLS_DATASET_XFER_ID_g;
+H5_DLLVAR hid_t H5P_CLS_FILE_MOUNT_ID_g;
+H5_DLLVAR hid_t H5P_CLS_GROUP_CREATE_ID_g;
+H5_DLLVAR hid_t H5P_CLS_GROUP_ACCESS_ID_g;
+H5_DLLVAR hid_t H5P_CLS_DATATYPE_CREATE_ID_g;
+H5_DLLVAR hid_t H5P_CLS_DATATYPE_ACCESS_ID_g;
+H5_DLLVAR hid_t H5P_CLS_STRING_CREATE_ID_g;
+H5_DLLVAR hid_t H5P_CLS_ATTRIBUTE_CREATE_ID_g;
+H5_DLLVAR hid_t H5P_CLS_OBJECT_COPY_ID_g;
+H5_DLLVAR hid_t H5P_CLS_LINK_CREATE_ID_g;
+H5_DLLVAR hid_t H5P_CLS_LINK_ACCESS_ID_g;
/* Default roperty list IDs */
/* (Internal to library, do not use! Use macros above) */
-H5_DLLVAR hid_t H5P_LST_FILE_CREATE_g;
-H5_DLLVAR hid_t H5P_LST_FILE_ACCESS_g;
-H5_DLLVAR hid_t H5P_LST_DATASET_CREATE_g;
-H5_DLLVAR hid_t H5P_LST_DATASET_ACCESS_g;
-H5_DLLVAR hid_t H5P_LST_DATASET_XFER_g;
-H5_DLLVAR hid_t H5P_LST_FILE_MOUNT_g;
-H5_DLLVAR hid_t H5P_LST_GROUP_CREATE_g;
-H5_DLLVAR hid_t H5P_LST_GROUP_ACCESS_g;
-H5_DLLVAR hid_t H5P_LST_DATATYPE_CREATE_g;
-H5_DLLVAR hid_t H5P_LST_DATATYPE_ACCESS_g;
-H5_DLLVAR hid_t H5P_LST_ATTRIBUTE_CREATE_g;
-H5_DLLVAR hid_t H5P_LST_OBJECT_COPY_g;
-H5_DLLVAR hid_t H5P_LST_LINK_CREATE_g;
-H5_DLLVAR hid_t H5P_LST_LINK_ACCESS_g;
+H5_DLLVAR hid_t H5P_LST_FILE_CREATE_ID_g;
+H5_DLLVAR hid_t H5P_LST_FILE_ACCESS_ID_g;
+H5_DLLVAR hid_t H5P_LST_DATASET_CREATE_ID_g;
+H5_DLLVAR hid_t H5P_LST_DATASET_ACCESS_ID_g;
+H5_DLLVAR hid_t H5P_LST_DATASET_XFER_ID_g;
+H5_DLLVAR hid_t H5P_LST_FILE_MOUNT_ID_g;
+H5_DLLVAR hid_t H5P_LST_GROUP_CREATE_ID_g;
+H5_DLLVAR hid_t H5P_LST_GROUP_ACCESS_ID_g;
+H5_DLLVAR hid_t H5P_LST_DATATYPE_CREATE_ID_g;
+H5_DLLVAR hid_t H5P_LST_DATATYPE_ACCESS_ID_g;
+H5_DLLVAR hid_t H5P_LST_ATTRIBUTE_CREATE_ID_g;
+H5_DLLVAR hid_t H5P_LST_OBJECT_COPY_ID_g;
+H5_DLLVAR hid_t H5P_LST_LINK_CREATE_ID_g;
+H5_DLLVAR hid_t H5P_LST_LINK_ACCESS_ID_g;
/*********************/
/* Public Prototypes */
diff --git a/src/H5Pstrcpl.c b/src/H5Pstrcpl.c
index 505e35f..cc845af 100644
--- a/src/H5Pstrcpl.c
+++ b/src/H5Pstrcpl.c
@@ -34,6 +34,7 @@
/***********/
#include "H5private.h" /* Generic Functions */
#include "H5Eprivate.h" /* Error handling */
+#include "H5Fprivate.h" /* Files */
#include "H5Iprivate.h" /* IDs */
#include "H5Ppkg.h" /* Property lists */
@@ -74,10 +75,13 @@ static herr_t H5P__strcrt_reg_prop(H5P_genclass_t *pclass);
const H5P_libclass_t H5P_CLS_STRCRT[1] = {{
"string create", /* Class name for debugging */
H5P_TYPE_STRING_CREATE, /* Class type */
- &H5P_CLS_ROOT_g, /* Parent class ID */
- &H5P_CLS_STRING_CREATE_g, /* Pointer to class ID */
+
+ &H5P_CLS_ROOT_g, /* Parent class */
+ &H5P_CLS_STRING_CREATE_g, /* Pointer to class */
+ &H5P_CLS_STRING_CREATE_ID_g, /* Pointer to class ID */
NULL, /* Pointer to default property list ID */
H5P__strcrt_reg_prop, /* Default property registration routine */
+
NULL, /* Class creation callback */
NULL, /* Class creation callback info */
NULL, /* Class copy callback */
diff --git a/src/H5R.c b/src/H5R.c
index e3f20c7..c36c2fa 100644
--- a/src/H5R.c
+++ b/src/H5R.c
@@ -159,25 +159,30 @@ done:
int
H5R_term_interface(void)
{
- int n=0;
+ int n = 0;
FUNC_ENTER_NOAPI_NOINIT_NOERR
if (H5_interface_initialize_g) {
- if ((n=H5I_nmembers(H5I_REFERENCE))) {
- H5I_clear_type(H5I_REFERENCE, FALSE, FALSE);
- } else {
+ if(H5I_nmembers(H5I_REFERENCE) > 0) {
+ (void)H5I_clear_type(H5I_REFERENCE, FALSE, FALSE);
+ n++; /*H5I*/
+ } /* end if */
+ else {
/* Close deprecated interface */
n += H5R__term_deprec_interface();
- H5I_dec_type_ref(H5I_REFERENCE);
+ /* Destroy the reference id group */
+ (void)H5I_dec_type_ref(H5I_REFERENCE);
+ n++; /*H5I*/
+
+ /* Mark closed */
H5_interface_initialize_g = 0;
- n = 1; /*H5I*/
- }
- }
+ } /* end else */
+ } /* end if */
FUNC_LEAVE_NOAPI(n)
-}
+} /* end H5R_term_interface() */
/*--------------------------------------------------------------------------
diff --git a/src/H5S.c b/src/H5S.c
index 65588bc..7279d22 100644
--- a/src/H5S.c
+++ b/src/H5S.c
@@ -145,16 +145,17 @@ H5S_term_interface(void)
FUNC_ENTER_NOAPI_NOINIT_NOERR
if(H5_interface_initialize_g) {
- if((n = H5I_nmembers(H5I_DATASPACE))) {
- H5I_clear_type(H5I_DATASPACE, FALSE, FALSE);
+ if(H5I_nmembers(H5I_DATASPACE) > 0) {
+ (void)H5I_clear_type(H5I_DATASPACE, FALSE, FALSE);
+ n++; /*H5I*/
} /* end if */
else {
- /* Free data types */
- H5I_dec_type_ref(H5I_DATASPACE);
+ /* Destroy the dataspace object id group */
+ (void)H5I_dec_type_ref(H5I_DATASPACE);
+ n++; /*H5I*/
/* Shut down interface */
H5_interface_initialize_g = 0;
- n = 1; /*H5I*/
} /* end else */
} /* end if */
@@ -1303,8 +1304,7 @@ H5S_set_extent_simple(H5S_t *space, unsigned rank, const hsize_t *dims,
/* Selection related cleanup */
/* Set offset to zeros */
- for(u = 0; u < space->extent.rank; u++)
- space->select.offset[u] = 0;
+ HDmemset(space->select.offset, 0, sizeof(hsize_t) * space->extent.rank);
space->select.offset_changed = FALSE;
/* If the selection is 'all', update the number of elements selected */
diff --git a/src/H5Smpio.c b/src/H5Smpio.c
index 284e16f..3da6341 100644
--- a/src/H5Smpio.c
+++ b/src/H5Smpio.c
@@ -502,9 +502,9 @@ H5S_mpio_hyper_type(const H5S_t *space, size_t elmt_size,
hsize_t max_xtent[H5S_MAX_RANK];
H5S_hyper_dim_t *diminfo; /* [rank] */
unsigned rank;
- int block_length[3];
- MPI_Datatype inner_type, outer_type, old_types[3];
- MPI_Aint extent_len, displacement[3];
+ MPI_Datatype inner_type, outer_type;
+ MPI_Aint extent_len, start_disp, new_extent;
+ MPI_Aint lb; /* Needed as an argument for MPI_Type_get_extent */
unsigned u; /* Local index variable */
int i; /* Local index variable */
int mpi_code; /* MPI return code */
@@ -671,42 +671,30 @@ H5S_mpio_hyper_type(const H5S_t *space, size_t elmt_size,
* Then build the dimension type as (start, vector type, xtent).
****************************************/
/* calculate start and extent values of this dimension */
- displacement[1] = d[i].start * offset[i] * elmt_size;
- displacement[2] = (MPI_Aint)elmt_size * max_xtent[i];
- if(MPI_SUCCESS != (mpi_code = MPI_Type_extent(outer_type, &extent_len)))
- HMPI_GOTO_ERROR(FAIL, "MPI_Type_extent failed", mpi_code)
+ start_disp = d[i].start * offset[i] * elmt_size;
+ new_extent = (MPI_Aint)elmt_size * max_xtent[i];
+ if(MPI_SUCCESS != (mpi_code = MPI_Type_get_extent(outer_type, &lb, &extent_len)))
+ HMPI_GOTO_ERROR(FAIL, "MPI_Type_get_extent failed", mpi_code)
/*************************************************
* Restructure this datatype ("outer_type")
* so that it still starts at 0, but its extent
* is the full extent in this dimension.
*************************************************/
- if(displacement[1] > 0 || (int)extent_len < displacement[2]) {
+ if(start_disp > 0 || extent_len < new_extent) {
+ MPI_Datatype interm_type;
+ int block_len = 1;
- block_length[0] = 1;
- block_length[1] = 1;
- block_length[2] = 1;
-
- displacement[0] = 0;
-
- old_types[0] = MPI_LB;
- old_types[1] = outer_type;
- old_types[2] = MPI_UB;
-#ifdef H5S_DEBUG
- if(H5DEBUG(S))
- HDfprintf(H5DEBUG(S), "%s: i=%d Extending struct type\n"
- "***displacements: %ld, %ld, %ld\n",
- FUNC, i, (long)displacement[0], (long)displacement[1], (long)displacement[2]);
-#endif
-
- mpi_code = MPI_Type_struct(3, /* count */
- block_length, /* blocklengths */
- displacement, /* displacements */
- old_types, /* old types */
- &inner_type); /* new type */
+ HDassert(0 == lb);
+ mpi_code = MPI_Type_create_hindexed(1, &block_len, &start_disp, outer_type, &interm_type);
MPI_Type_free(&outer_type);
- if(mpi_code != MPI_SUCCESS)
+ if(mpi_code != MPI_SUCCESS)
+ HMPI_GOTO_ERROR(FAIL, "MPI_Type_create_hindexed failed", mpi_code)
+
+ mpi_code = MPI_Type_create_resized(interm_type, lb, new_extent, &inner_type);
+ MPI_Type_free(&interm_type);
+ if(mpi_code != MPI_SUCCESS)
HMPI_GOTO_ERROR(FAIL, "couldn't resize MPI vector type", mpi_code)
} /* end if */
else
@@ -886,8 +874,8 @@ H5S_obtain_datatype(const hsize_t *down, H5S_hyper_span_t *span,
outercount++;
} /* end while */
- if(MPI_SUCCESS != (mpi_code = MPI_Type_hindexed((int)outercount, blocklen, disp, *elmt_type, span_type)))
- HMPI_GOTO_ERROR(FAIL, "MPI_Type_hindexed failed", mpi_code)
+ if(MPI_SUCCESS != (mpi_code = MPI_Type_create_hindexed((int)outercount, blocklen, disp, *elmt_type, span_type)))
+ HMPI_GOTO_ERROR(FAIL, "MPI_Type_create_hindexed failed", mpi_code)
span_type_valid = TRUE;
} /* end if */
else {
@@ -937,9 +925,9 @@ H5S_obtain_datatype(const hsize_t *down, H5S_hyper_span_t *span,
/* Build the MPI datatype for this node */
stride = (*down) * elmt_size;
H5_CHECK_OVERFLOW(tspan->nelem, hsize_t, int)
- if(MPI_SUCCESS != (mpi_code = MPI_Type_hvector((int)tspan->nelem, 1, stride, down_type, &inner_type[outercount]))) {
+ if(MPI_SUCCESS != (mpi_code = MPI_Type_create_hvector((int)tspan->nelem, 1, stride, down_type, &inner_type[outercount]))) {
MPI_Type_free(&down_type);
- HMPI_GOTO_ERROR(FAIL, "MPI_Type_hvector failed", mpi_code)
+ HMPI_GOTO_ERROR(FAIL, "MPI_Type_create_hvector failed", mpi_code)
} /* end if */
/* Release MPI datatype for next dimension down */
@@ -952,8 +940,8 @@ H5S_obtain_datatype(const hsize_t *down, H5S_hyper_span_t *span,
/* building the whole vector datatype */
H5_CHECK_OVERFLOW(outercount, size_t, int)
- if(MPI_SUCCESS != (mpi_code = MPI_Type_struct((int)outercount, blocklen, disp, inner_type, span_type)))
- HMPI_GOTO_ERROR(FAIL, "MPI_Type_struct failed", mpi_code)
+ if(MPI_SUCCESS != (mpi_code = MPI_Type_create_struct((int)outercount, blocklen, disp, inner_type, span_type)))
+ HMPI_GOTO_ERROR(FAIL, "MPI_Type_create_struct failed", mpi_code)
span_type_valid = TRUE;
/* Release inner node types */
diff --git a/src/H5Spublic.h b/src/H5Spublic.h
index c62a7b7..097bf30 100644
--- a/src/H5Spublic.h
+++ b/src/H5Spublic.h
@@ -24,7 +24,7 @@
#include "H5Ipublic.h"
/* Define atomic datatypes */
-#define H5S_ALL 0
+#define H5S_ALL (hid_t)0
#define H5S_UNLIMITED ((hsize_t)(hssize_t)(-1))
/* Define user-level maximum number of dimensions */
diff --git a/src/H5T.c b/src/H5T.c
index b82bc1d..942174c 100644
--- a/src/H5T.c
+++ b/src/H5T.c
@@ -529,7 +529,7 @@ H5FL_DEFINE_STATIC(H5T_path_t);
/* Datatype ID class */
static const H5I_class_t H5I_DATATYPE_CLS[1] = {{
H5I_DATATYPE, /* ID class value */
- 0, /* Class flags */
+ H5I_CLASS_REUSE_IDS, /* Class flags */
8, /* # of reserved IDs for class */
(H5I_free_t)H5T_close /* Callback routine for closing objects of this class */
}};
@@ -772,7 +772,6 @@ H5T_init_interface(void)
hsize_t dim[1]={1}; /* Dimension info for array datatype */
herr_t status;
unsigned copied_dtype=1; /* Flag to indicate whether datatype was copied or allocated (for error cleanup) */
- H5P_genclass_t *crt_pclass; /* Property list class for datatype creation properties */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_NOAPI_NOINIT
@@ -1049,11 +1048,9 @@ H5T_init_interface(void)
status = 0;
status |= H5T_register(H5T_PERS_SOFT, "i_i", fixedpt, fixedpt, H5T__conv_i_i, H5AC_dxpl_id, FALSE);
- status |= H5T_register(H5T_PERS_SOFT, "f_f", floatpt, floatpt, H5T__conv_f_f, H5AC_dxpl_id, FALSE);
-
status |= H5T_register(H5T_PERS_SOFT, "i_f", fixedpt, floatpt, H5T__conv_i_f, H5AC_dxpl_id, FALSE);
+ status |= H5T_register(H5T_PERS_SOFT, "f_f", floatpt, floatpt, H5T__conv_f_f, H5AC_dxpl_id, FALSE);
status |= H5T_register(H5T_PERS_SOFT, "f_i", floatpt, fixedpt, H5T__conv_f_i, H5AC_dxpl_id, FALSE);
-
status |= H5T_register(H5T_PERS_SOFT, "s_s", string, string, H5T__conv_s_s, H5AC_dxpl_id, FALSE);
status |= H5T_register(H5T_PERS_SOFT, "b_b", bitfield, bitfield, H5T__conv_b_b, H5AC_dxpl_id, FALSE);
status |= H5T_register(H5T_PERS_SOFT, "ibo", fixedpt, fixedpt, H5T__conv_order, H5AC_dxpl_id, FALSE);
@@ -1351,21 +1348,17 @@ H5T_init_interface(void)
if (status<0)
HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "unable to register conversion function(s)")
- /* ========== Datatype Creation Property Class Initialization ============*/
- HDassert(H5P_CLS_DATATYPE_CREATE_g!=-1);
-
- /* Get the pointer to group creation class */
- if(NULL == (crt_pclass = (H5P_genclass_t *)H5I_object(H5P_CLS_DATATYPE_CREATE_g)))
- HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a property list class")
-
/* Register datatype creation property class properties here. See similar
* code in H5D_init_interface(), etc. for example.
*/
/* Only register the default property list if it hasn't been created yet */
- if(H5P_LST_DATATYPE_CREATE_g == (-1)) {
+ if(H5P_LST_DATATYPE_CREATE_ID_g == (-1)) {
+ /* ========== Datatype Creation Property Class Initialization ============*/
+ HDassert(H5P_CLS_DATATYPE_CREATE_g != NULL);
+
/* Register the default datatype creation property list */
- if((H5P_LST_DATATYPE_CREATE_g = H5P_create_id(crt_pclass, FALSE)) < 0)
+ if((H5P_LST_DATATYPE_CREATE_ID_g = H5P_create_id(H5P_CLS_DATATYPE_CREATE_g, FALSE)) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTREGISTER, FAIL, "can't insert property into class")
} /* end if */
@@ -1445,20 +1438,23 @@ H5T_unlock_cb(void *_dt, hid_t UNUSED id, void UNUSED *key)
int
H5T_term_interface(void)
{
- int i, nprint=0, n=0;
- H5T_path_t *path = NULL;
+ int n = 0;
FUNC_ENTER_NOAPI_NOINIT_NOERR
if(H5_interface_initialize_g) {
+ int i, nprint = 0;
+
/* Unregister all conversion functions */
for(i = 0; i < H5T_g.npaths; i++) {
+ H5T_path_t *path;
+
path = H5T_g.path[i];
HDassert(path);
if(path->func) {
H5T__print_stats(path, &nprint/*in,out*/);
path->cdata.command = H5T_CONV_FREE;
- if((path->func)(FAIL, FAIL, &(path->cdata), (size_t)0,
+ if((path->func)((hid_t)FAIL, (hid_t)FAIL, &(path->cdata), (size_t)0,
(size_t)0, (size_t)0, NULL, NULL,H5AC_dxpl_id) < 0) {
#ifdef H5T_DEBUG
if (H5DEBUG(T)) {
@@ -1495,7 +1491,9 @@ H5T_term_interface(void)
/* Close deprecated interface */
n += H5T__term_deprec_interface();
- H5I_dec_type_ref(H5I_DATATYPE);
+ /* Destroy the datatype object id group */
+ (void)H5I_dec_type_ref(H5I_DATATYPE);
+ n++; /*H5I*/
/* Reset all the datatype IDs */
H5T_IEEE_F32BE_g = FAIL;
@@ -1595,7 +1593,6 @@ H5T_term_interface(void)
/* Mark interface as closed */
H5_interface_initialize_g = 0;
- n = 1; /*H5I*/
} /* end if */
FUNC_LEAVE_NOAPI(n)
@@ -2589,7 +2586,7 @@ H5T_unregister(H5T_pers_t pers, const char *name, H5T_t *src, H5T_t *dst,
/* Shut down path */
H5T__print_stats(path, &nprint);
path->cdata.command = H5T_CONV_FREE;
- if((path->func)(FAIL, FAIL, &(path->cdata),
+ if((path->func)((hid_t)FAIL, (hid_t)FAIL, &(path->cdata),
(size_t)0, (size_t)0, (size_t)0, NULL, NULL, dxpl_id) < 0) {
#ifdef H5T_DEBUG
if(H5DEBUG(T)) {
@@ -4403,7 +4400,7 @@ H5T_path_find(const H5T_t *src, const H5T_t *dst, const char *name,
HDsnprintf(H5T_g.path[0]->name, sizeof(H5T_g.path[0]->name), "no-op");
H5T_g.path[0]->func = H5T__conv_noop;
H5T_g.path[0]->cdata.command = H5T_CONV_INIT;
- if(H5T__conv_noop(FAIL, FAIL, &(H5T_g.path[0]->cdata), (size_t)0, (size_t)0, (size_t)0, NULL, NULL, dxpl_id) < 0) {
+ if(H5T__conv_noop((hid_t)FAIL, (hid_t)FAIL, &(H5T_g.path[0]->cdata), (size_t)0, (size_t)0, (size_t)0, NULL, NULL, dxpl_id) < 0) {
#ifdef H5T_DEBUG
if(H5DEBUG(T))
fprintf(H5DEBUG(T), "H5T: unable to initialize no-op conversion function (ignored)\n");
@@ -4562,7 +4559,7 @@ H5T_path_find(const H5T_t *src, const H5T_t *dst, const char *name,
HDassert(table == H5T_g.path[md]);
H5T__print_stats(table, &nprint/*in,out*/);
table->cdata.command = H5T_CONV_FREE;
- if((table->func)(FAIL, FAIL, &(table->cdata), (size_t)0, (size_t)0, (size_t)0, NULL, NULL, dxpl_id) < 0) {
+ if((table->func)((hid_t)FAIL, (hid_t)FAIL, &(table->cdata), (size_t)0, (size_t)0, (size_t)0, NULL, NULL, dxpl_id) < 0) {
#ifdef H5T_DEBUG
if(H5DEBUG(T)) {
fprintf(H5DEBUG(T), "H5T: conversion function 0x%08lx free "
diff --git a/src/H5Tbit.c b/src/H5Tbit.c
index 258a336..79cf3a6 100644
--- a/src/H5Tbit.c
+++ b/src/H5Tbit.c
@@ -46,9 +46,9 @@ void
H5T__bit_copy(uint8_t *dst, size_t dst_offset, const uint8_t *src,
size_t src_offset, size_t size)
{
- unsigned shift;
- unsigned mask_lo, mask_hi;
- unsigned s_idx, d_idx;
+ size_t shift;
+ size_t mask_lo, mask_hi;
+ size_t s_idx, d_idx;
FUNC_ENTER_PACKAGE_NOERR
@@ -78,8 +78,8 @@ H5T__bit_copy(uint8_t *dst, size_t dst_offset, const uint8_t *src,
* dst[d_idx+1] dst[d_idx]
*/
while(src_offset && size > 0) {
- unsigned nbits = MIN3(size, 8 - dst_offset, 8 - src_offset);
- unsigned mask = ((unsigned)1 << nbits) - 1;
+ size_t nbits = MIN3(size, 8 - dst_offset, 8 - src_offset);
+ size_t mask = ((size_t)1 << nbits) - 1;
dst[d_idx] &= (uint8_t)~(mask << dst_offset);
dst[d_idx] |= (uint8_t)(((src[s_idx] >> src_offset) & (uint8_t)mask) << dst_offset);
@@ -121,7 +121,7 @@ H5T__bit_copy(uint8_t *dst, size_t dst_offset, const uint8_t *src,
* to line up with the destination.
*/
shift = dst_offset;
- mask_lo = ((unsigned)1 << (8 - shift)) - 1;
+ mask_lo = ((size_t)1 << (8 - shift)) - 1;
mask_hi = (~mask_lo) & 0xff;
for(/*void*/; size > 8; size -= 8, d_idx++, s_idx++) {
@@ -137,8 +137,8 @@ H5T__bit_copy(uint8_t *dst, size_t dst_offset, const uint8_t *src,
/* Finish up */
while(size > 0) {
- unsigned nbits = (unsigned)MIN3 (size, 8 - dst_offset, 8 - src_offset);
- unsigned mask = ((unsigned)1 << nbits) - 1;
+ size_t nbits = (size_t)MIN3 (size, 8 - dst_offset, 8 - src_offset);
+ size_t mask = ((size_t)1 << nbits) - 1;
dst[d_idx] &= (uint8_t)(~(mask << dst_offset));
dst[d_idx] |= (uint8_t)(((src[s_idx] >> src_offset) & (uint8_t)mask) << dst_offset);
diff --git a/src/H5Tcommit.c b/src/H5Tcommit.c
index bfae624..7359a56 100644
--- a/src/H5Tcommit.c
+++ b/src/H5Tcommit.c
@@ -651,7 +651,7 @@ H5Tget_create_plist(hid_t dtype_id)
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a datatype")
/* Copy the default datatype creation property list */
- if(NULL == (tcpl_plist = (H5P_genplist_t *)H5I_object(H5P_LST_DATATYPE_CREATE_g)))
+ if(NULL == (tcpl_plist = (H5P_genplist_t *)H5I_object(H5P_LST_DATATYPE_CREATE_ID_g)))
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "can't get default creation property list")
if((new_tcpl_id = H5P_copy_plist(tcpl_plist, TRUE)) < 0)
HGOTO_ERROR(H5E_DATATYPE, H5E_CANTGET, FAIL, "unable to copy the creation property list")
diff --git a/src/H5Z.c b/src/H5Z.c
index cf2ed14..18e365c 100644
--- a/src/H5Z.c
+++ b/src/H5Z.c
@@ -408,27 +408,27 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5Z_unregister(H5Z_filter_t id)
+H5Z_unregister(H5Z_filter_t filter_id)
{
- size_t i; /* Local index variable */
+ size_t filter_index; /* Local index variable for filter */
H5Z_object_t object;
- herr_t ret_value=SUCCEED; /* Return value */
+ herr_t ret_value=SUCCEED; /* Return value */
FUNC_ENTER_NOAPI(FAIL)
- HDassert(id >= 0 && id <= H5Z_FILTER_MAX);
+ HDassert(filter_id>=0 && filter_id<=H5Z_FILTER_MAX);
/* Is the filter already registered? */
- for (i=0; i<H5Z_table_used_g; i++)
- if (H5Z_table_g[i].id==id)
+ for (filter_index=0; filter_index<H5Z_table_used_g; filter_index++)
+ if (H5Z_table_g[filter_index].id==filter_id)
break;
/* Fail if filter not found */
- if (i>=H5Z_table_used_g)
+ if (filter_index>=H5Z_table_used_g)
HGOTO_ERROR(H5E_PLINE, H5E_NOTFOUND, FAIL, "filter is not registered")
/* Initialize the structure object for iteration */
- object.filter_id = id;
+ object.filter_id = filter_id;
object.found = FALSE;
/* Iterate through all opened datasets, returns a failure if any of them uses the filter */
@@ -451,9 +451,9 @@ H5Z_unregister(H5Z_filter_t id)
/* Remove filter from table */
/* Don't worry about shrinking table size (for now) */
- HDmemmove(&H5Z_table_g[i],&H5Z_table_g[i+1],sizeof(H5Z_class2_t)*((H5Z_table_used_g-1)-i));
+ HDmemmove(&H5Z_table_g[filter_index],&H5Z_table_g[filter_index+1],sizeof(H5Z_class2_t)*((H5Z_table_used_g-1)-filter_index));
#ifdef H5Z_DEBUG
- HDmemmove(&H5Z_stat_table_g[i],&H5Z_stat_table_g[i+1],sizeof(H5Z_stats_t)*((H5Z_table_used_g-1)-i));
+ HDmemmove(&H5Z_stat_table_g[filter_index],&H5Z_stat_table_g[filter_index+1],sizeof(H5Z_stats_t)*((H5Z_table_used_g-1)-filter_index));
#endif /* H5Z_DEBUG */
H5Z_table_used_g--;
@@ -508,7 +508,7 @@ done:
* FALSE otherwise.
*
* Programmer: Raymond Lu
- * 13 May 2013
+ * 6 May 2013
*
*-------------------------------------------------------------------------
*/
@@ -612,7 +612,7 @@ done:
* FAIL if there is an error
*
* Programmer: Raymond Lu
- * 13 May 2013
+ * 6 May 2013
*
*-------------------------------------------------------------------------
*/
@@ -636,7 +636,6 @@ done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5Z__flush_file_cb() */
-
/*-------------------------------------------------------------------------
* Function: H5Zfilter_avail
@@ -851,7 +850,7 @@ H5Z_prepare_prelude_callback_dcpl(hid_t dcpl_id, hid_t type_id, H5Z_prelude_type
H5S_t *space; /* Dataspace describing chunk */
size_t u; /* Local index variable */
- /* Create a data space for a chunk & set the extent */
+ /* Create a dataspace for a chunk & set the extent */
for(u = 0; u < dcpl_layout.u.chunk.ndims; u++)
chunk_dims[u] = dcpl_layout.u.chunk.dim[u];
if(NULL == (space = H5S_create_simple(dcpl_layout.u.chunk.ndims, chunk_dims, NULL)))
@@ -972,7 +971,7 @@ H5Z_can_apply_direct(const H5O_pline_t *pline)
HDassert(pline->nused > 0);
/* Make "can apply" callbacks for filters in pipeline */
- if(H5Z_prelude_callback(pline, -1, -1, -1, H5Z_PRELUDE_CAN_APPLY) < 0)
+ if(H5Z_prelude_callback(pline, (hid_t)-1, (hid_t)-1, (hid_t)-1, H5Z_PRELUDE_CAN_APPLY) < 0)
HGOTO_ERROR(H5E_PLINE, H5E_CANAPPLY, FAIL, "unable to apply filter")
done:
@@ -1009,7 +1008,7 @@ H5Z_set_local_direct(const H5O_pline_t *pline)
HDassert(pline->nused > 0);
/* Make "set local" callbacks for filters in pipeline */
- if(H5Z_prelude_callback(pline, -1, -1, -1, H5Z_PRELUDE_SET_LOCAL) < 0)
+ if(H5Z_prelude_callback(pline, (hid_t)-1, (hid_t)-1, (hid_t)-1, H5Z_PRELUDE_SET_LOCAL) < 0)
HGOTO_ERROR(H5E_PLINE, H5E_SETLOCAL, FAIL, "local filter parameters not set")
done:
@@ -1493,7 +1492,7 @@ done:
* FAIL - error
*
* Programmer: Raymond Lu
- * 14 May 2013
+ * 26 April 2013
*
* Modifications:
*
@@ -1523,6 +1522,7 @@ done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5Z_filter_in_pline() */
+
/*-------------------------------------------------------------------------
* Function: H5Z_all_filters_avail
diff --git a/src/H5Zprivate.h b/src/H5Zprivate.h
index bd5bef0..73d85ac 100644
--- a/src/H5Zprivate.h
+++ b/src/H5Zprivate.h
@@ -51,7 +51,7 @@
/****************************/
/* Structure to store information about each filter's parameters */
-typedef struct {
+typedef struct H5Z_filter_info_t {
H5Z_filter_t id; /*filter identification number */
unsigned flags; /*defn and invocation flags */
char _name[H5Z_COMMON_NAME_LEN]; /*internal filter name */
diff --git a/src/H5Zszip.c b/src/H5Zszip.c
index 9bcbb1a..589b27b 100644
--- a/src/H5Zszip.c
+++ b/src/H5Zszip.c
@@ -190,7 +190,7 @@ H5Z_set_local_szip(hid_t dcpl_id, hid_t type_id, hid_t space_id)
/* Get dataspace */
if(NULL == (ds = (H5S_t *)H5I_object_verify(space_id, H5I_DATASPACE)))
- HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a data space")
+ HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a dataspace")
/* Get dimensions for dataspace */
if((ndims = H5S_get_simple_extent_dims(ds, dims, NULL)) < 0)
diff --git a/src/H5config.h.in b/src/H5config.h.in
index 76de6c6..daf7d0d 100644
--- a/src/H5config.h.in
+++ b/src/H5config.h.in
@@ -58,6 +58,9 @@
/* Define to 1 if you have the `alarm' function. */
#undef HAVE_ALARM
+/* Define to 1 if you have the `asprintf' function. */
+#undef HAVE_ASPRINTF
+
/* Define if the __attribute__(()) extension is present */
#undef HAVE_ATTRIBUTE
@@ -250,9 +253,6 @@
/* Define to 1 if you have the <mpe.h> header file. */
#undef HAVE_MPE_H
-/* Define if MPI_File_get_size works correctly */
-#undef HAVE_MPI_GET_SIZE
-
/* Define if `MPI_Comm_c2f' and `MPI_Comm_f2c' exists */
#undef HAVE_MPI_MULTI_LANG_Comm
@@ -476,10 +476,6 @@
/* Define if the metadata trace file code is to be compiled in */
#undef METADATA_TRACE_FILE
-/* Define if your system's `MPI_File_set_size' function works for files over
- 2GB. */
-#undef MPI_FILE_SET_SIZE_BIG
-
/* Define if we can violate pointer alignment restrictions */
#undef NO_ALIGNMENT_RESTRICTIONS
diff --git a/src/H5private.h b/src/H5private.h
index 18a0fc0..3f0fccf 100644
--- a/src/H5private.h
+++ b/src/H5private.h
@@ -540,6 +540,9 @@ typedef struct {
#ifndef HDasin
#define HDasin(X) asin(X)
#endif /* HDasin */
+#ifndef HDasprintf
+ #define HDasprintf asprintf /*varargs*/
+#endif /* HDasprintf */
#ifndef HDassert
#define HDassert(X) assert(X)
#endif /* HDassert */
diff --git a/src/H5public.h b/src/H5public.h
index aaf0d74..fb8cbfa 100644
--- a/src/H5public.h
+++ b/src/H5public.h
@@ -94,10 +94,10 @@ extern "C" {
/* Version numbers */
#define H5_VERS_MAJOR 1 /* For major interface/format changes */
#define H5_VERS_MINOR 8 /* For minor interface/format changes */
-#define H5_VERS_RELEASE 13 /* For tweaks, bug-fixes, or development */
+#define H5_VERS_RELEASE 14 /* For tweaks, bug-fixes, or development */
#define H5_VERS_SUBRELEASE "" /* For pre-releases like snap0 */
/* Empty string for real releases. */
-#define H5_VERS_INFO "HDF5 library version: 1.8.13" /* Full version string */
+#define H5_VERS_INFO "HDF5 library version: 1.8.14" /* Full version string */
#define H5check() H5check_version(H5_VERS_MAJOR,H5_VERS_MINOR, \
H5_VERS_RELEASE)
@@ -282,9 +282,6 @@ H5_GCC_DIAG_ON(long-long)
# error "nothing appropriate for uint64_t"
#endif
-/* Default value for all property list classes */
-#define H5P_DEFAULT 0
-
/* Common iteration orders */
typedef enum {
H5_ITER_UNKNOWN = -1, /* Unknown order */
diff --git a/src/H5trace.c b/src/H5trace.c
index b8f0b6a..5e90ff6 100644
--- a/src/H5trace.c
+++ b/src/H5trace.c
@@ -1181,7 +1181,7 @@ H5_trace(const double *returning, const char *func, const char *type, ...)
case H5I_DATASPACE:
fprintf(out, "%ld (dspace)", (long)obj);
- /* Save the rank of simple data spaces for arrays */
+ /* Save the rank of simple dataspaces for arrays */
/* This may generate recursive call to the library... -QAK */
{
H5S_t *space;
diff --git a/src/Makefile.am b/src/Makefile.am
index b19f205..004a01b 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -50,7 +50,7 @@ libhdf5_la_SOURCES= H5.c H5checksum.c H5dbg.c H5system.c H5timer.c H5trace.c \
H5Dio.c H5Dlayout.c \
H5Dmpio.c H5Doh.c H5Dscatgath.c H5Dselect.c H5Dtest.c \
H5E.c H5Edeprec.c H5Eint.c \
- H5F.c H5Faccum.c H5Fcwfs.c \
+ H5F.c H5Fint.c H5Faccum.c H5Fcwfs.c \
H5Fdbg.c H5Fefc.c H5Ffake.c H5Fio.c \
H5Fmount.c H5Fmpi.c H5Fquery.c \
H5Fsfile.c H5Fsuper.c H5Fsuper_cache.c H5Ftest.c \
diff --git a/src/Makefile.in b/src/Makefile.in
index 4f556c4..e35a64c 100644
--- a/src/Makefile.in
+++ b/src/Makefile.in
@@ -155,9 +155,9 @@ am_libhdf5_la_OBJECTS = H5.lo H5checksum.lo H5dbg.lo H5system.lo \
H5Dbtree.lo H5Dchunk.lo H5Dcompact.lo H5Dcontig.lo H5Ddbg.lo \
H5Ddeprec.lo H5Defl.lo H5Dfill.lo H5Dint.lo H5Dio.lo \
H5Dlayout.lo H5Dmpio.lo H5Doh.lo H5Dscatgath.lo H5Dselect.lo \
- H5Dtest.lo H5E.lo H5Edeprec.lo H5Eint.lo H5F.lo H5Faccum.lo \
- H5Fcwfs.lo H5Fdbg.lo H5Fefc.lo H5Ffake.lo H5Fio.lo H5Fmount.lo \
- H5Fmpi.lo H5Fquery.lo H5Fsfile.lo H5Fsuper.lo \
+ H5Dtest.lo H5E.lo H5Edeprec.lo H5Eint.lo H5F.lo H5Fint.lo \
+ H5Faccum.lo H5Fcwfs.lo H5Fdbg.lo H5Fefc.lo H5Ffake.lo H5Fio.lo \
+ H5Fmount.lo H5Fmpi.lo H5Fquery.lo H5Fsfile.lo H5Fsuper.lo \
H5Fsuper_cache.lo H5Ftest.lo H5FD.lo H5FDcore.lo H5FDdirect.lo \
H5FDfamily.lo H5FDint.lo H5FDlog.lo H5FDmpi.lo H5FDmpio.lo \
H5FDmulti.lo H5FDsec2.lo H5FDspace.lo H5FDstdio.lo H5FL.lo \
@@ -564,7 +564,6 @@ MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MPE = @MPE@
-MPI_GET_SIZE = @MPI_GET_SIZE@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
@@ -727,8 +726,10 @@ CHECK_CLEANFILES = *.chkexe *.chklog *.clog
# Add libtool shared library version numbers to the HDF5 library
# See libtool versioning documentation online.
-LT_VERS_INTERFACE = 8
-LT_VERS_REVISION = 2
+# After making changes, run bin/reconfigure to update other configure related
+# files like Makefile.in.
+LT_VERS_INTERFACE = 9
+LT_VERS_REVISION = 0
LT_VERS_AGE = 0
# Our main target, the HDF5 library
@@ -753,7 +754,7 @@ libhdf5_la_SOURCES = H5.c H5checksum.c H5dbg.c H5system.c H5timer.c H5trace.c \
H5Dio.c H5Dlayout.c \
H5Dmpio.c H5Doh.c H5Dscatgath.c H5Dselect.c H5Dtest.c \
H5E.c H5Edeprec.c H5Eint.c \
- H5F.c H5Faccum.c H5Fcwfs.c \
+ H5F.c H5Fint.c H5Faccum.c H5Fcwfs.c \
H5Fdbg.c H5Fefc.c H5Ffake.c H5Fio.c \
H5Fmount.c H5Fmpi.c H5Fquery.c \
H5Fsfile.c H5Fsuper.c H5Fsuper_cache.c H5Ftest.c \
@@ -1026,6 +1027,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/H5Fdbg.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/H5Fefc.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/H5Ffake.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/H5Fint.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/H5Fio.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/H5Fmount.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/H5Fmpi.Plo at am__quote@
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
index 2f1b70a..3b7d8db 100644
--- a/test/CMakeLists.txt
+++ b/test/CMakeLists.txt
@@ -4,7 +4,7 @@ PROJECT (HDF5_TEST)
#-----------------------------------------------------------------------------
# Apply Definitions to compiler in this directory and below
#-----------------------------------------------------------------------------
-add_definitions (${HDF5_EXTRA_C_FLAGS})
+add_definitions (${HDF_EXTRA_C_FLAGS})
#-----------------------------------------------------------------------------
# Generate the H5srcdir_str.h file containing user settings needed by compilation
@@ -64,7 +64,7 @@ if (BUILD_SHARED_LIBS)
set (HDF5_TEST_PLUGIN_LIB_CORENAME "${test_lib}")
set (HDF5_TEST_PLUGIN_LIB_NAME "${HDF5_EXTERNAL_LIB_PREFIX}${HDF5_TEST_PLUGIN_LIB_CORENAME}")
set (HDF5_TEST_PLUGIN_LIB_TARGET ${HDF5_TEST_PLUGIN_LIB_CORENAME})
- add_definitions (${HDF5_EXTRA_C_FLAGS})
+ add_definitions (${HDF_EXTRA_C_FLAGS})
INCLUDE_DIRECTORIES (${HDF5_SRC_DIR})
add_library (${HDF5_TEST_PLUGIN_LIB_TARGET} ${LIB_TYPE} ${HDF5_TEST_SOURCE_DIR}/${test_lib}.c)
@@ -95,7 +95,7 @@ if (BUILD_SHARED_LIBS)
set (HDF5_TEST_PLUGIN_LIB_CORENAME "${test_lib}")
set (HDF5_TEST_PLUGIN_LIB_NAME "${HDF5_EXTERNAL_LIB_PREFIX}${HDF5_TEST_PLUGIN_LIB_CORENAME}")
set (HDF5_TEST_PLUGIN_LIB_TARGET ${HDF5_TEST_PLUGIN_LIB_CORENAME})
- add_definitions (${HDF5_EXTRA_C_FLAGS})
+ add_definitions (${HDF_EXTRA_C_FLAGS})
INCLUDE_DIRECTORIES (${HDF5_SRC_DIR})
add_library (${HDF5_TEST_PLUGIN_LIB_TARGET} ${LIB_TYPE} ${HDF5_TEST_SOURCE_DIR}/${test_lib}.c)
diff --git a/test/CMakeTests.cmake b/test/CMakeTests.cmake
index a463748..bf5ad11 100644
--- a/test/CMakeTests.cmake
+++ b/test/CMakeTests.cmake
@@ -269,7 +269,7 @@ if (HDF5_ENABLE_DEPRECATED_SYMBOLS)
-D "TEST_OUTPUT=err_compat.txt"
-D "TEST_REFERENCE=err_compat_1"
-D "TEST_FOLDER=${PROJECT_BINARY_DIR}"
- -P "${HDF5_RESOURCES_DIR}/runTest.cmake"
+ -P "${HDF_RESOURCES_EXT_DIR}/runTest.cmake"
)
set_tests_properties (H5TEST-err_compat PROPERTIES DEPENDS H5TEST-clear-err_compat-objects)
endif (HDF5_ENABLE_DEPRECATED_SYMBOLS)
@@ -290,7 +290,7 @@ add_test (NAME H5TEST-error_test COMMAND "${CMAKE_COMMAND}"
-D "TEST_OUTPUT=error_test.txt"
-D "TEST_REFERENCE=error_test_1"
-D "TEST_FOLDER=${PROJECT_BINARY_DIR}"
- -P "${HDF5_RESOURCES_DIR}/runTest.cmake"
+ -P "${HDF_RESOURCES_EXT_DIR}/runTest.cmake"
)
set_tests_properties (H5TEST-error_test PROPERTIES DEPENDS H5TEST-clear-error_test-objects)
set_tests_properties (H5TEST-error_test PROPERTIES ENVIRONMENT "HDF5_PLUGIN_PRELOAD=::")
@@ -315,7 +315,7 @@ add_test (NAME H5TEST-links_env COMMAND "${CMAKE_COMMAND}"
-D "TEST_OUTPUT=links_env.txt"
-D "TEST_REFERENCE=links_env.out"
-D "TEST_FOLDER=${PROJECT_BINARY_DIR}"
- -P "${HDF5_RESOURCES_DIR}/runTest.cmake"
+ -P "${HDF_RESOURCES_EXT_DIR}/runTest.cmake"
)
set_tests_properties (H5TEST-links_env PROPERTIES DEPENDS H5TEST-clear-links_env-objects)
@@ -420,20 +420,79 @@ if (HDF5_TEST_VFD)
set (VFD_LIST ${VFD_LIST} direct)
endif (DIRECT_VFD)
- MACRO (ADD_VFD_TEST vfdname resultcode)
- foreach (test ${H5_VFD_TESTS})
+ MACRO (CHECK_VFD_TEST vfdtest vfdname resultcode)
+ if (${vfdtest} STREQUAL "flush1" OR ${vfdtest} STREQUAL "flush2")
+ if (${vfdname} STREQUAL "multi" OR ${vfdname} STREQUAL "split")
+ if (NOT BUILD_SHARED_LIBS AND NOT CMAKE_BUILD_TYPE MATCHES Debug)
+ add_test (
+ NAME VFD-${vfdname}-${vfdtest}
+ COMMAND "${CMAKE_COMMAND}"
+ -D "TEST_PROGRAM=$<TARGET_FILE:${vfdtest}>"
+ -D "TEST_ARGS:STRING="
+ -D "TEST_VFD:STRING=${vfdname}"
+ -D "TEST_EXPECT=${resultcode}"
+ -D "TEST_OUTPUT=${vfdtest}"
+ -D "TEST_FOLDER=${PROJECT_BINARY_DIR}"
+ -P "${HDF_RESOURCES_DIR}/vfdTest.cmake"
+ )
+ else (NOT BUILD_SHARED_LIBS AND NOT CMAKE_BUILD_TYPE MATCHES Debug)
+ add_test (
+ NAME VFD-${vfdname}-${vfdtest}
+ COMMAND ${CMAKE_COMMAND} -E echo "SKIP VFD-${vfdname}-${vfdtest}"
+ )
+ endif(NOT BUILD_SHARED_LIBS AND NOT CMAKE_BUILD_TYPE MATCHES Debug)
+ else (${vfdname} STREQUAL "multi" OR ${vfdname} STREQUAL "split")
+ add_test (
+ NAME VFD-${vfdname}-${vfdtest}
+ COMMAND "${CMAKE_COMMAND}"
+ -D "TEST_PROGRAM=$<TARGET_FILE:${vfdtest}>"
+ -D "TEST_ARGS:STRING="
+ -D "TEST_VFD:STRING=${vfdname}"
+ -D "TEST_EXPECT=${resultcode}"
+ -D "TEST_OUTPUT=${vfdtest}"
+ -D "TEST_FOLDER=${PROJECT_BINARY_DIR}"
+ -P "${HDF_RESOURCES_DIR}/vfdTest.cmake"
+ )
+ endif (${vfdname} STREQUAL "multi" OR ${vfdname} STREQUAL "split")
+ else (${vfdtest} STREQUAL "flush1" OR ${vfdtest} STREQUAL "flush2")
add_test (
- NAME VFD-${vfdname}-${test}
- COMMAND "${CMAKE_COMMAND}"
- -D "TEST_PROGRAM=$<TARGET_FILE:${test}>"
- -D "TEST_ARGS:STRING="
- -D "TEST_VFD:STRING=${vfdname}"
- -D "TEST_EXPECT=${resultcode}"
- -D "TEST_OUTPUT=${test}"
- -D "TEST_FOLDER=${PROJECT_BINARY_DIR}"
- -P "${HDF5_RESOURCES_DIR}/vfdTest.cmake"
+ NAME VFD-${vfdname}-${vfdtest}
+ COMMAND "${CMAKE_COMMAND}"
+ -D "TEST_PROGRAM=$<TARGET_FILE:${vfdtest}>"
+ -D "TEST_ARGS:STRING="
+ -D "TEST_VFD:STRING=${vfdname}"
+ -D "TEST_EXPECT=${resultcode}"
+ -D "TEST_OUTPUT=${vfdtest}"
+ -D "TEST_FOLDER=${PROJECT_BINARY_DIR}"
+ -P "${HDF_RESOURCES_DIR}/vfdTest.cmake"
)
+ endif (${vfdtest} STREQUAL "flush1" OR ${vfdtest} STREQUAL "flush2")
+ ENDMACRO (CHECK_VFD_TEST vfdtest vfdname resultcode)
+
+ MACRO (ADD_VFD_TEST vfdname resultcode)
+ foreach (test ${H5_VFD_TESTS})
+ if (WIN32)
+ CHECK_VFD_TEST (${test} ${vfdname} ${resultcode})
+ else (WIN32)
+ add_test (
+ NAME VFD-${vfdname}-${test}
+ COMMAND "${CMAKE_COMMAND}"
+ -D "TEST_PROGRAM=$<TARGET_FILE:${test}>"
+ -D "TEST_ARGS:STRING="
+ -D "TEST_VFD:STRING=${vfdname}"
+ -D "TEST_EXPECT=${resultcode}"
+ -D "TEST_OUTPUT=${test}"
+ -D "TEST_FOLDER=${PROJECT_BINARY_DIR}"
+ -P "${HDF_RESOURCES_DIR}/vfdTest.cmake"
+ )
+ endif (WIN32)
endforeach (test ${H5_VFD_TESTS})
+ set_tests_properties (VFD-${vfdname}-flush2 PROPERTIES DEPENDS VFD-${vfdname}-flush1)
+ set_tests_properties (VFD-${vfdname}-flush1 PROPERTIES TIMEOUT 10)
+ set_tests_properties (VFD-${vfdname}-objcopy PROPERTIES TIMEOUT 1000)
+ set_tests_properties (VFD-${vfdname}-testhdf5 PROPERTIES TIMEOUT 1200)
+ set_tests_properties (VFD-${vfdname}-gheap PROPERTIES TIMEOUT 1200)
+ set_tests_properties (VFD-${vfdname}-istore PROPERTIES TIMEOUT 1200)
if (HDF5_TEST_FHEAP_VFD)
add_test (
NAME VFD-${vfdname}-fheap
@@ -444,7 +503,7 @@ if (HDF5_TEST_VFD)
-D "TEST_EXPECT=${resultcode}"
-D "TEST_OUTPUT=fheap"
-D "TEST_FOLDER=${PROJECT_BINARY_DIR}"
- -P "${HDF5_RESOURCES_DIR}/vfdTest.cmake"
+ -P "${HDF_RESOURCES_DIR}/vfdTest.cmake"
)
endif (HDF5_TEST_FHEAP_VFD)
ENDMACRO (ADD_VFD_TEST)
diff --git a/test/Makefile.in b/test/Makefile.in
index aff56c9..2235cef 100644
--- a/test/Makefile.in
+++ b/test/Makefile.in
@@ -874,7 +874,6 @@ MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MPE = @MPE@
-MPI_GET_SIZE = @MPI_GET_SIZE@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
diff --git a/test/accum.c b/test/accum.c
index 488b866..651ba56 100644
--- a/test/accum.c
+++ b/test/accum.c
@@ -38,18 +38,18 @@
H5F_t * f = NULL;
/* Function Prototypes */
-unsigned test_write_read(void);
-unsigned test_write_read_nonacc_front(void);
-unsigned test_write_read_nonacc_end(void);
-unsigned test_accum_overlap(void);
-unsigned test_accum_overlap_clean(void);
-unsigned test_accum_overlap_size(void);
-unsigned test_accum_non_overlap_size(void);
-unsigned test_accum_adjust(void);
-unsigned test_read_after(void);
-unsigned test_free(void);
-unsigned test_big(void);
-unsigned test_random_write(void);
+unsigned test_write_read(const H5F_io_info_t *fio_info);
+unsigned test_write_read_nonacc_front(const H5F_io_info_t *fio_info);
+unsigned test_write_read_nonacc_end(const H5F_io_info_t *fio_info);
+unsigned test_accum_overlap(const H5F_io_info_t *fio_info);
+unsigned test_accum_overlap_clean(const H5F_io_info_t *fio_info);
+unsigned test_accum_overlap_size(const H5F_io_info_t *fio_info);
+unsigned test_accum_non_overlap_size(const H5F_io_info_t *fio_info);
+unsigned test_accum_adjust(const H5F_io_info_t *fio_info);
+unsigned test_read_after(const H5F_io_info_t *fio_info);
+unsigned test_free(const H5F_io_info_t *fio_info);
+unsigned test_big(const H5F_io_info_t *fio_info);
+unsigned test_random_write(const H5F_io_info_t *fio_info);
/* Helper Function Prototypes */
void accum_printf(void);
@@ -57,9 +57,9 @@ void accum_printf(void);
/* Private Test H5Faccum Function Wrappers */
#define accum_write(a,s,b) H5F_block_write(f, H5FD_MEM_DEFAULT, (haddr_t)(a), (size_t)(s), H5P_DATASET_XFER_DEFAULT, (b))
#define accum_read(a,s,b) H5F_block_read(f, H5FD_MEM_DEFAULT, (haddr_t)(a), (size_t)(s), H5P_DATASET_XFER_DEFAULT, (b))
-#define accum_free(a,s) H5F_accum_free(f, H5P_DATASET_XFER_DEFAULT, H5FD_MEM_DEFAULT, (haddr_t)(a), (hsize_t)(s))
-#define accum_flush() H5F_accum_flush(f, H5P_DATASET_XFER_DEFAULT)
-#define accum_reset() H5F_accum_reset(f, H5P_DATASET_XFER_DEFAULT, TRUE)
+#define accum_free(fio_info,a,s) H5F__accum_free(fio_info, H5FD_MEM_DEFAULT, (haddr_t)(a), (hsize_t)(s))
+#define accum_flush(fio_info) H5F__accum_flush(fio_info)
+#define accum_reset(fio_info) H5F__accum_reset(fio_info, TRUE)
/* ================= */
/* Main Test Routine */
@@ -82,6 +82,7 @@ void accum_printf(void);
int
main(void)
{
+ H5F_io_info_t fio_info; /* I/O info for operation */
unsigned nerrors = 0; /* track errors */
hid_t fid = -1;
@@ -98,22 +99,26 @@ main(void)
file a ways. 10MB should do. */
if(H5FD_set_eoa(f->shared->lf, H5FD_MEM_DEFAULT, (haddr_t)(1024*1024*10)) < 0) FAIL_STACK_ERROR
+ /* Set up I/O info for operation */
+ fio_info.f = f;
+ if(NULL == (fio_info.dxpl = (H5P_genplist_t *)H5I_object(H5P_DATASET_XFER_DEFAULT))) FAIL_STACK_ERROR
+
/* Reset metadata accumulator for the file */
- if(accum_reset() < 0) FAIL_STACK_ERROR
+ if(accum_reset(&fio_info) < 0) FAIL_STACK_ERROR
/* Test Functions */
- nerrors += test_write_read();
- nerrors += test_write_read_nonacc_front();
- nerrors += test_write_read_nonacc_end();
- nerrors += test_accum_overlap();
- nerrors += test_accum_overlap_clean();
- nerrors += test_accum_overlap_size();
- nerrors += test_accum_non_overlap_size();
- nerrors += test_accum_adjust();
- nerrors += test_read_after();
- nerrors += test_free();
- nerrors += test_big();
- nerrors += test_random_write();
+ nerrors += test_write_read(&fio_info);
+ nerrors += test_write_read_nonacc_front(&fio_info);
+ nerrors += test_write_read_nonacc_end(&fio_info);
+ nerrors += test_accum_overlap(&fio_info);
+ nerrors += test_accum_overlap_clean(&fio_info);
+ nerrors += test_accum_overlap_size(&fio_info);
+ nerrors += test_accum_non_overlap_size(&fio_info);
+ nerrors += test_accum_adjust(&fio_info);
+ nerrors += test_read_after(&fio_info);
+ nerrors += test_free(&fio_info);
+ nerrors += test_big(&fio_info);
+ nerrors += test_random_write(&fio_info);
/* End of test code, close and delete file */
if(H5Fclose(fid) < 0) TEST_ERROR
@@ -149,7 +154,7 @@ error:
*-------------------------------------------------------------------------
*/
unsigned
-test_write_read(void)
+test_write_read(const H5F_io_info_t *fio_info)
{
int i = 0;
int *write_buf, *read_buf;
@@ -172,7 +177,7 @@ test_write_read(void)
if(accum_read(0, 1024, read_buf) < 0) FAIL_STACK_ERROR;
if(HDmemcmp(write_buf, read_buf, 1024) != 0) TEST_ERROR;
- if(accum_reset() < 0) FAIL_STACK_ERROR;
+ if(accum_reset(fio_info) < 0) FAIL_STACK_ERROR;
PASSED();
@@ -205,7 +210,7 @@ error:
*-------------------------------------------------------------------------
*/
unsigned
-test_write_read_nonacc_front(void)
+test_write_read_nonacc_front(const H5F_io_info_t *fio_info)
{
int i = 0;
int *write_buf, *read_buf;
@@ -225,13 +230,13 @@ test_write_read_nonacc_front(void)
/* Do a simple write/read/verify of data */
/* Write 1KB at Address 0 */
if(accum_write(0, 1024, write_buf) < 0) FAIL_STACK_ERROR;
- if(accum_flush() < 0) FAIL_STACK_ERROR;
- if(accum_reset() < 0) FAIL_STACK_ERROR;
+ if(accum_flush(fio_info) < 0) FAIL_STACK_ERROR;
+ if(accum_reset(fio_info) < 0) FAIL_STACK_ERROR;
if(accum_write(1024, 1024, write_buf) < 0) FAIL_STACK_ERROR;
if(accum_read(0, 1024, read_buf) < 0) FAIL_STACK_ERROR;
if(HDmemcmp(write_buf, read_buf, 1024) != 0) TEST_ERROR;
- if(accum_reset() < 0) FAIL_STACK_ERROR;
+ if(accum_reset(fio_info) < 0) FAIL_STACK_ERROR;
PASSED();
@@ -264,7 +269,7 @@ error:
*-------------------------------------------------------------------------
*/
unsigned
-test_write_read_nonacc_end(void)
+test_write_read_nonacc_end(const H5F_io_info_t *fio_info)
{
int i = 0;
int *write_buf, *read_buf;
@@ -284,13 +289,13 @@ test_write_read_nonacc_end(void)
/* Do a simple write/read/verify of data */
/* Write 1KB at Address 0 */
if(accum_write(1024, 1024, write_buf) < 0) FAIL_STACK_ERROR;
- if(accum_flush() < 0) FAIL_STACK_ERROR;
- if(accum_reset() < 0) FAIL_STACK_ERROR;
+ if(accum_flush(fio_info) < 0) FAIL_STACK_ERROR;
+ if(accum_reset(fio_info) < 0) FAIL_STACK_ERROR;
if(accum_write(0, 1024, write_buf) < 0) FAIL_STACK_ERROR;
if(accum_read(1024, 1024, read_buf) < 0) FAIL_STACK_ERROR;
if(HDmemcmp(write_buf, read_buf, 1024) != 0) TEST_ERROR;
- if(accum_reset() < 0) FAIL_STACK_ERROR;
+ if(accum_reset(fio_info) < 0) FAIL_STACK_ERROR;
PASSED();
@@ -323,7 +328,7 @@ error:
*-------------------------------------------------------------------------
*/
unsigned
-test_free(void)
+test_free(const H5F_io_info_t *fio_info)
{
int i = 0;
int32_t *wbuf = NULL;
@@ -346,38 +351,38 @@ test_free(void)
if(accum_write(0, 256 * sizeof(int32_t), wbuf) < 0) FAIL_STACK_ERROR;
- if(accum_free(0, 256 * sizeof(int32_t)) < 0) FAIL_STACK_ERROR;
+ if(accum_free(fio_info, 0, 256 * sizeof(int32_t)) < 0) FAIL_STACK_ERROR;
/* Free an empty accumulator */
- if(accum_free(0, 256 * 1024 * sizeof(int32_t)) < 0) FAIL_STACK_ERROR;
+ if(accum_free(fio_info, 0, 256 * 1024 * sizeof(int32_t)) < 0) FAIL_STACK_ERROR;
/* Write second quarter of the accumulator */
if(accum_write(64 * sizeof(int32_t), 64 * sizeof(int32_t), wbuf) < 0) FAIL_STACK_ERROR;
/* Free the second quarter of the accumulator, the requested area
* is bigger than the data region on the right side. */
- if(accum_free(64 * sizeof(int32_t), 65 * sizeof(int32_t)) < 0) FAIL_STACK_ERROR;
+ if(accum_free(fio_info, 64 * sizeof(int32_t), 65 * sizeof(int32_t)) < 0) FAIL_STACK_ERROR;
/* Write half of the accumulator. */
if(accum_write(0, 128 * sizeof(int32_t), wbuf) < 0) FAIL_STACK_ERROR;
/* Free the first block of 4B */
- if(accum_free(0, sizeof(int32_t)) < 0) FAIL_STACK_ERROR;
+ if(accum_free(fio_info, 0, sizeof(int32_t)) < 0) FAIL_STACK_ERROR;
/* Check that the accumulator still contains the correct data */
if(accum_read(1 * sizeof(int32_t), 127 * sizeof(int32_t), rbuf) < 0) FAIL_STACK_ERROR;
if(HDmemcmp(wbuf + 1, rbuf, 127 * sizeof(int32_t)) != 0) TEST_ERROR;
/* Free the block of 4B at 127*4B */
- if(accum_free(127 * sizeof(int32_t), sizeof(int32_t)) < 0) FAIL_STACK_ERROR;
+ if(accum_free(fio_info, 127 * sizeof(int32_t), sizeof(int32_t)) < 0) FAIL_STACK_ERROR;
/* Check that the accumulator still contains the correct data */
if(accum_read(1 * sizeof(int32_t), 126 * sizeof(int32_t), rbuf) < 0) FAIL_STACK_ERROR;
if(HDmemcmp(wbuf + 1, rbuf, 126 * sizeof(int32_t)) != 0) TEST_ERROR;
/* Free the block of 4B at 2*4B */
- if(accum_free(2 * sizeof(int32_t), sizeof(int32_t)) < 0) FAIL_STACK_ERROR;
+ if(accum_free(fio_info, 2 * sizeof(int32_t), sizeof(int32_t)) < 0) FAIL_STACK_ERROR;
/* Check that the accumulator still contains the correct data */
if(accum_read(1 * sizeof(int32_t), 1 * sizeof(int32_t), rbuf) < 0) FAIL_STACK_ERROR;
@@ -390,10 +395,10 @@ test_free(void)
* entirely before dirty section */
if(accum_write(64 * sizeof(int32_t), 128 * sizeof(int32_t), wbuf) < 0) FAIL_STACK_ERROR;
HDmemcpy(expect + 64, wbuf, 128 * sizeof(int32_t));
- if(accum_flush() < 0) FAIL_STACK_ERROR;
+ if(accum_flush(fio_info) < 0) FAIL_STACK_ERROR;
if(accum_write(68 * sizeof(int32_t), 4 * sizeof(int32_t), wbuf) < 0) FAIL_STACK_ERROR;
HDmemcpy(expect + 68, wbuf, 4 * sizeof(int32_t));
- if(accum_free(62 * sizeof(int32_t), 4 * sizeof(int32_t)) < 0) FAIL_STACK_ERROR;
+ if(accum_free(fio_info, 62 * sizeof(int32_t), 4 * sizeof(int32_t)) < 0) FAIL_STACK_ERROR;
/* Check that the accumulator still contains the correct data */
if(accum_read(66 * sizeof(int32_t), 126 * sizeof(int32_t), rbuf) < 0) FAIL_STACK_ERROR;
@@ -404,10 +409,10 @@ test_free(void)
* completely contains dirty section */
if(accum_write(64 * sizeof(int32_t), 128 * sizeof(int32_t), wbuf) < 0) FAIL_STACK_ERROR;
HDmemcpy(expect + 64, wbuf, 128 * sizeof(int32_t));
- if(accum_flush() < 0) FAIL_STACK_ERROR;
+ if(accum_flush(fio_info) < 0) FAIL_STACK_ERROR;
if(accum_write(68 * sizeof(int32_t), 4 * sizeof(int32_t), wbuf) < 0) FAIL_STACK_ERROR;
HDmemcpy(expect + 68, wbuf, 4 * sizeof(int32_t));
- if(accum_free(62 * sizeof(int32_t), 16 * sizeof(int32_t)) < 0) FAIL_STACK_ERROR;
+ if(accum_free(fio_info, 62 * sizeof(int32_t), 16 * sizeof(int32_t)) < 0) FAIL_STACK_ERROR;
/* Check that the accumulator still contains the correct data */
if(accum_read(78 * sizeof(int32_t), 114 * sizeof(int32_t), rbuf) < 0) FAIL_STACK_ERROR;
@@ -418,10 +423,10 @@ test_free(void)
* before dirty section */
if(accum_write(64 * sizeof(int32_t), 128 * sizeof(int32_t), wbuf) < 0) FAIL_STACK_ERROR;
HDmemcpy(expect + 64, wbuf, 128 * sizeof(int32_t));
- if(accum_flush() < 0) FAIL_STACK_ERROR;
+ if(accum_flush(fio_info) < 0) FAIL_STACK_ERROR;
if(accum_write(72 * sizeof(int32_t), 4 * sizeof(int32_t), wbuf) < 0) FAIL_STACK_ERROR;
HDmemcpy(expect + 72, wbuf, 4 * sizeof(int32_t));
- if(accum_free(66 * sizeof(int32_t), 4 * sizeof(int32_t)) < 0) FAIL_STACK_ERROR;
+ if(accum_free(fio_info, 66 * sizeof(int32_t), 4 * sizeof(int32_t)) < 0) FAIL_STACK_ERROR;
/* Check that the accumulator still contains the correct data */
if(accum_read(70 * sizeof(int32_t), 122 * sizeof(int32_t), rbuf) < 0) FAIL_STACK_ERROR;
@@ -432,10 +437,10 @@ test_free(void)
* dirty section, and ends in dirty section */
if(accum_write(64 * sizeof(int32_t), 128 * sizeof(int32_t), wbuf) < 0) FAIL_STACK_ERROR;
HDmemcpy(expect + 64, wbuf, 128 * sizeof(int32_t));
- if(accum_flush() < 0) FAIL_STACK_ERROR;
+ if(accum_flush(fio_info) < 0) FAIL_STACK_ERROR;
if(accum_write(72 * sizeof(int32_t), 4 * sizeof(int32_t), wbuf) < 0) FAIL_STACK_ERROR;
HDmemcpy(expect + 72, wbuf, 4 * sizeof(int32_t));
- if(accum_free(70 * sizeof(int32_t), 4 * sizeof(int32_t)) < 0) FAIL_STACK_ERROR;
+ if(accum_free(fio_info, 70 * sizeof(int32_t), 4 * sizeof(int32_t)) < 0) FAIL_STACK_ERROR;
/* Check that the accumulator still contains the correct data */
if(accum_read(74 * sizeof(int32_t), 118 * sizeof(int32_t), rbuf) < 0) FAIL_STACK_ERROR;
@@ -446,10 +451,10 @@ test_free(void)
* contains dirty section */
if(accum_write(64 * sizeof(int32_t), 128 * sizeof(int32_t), wbuf) < 0) FAIL_STACK_ERROR;
HDmemcpy(expect + 64, wbuf, 128 * sizeof(int32_t));
- if(accum_flush() < 0) FAIL_STACK_ERROR;
+ if(accum_flush(fio_info) < 0) FAIL_STACK_ERROR;
if(accum_write(72 * sizeof(int32_t), 4 * sizeof(int32_t), wbuf) < 0) FAIL_STACK_ERROR;
HDmemcpy(expect + 72, wbuf, 4 * sizeof(int32_t));
- if(accum_free(70 * sizeof(int32_t), 8 * sizeof(int32_t)) < 0) FAIL_STACK_ERROR;
+ if(accum_free(fio_info, 70 * sizeof(int32_t), 8 * sizeof(int32_t)) < 0) FAIL_STACK_ERROR;
/* Check that the accumulator still contains the correct data */
if(accum_read(78 * sizeof(int32_t), 114 * sizeof(int32_t), rbuf) < 0) FAIL_STACK_ERROR;
@@ -460,10 +465,10 @@ test_free(void)
* of dirty section, and ends in dirty section */
if(accum_write(64 * sizeof(int32_t), 128 * sizeof(int32_t), wbuf) < 0) FAIL_STACK_ERROR;
HDmemcpy(expect + 64, wbuf, 128 * sizeof(int32_t));
- if(accum_flush() < 0) FAIL_STACK_ERROR;
+ if(accum_flush(fio_info) < 0) FAIL_STACK_ERROR;
if(accum_write(72 * sizeof(int32_t), 8 * sizeof(int32_t), wbuf) < 0) FAIL_STACK_ERROR;
HDmemcpy(expect + 72, wbuf, 8 * sizeof(int32_t));
- if(accum_free(72 * sizeof(int32_t), 4 * sizeof(int32_t)) < 0) FAIL_STACK_ERROR;
+ if(accum_free(fio_info, 72 * sizeof(int32_t), 4 * sizeof(int32_t)) < 0) FAIL_STACK_ERROR;
/* Check that the accumulator still contains the correct data */
if(accum_read(76 * sizeof(int32_t), 116 * sizeof(int32_t), rbuf) < 0) FAIL_STACK_ERROR;
@@ -476,7 +481,7 @@ test_free(void)
HDfree(expect);
expect = NULL;
- if(accum_reset() < 0) FAIL_STACK_ERROR;
+ if(accum_reset(fio_info) < 0) FAIL_STACK_ERROR;
PASSED();
@@ -510,7 +515,7 @@ error:
*-------------------------------------------------------------------------
*/
unsigned
-test_accum_overlap(void)
+test_accum_overlap(const H5F_io_info_t *fio_info)
{
int i = 0;
int32_t *wbuf, *rbuf;
@@ -646,7 +651,7 @@ test_accum_overlap(void)
if(accum_read(112, 6 * sizeof(int32_t), rbuf) < 0) FAIL_STACK_ERROR;
if(HDmemcmp(wbuf, rbuf, 6 * sizeof(int32_t)) != 0) TEST_ERROR;
- if(accum_reset() < 0) FAIL_STACK_ERROR;
+ if(accum_reset(fio_info) < 0) FAIL_STACK_ERROR;
PASSED();
@@ -682,7 +687,7 @@ error:
*-------------------------------------------------------------------------
*/
unsigned
-test_accum_overlap_clean(void)
+test_accum_overlap_clean(const H5F_io_info_t *fio_info)
{
int i = 0;
int32_t *wbuf, *rbuf;
@@ -708,7 +713,7 @@ test_accum_overlap_clean(void)
/* Case 2: End of new piece aligns with start of clean accumulated data */
/* Write 5 2's at address 20 */
/* @0:| 222221111111111| */
- if(accum_flush() < 0) FAIL_STACK_ERROR;
+ if(accum_flush(fio_info) < 0) FAIL_STACK_ERROR;
for(i = 0; i < 5; i++)
wbuf[i] = 2;
if(accum_write(20, 5 * sizeof(int32_t), wbuf) < 0) FAIL_STACK_ERROR;
@@ -748,7 +753,7 @@ test_accum_overlap_clean(void)
/* Case 6: New piece completely within clean accumulated data */
/* Write 3 6's at address 44 */
/* @0:| 333334666511111| */
- if(accum_flush() < 0) FAIL_STACK_ERROR;
+ if(accum_flush(fio_info) < 0) FAIL_STACK_ERROR;
for(i = 0; i < 3; i++)
wbuf[i] = 6;
if(accum_write(44, 3 * sizeof(int32_t), wbuf) < 0) FAIL_STACK_ERROR;
@@ -758,7 +763,7 @@ test_accum_overlap_clean(void)
/* Case 7: New piece overlaps start of clean accumulated data */
/* Write 2 7's at address 16 */
/* @0:| 7733334666511111| */
- if(accum_flush() < 0) FAIL_STACK_ERROR;
+ if(accum_flush(fio_info) < 0) FAIL_STACK_ERROR;
for(i = 0; i < 2; i++)
wbuf[i] = 7;
if(accum_write(16, 2 * sizeof(int32_t), wbuf) < 0) FAIL_STACK_ERROR;
@@ -778,7 +783,7 @@ test_accum_overlap_clean(void)
/* Case 9: Start of new piece aligns with end of clean accumulated data */
/* Write 3 9's at address 80 */
/* @0:| 88883334666511111999| */
- if(accum_flush() < 0) FAIL_STACK_ERROR;
+ if(accum_flush(fio_info) < 0) FAIL_STACK_ERROR;
for(i = 0; i < 3; i++)
wbuf[i] = 9;
if(accum_write(80, 3 * sizeof(int32_t), wbuf) < 0) FAIL_STACK_ERROR;
@@ -788,7 +793,7 @@ test_accum_overlap_clean(void)
/* Case 10: New piece overlaps end of clean accumulated data */
/* Write 3 2's at address 88 */
/* @0:| 888833346665111119922| */
- if(accum_flush() < 0) FAIL_STACK_ERROR;
+ if(accum_flush(fio_info) < 0) FAIL_STACK_ERROR;
for(i = 0; i < 2; i++)
wbuf[i] = 2;
if(accum_write(88, 2 * sizeof(int32_t), wbuf) < 0) FAIL_STACK_ERROR;
@@ -826,7 +831,7 @@ test_accum_overlap_clean(void)
if(accum_read(12, 22 * sizeof(int32_t), rbuf) < 0) FAIL_STACK_ERROR;
if(HDmemcmp(wbuf, rbuf, 22 * sizeof(int32_t)) != 0) TEST_ERROR;
- if(accum_reset() < 0) FAIL_STACK_ERROR;
+ if(accum_reset(fio_info) < 0) FAIL_STACK_ERROR;
PASSED();
@@ -861,7 +866,7 @@ error:
*-------------------------------------------------------------------------
*/
unsigned
-test_accum_non_overlap_size(void)
+test_accum_non_overlap_size(const H5F_io_info_t *fio_info)
{
int i = 0;
int32_t *wbuf, *rbuf;
@@ -893,7 +898,7 @@ test_accum_non_overlap_size(void)
if(accum_read(0, 20 * sizeof(int32_t), rbuf) < 0) FAIL_STACK_ERROR;
if(HDmemcmp(wbuf, rbuf, 20 * sizeof(int32_t)) != 0) TEST_ERROR;
- if(accum_reset() < 0) FAIL_STACK_ERROR;
+ if(accum_reset(fio_info) < 0) FAIL_STACK_ERROR;
PASSED();
@@ -928,7 +933,7 @@ error:
*-------------------------------------------------------------------------
*/
unsigned
-test_accum_overlap_size(void)
+test_accum_overlap_size(const H5F_io_info_t *fio_info)
{
int i = 0;
int32_t *wbuf, *rbuf;
@@ -960,7 +965,7 @@ test_accum_overlap_size(void)
if(accum_read(60, 72 * sizeof(int32_t), rbuf) < 0) FAIL_STACK_ERROR;
if(HDmemcmp(wbuf, rbuf, 72 * sizeof(int32_t)) != 0) TEST_ERROR;
- if(accum_reset() < 0) FAIL_STACK_ERROR;
+ if(accum_reset(fio_info) < 0) FAIL_STACK_ERROR;
PASSED();
@@ -1006,7 +1011,7 @@ error:
*-------------------------------------------------------------------------
*/
unsigned
-test_accum_adjust(void)
+test_accum_adjust(const H5F_io_info_t *fio_info)
{
int i = 0;
int s = 1048576; /* size of buffer */
@@ -1052,7 +1057,7 @@ test_accum_adjust(void)
if(HDmemcmp(wbuf, rbuf, 1024) != 0) TEST_ERROR;
/* Reset accumulator for next case */
- if(accum_reset() < 0) FAIL_STACK_ERROR;
+ if(accum_reset(fio_info) < 0) FAIL_STACK_ERROR;
/* ================================================================ */
/* Case 2: Prepending large block to large, fully dirty accumulator */
@@ -1081,7 +1086,7 @@ test_accum_adjust(void)
if(HDmemcmp(wbuf, rbuf, 1048571) != 0) TEST_ERROR;
/* Reset accumulator for next case */
- if(accum_reset() < 0) FAIL_STACK_ERROR;
+ if(accum_reset(fio_info) < 0) FAIL_STACK_ERROR;
/* ========================================================= */
/* Case 3: Appending small block to large, clean accumulator */
@@ -1095,7 +1100,7 @@ test_accum_adjust(void)
/* Flush the accumulator -- we want to test the case when
accumulator contains clean data */
- if(accum_flush() < 0) FAIL_STACK_ERROR
+ if(accum_flush(fio_info) < 0) FAIL_STACK_ERROR
/* Write a small (1KB) block to the end of the accumulator */
/* ==> Accumulator will need more buffer space */
@@ -1116,7 +1121,7 @@ test_accum_adjust(void)
if(HDmemcmp(wbuf, rbuf, 1024) != 0) TEST_ERROR;
/* Reset accumulator for next case */
- if(accum_reset() < 0) FAIL_STACK_ERROR;
+ if(accum_reset(fio_info) < 0) FAIL_STACK_ERROR;
/* ==================================================================== */
/* Case 4: Appending small block to large, partially dirty accumulator, */
@@ -1130,7 +1135,7 @@ test_accum_adjust(void)
if(accum_write(0, (1024 * 1024) - 5, wbuf) < 0) FAIL_STACK_ERROR;
/* Flush the accumulator to clean it */
- if(accum_flush() < 0) FAIL_STACK_ERROR
+ if(accum_flush(fio_info) < 0) FAIL_STACK_ERROR
/* write to part of the accumulator so just the start of it is dirty */
if(accum_write(0, 5, wbuf) < 0) FAIL_STACK_ERROR;
@@ -1156,7 +1161,7 @@ test_accum_adjust(void)
if(HDmemcmp(wbuf, rbuf, 349523) != 0) TEST_ERROR;
/* Reset accumulator for next case */
- if(accum_reset() < 0) FAIL_STACK_ERROR;
+ if(accum_reset(fio_info) < 0) FAIL_STACK_ERROR;
/* ==================================================================== */
/* Case 5: Appending small block to large, partially dirty accumulator, */
@@ -1167,7 +1172,7 @@ test_accum_adjust(void)
if(accum_write(0, (1024 * 1024) - 5, wbuf) < 0) FAIL_STACK_ERROR;
/* Flush the accumulator to clean it */
- if(accum_flush() < 0) FAIL_STACK_ERROR
+ if(accum_flush(fio_info) < 0) FAIL_STACK_ERROR
/* write to part of the accumulator so it's dirty, but not entirely dirty */
/* (just the begging few bytes will be clean) */
@@ -1193,7 +1198,7 @@ test_accum_adjust(void)
if(HDmemcmp(wbuf, rbuf, 10) != 0) TEST_ERROR;
/* Reset accumulator for next case */
- if(accum_reset() < 0) FAIL_STACK_ERROR;
+ if(accum_reset(fio_info) < 0) FAIL_STACK_ERROR;
/* ================================================================= */
/* Case 6: Appending small block to large, fully dirty accumulator */
@@ -1224,7 +1229,7 @@ test_accum_adjust(void)
if(accum_read(1048571, 349523, rbuf) < 0) FAIL_STACK_ERROR;
if(HDmemcmp(wbuf, rbuf, 349523) != 0) TEST_ERROR;
- if(accum_reset() < 0) FAIL_STACK_ERROR;
+ if(accum_reset(fio_info) < 0) FAIL_STACK_ERROR;
PASSED();
@@ -1262,7 +1267,7 @@ error:
*-------------------------------------------------------------------------
*/
unsigned
-test_read_after(void)
+test_read_after(const H5F_io_info_t *fio_info)
{
int i = 0;
int s = 128; /* size of buffer */
@@ -1307,7 +1312,7 @@ test_read_after(void)
if(accum_read(512, 512, rbuf) < 0) FAIL_STACK_ERROR;
if(HDmemcmp(wbuf, rbuf, 128) != 0) TEST_ERROR;
- if(accum_reset() < 0) FAIL_STACK_ERROR;
+ if(accum_reset(fio_info) < 0) FAIL_STACK_ERROR;
PASSED();
@@ -1341,7 +1346,7 @@ error:
*-------------------------------------------------------------------------
*/
unsigned
-test_big(void)
+test_big(const H5F_io_info_t *fio_info)
{
uint8_t *wbuf, *wbuf2, *rbuf, *zbuf; /* Buffers for reading & writing, etc */
unsigned u; /* Local index variable */
@@ -1377,7 +1382,7 @@ test_big(void)
/* Reset data in file back to zeros & reset the read buffer */
if(accum_write(0, BIG_BUF_SIZE, zbuf) < 0) FAIL_STACK_ERROR;
HDmemset(rbuf, 0, BIG_BUF_SIZE);
- if(accum_reset() < 0) FAIL_STACK_ERROR;
+ if(accum_reset(fio_info) < 0) FAIL_STACK_ERROR;
/* Write small section to middle of accumulator */
@@ -1396,7 +1401,7 @@ test_big(void)
/* Reset data in file back to zeros & reset the read buffer */
if(accum_write(1024, 1024, zbuf) < 0) FAIL_STACK_ERROR;
HDmemset(rbuf, 0, BIG_BUF_SIZE);
- if(accum_reset() < 0) FAIL_STACK_ERROR;
+ if(accum_reset(fio_info) < 0) FAIL_STACK_ERROR;
/* Write small section to overlap with end of "big" region */
@@ -1414,7 +1419,7 @@ test_big(void)
/* Reset data in file back to zeros & reset the read buffer */
if(accum_write(BIG_BUF_SIZE - 512, 1024, zbuf) < 0) FAIL_STACK_ERROR;
HDmemset(rbuf, 0, BIG_BUF_SIZE);
- if(accum_reset() < 0) FAIL_STACK_ERROR;
+ if(accum_reset(fio_info) < 0) FAIL_STACK_ERROR;
/* Write small section to overlap with beginning of "big" region */
@@ -1432,7 +1437,7 @@ test_big(void)
/* Reset data in file back to zeros & reset the read buffer */
if(accum_write(0, 1024, zbuf) < 0) FAIL_STACK_ERROR;
HDmemset(rbuf, 0, BIG_BUF_SIZE);
- if(accum_reset() < 0) FAIL_STACK_ERROR;
+ if(accum_reset(fio_info) < 0) FAIL_STACK_ERROR;
/* Write small section to middle of accumulator */
@@ -1454,7 +1459,7 @@ test_big(void)
/* Reset data in file back to zeros & reset the read buffer */
if(accum_write(0, BIG_BUF_SIZE, zbuf) < 0) FAIL_STACK_ERROR;
HDmemset(rbuf, 0, BIG_BUF_SIZE);
- if(accum_reset() < 0) FAIL_STACK_ERROR;
+ if(accum_reset(fio_info) < 0) FAIL_STACK_ERROR;
/* Write small section to overlap with end of "big" region */
@@ -1477,7 +1482,7 @@ test_big(void)
/* Reset data in file back to zeros & reset the read buffer */
if(accum_write(0, BIG_BUF_SIZE + 512, zbuf) < 0) FAIL_STACK_ERROR;
HDmemset(rbuf, 0, BIG_BUF_SIZE + 512);
- if(accum_reset() < 0) FAIL_STACK_ERROR;
+ if(accum_reset(fio_info) < 0) FAIL_STACK_ERROR;
/* Write small section to be past "big" region */
@@ -1505,7 +1510,7 @@ test_big(void)
/* Reset data in file back to zeros & reset the read buffer */
if(accum_write(0, BIG_BUF_SIZE + 1536, zbuf) < 0) FAIL_STACK_ERROR;
HDmemset(rbuf, 0, BIG_BUF_SIZE + 1024);
- if(accum_reset() < 0) FAIL_STACK_ERROR;
+ if(accum_reset(fio_info) < 0) FAIL_STACK_ERROR;
/* Write small section to be past "big" region */
@@ -1533,7 +1538,7 @@ test_big(void)
/* Reset data in file back to zeros & reset the read buffer */
if(accum_write(1536, BIG_BUF_SIZE, zbuf) < 0) FAIL_STACK_ERROR;
HDmemset(rbuf, 0, BIG_BUF_SIZE + 1536);
- if(accum_reset() < 0) FAIL_STACK_ERROR;
+ if(accum_reset(fio_info) < 0) FAIL_STACK_ERROR;
/* Write small section before "big" region */
@@ -1560,7 +1565,7 @@ test_big(void)
/* Reset data in file back to zeros & reset the read buffer */
if(accum_write(512, BIG_BUF_SIZE, zbuf) < 0) FAIL_STACK_ERROR;
HDmemset(rbuf, 0, BIG_BUF_SIZE + 512);
- if(accum_reset() < 0) FAIL_STACK_ERROR;
+ if(accum_reset(fio_info) < 0) FAIL_STACK_ERROR;
/* Write small section before "big" region */
@@ -1588,7 +1593,7 @@ test_big(void)
/* Reset data in file back to zeros & reset the read buffer */
if(accum_write(0, BIG_BUF_SIZE + 1536, zbuf) < 0) FAIL_STACK_ERROR;
HDmemset(rbuf, 0, BIG_BUF_SIZE + 1536);
- if(accum_reset() < 0) FAIL_STACK_ERROR;
+ if(accum_reset(fio_info) < 0) FAIL_STACK_ERROR;
/* Write small section before "big" region */
@@ -1612,7 +1617,7 @@ test_big(void)
if(HDmemcmp(wbuf2, rbuf + 512, BIG_BUF_SIZE) != 0) TEST_ERROR;
- if(accum_reset() < 0) FAIL_STACK_ERROR;
+ if(accum_reset(fio_info) < 0) FAIL_STACK_ERROR;
PASSED();
@@ -1649,7 +1654,7 @@ error:
*-------------------------------------------------------------------------
*/
unsigned
-test_random_write(void)
+test_random_write(const H5F_io_info_t *fio_info)
{
uint8_t *wbuf, *rbuf; /* Buffers for reading & writing */
unsigned seed = 0; /* Random # seed */
@@ -1749,7 +1754,7 @@ HDfprintf(stderr, "Random # seed was: %u\n", seed);
/* Verify data read back in */
if(HDmemcmp(wbuf, rbuf, RANDOM_BUF_SIZE) != 0) TEST_ERROR;
- if(accum_reset() < 0) FAIL_STACK_ERROR;
+ if(accum_reset(fio_info) < 0) FAIL_STACK_ERROR;
PASSED();
diff --git a/test/cache_api.c b/test/cache_api.c
index 66f8143..b1ccef1 100644
--- a/test/cache_api.c
+++ b/test/cache_api.c
@@ -3038,7 +3038,7 @@ check_fapl_mdc_api_errs(void)
if ( pass ) {
H5E_BEGIN_TRY {
- result = H5Pget_mdc_config(-1, &scratch);
+ result = H5Pget_mdc_config((hid_t)-1, &scratch);
} H5E_END_TRY;
if ( result >= 0 ) {
@@ -3109,7 +3109,7 @@ check_fapl_mdc_api_errs(void)
if ( pass ) {
H5E_BEGIN_TRY {
- result = H5Pset_mdc_config(-1, &default_config);
+ result = H5Pset_mdc_config((hid_t)-1, &default_config);
} H5E_END_TRY;
if ( result >= 0 ) {
@@ -3258,7 +3258,7 @@ check_file_mdc_api_errs(void)
}
H5E_BEGIN_TRY {
- result = H5Fget_mdc_config(-1, &scratch);
+ result = H5Fget_mdc_config((hid_t)-1, &scratch);
} H5E_END_TRY;
if ( result >= 0 ) {
@@ -3317,7 +3317,7 @@ check_file_mdc_api_errs(void)
}
H5E_BEGIN_TRY {
- result = H5Fset_mdc_config(-1, &default_config);
+ result = H5Fset_mdc_config((hid_t)-1, &default_config);
} H5E_END_TRY;
if ( result >= 0 ) {
@@ -3385,7 +3385,7 @@ check_file_mdc_api_errs(void)
}
H5E_BEGIN_TRY {
- result = H5Fget_mdc_hit_rate(-1, &hit_rate);
+ result = H5Fget_mdc_hit_rate((hid_t)-1, &hit_rate);
} H5E_END_TRY;
if ( result >= 0 ) {
@@ -3425,7 +3425,7 @@ check_file_mdc_api_errs(void)
}
H5E_BEGIN_TRY {
- result = H5Freset_mdc_hit_rate_stats(-1);
+ result = H5Freset_mdc_hit_rate_stats((hid_t)-1);
} H5E_END_TRY;
if ( result >= 0 ) {
@@ -3446,7 +3446,7 @@ check_file_mdc_api_errs(void)
}
H5E_BEGIN_TRY {
- result = H5Fget_mdc_size(-1, &max_size, &min_clean_size,
+ result = H5Fget_mdc_size((hid_t)-1, &max_size, &min_clean_size,
&cur_size, &cur_num_entries);
} H5E_END_TRY;
diff --git a/test/cmpd_dset.c b/test/cmpd_dset.c
index 433c488..a782fb0 100644
--- a/test/cmpd_dset.c
+++ b/test/cmpd_dset.c
@@ -614,7 +614,7 @@ test_compound (char *filename, hid_t fapl)
if ((s8_m_sid = H5Screate_simple (2, h_size, NULL)) < 0) goto error;
/* Read the dataset */
- s8 = (s1_t *) calloc ((size_t)(h_size[0]*h_size[1]), sizeof(s1_t));
+ s8 = (s1_t *) HDcalloc ((size_t)(h_size[0]*h_size[1]), sizeof(s1_t));
assert (s8);
if (H5Dread (dataset, s1_tid, s8_m_sid, s8_f_sid, H5P_DEFAULT, s8) < 0) {
goto error;
@@ -641,7 +641,7 @@ test_compound (char *filename, hid_t fapl)
}
}
- free (s8);
+ HDfree (s8);
s8 = NULL;
PASSED();
@@ -781,7 +781,7 @@ test_compound (char *filename, hid_t fapl)
f_offset[1] = NY/3;
h_size[0] = 2*NX/3 - f_offset[0];
h_size[1] = 2*NY/3 - f_offset[1];
- s11 = (s4_t *) malloc ((size_t)h_size[0]*(size_t)h_size[1]*sizeof(s4_t));
+ s11 = (s4_t *) HDmalloc ((size_t)h_size[0]*(size_t)h_size[1]*sizeof(s4_t));
assert (s11);
/* Initialize */
@@ -793,7 +793,7 @@ test_compound (char *filename, hid_t fapl)
if (H5Dwrite (dataset, s4_tid, s8_m_sid, s8_f_sid, PRESERVE, s11) < 0) {
goto error;
}
- free (s11);
+ HDfree (s11);
s11=NULL;
/* Read the whole thing */
@@ -1380,12 +1380,12 @@ test_hdf5_src_subset(char *filename, hid_t fapl)
goto error;
/* Allocate space and initialize data */
- orig = (unsigned char*)malloc(NX * NY * sizeof(stype1));
+ orig = (unsigned char*)HDmalloc(NX * NY * sizeof(stype1));
initialize_stype1(orig, (size_t)NX*NY);
- rbuf = (unsigned char*)malloc(NX * NY * sizeof(stype2));
+ rbuf = (unsigned char*)HDmalloc(NX * NY * sizeof(stype2));
- rew_buf = (unsigned char*)malloc(NX * NY * sizeof(stype3));
+ rew_buf = (unsigned char*)HDmalloc(NX * NY * sizeof(stype3));
initialize_stype3(rew_buf, (size_t)NX*NY);
@@ -1515,9 +1515,9 @@ test_hdf5_src_subset(char *filename, hid_t fapl)
if(H5Fclose(file) < 0)
FAIL_STACK_ERROR
- free(orig);
- free(rbuf);
- free(rew_buf);
+ HDfree(orig);
+ HDfree(rbuf);
+ HDfree(rew_buf);
PASSED();
return 0;
@@ -1585,12 +1585,12 @@ test_hdf5_dst_subset(char *filename, hid_t fapl)
goto error;
/* Allocate space and initialize data */
- orig = (unsigned char*)malloc(NX * NY * sizeof(stype2));
+ orig = (unsigned char*)HDmalloc(NX * NY * sizeof(stype2));
initialize_stype2(orig, (size_t)NX*NY);
- rbuf = (unsigned char*)malloc(NX * NY * sizeof(stype1));
+ rbuf = (unsigned char*)HDmalloc(NX * NY * sizeof(stype1));
- rew_buf = (unsigned char*)malloc(NX * NY * sizeof(stype4));
+ rew_buf = (unsigned char*)HDmalloc(NX * NY * sizeof(stype4));
initialize_stype4(rew_buf, (size_t)NX*NY);
/* Create dataset creation property list */
@@ -1719,9 +1719,9 @@ test_hdf5_dst_subset(char *filename, hid_t fapl)
if(H5Fclose(file) < 0)
goto error;
- free(orig);
- free(rbuf);
- free(rew_buf);
+ HDfree(orig);
+ HDfree(rbuf);
+ HDfree(rew_buf);
PASSED();
return 0;
@@ -2183,7 +2183,7 @@ main (int argc, char *argv[])
fprintf(stderr, "usage: %s [--noopt]\n", argv[0]);
exit(1);
}
- H5Tunregister(H5T_PERS_DONTCARE, NULL, -1, -1, H5T__conv_struct_opt);
+ H5Tunregister(H5T_PERS_DONTCARE, NULL, (hid_t)-1, (hid_t)-1, H5T__conv_struct_opt);
}
/* Create the file */
diff --git a/test/dsets.c b/test/dsets.c
index 85949bb..8ba79c3 100644
--- a/test/dsets.c
+++ b/test/dsets.c
@@ -50,6 +50,7 @@ const char *FILENAME[] = {
"chunk_expand",
"copy_dcpl_newfile",
"layout_extend",
+ "zero_chunk",
NULL
};
#define FILENAME_BUF_SIZE 1024
@@ -482,7 +483,7 @@ test_simple_io(const char *env_h5_drvr, hid_t fapl)
HDclose(f);
- free (tconv_buf);
+ HDfree (tconv_buf);
PASSED();
} /* end if */
else {
@@ -1853,13 +1854,13 @@ test_filter_internal(hid_t fid, const char *name, hid_t dcpl, int if_fletcher32,
if(H5Dclose (dataset) < 0) goto error;
if(H5Sclose (sid) < 0) goto error;
if(H5Pclose (dxpl) < 0) goto error;
- free (tconv_buf);
+ HDfree (tconv_buf);
return(0);
error:
if(tconv_buf)
- free (tconv_buf);
+ HDfree (tconv_buf);
return -1;
}
@@ -3855,7 +3856,7 @@ test_nbit_compound_3(hid_t file)
for(k = 0; k < (i+1); k++) ((unsigned int *)orig_data[i].v.p)[k] = (unsigned int)(i*100 + k);
/* Create reference to the dataset "nbit_obj_ref" */
- if(H5Rcreate(&orig_data[i].r, file, "nbit_obj_ref", H5R_OBJECT, -1) < 0) goto error;
+ if(H5Rcreate(&orig_data[i].r, file, "nbit_obj_ref", H5R_OBJECT, (hid_t)-1) < 0) goto error;
for(j = 0; j < 5; j++) orig_data[i].o[j] = (unsigned char)(i + j);
}
@@ -6546,7 +6547,7 @@ auxread_fdata(hid_t fid, const char *name)
if(H5Dclose(dset_id) < 0)
goto error;
if(buf)
- free(buf);
+ HDfree(buf);
return 0;
@@ -6558,7 +6559,7 @@ error:
H5Tclose(ftype_id);
H5Tclose(mtype_id);
if(buf)
- free(buf);
+ HDfree(buf);
} H5E_END_TRY;
return -1;
}
@@ -8262,6 +8263,80 @@ error:
/*-------------------------------------------------------------------------
+ * Function: test_zero_dim_dset
+ *
+ * Purpose: Tests support for reading a 1D chunled dataset with
+ * dimension size = 0.
+ *
+ * Return: Success: 0
+ * Failure: -1
+ *
+ * Programmer: Mohamad Chaarawi
+ * Wednesdat, July 9, 2014
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+test_zero_dim_dset(hid_t fapl)
+{
+ char filename[FILENAME_BUF_SIZE];
+ hid_t fid = -1; /* File ID */
+ hid_t dcpl = -1; /* Dataset creation property list ID */
+ hid_t sid = -1; /* Dataspace ID */
+ hid_t dsid = -1; /* Dataset ID */
+ hsize_t dim, chunk_dim; /* Dataset and chunk dimensions */
+ int data[1];
+
+ TESTING("shrinking large chunk");
+
+ h5_fixname(FILENAME[13], fapl, filename, sizeof filename);
+
+ /* Create file */
+ if((fid = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0) FAIL_STACK_ERROR
+
+ /* Create dataset creation property list */
+ if((dcpl = H5Pcreate(H5P_DATASET_CREATE)) < 0) FAIL_STACK_ERROR
+
+ /* Set 1 chunk size */
+ chunk_dim = 1;
+ if(H5Pset_chunk(dcpl, 1, &chunk_dim) < 0) FAIL_STACK_ERROR
+
+ /* Create 1D dataspace with 0 dim size */
+ dim = 0;
+ if((sid = H5Screate_simple(1, &dim, NULL)) < 0) FAIL_STACK_ERROR
+
+ /* Create chunked dataset */
+ if((dsid = H5Dcreate2(fid, "dset", H5T_NATIVE_INT, sid, H5P_DEFAULT, dcpl, H5P_DEFAULT)) < 0)
+ FAIL_STACK_ERROR
+
+ /* write 0 elements from dataset */
+ if(H5Dwrite(dsid, H5T_NATIVE_INT, sid, sid, H5P_DEFAULT, data) < 0) FAIL_STACK_ERROR
+
+ /* Read 0 elements from dataset */
+ if(H5Dread(dsid, H5T_NATIVE_INT, sid, sid, H5P_DEFAULT, data) < 0) FAIL_STACK_ERROR
+
+ /* Close everything */
+ if(H5Sclose(sid) < 0) FAIL_STACK_ERROR
+ if(H5Dclose(dsid) < 0) FAIL_STACK_ERROR
+ if(H5Pclose(dcpl) < 0) FAIL_STACK_ERROR
+ if(H5Fclose(fid) < 0) FAIL_STACK_ERROR
+
+ PASSED();
+
+ return 0;
+
+error:
+ H5E_BEGIN_TRY {
+ H5Pclose(dcpl);
+ H5Dclose(dsid);
+ H5Sclose(sid);
+ H5Fclose(fid);
+ } H5E_END_TRY;
+ return -1;
+} /* end test_zero_dim_dset() */
+
+
+/*-------------------------------------------------------------------------
* Function: test_scatter
*
* Purpose: Tests H5Dscatter with a variety of different selections
@@ -9411,6 +9486,7 @@ main(void)
nerrors += (test_idx_compatible() < 0 ? 1 : 0);
nerrors += (test_layout_extend(my_fapl) < 0 ? 1 : 0);
nerrors += (test_large_chunk_shrink(my_fapl) < 0 ? 1 : 0);
+ nerrors += (test_zero_dim_dset(my_fapl) < 0 ? 1 : 0);
if(H5Fclose(file) < 0)
goto error;
diff --git a/test/dt_arith.c b/test/dt_arith.c
index be795dd..5ae401b 100644
--- a/test/dt_arith.c
+++ b/test/dt_arith.c
@@ -296,8 +296,8 @@ static int without_hardware_g = 0;
HDmemset(BUF, 0, NELMTS*MAX(SRC_SIZE, DST_SIZE)); \
HDmemset(SAVED, 0, NELMTS*MAX(SRC_SIZE, DST_SIZE)); \
\
- tmp1 = (unsigned char*)calloc((size_t)1, (size_t)SRC_SIZE); \
- tmp2 = (unsigned char*)calloc((size_t)1, (size_t)SRC_SIZE); \
+ tmp1 = (unsigned char*)HDcalloc((size_t)1, (size_t)SRC_SIZE); \
+ tmp2 = (unsigned char*)HDcalloc((size_t)1, (size_t)SRC_SIZE); \
\
buf_p = BUF; \
saved_p = SAVED; \
@@ -325,8 +325,8 @@ static int without_hardware_g = 0;
buf_p += SRC_SIZE; \
saved_p += SRC_SIZE; \
} \
- free(tmp1); \
- free(tmp2); \
+ HDfree(tmp1); \
+ HDfree(tmp2); \
}
/* Allocate buffer and initialize it with floating-point special values, +/-0, +/-infinity,
@@ -348,7 +348,7 @@ static int without_hardware_g = 0;
SAVED = (unsigned char*)aligned_malloc( NELMTS*MAX(SRC_SIZE, DST_SIZE)); \
HDmemset(BUF, 0, NELMTS*MAX(SRC_SIZE, DST_SIZE)); \
HDmemset(SAVED, 0, NELMTS*MAX(SRC_SIZE, DST_SIZE)); \
- value = (unsigned char*)calloc(SRC_SIZE, sizeof(unsigned char)); \
+ value = (unsigned char*)HDcalloc(SRC_SIZE, sizeof(unsigned char)); \
\
buf_p = BUF; \
\
@@ -391,7 +391,7 @@ static int without_hardware_g = 0;
} \
\
HDmemcpy(SAVED, BUF, NELMTS*MAX(SRC_SIZE, DST_SIZE)); \
- free(value); \
+ HDfree(value); \
}
void some_dummy_func(float x);
@@ -757,8 +757,8 @@ static int test_particular_fp_integer(void)
endian = H5Tget_order(H5T_NATIVE_DOUBLE);
src_size1 = H5Tget_size(H5T_NATIVE_DOUBLE);
dst_size1 = H5Tget_size(H5T_NATIVE_SCHAR);
- buf1 = (unsigned char*)calloc((size_t)1, (size_t)MAX(src_size1, dst_size1));
- saved_buf1 = (unsigned char*)calloc((size_t)1, (size_t)MAX(src_size1, dst_size1));
+ buf1 = (unsigned char*)HDcalloc((size_t)1, (size_t)MAX(src_size1, dst_size1));
+ saved_buf1 = (unsigned char*)HDcalloc((size_t)1, (size_t)MAX(src_size1, dst_size1));
memcpy(buf1, &src_d, src_size1);
memcpy(saved_buf1, &src_d, src_size1);
@@ -807,8 +807,8 @@ static int test_particular_fp_integer(void)
/* Test conversion from float (the value is INT_MAX) to int. */
src_size2 = H5Tget_size(H5T_NATIVE_FLOAT);
dst_size2 = H5Tget_size(H5T_NATIVE_INT);
- buf2 = (unsigned char*)calloc((size_t)1, (size_t)MAX(src_size2, dst_size2));
- saved_buf2 = (unsigned char*)calloc((size_t)1, (size_t)MAX(src_size2, dst_size2));
+ buf2 = (unsigned char*)HDcalloc((size_t)1, (size_t)MAX(src_size2, dst_size2));
+ saved_buf2 = (unsigned char*)HDcalloc((size_t)1, (size_t)MAX(src_size2, dst_size2));
HDmemcpy(buf2, &src_f, src_size2);
HDmemcpy(saved_buf2, &src_f, src_size2);
@@ -858,13 +858,13 @@ static int test_particular_fp_integer(void)
}
if(buf1)
- free(buf1);
+ HDfree(buf1);
if(buf2)
- free(buf2);
+ HDfree(buf2);
if(saved_buf1)
- free(saved_buf1);
+ HDfree(saved_buf1);
if(saved_buf2)
- free(saved_buf2);
+ HDfree(saved_buf2);
PASSED();
return 0;
@@ -875,13 +875,13 @@ error:
H5Pclose(dxpl_id);
} H5E_END_TRY;
if(buf1)
- free(buf1);
+ HDfree(buf1);
if(buf2)
- free(buf2);
+ HDfree(buf2);
if(saved_buf1)
- free(saved_buf1);
+ HDfree(saved_buf1);
if(saved_buf2)
- free(saved_buf2);
+ HDfree(saved_buf2);
reset_hdf5(); /*print statistics*/
return MAX((int)fails_this_test, 1);
@@ -1111,9 +1111,9 @@ test_derived_flt(void)
}
fails_this_test = 0;
- free(buf);
- free(saved_buf);
- free(aligned);
+ HDfree(buf);
+ HDfree(saved_buf);
+ HDfree(aligned);
buf = NULL;
saved_buf = NULL;
aligned = NULL;
@@ -1274,8 +1274,8 @@ test_derived_flt(void)
}
}
- if (buf) free(buf);
- if (saved_buf) free(saved_buf);
+ if (buf) HDfree(buf);
+ if (saved_buf) HDfree(saved_buf);
if(H5Tclose(tid1) < 0) {
H5_FAILED();
@@ -1307,9 +1307,9 @@ test_derived_flt(void)
return 0;
error:
- if (buf) free(buf);
- if (saved_buf) free(saved_buf);
- if (aligned) free(aligned);
+ if (buf) HDfree(buf);
+ if (saved_buf) HDfree(saved_buf);
+ if (aligned) HDfree(aligned);
HDfflush(stdout);
H5E_BEGIN_TRY {
H5Tclose (tid1);
@@ -1600,8 +1600,8 @@ test_derived_integer(void)
goto error;
} /* end if */
- free(buf);
- free(saved_buf);
+ HDfree(buf);
+ HDfree(saved_buf);
PASSED();
reset_hdf5(); /*print statistics*/
@@ -1609,8 +1609,8 @@ test_derived_integer(void)
return 0;
error:
- if (buf) free(buf);
- if (saved_buf) free(saved_buf);
+ if (buf) HDfree(buf);
+ if (saved_buf) HDfree(saved_buf);
HDfflush(stdout);
H5E_BEGIN_TRY {
H5Tclose (tid1);
@@ -1859,6 +1859,7 @@ test_conv_int_1(const char *name, hid_t src, hid_t dst)
case FLT_LDOUBLE:
case OTHER:
default:
+ HDassert(0 && "Unknown type");
break;
}
} else if (INT_UCHAR==dst_type) {
@@ -1909,6 +1910,7 @@ test_conv_int_1(const char *name, hid_t src, hid_t dst)
case FLT_LDOUBLE:
case OTHER:
default:
+ HDassert(0 && "Unknown type");
break;
}
} else if (INT_SHORT==dst_type) {
@@ -1960,6 +1962,7 @@ test_conv_int_1(const char *name, hid_t src, hid_t dst)
case FLT_LDOUBLE:
case OTHER:
default:
+ HDassert(0 && "Unknown type");
break;
}
} else if (INT_USHORT==dst_type) {
@@ -2010,6 +2013,7 @@ test_conv_int_1(const char *name, hid_t src, hid_t dst)
case FLT_LDOUBLE:
case OTHER:
default:
+ HDassert(0 && "Unknown type");
break;
}
} else if (INT_INT==dst_type) {
@@ -2060,6 +2064,7 @@ test_conv_int_1(const char *name, hid_t src, hid_t dst)
case FLT_LDOUBLE:
case OTHER:
default:
+ HDassert(0 && "Unknown type");
break;
}
} else if (INT_UINT==dst_type) {
@@ -2110,6 +2115,7 @@ test_conv_int_1(const char *name, hid_t src, hid_t dst)
case FLT_LDOUBLE:
case OTHER:
default:
+ HDassert(0 && "Unknown type");
break;
}
} else if (INT_LONG==dst_type) {
@@ -2160,6 +2166,7 @@ test_conv_int_1(const char *name, hid_t src, hid_t dst)
case FLT_LDOUBLE:
case OTHER:
default:
+ HDassert(0 && "Unknown type");
break;
}
} else if (INT_ULONG==dst_type) {
@@ -2210,6 +2217,7 @@ test_conv_int_1(const char *name, hid_t src, hid_t dst)
case FLT_LDOUBLE:
case OTHER:
default:
+ HDassert(0 && "Unknown type");
break;
}
} else if (INT_LLONG==dst_type) {
@@ -2260,6 +2268,7 @@ test_conv_int_1(const char *name, hid_t src, hid_t dst)
case FLT_LDOUBLE:
case OTHER:
default:
+ HDassert(0 && "Unknown type");
break;
}
} else if (INT_ULLONG==dst_type) {
@@ -2310,6 +2319,7 @@ test_conv_int_1(const char *name, hid_t src, hid_t dst)
case FLT_LDOUBLE:
case OTHER:
default:
+ HDassert(0 && "Unknown type");
break;
}
}
@@ -2488,6 +2498,7 @@ test_conv_int_1(const char *name, hid_t src, hid_t dst)
case FLT_LDOUBLE:
case OTHER:
default:
+ HDassert(0 && "Unknown type");
break;
}
@@ -2541,6 +2552,7 @@ test_conv_int_1(const char *name, hid_t src, hid_t dst)
case FLT_LDOUBLE:
case OTHER:
default:
+ HDassert(0 && "Unknown type");
break;
}
@@ -2584,6 +2596,7 @@ test_conv_int_1(const char *name, hid_t src, hid_t dst)
case FLT_LDOUBLE:
case OTHER:
default:
+ HDassert(0 && "Unknown type");
break;
}
@@ -2777,7 +2790,7 @@ my_isinf(int endian, unsigned char *val, size_t size,
int retval = 0;
size_t i;
- bits = (unsigned char*)calloc((size_t)1, size);
+ bits = (unsigned char*)HDcalloc((size_t)1, size);
#ifdef H5_VMS
if(H5T_ORDER_VAX==endian) {
@@ -2801,7 +2814,7 @@ my_isinf(int endian, unsigned char *val, size_t size,
H5T__bit_find(bits, epos, esize, H5T_BIT_LSB, 0) < 0)
retval = 1;
- free(bits);
+ HDfree(bits);
return retval;
}
@@ -3881,6 +3894,7 @@ test_conv_int_fp(const char *name, int run_test, hid_t src, hid_t dst)
case FLT_LDOUBLE:
case OTHER:
default:
+ HDassert(0 && "Unknown type");
break;
}
} else if (FLT_DOUBLE==dst_type) {
@@ -3933,6 +3947,7 @@ test_conv_int_fp(const char *name, int run_test, hid_t src, hid_t dst)
case FLT_LDOUBLE:
case OTHER:
default:
+ HDassert(0 && "Unknown type");
break;
}
#if H5_SIZEOF_LONG_DOUBLE !=0
@@ -3986,6 +4001,7 @@ test_conv_int_fp(const char *name, int run_test, hid_t src, hid_t dst)
case FLT_LDOUBLE:
case OTHER:
default:
+ HDassert(0 && "Unknown type");
break;
}
#endif
@@ -4018,6 +4034,7 @@ test_conv_int_fp(const char *name, int run_test, hid_t src, hid_t dst)
case INT_ULLONG:
case OTHER:
default:
+ HDassert(0 && "Unknown type");
break;
}
} else if (INT_UCHAR==dst_type) {
@@ -4049,6 +4066,7 @@ test_conv_int_fp(const char *name, int run_test, hid_t src, hid_t dst)
case INT_ULLONG:
case OTHER:
default:
+ HDassert(0 && "Unknown type");
break;
}
} else if (INT_SHORT==dst_type) {
@@ -4080,6 +4098,7 @@ test_conv_int_fp(const char *name, int run_test, hid_t src, hid_t dst)
case INT_ULLONG:
case OTHER:
default:
+ HDassert(0 && "Unknown type");
break;
}
} else if (INT_USHORT==dst_type) {
@@ -4111,6 +4130,7 @@ test_conv_int_fp(const char *name, int run_test, hid_t src, hid_t dst)
case INT_ULLONG:
case OTHER:
default:
+ HDassert(0 && "Unknown type");
break;
}
} else if (INT_INT==dst_type) {
@@ -4142,6 +4162,7 @@ test_conv_int_fp(const char *name, int run_test, hid_t src, hid_t dst)
case INT_ULLONG:
case OTHER:
default:
+ HDassert(0 && "Unknown type");
break;
}
} else if (INT_UINT==dst_type) {
@@ -4173,6 +4194,7 @@ test_conv_int_fp(const char *name, int run_test, hid_t src, hid_t dst)
case INT_ULLONG:
case OTHER:
default:
+ HDassert(0 && "Unknown type");
break;
}
} else if (INT_LONG==dst_type) {
@@ -4204,6 +4226,7 @@ test_conv_int_fp(const char *name, int run_test, hid_t src, hid_t dst)
case INT_ULLONG:
case OTHER:
default:
+ HDassert(0 && "Unknown type");
break;
}
} else if (INT_ULONG==dst_type) {
@@ -4235,6 +4258,7 @@ test_conv_int_fp(const char *name, int run_test, hid_t src, hid_t dst)
case INT_ULLONG:
case OTHER:
default:
+ HDassert(0 && "Unknown type");
break;
}
} else if (INT_LLONG==dst_type) {
@@ -4266,6 +4290,7 @@ test_conv_int_fp(const char *name, int run_test, hid_t src, hid_t dst)
case INT_ULLONG:
case OTHER:
default:
+ HDassert(0 && "Unknown type");
break;
}
} else if (INT_ULLONG==dst_type) {
@@ -4297,6 +4322,7 @@ test_conv_int_fp(const char *name, int run_test, hid_t src, hid_t dst)
case INT_ULLONG:
case OTHER:
default:
+ HDassert(0 && "Unknown type");
break;
}
}
@@ -4586,6 +4612,8 @@ test_conv_int_fp(const char *name, int run_test, hid_t src, hid_t dst)
break;
#endif
case OTHER:
+ default:
+ HDassert(0 && "Unknown type");
break;
}
@@ -4649,6 +4677,8 @@ test_conv_int_fp(const char *name, int run_test, hid_t src, hid_t dst)
break;
#endif
case OTHER:
+ default:
+ HDassert(0 && "Unknown type");
break;
}
@@ -4699,6 +4729,8 @@ test_conv_int_fp(const char *name, int run_test, hid_t src, hid_t dst)
break;
#endif
case OTHER:
+ default:
+ HDassert(0 && "Unknown type");
break;
}
diff --git a/test/dtypes.c b/test/dtypes.c
index de81bd5..52e7983 100644
--- a/test/dtypes.c
+++ b/test/dtypes.c
@@ -697,9 +697,9 @@ test_compound_2(void)
FAIL_STACK_ERROR
/* Sizes should be the same, but be careful just in case */
- buf = (unsigned char*)malloc(nelmts * MAX(sizeof(struct st), sizeof(struct dt)));
- bkg = (unsigned char*)malloc(nelmts * sizeof(struct dt));
- orig = (unsigned char*)malloc(nelmts * sizeof(struct st));
+ buf = (unsigned char*)HDmalloc(nelmts * MAX(sizeof(struct st), sizeof(struct dt)));
+ bkg = (unsigned char*)HDmalloc(nelmts * sizeof(struct dt));
+ orig = (unsigned char*)HDmalloc(nelmts * sizeof(struct st));
for (i=0; i<(int)nelmts; i++) {
s_ptr = ((struct st*)orig) + i;
s_ptr->a = i*8+0;
@@ -762,9 +762,9 @@ test_compound_2(void)
}
/* Release resources */
- free(buf);
- free(bkg);
- free(orig);
+ HDfree(buf);
+ HDfree(bkg);
+ HDfree(orig);
CHECK_NMEMBS(nmembs , st, dt)
PASSED();
@@ -818,9 +818,9 @@ test_compound_3(void)
FAIL_STACK_ERROR
/* Initialize */
- buf = (unsigned char*)malloc(nelmts * MAX(sizeof(struct st), sizeof(struct dt)));
- bkg = (unsigned char*)malloc(nelmts * sizeof(struct dt));
- orig = (unsigned char*)malloc(nelmts * sizeof(struct st));
+ buf = (unsigned char*)HDmalloc(nelmts * MAX(sizeof(struct st), sizeof(struct dt)));
+ bkg = (unsigned char*)HDmalloc(nelmts * sizeof(struct dt));
+ orig = (unsigned char*)HDmalloc(nelmts * sizeof(struct st));
for (i=0; i<(int)nelmts; i++) {
s_ptr = ((struct st*)orig) + i;
s_ptr->a = i*8+0;
@@ -880,9 +880,9 @@ test_compound_3(void)
}
/* Release resources */
- free(buf);
- free(bkg);
- free(orig);
+ HDfree(buf);
+ HDfree(bkg);
+ HDfree(orig);
CHECK_NMEMBS(nmembs, st, dt)
PASSED();
@@ -940,9 +940,9 @@ test_compound_4(void)
FAIL_STACK_ERROR
/* Sizes should be the same, but be careful just in case */
- buf = (unsigned char*)malloc(nelmts * MAX(sizeof(struct st), sizeof(struct dt)));
- bkg = (unsigned char*)malloc(nelmts * sizeof(struct dt));
- orig = (unsigned char*)malloc(nelmts * sizeof(struct st));
+ buf = (unsigned char*)HDmalloc(nelmts * MAX(sizeof(struct st), sizeof(struct dt)));
+ bkg = (unsigned char*)HDmalloc(nelmts * sizeof(struct dt));
+ orig = (unsigned char*)HDmalloc(nelmts * sizeof(struct st));
for (i=0; i<(int)nelmts; i++) {
s_ptr = ((struct st*)orig) + i;
s_ptr->a = i*8+0;
@@ -1006,9 +1006,9 @@ test_compound_4(void)
}
/* Release resources */
- free(buf);
- free(bkg);
- free(orig);
+ HDfree(buf);
+ HDfree(bkg);
+ HDfree(orig);
CHECK_NMEMBS(nmembs, st, dt)
PASSED();
@@ -1066,14 +1066,7 @@ test_compound_5(void)
void *bkg = HDcalloc((size_t)2, sizeof(dst_type_t));
int retval = 1;
-#if 1
TESTING("optimized struct converter");
-#else
- /* Turn off optimized compound conversion function to work around
- * the problem. */
- TESTING("optimized struct converter bug workaround");
- H5Tunregister(H5T_PERS_DONTCARE, "struct(opt)", -1, -1, NULL);
-#endif
/* Build datatypes */
short_array = H5Tcreate(H5T_COMPOUND, 4*sizeof(short));
@@ -1175,9 +1168,9 @@ test_compound_6(void)
FAIL_STACK_ERROR
/* Sizes should be the same, but be careful just in case */
- buf = (unsigned char*)malloc(nelmts * MAX(sizeof(struct st), sizeof(struct dt)));
- bkg = (unsigned char*)malloc(nelmts * sizeof(struct dt));
- orig = (unsigned char*)malloc(nelmts * sizeof(struct st));
+ buf = (unsigned char*)HDmalloc(nelmts * MAX(sizeof(struct st), sizeof(struct dt)));
+ bkg = (unsigned char*)HDmalloc(nelmts * sizeof(struct dt));
+ orig = (unsigned char*)HDmalloc(nelmts * sizeof(struct st));
for (i=0; i<(int)nelmts; i++) {
s_ptr = ((struct st*)orig) + i;
s_ptr->b = (i*8+1) & 0x7fff;
@@ -1223,9 +1216,9 @@ test_compound_6(void)
}
/* Release resources */
- free(buf);
- free(bkg);
- free(orig);
+ HDfree(buf);
+ HDfree(bkg);
+ HDfree(orig);
CHECK_NMEMBS(nmembs, st, dt)
PASSED();
@@ -1408,8 +1401,7 @@ test_compound_8(void)
char c;
s1 d;
} s2;
-
- hid_t tid1, tid1_copy, tid2, tid2_copy, tid3, arr_tid;
+ hid_t tid1, tid1_copy, tid2, tid2_copy, tid3, arr_tid;
size_t tsize;
hsize_t dims[1] = {ARRAY_DIM};
herr_t ret;
@@ -1561,7 +1553,7 @@ test_compound_8(void)
if(tsize != (sizeof(char) + sizeof(char) + sizeof(int))) {
H5_FAILED(); AT();
- printf("The size of the packed compound datatype is incorrect: tsize=%d\n", tsize);
+ printf("The size of the packed compound datatype is incorrect: tsize = %zu\n", tsize);
goto error;
} /* end if */
@@ -1791,7 +1783,7 @@ test_compound_9(void)
} /* end if */
rdata.i1 = rdata.i2 = 0;
- if(rdata.str) free(rdata.str);
+ if(rdata.str) HDfree(rdata.str);
if(H5Dread(dset_id, dup_tid, H5S_ALL, H5S_ALL, H5P_DEFAULT, &rdata) < 0) {
H5_FAILED(); AT();
@@ -1805,7 +1797,7 @@ test_compound_9(void)
goto error;
} /* end if */
- if(rdata.str) free(rdata.str);
+ if(rdata.str) HDfree(rdata.str);
if(H5Dclose(dset_id) < 0)
goto error;
@@ -1984,10 +1976,10 @@ test_compound_10(void)
goto error;
}
- free(t1);
- free(t2);
- free(wdata[i].str);
- free(rdata[i].str);
+ HDfree(t1);
+ HDfree(t2);
+ HDfree(wdata[i].str);
+ HDfree(rdata[i].str);
} /* end for */
if(H5Dclose(dset_id) < 0)
@@ -4548,7 +4540,7 @@ test_conv_enum_2(void)
H5Tenum_insert(dsttype, mname[i], &i);
/* Source data */
- data = (int*)malloc(NTESTELEM*sizeof(int));
+ data = (int*)HDmalloc(NTESTELEM*sizeof(int));
for (i=0; i<NTESTELEM; i++) {
((char*)data)[i*3+2] = (char)(i % 8);
((char*)data)[i*3+0] = 0;
@@ -4570,7 +4562,7 @@ test_conv_enum_2(void)
}
/* Cleanup */
- free(data);
+ HDfree(data);
H5Tclose(srctype);
H5Tclose(dsttype);
H5Tclose(oddsize);
@@ -5387,7 +5379,7 @@ test_encode(void)
printf("Can't close datatype\n");
goto error;
} /* end if */
- free(cmpd_buf);
+ HDfree(cmpd_buf);
cmpd_buf_size = 0;
/* Commit enumeration datatype and close it */
@@ -5406,7 +5398,7 @@ test_encode(void)
printf("Can't close datatype\n");
goto error;
} /* end if */
- free(enum_buf);
+ HDfree(enum_buf);
enum_buf_size = 0;
/* Commit enumeration datatype and close it */
@@ -5425,7 +5417,7 @@ test_encode(void)
printf("Can't close datatype\n");
goto error;
} /* end if */
- free(vlstr_buf);
+ HDfree(vlstr_buf);
vlstr_buf_size = 0;
/* Open the dataytpe for query */
@@ -5543,7 +5535,7 @@ test_encode(void)
printf("Can't decode VL string type\n");
goto error;
} /* end if */
- free(vlstr_buf);
+ HDfree(vlstr_buf);
/* Verify that the datatype was copied exactly */
if(H5Tequal(decoded_tid3, tid3)<=0) {
@@ -5656,8 +5648,8 @@ test_encode(void)
goto error;
} /* end if */
- free(cmpd_buf);
- free(enum_buf);
+ HDfree(cmpd_buf);
+ HDfree(enum_buf);
PASSED();
return 0;
diff --git a/test/dynlib2.c b/test/dynlib2.c
index a853ed0..0d8be2b 100644
--- a/test/dynlib2.c
+++ b/test/dynlib2.c
@@ -71,6 +71,9 @@ H5Z_filter_dynlib2(unsigned int flags, size_t cd_nelmts,
if(cd_nelmts > 0)
return(0);
+ /* Assignment to eliminate unused parameter warning. */
+ cd_values = cd_values;
+
if(flags & H5Z_FLAG_REVERSE) { /*read*/
/* Divide the original value with MULTIPLIER */
while(buf_left > 0) {
diff --git a/test/dynlib3.c b/test/dynlib3.c
index 9560b86..b3a02ed 100644
--- a/test/dynlib3.c
+++ b/test/dynlib3.c
@@ -71,6 +71,9 @@ H5Z_filter_dynlib3(unsigned int flags, size_t cd_nelmts,
if(cd_nelmts > 0)
return(0);
+ /* Assignment to eliminate unused parameter warning. */
+ cd_values = cd_values;
+
if(flags & H5Z_FLAG_REVERSE) { /*read*/
ret_value = *buf_size = nbytes - SUFFIX_LEN;
} /* end if */
diff --git a/test/err_compat.c b/test/err_compat.c
index 346d397..576433e 100644
--- a/test/err_compat.c
+++ b/test/err_compat.c
@@ -40,7 +40,7 @@ const char *FILENAME[] = {
int ipoints2[DIM0][DIM1], icheck2[DIM0][DIM1];
#define DSET_NAME "a_dataset"
-#define FAKE_ID -1
+#define FAKE_ID (hid_t)-1
herr_t custom_print_cb1(int n, H5E_error1_t *err_desc, void* client_data);
herr_t custom_print_cb2(int n, H5E_error2_t *err_desc, void* client_data);
diff --git a/test/error_test.c b/test/error_test.c
index 1ca9686..0d945d2 100644
--- a/test/error_test.c
+++ b/test/error_test.c
@@ -57,7 +57,7 @@ hid_t ERR_MIN_WRITE;
hid_t ERR_MIN_GETNUM;
#define DSET_NAME "a_dataset"
-#define FAKE_ID 0
+#define FAKE_ID (hid_t)0
#define ERR_CLS_NAME "Error Test"
#define ERR_CLS2_NAME "Second Test"
diff --git a/test/file_image.c b/test/file_image.c
index d4056a7..b1b9d47 100644
--- a/test/file_image.c
+++ b/test/file_image.c
@@ -557,7 +557,7 @@ test_core(void)
/* Append ".copy" to the filename from the source directory */
VERIFY(HDstrlen(filename) < (1023 - 5), "file name too long.");
- HDstrncpy(copied_filename, filename, 1023);
+ HDstrncpy(copied_filename, filename, (size_t)1023);
copied_filename[1023] = '\0';
HDstrcat(copied_filename, ".copy");
diff --git a/test/fillval.c b/test/fillval.c
index c69f409..b73ed17 100644
--- a/test/fillval.c
+++ b/test/fillval.c
@@ -469,7 +469,7 @@ test_create(hid_t fapl, const char *base_name, H5D_layout_t layout)
/* 6. fill value is undefined while fill write time is H5D_FILL_TIME_ALLOC.
* Supposed to fail. */
- if(H5Pset_fill_value(dcpl, -1, NULL) < 0) goto error;
+ if(H5Pset_fill_value(dcpl, (hid_t)-1, NULL) < 0) goto error;
if(H5Pset_fill_time(dcpl, H5D_FILL_TIME_ALLOC) < 0) goto error;
H5E_BEGIN_TRY {
if(H5Dcreate2(file, "dset7", H5T_NATIVE_LONG, space, H5P_DEFAULT, dcpl, H5P_DEFAULT)!=FAIL)
@@ -510,7 +510,7 @@ test_create(hid_t fapl, const char *base_name, H5D_layout_t layout)
/* 4. fill value is undefined while fill write time is H5D_FILL_TIME_ALLOC.
* Supposed to fail. */
- if(H5Pset_fill_value(dcpl, -1, NULL) < 0) goto error;
+ if(H5Pset_fill_value(dcpl, (hid_t)-1, NULL) < 0) goto error;
H5E_BEGIN_TRY {
if(H5Dcreate2(file, "dset7", H5T_NATIVE_LONG, space, H5P_DEFAULT, dcpl, H5P_DEFAULT)!=FAIL)
goto error;
@@ -1111,34 +1111,34 @@ test_rdwr(hid_t fapl, const char *base_name, H5D_layout_t layout)
if(H5Pset_fill_time(dcpl, H5D_FILL_TIME_ALLOC) < 0) goto error;
fillval = 0;
nerrors += test_rdwr_cases(file, dcpl, "dset1", &fillval, H5D_FILL_TIME_ALLOC,
- layout, H5T_INTEGER, -1);
+ layout, H5T_INTEGER, (hid_t)-1);
/* case for H5D_FILL_TIME_NEVER as fill write time and fill value to be default */
if(H5Pset_fill_time(dcpl, H5D_FILL_TIME_NEVER) < 0) goto error;
nerrors += test_rdwr_cases(file, dcpl, "dset2", &fillval, H5D_FILL_TIME_NEVER,
- layout, H5T_INTEGER, -1);
+ layout, H5T_INTEGER, (hid_t)-1);
/* case for H5D_FILL_TIME_ALLOC as fill write time and fill value is user-defined */
if(H5Pset_fill_time(dcpl, H5D_FILL_TIME_ALLOC) < 0) goto error;
fillval = 0x4c70f1cd;
if(H5Pset_fill_value(dcpl, H5T_NATIVE_INT, &fillval) < 0) goto error;
nerrors += test_rdwr_cases(file, dcpl, "dset3", &fillval, H5D_FILL_TIME_ALLOC,
- layout, H5T_INTEGER, -1);
+ layout, H5T_INTEGER, (hid_t)-1);
/* case for H5D_FILL_TIME_NEVER as fill write time and fill value is user-defined */
if(H5Pset_fill_time(dcpl, H5D_FILL_TIME_NEVER) < 0) goto error;
if(H5Pset_fill_value(dcpl, H5T_NATIVE_INT, &fillval) < 0) goto error;
nerrors += test_rdwr_cases(file, dcpl, "dset4", &fillval, H5D_FILL_TIME_NEVER,
- layout, H5T_INTEGER, -1);
+ layout, H5T_INTEGER, (hid_t)-1);
/* case for H5D_FILL_TIME_ALLOC as fill write time and fill value is undefined */
/* This case has been tested in test_create() function */
/* case for H5D_FILL_TIME_NEVER as fill write time and fill value is undefined */
if(H5Pset_fill_time(dcpl, H5D_FILL_TIME_NEVER) < 0) goto error;
- if(H5Pset_fill_value(dcpl, -1, NULL) < 0) goto error;
+ if(H5Pset_fill_value(dcpl, (hid_t)-1, NULL) < 0) goto error;
nerrors += test_rdwr_cases(file, dcpl, "dset5", &fillval, H5D_FILL_TIME_NEVER,
- layout, H5T_INTEGER, -1);
+ layout, H5T_INTEGER, (hid_t)-1);
/* case for H5D_FILL_TIME_ALLOC as fill write time and fill value is user-defined
* as compound type */
@@ -1164,34 +1164,34 @@ test_rdwr(hid_t fapl, const char *base_name, H5D_layout_t layout)
if(H5Pset_fill_time(dcpl, H5D_FILL_TIME_ALLOC) < 0) goto error;
fillval = 0;
nerrors += test_rdwr_cases(file, dcpl, "dset6", &fillval, H5D_FILL_TIME_ALLOC,
- layout, H5T_INTEGER, -1);
+ layout, H5T_INTEGER, (hid_t)-1);
/* case for H5D_FILL_TIME_NEVER as fill write time and fill value to be default */
if(H5Pset_fill_time(dcpl, H5D_FILL_TIME_NEVER) < 0) goto error;
nerrors += test_rdwr_cases(file, dcpl, "dset7", &fillval, H5D_FILL_TIME_NEVER, layout,
- H5T_INTEGER, -1);
+ H5T_INTEGER, (hid_t)-1);
/* case for H5D_FILL_TIME_ALLOC as fill write time and fill value is user-defined */
if(H5Pset_fill_time(dcpl, H5D_FILL_TIME_ALLOC) < 0) goto error;
fillval = 0x4c70f1cd;
if(H5Pset_fill_value(dcpl, H5T_NATIVE_INT, &fillval) < 0) goto error;
nerrors += test_rdwr_cases(file, dcpl, "dset8", &fillval, H5D_FILL_TIME_ALLOC,
- layout, H5T_INTEGER, -1);
+ layout, H5T_INTEGER, (hid_t)-1);
/* case for H5D_FILL_TIME_NEVER as fill write time and fill value is user-defined */
if(H5Pset_fill_time(dcpl, H5D_FILL_TIME_NEVER) < 0) goto error;
if(H5Pset_fill_value(dcpl, H5T_NATIVE_INT, &fillval) < 0) goto error;
nerrors += test_rdwr_cases(file, dcpl, "dset9", &fillval, H5D_FILL_TIME_NEVER,
- layout, H5T_INTEGER, -1);
+ layout, H5T_INTEGER, (hid_t)-1);
/* case for H5D_FILL_TIME_ALLOC as fill write time and fill value is undefined */
/* This case has been tested in test_create() function */
/* case for H5D_FILL_TIME_NEVER as fill write time and fill value is undefined */
if(H5Pset_fill_time(dcpl, H5D_FILL_TIME_NEVER) < 0) goto error;
- if(H5Pset_fill_value(dcpl, -1, NULL) < 0) goto error;
+ if(H5Pset_fill_value(dcpl, (hid_t)-1, NULL) < 0) goto error;
nerrors += test_rdwr_cases(file, dcpl, "dset10", &fillval, H5D_FILL_TIME_NEVER,
- layout, H5T_INTEGER, -1);
+ layout, H5T_INTEGER, (hid_t)-1);
/* case for H5D_FILL_TIME_ALLOC as fill write time and fill value is user-defined
* as compound type */
diff --git a/test/filter_fail.c b/test/filter_fail.c
index 67e1dda..3dbb564 100644
--- a/test/filter_fail.c
+++ b/test/filter_fail.c
@@ -65,8 +65,8 @@ const H5Z_class2_t H5Z_FAIL_TEST[1] = {{
*-------------------------------------------------------------------------
*/
static size_t
-filter_fail(unsigned int flags, size_t cd_nelmts,
- const unsigned int *cd_values, size_t nbytes,
+filter_fail(unsigned int flags, size_t UNUSED cd_nelmts,
+ const unsigned int UNUSED *cd_values, size_t nbytes,
size_t *buf_size, void **buf)
{
int *dst = (int*)(*buf);
@@ -387,6 +387,7 @@ int main(void)
if(H5Pset_cache(fapl, mdc_nelmts, rdcc_nelmts, rdcc_nbytes, rdcc_w0) < 0)
TEST_ERROR
+ /* Run the test again. */
nerrors += (test_filter_write(filename, fapl, FALSE) < 0 ? 1 : 0);
nerrors += (test_filter_read(filename, fapl) < 0 ? 1 : 0);
diff --git a/test/gen_bogus.c b/test/gen_bogus.c
index 7456ae6..7d8d073 100644
--- a/test/gen_bogus.c
+++ b/test/gen_bogus.c
@@ -20,7 +20,7 @@
* Purpose: This program is run to generate an HDF5 data file with several
* datasets that have "bogus" messages in their object header.
*/
-
+
#include "H5private.h"
#include "hdf5.h"
#include "H5Oprivate.h"
diff --git a/test/getname.c b/test/getname.c
index 1abc04a..dac115c 100644
--- a/test/getname.c
+++ b/test/getname.c
@@ -2487,30 +2487,30 @@ test_obj_ref(hid_t fapl)
FAIL_STACK_ERROR
/* Create reference to dataset */
- if(H5Rcreate(&wbuf[0], fid1, "/Dataset3", H5R_OBJECT, -1) < 0)
+ if(H5Rcreate(&wbuf[0], fid1, "/Dataset3", H5R_OBJECT, (hid_t)-1) < 0)
FAIL_STACK_ERROR
/* Create reference to dataset */
- if(H5Rcreate(&wbuf[1], fid1, "/Group1/Dataset2", H5R_OBJECT, -1) < 0)
+ if(H5Rcreate(&wbuf[1], fid1, "/Group1/Dataset2", H5R_OBJECT, (hid_t)-1) < 0)
FAIL_STACK_ERROR
/* Create reference to group */
- if(H5Rcreate(&wbuf[2], fid1, "/Group1", H5R_OBJECT, -1) < 0)
+ if(H5Rcreate(&wbuf[2], fid1, "/Group1", H5R_OBJECT, (hid_t)-1) < 0)
FAIL_STACK_ERROR
/* Create reference to named datatype */
- if(H5Rcreate(&wbuf[3], fid1, "/Group1/Datatype1", H5R_OBJECT, -1) < 0)
+ if(H5Rcreate(&wbuf[3], fid1, "/Group1/Datatype1", H5R_OBJECT, (hid_t)-1) < 0)
FAIL_STACK_ERROR
- if(H5Rcreate(&wbuf[4], fid1, "/Group1/Group2/Dataset4", H5R_OBJECT, -1) < 0)
+ if(H5Rcreate(&wbuf[4], fid1, "/Group1/Group2/Dataset4", H5R_OBJECT, (hid_t)-1) < 0)
FAIL_STACK_ERROR
- if(H5Rcreate(&wbuf[5], fid1, "/Group1/Group2", H5R_OBJECT, -1) < 0)
+ if(H5Rcreate(&wbuf[5], fid1, "/Group1/Group2", H5R_OBJECT, (hid_t)-1) < 0)
FAIL_STACK_ERROR
- if(H5Rcreate(&wbuf[6], fid1, "/Group1/Group2/Link/Dataset5", H5R_OBJECT, -1) < 0)
+ if(H5Rcreate(&wbuf[6], fid1, "/Group1/Group2/Link/Dataset5", H5R_OBJECT, (hid_t)-1) < 0)
FAIL_STACK_ERROR
/* Create reference to root group */
- if(H5Rcreate(&wbuf[7], fid1, "/", H5R_OBJECT, -1) < 0)
+ if(H5Rcreate(&wbuf[7], fid1, "/", H5R_OBJECT, (hid_t)-1) < 0)
FAIL_STACK_ERROR
/* Write selection to disk */
diff --git a/test/h5test.c b/test/h5test.c
index 2afda36..fce8c9b 100644
--- a/test/h5test.c
+++ b/test/h5test.c
@@ -623,7 +623,7 @@ h5_fileaccess(void)
void
h5_no_hwconv(void)
{
- H5Tunregister(H5T_PERS_HARD, NULL, -1, -1, NULL);
+ H5Tunregister(H5T_PERS_HARD, NULL, (hid_t)-1, (hid_t)-1, NULL);
}
@@ -745,7 +745,7 @@ h5_set_info_object(void)
/* copy key/value pair into temporary buffer */
len = strcspn(valp, ";");
next = &valp[len];
- key_val = (char *)calloc(1, len + 1);
+ key_val = (char *)HDcalloc(1, len + 1);
/* increment the next pointer past the terminating semicolon */
if (*next == ';')
@@ -1113,7 +1113,7 @@ getenv_all(MPI_Comm comm, int root, const char* name)
*
*-------------------------------------------------------------------------
*/
-hid_t
+int
h5_make_local_copy(const char *origfilename, const char *local_copy_name)
{
int fd_old = (-1), fd_new = (-1); /* File descriptors for copying data */
diff --git a/test/links.c b/test/links.c
index ef854f4..95398cd 100644
--- a/test/links.c
+++ b/test/links.c
@@ -558,8 +558,8 @@ cklinks(hid_t fapl, hbool_t new_format)
} /* end if */
if(H5F_addr_ne(oinfo1.addr, oinfo2.addr)) {
H5_FAILED();
- puts(" Hard link test failed. Link seems not to point to the ");
- puts(" expected file location.");
+ HDputs(" Hard link test failed. Link seems not to point to the ");
+ HDputs(" expected file location.");
TEST_ERROR
} /* end if */
if(H5Lexists(file, "d1", H5P_DEFAULT) != TRUE) FAIL_STACK_ERROR
@@ -574,14 +574,14 @@ cklinks(hid_t fapl, hbool_t new_format)
} /* end if */
if(H5F_addr_ne(oinfo1.addr, oinfo2.addr)) {
H5_FAILED();
- puts(" Soft link test failed. Link seems not to point to the ");
- puts(" expected file location.");
+ HDputs(" Soft link test failed. Link seems not to point to the ");
+ HDputs(" expected file location.");
TEST_ERROR
} /* end if */
if(H5Lget_val(file, "grp1/soft", linkval, sizeof linkval, H5P_DEFAULT) < 0) FAIL_STACK_ERROR
if(HDstrcmp(linkval, "/d1")) {
H5_FAILED();
- puts(" Soft link test failed. Wrong link value");
+ HDputs(" Soft link test failed. Wrong link value");
TEST_ERROR
} /* end if */
if(H5Lexists(file, "grp1/soft", H5P_DEFAULT) != TRUE) FAIL_STACK_ERROR
@@ -592,7 +592,7 @@ cklinks(hid_t fapl, hbool_t new_format)
} H5E_END_TRY;
if(status >= 0) {
H5_FAILED();
- puts(" H5Oget_info_by_name() should have failed for a dangling link.");
+ HDputs(" H5Oget_info_by_name() should have failed for a dangling link.");
TEST_ERROR
} /* end if */
if(H5Lget_info(file, "grp1/dangle", &linfo2, H5P_DEFAULT) < 0) FAIL_STACK_ERROR
@@ -608,7 +608,7 @@ cklinks(hid_t fapl, hbool_t new_format)
} /* end if */
if(HDstrcmp(linkval, "foobar")) {
H5_FAILED();
- puts(" Dangling link test failed. Wrong link value");
+ HDputs(" Dangling link test failed. Wrong link value");
TEST_ERROR
} /* end if */
if(H5Lexists(file, "grp1/dangle", H5P_DEFAULT) != TRUE) FAIL_STACK_ERROR
@@ -619,7 +619,7 @@ cklinks(hid_t fapl, hbool_t new_format)
} H5E_END_TRY;
if(status >= 0) {
H5_FAILED();
- puts(" H5Oget_info_by_name() should have failed for a recursive link.");
+ HDputs(" H5Oget_info_by_name() should have failed for a recursive link.");
TEST_ERROR
} /* end if */
if(H5Lget_info(file, "grp1/recursive", &linfo2, H5P_DEFAULT) < 0) FAIL_STACK_ERROR
@@ -635,7 +635,7 @@ cklinks(hid_t fapl, hbool_t new_format)
} /* end if */
if(HDstrcmp(linkval, "/grp1/recursive")) {
H5_FAILED();
- puts(" Recursive link test failed. Wrong link value");
+ HDputs(" Recursive link test failed. Wrong link value");
TEST_ERROR
} /* end if */
@@ -700,8 +700,8 @@ ck_new_links(hid_t fapl, hbool_t new_format)
}
if(H5F_addr_ne(oi_dset.addr, oi_hard1.addr) || H5F_addr_ne(oi_dset.addr, oi_hard2.addr)) {
H5_FAILED();
- puts(" Hard link test failed. Link seems not to point to the ");
- puts(" expected file location.");
+ HDputs(" Hard link test failed. Link seems not to point to the ");
+ HDputs(" expected file location.");
TEST_ERROR
}
@@ -905,7 +905,7 @@ toomany(hid_t fapl, hbool_t new_format)
} H5E_END_TRY;
if(gid >= 0) {
H5_FAILED();
- puts(" Should have failed for sequence of too many nested links.");
+ HDputs(" Should have failed for sequence of too many nested links.");
TEST_ERROR
} /* end if */
@@ -1189,7 +1189,7 @@ test_move(hid_t fapl, hbool_t new_format)
} H5E_END_TRY;
if(moved_grp >= 0) {
H5_FAILED();
- puts(" Group still in original location?");
+ HDputs(" Group still in original location?");
TEST_ERROR
} /* end if */
@@ -1684,8 +1684,8 @@ test_deprec(hid_t fapl, hbool_t new_format)
if(HDmemcmp(&sb_hard1.objno, sb_hard2.objno, sizeof(sb_hard1.objno))) {
H5_FAILED();
- puts(" Hard link test failed. Link seems not to point to the ");
- puts(" expected file location.");
+ HDputs(" Hard link test failed. Link seems not to point to the ");
+ HDputs(" expected file location.");
TEST_ERROR
} /* end if */
@@ -1695,8 +1695,8 @@ test_deprec(hid_t fapl, hbool_t new_format)
if(HDmemcmp(&sb_hard1.objno, sb_hard2.objno, sizeof(sb_hard1.objno))) {
H5_FAILED();
- puts(" Hard link test failed. Link seems not to point to the ");
- puts(" expected file location.");
+ HDputs(" Hard link test failed. Link seems not to point to the ");
+ HDputs(" expected file location.");
TEST_ERROR
} /* end if */
@@ -1812,19 +1812,19 @@ external_link_root(hid_t fapl, hbool_t new_format)
if(H5Lget_info(fid, "ext_link", &linfo, H5P_DEFAULT) < 0) goto error;
if(H5L_TYPE_EXTERNAL != linfo.type) {
H5_FAILED();
- puts(" Unexpected object type - should have been an external link");
+ HDputs(" Unexpected object type - should have been an external link");
goto error;
}
if(H5Lget_val(fid, "ext_link", objname, sizeof(objname), H5P_DEFAULT) < 0) TEST_ERROR
if(H5Lunpack_elink_val(objname, linfo.u.val_size, NULL, &file, &path) < 0) TEST_ERROR
if(HDstrcmp(file, filename1)) {
H5_FAILED();
- puts(" External link file name incorrect");
+ HDputs(" External link file name incorrect");
goto error;
}
if(HDstrcmp(path, "/")) {
H5_FAILED();
- puts(" External link path incorrect");
+ HDputs(" External link path incorrect");
goto error;
}
@@ -1836,19 +1836,19 @@ external_link_root(hid_t fapl, hbool_t new_format)
if(H5Lget_info(fid, "ext_link", &linfo, H5P_DEFAULT) < 0) goto error;
if(H5L_TYPE_EXTERNAL != linfo.type) {
H5_FAILED();
- puts(" Unexpected object type - should have been an external link");
+ HDputs(" Unexpected object type - should have been an external link");
goto error;
}
if(H5Lget_val(fid, "ext_link", objname, sizeof(objname), H5P_DEFAULT) < 0) TEST_ERROR
if(H5Lunpack_elink_val(objname, linfo.u.val_size, NULL, &file, &path) < 0) TEST_ERROR
if(HDstrcmp(file, filename1)) {
H5_FAILED();
- puts(" External link file name incorrect");
+ HDputs(" External link file name incorrect");
goto error;
}
if(HDstrcmp(path, "/")) {
H5_FAILED();
- puts(" External link path incorrect");
+ HDputs(" External link path incorrect");
goto error;
}
@@ -2693,7 +2693,7 @@ external_link_dangling(hid_t fapl, hbool_t new_format)
} H5E_END_TRY;
if (gid >= 0) {
H5_FAILED();
- puts(" Should have failed for sequence of too many nested links.");
+ HDputs(" Should have failed for sequence of too many nested links.");
goto error;
}
@@ -2703,7 +2703,7 @@ external_link_dangling(hid_t fapl, hbool_t new_format)
} H5E_END_TRY;
if (gid >= 0) {
H5_FAILED();
- puts(" Should have failed for sequence of too many nested links.");
+ HDputs(" Should have failed for sequence of too many nested links.");
goto error;
}
@@ -2713,7 +2713,7 @@ external_link_dangling(hid_t fapl, hbool_t new_format)
} H5E_END_TRY;
if (status >= 0) {
H5_FAILED();
- puts(" Retreiving name of object by index through dangling file external link should have failed.");
+ HDputs(" Retreiving name of object by index through dangling file external link should have failed.");
} /* end if */
/* Close root group */
@@ -2810,7 +2810,7 @@ external_link_prefix(hid_t fapl, hbool_t new_format)
/* should be able to find the target file from pathnames set via H5Pset_elink_prefix() */
if (gid < 0) {
H5_FAILED();
- puts(" Should have found the file in tmp directory.");
+ HDputs(" Should have found the file in tmp directory.");
goto error;
}
@@ -2905,7 +2905,7 @@ external_link_abs_mainpath(hid_t fapl, hbool_t new_format)
/* should be able to find the target file from absolute path set for main file */
if(gid < 0) {
H5_FAILED();
- puts(" Should have found the file in tmp directory.");
+ HDputs(" Should have found the file in tmp directory.");
goto error;
}
@@ -2991,7 +2991,7 @@ external_link_rel_mainpath(hid_t fapl, hbool_t new_format)
/* should be able to find the target file from the main file's relative pathname */
if (gid < 0) {
H5_FAILED();
- puts(" Should have found the file in current working directory");
+ HDputs(" Should have found the file in current working directory");
goto error;
}
@@ -3083,7 +3083,7 @@ external_link_cwd(hid_t fapl, hbool_t new_format)
/* should be able to find the target file from the current working directory */
if(gid < 0) {
H5_FAILED();
- puts(" Should have found the file in current working directory");
+ HDputs(" Should have found the file in current working directory");
goto error;
}
@@ -3179,7 +3179,7 @@ external_link_abstar(hid_t fapl, hbool_t new_format)
/* should be able to find the target file with abolute path */
if(gid < 0) {
H5_FAILED();
- puts(" Should have found the file in tmp directory.");
+ HDputs(" Should have found the file in tmp directory.");
goto error;
}
@@ -3273,7 +3273,7 @@ external_link_abstar_cur(hid_t fapl, hbool_t new_format)
/* should be able to find the target file from main file's current working directory */
if (gid < 0) {
H5_FAILED();
- puts(" Should have found the file in current working directory.");
+ HDputs(" Should have found the file in current working directory.");
goto error;
}
@@ -3353,7 +3353,7 @@ external_link_reltar(hid_t fapl, hbool_t new_format)
/* Open object through external link */
if((gid = H5Gopen2(fid, "ext_link", H5P_DEFAULT)) < 0) {
H5_FAILED();
- puts(" Should have found the file in tmp directory.");
+ HDputs(" Should have found the file in tmp directory.");
goto error;
} /* end if */
@@ -3450,7 +3450,7 @@ external_link_chdir(hid_t fapl, hbool_t new_format)
*/
if (gid < 0) {
H5_FAILED();
- puts(" Should have found the file in tmp directory.");
+ HDputs(" Should have found the file in tmp directory.");
goto error;
}
@@ -3625,7 +3625,7 @@ external_set_elink_fapl1(hid_t fapl, hbool_t new_format)
/* should succeed in opening the target object A in the current working directory */
if (oidA < 0) {
H5_FAILED();
- puts(" Should succeed in opening family target file A in current working directory");
+ HDputs(" Should succeed in opening family target file A in current working directory");
goto error;
}
@@ -3639,7 +3639,7 @@ external_set_elink_fapl1(hid_t fapl, hbool_t new_format)
/* should succeed in opening the target object B in the current working directory */
if (oidB < 0) {
H5_FAILED();
- puts(" Should succeed in opening multi target file B in current working directory");
+ HDputs(" Should succeed in opening multi target file B in current working directory");
goto error;
}
@@ -3785,7 +3785,7 @@ external_set_elink_fapl2(hid_t fapl, hbool_t new_format)
did = H5Dopen2(fid, "ext_link", dapl_id);
if(did < 0) {
H5_FAILED();
- puts(" Should succeed in opening the target dataset");
+ HDputs(" Should succeed in opening the target dataset");
goto error;
}
@@ -4372,7 +4372,7 @@ external_link_win1(hid_t fapl, hbool_t new_format)
/* should be able to find the target file via main file's CWD*/
if(gid < 0) {
H5_FAILED();
- puts(" Should have found the file in CWD.");
+ HDputs(" Should have found the file in CWD.");
goto error;
}
@@ -4466,7 +4466,7 @@ external_link_win2(hid_t fapl, hbool_t new_format)
/* should be able to find the target file directly */
if(gid < 0) {
H5_FAILED();
- puts(" Should have found the file in tmp.");
+ HDputs(" Should have found the file in tmp.");
goto error;
}
@@ -4559,7 +4559,7 @@ external_link_win3(hid_t fapl, hbool_t new_format)
/* should be able to find the target file directly */
if (gid < 0) {
H5_FAILED();
- puts(" Should have found the file in tmp.");
+ HDputs(" Should have found the file in tmp.");
goto error;
}
@@ -4648,7 +4648,7 @@ external_link_win4(hid_t fapl, hbool_t new_format)
/* should be able to find the target file via main file's absolute drive/relative path */
if (gid < 0) {
H5_FAILED();
- puts(" Should have found the file in CWD.");
+ HDputs(" Should have found the file in CWD.");
goto error;
}
@@ -4744,7 +4744,7 @@ external_link_win5(hid_t fapl, hbool_t new_format)
/* should be able to find the target file via main file's rel drive/abs path */
if(gid < 0) {
H5_FAILED();
- puts(" Should have found the file in CWD.");
+ HDputs(" Should have found the file in CWD.");
goto error;
}
@@ -4837,7 +4837,7 @@ external_link_win6(hid_t fapl, hbool_t new_format)
/* should be able to find the target file via target file's rel path in current drive */
if (gid < 0) {
H5_FAILED();
- puts(" Should have found the file in tmp.");
+ HDputs(" Should have found the file in tmp.");
goto error;
}
@@ -4924,7 +4924,7 @@ external_link_win7(hid_t fapl, hbool_t new_format)
/* should be able to find the target file via main file's local host/main drive*/
if(gid < 0) {
H5_FAILED();
- puts(" Should have found the file in local host/main drive.");
+ HDputs(" Should have found the file in local host/main drive.");
goto error;
}
@@ -5016,7 +5016,7 @@ external_link_win8(hid_t fapl, hbool_t new_format)
/* should be able to find the target file directly */
if(gid < 0) {
H5_FAILED();
- puts(" Should have found the file in tmp.");
+ HDputs(" Should have found the file in tmp.");
goto error;
}
@@ -5103,7 +5103,7 @@ external_link_win9(hid_t fapl, hbool_t new_format)
/* should be able to find the target file via main file's local host/main drive*/
if(gid < 0) {
H5_FAILED();
- puts(" Should have found the file in local host/main drive.");
+ HDputs(" Should have found the file in local host/main drive.");
goto error;
}
@@ -5174,7 +5174,7 @@ external_link_recursive(hid_t fapl, hbool_t new_format)
} H5E_END_TRY;
if (gid >= 0) {
H5_FAILED();
- puts(" Should have failed for recursive external links.");
+ HDputs(" Should have failed for recursive external links.");
goto error;
}
@@ -5244,7 +5244,7 @@ external_link_query(hid_t fapl, hbool_t new_format)
if(li.u.val_size != (1 + (HDstrlen(filename2) + 1) + (HDstrlen("/dst") + 1))) TEST_ERROR
if (H5L_TYPE_EXTERNAL != li.type) {
H5_FAILED();
- puts(" Unexpected link class - should have been an external link");
+ HDputs(" Unexpected link class - should have been an external link");
goto error;
}
@@ -5270,7 +5270,7 @@ external_link_query(hid_t fapl, hbool_t new_format)
if(li.u.val_size != (1 + (HDstrlen(filename2) + 1) + (HDstrlen("/dst") + 1))) TEST_ERROR
if(H5L_TYPE_EXTERNAL != li.type) {
H5_FAILED();
- puts(" Unexpected link class - should have been an external link");
+ HDputs(" Unexpected link class - should have been an external link");
goto error;
}
@@ -5288,7 +5288,7 @@ external_link_query(hid_t fapl, hbool_t new_format)
if(H5Oget_info_by_name(fid, "src", &oi, H5P_DEFAULT) < 0) FAIL_STACK_ERROR
if(H5O_TYPE_GROUP != oi.type) {
H5_FAILED();
- puts(" Unexpected object type - should have been a group");
+ HDputs(" Unexpected object type - should have been a group");
goto error;
}
@@ -6077,7 +6077,7 @@ external_link_closing(hid_t fapl, hbool_t new_format)
} H5E_END_TRY
/* Test H5Rcreate */
- if(H5Rcreate(&obj_ref, fid1, "elink/elink/elink/type1_moved", H5R_OBJECT, (-1)) < 0) TEST_ERROR
+ if(H5Rcreate(&obj_ref, fid1, "elink/elink/elink/type1_moved", H5R_OBJECT, (hid_t)(-1)) < 0) TEST_ERROR
/* Test unlink */
if(H5Ldelete(fid1, "elink/elink/elink/group1_moved", H5P_DEFAULT) < 0) TEST_ERROR
@@ -6324,7 +6324,6 @@ external_link_strong(hid_t fapl, hbool_t new_format)
if(H5Gclose(gid2) < 0) TEST_ERROR
if(H5Fclose(fid2) < 0) TEST_ERROR
-
PASSED();
return 0;
@@ -6529,7 +6528,7 @@ external_symlink(const char *env_h5_drvr, hid_t fapl, hbool_t new_format)
} /* end if */
else {
SKIPPED();
- puts(" Current VFD doesn't support POSIX I/O calls");
+ HDputs(" Current VFD doesn't support POSIX I/O calls");
} /* end else */
return 0;
@@ -6549,7 +6548,7 @@ external_symlink(const char *env_h5_drvr, hid_t fapl, hbool_t new_format)
return -1;
#else /* H5_HAVE_SYMLINK */
SKIPPED();
- puts(" Current file system or operating system doesn't support symbolic links");
+ HDputs(" Current file system or operating system doesn't support symbolic links");
return 0;
#endif /* H5_HAVE_SYMLINK */
@@ -7588,7 +7587,7 @@ ud_hard_links(hid_t fapl)
if(li.u.val_size != 0) TEST_ERROR
if(UD_HARD_TYPE != li.type) {
H5_FAILED();
- puts(" Unexpected link class - should have been a UD hard link");
+ HDputs(" Unexpected link class - should have been a UD hard link");
goto error;
} /* end if */
@@ -8002,7 +8001,7 @@ ud_callbacks(hid_t fapl, hbool_t new_format)
if(li.u.val_size != 16) TEST_ERROR
if (UD_CB_TYPE != li.type) {
H5_FAILED();
- puts(" Unexpected link class - should have been a UD hard link");
+ HDputs(" Unexpected link class - should have been a UD hard link");
goto error;
}
@@ -8650,7 +8649,7 @@ lapl_nlinks(hid_t fapl, hbool_t new_format)
} H5E_END_TRY;
if (gid >= 0) {
H5_FAILED();
- puts(" Should have failed for sequence of too many nested links.");
+ HDputs(" Should have failed for sequence of too many nested links.");
goto error;
}
@@ -10174,7 +10173,7 @@ corder_create_empty(hid_t fapl)
} H5E_END_TRY;
if(ret > 0) {
H5_FAILED();
- puts(" H5Pset_link_create_order() should have failed for a creation order index with no tracking.");
+ HDputs(" H5Pset_link_create_order() should have failed for a creation order index with no tracking.");
TEST_ERROR
} /* end if */
@@ -11449,6 +11448,12 @@ delete_by_idx(hid_t fapl)
} H5E_END_TRY;
if(ret >= 0) TEST_ERROR
+ /* Check for deletion on non-existing group */
+ H5E_BEGIN_TRY {
+ ret = H5Ldelete_by_idx(group_id, "None", idx_type, order, (hsize_t)0, H5P_DEFAULT);
+ } H5E_END_TRY;
+ if(ret >= 0) TEST_ERROR
+
/* Create several links, up to limit of compact form */
for(u = 0; u < max_compact; u++) {
hid_t group_id2; /* Group ID */
@@ -12627,13 +12632,13 @@ link_iterate_old_check(hid_t group_id, H5_iter_order_t order,
/* Check for iteration w/bad location ID */
skip = 0;
H5E_BEGIN_TRY {
- ret = H5Literate((-1), H5_INDEX_NAME, order, &skip, link_iterate_fail_cb, NULL);
+ ret = H5Literate((hid_t)(-1), H5_INDEX_NAME, order, &skip, link_iterate_fail_cb, NULL);
} H5E_END_TRY;
if(ret >= 0) TEST_ERROR
#ifndef H5_NO_DEPRECATED_SYMBOLS
H5E_BEGIN_TRY {
- ret = H5Giterate((-1), ".", &gskip, group_iterate_old_cb, iter_info);
+ ret = H5Giterate((hid_t)(-1), ".", &gskip, group_iterate_old_cb, iter_info);
} H5E_END_TRY;
if(ret >= 0) TEST_ERROR
#endif /* H5_NO_DEPRECATED_SYMBOLS */
@@ -14730,7 +14735,7 @@ main(void)
if(nerrors) {
printf("***** %d LINK TEST%s FAILED! *****\n",
nerrors, 1 == nerrors ? "" : "S");
- exit(1);
+ HDexit(1);
}
printf("All link tests passed.\n");
@@ -14745,7 +14750,7 @@ main(void)
return 0;
error:
- puts("*** TESTS FAILED ***");
+ HDputs("*** TESTS FAILED ***");
return 1;
}
diff --git a/test/ntypes.c b/test/ntypes.c
index 25060ec..a4ae4cf 100644
--- a/test/ntypes.c
+++ b/test/ntypes.c
@@ -2148,7 +2148,7 @@ test_refer_dtype(hid_t file)
TEST_ERROR;
/* Create reference to named datatype */
- if(H5Rcreate(wbuf, file, "/Group1/Datatype1", H5R_OBJECT, -1) < 0)
+ if(H5Rcreate(wbuf, file, "/Group1/Datatype1", H5R_OBJECT, (hid_t)-1) < 0)
TEST_ERROR;
if(H5Rget_obj_type2(dataset, H5R_OBJECT, wbuf, &obj_type) < 0)
TEST_ERROR;
@@ -2605,7 +2605,7 @@ test_bitfield_dtype(hid_t file)
if((ntype_size = H5Tget_size(native_type)) == 0) TEST_ERROR;
- rbuf = malloc((size_t)nelmts*ntype_size);
+ rbuf = HDmalloc((size_t)nelmts*ntype_size);
/* Read the data and compare them */
if(H5Dread(dataset1, native_type, H5S_ALL, H5S_ALL, H5P_DEFAULT, rbuf) < 0) TEST_ERROR;
@@ -2624,7 +2624,7 @@ test_bitfield_dtype(hid_t file)
if(H5Tclose(dtype) < 0) TEST_ERROR;
if(H5Tclose(native_type) < 0) TEST_ERROR;
if(H5Dclose(dataset1) < 0) TEST_ERROR;
- if(rbuf) free(rbuf);
+ if(rbuf) HDfree(rbuf);
/* Open dataset2 again to check H5Tget_native_type */
if((dataset2 = H5Dopen2(file, DSET2_BITFIELD_NAME, H5P_DEFAULT)) < 0) TEST_ERROR;
diff --git a/test/objcopy.c b/test/objcopy.c
index 7c86911..af0a835 100644
--- a/test/objcopy.c
+++ b/test/objcopy.c
@@ -269,8 +269,8 @@ attach_ref_attr(hid_t file_id, hid_t loc_id)
if(H5Dwrite(did2, H5T_NATIVE_INT, H5S_ALL , H5S_ALL, H5P_DEFAULT,data2) < 0) TEST_ERROR
/* create an attribute with two object references */
- if(H5Rcreate(&ref[0], file_id, dsetname1, H5R_OBJECT, -1) < 0) TEST_ERROR
- if(H5Rcreate(&ref[1], file_id, dsetname2, H5R_OBJECT, -1) < 0) TEST_ERROR
+ if(H5Rcreate(&ref[0], file_id, dsetname1, H5R_OBJECT, (hid_t)-1) < 0) TEST_ERROR
+ if(H5Rcreate(&ref[1], file_id, dsetname2, H5R_OBJECT, (hid_t)-1) < 0) TEST_ERROR
if((aid = H5Acreate2(loc_id, "obj_ref_attr", H5T_STD_REF_OBJ, sid_ref, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR
if(H5Awrite(aid, H5T_STD_REF_OBJ, ref) < 0) TEST_ERROR
@@ -750,8 +750,8 @@ compare_attribute(hid_t aid, hid_t aid2, hid_t pid, const void *wbuf, hid_t obj_
/* Check raw data read in against data written out */
if(wbuf) {
- if(!compare_data(aid, 0, pid, tid, (size_t)nelmts, wbuf, rbuf, obj_owner)) TEST_ERROR
- if(!compare_data(aid2, 0, pid, tid2, (size_t)nelmts, wbuf, rbuf2, obj_owner)) TEST_ERROR
+ if(!compare_data(aid, (hid_t)0, pid, tid, (size_t)nelmts, wbuf, rbuf, obj_owner)) TEST_ERROR
+ if(!compare_data(aid2, (hid_t)0, pid, tid2, (size_t)nelmts, wbuf, rbuf2, obj_owner)) TEST_ERROR
} /* end if */
/* Don't have written data, just compare data between the two attributes */
else
@@ -1303,8 +1303,8 @@ compare_datasets(hid_t did, hid_t did2, hid_t pid, const void *wbuf)
/* Check raw data read in against data written out */
if(wbuf) {
- if(!compare_data(did, 0, pid, tid, (size_t)nelmts, wbuf, rbuf, did)) TEST_ERROR
- if(!compare_data(did2, 0, pid, tid2, (size_t)nelmts, wbuf, rbuf2, did2)) TEST_ERROR
+ if(!compare_data(did, (hid_t)0, pid, tid, (size_t)nelmts, wbuf, rbuf, did)) TEST_ERROR
+ if(!compare_data(did2, (hid_t)0, pid, tid2, (size_t)nelmts, wbuf, rbuf2, did2)) TEST_ERROR
} /* end if */
/* Don't have written data, just compare data between the two datasets */
else
@@ -8053,8 +8053,8 @@ test_copy_null_ref(hid_t fcpl_src, hid_t fcpl_dst, hid_t src_fapl, hid_t dst_fap
sid, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR
/* Create references */
- if(H5Rcreate(&obj_buf[0], did1, ".", H5R_OBJECT, -1) < 0) TEST_ERROR
- if(H5Rcreate(&obj_buf[1], did2, ".", H5R_OBJECT, -1) < 0) TEST_ERROR
+ if(H5Rcreate(&obj_buf[0], did1, ".", H5R_OBJECT, (hid_t)-1) < 0) TEST_ERROR
+ if(H5Rcreate(&obj_buf[1], did2, ".", H5R_OBJECT, (hid_t)-1) < 0) TEST_ERROR
if(H5Rcreate(®_buf[0], did1, ".", H5R_DATASET_REGION, sid) < 0)
TEST_ERROR
if(H5Rcreate(®_buf[1], did2, ".", H5R_DATASET_REGION, sid) < 0)
diff --git a/test/tarray.c b/test/tarray.c
index 2d6581b..c2af58d 100644
--- a/test/tarray.c
+++ b/test/tarray.c
@@ -1041,7 +1041,7 @@ test_array_vlen_atomic(void)
/* Initialize array data to write */
for(i=0; i<SPACE1_DIM1; i++)
for(j=0; j<ARRAY1_DIM1; j++) {
- wdata[i][j].p=malloc((i+j+1)*sizeof(unsigned int));
+ wdata[i][j].p=HDmalloc((i+j+1)*sizeof(unsigned int));
wdata[i][j].len=i+j+1;
for(k=0; k<(i+j+1); k++)
((unsigned int *)wdata[i][j].p)[k]=i*100+j*10+k;
@@ -1252,7 +1252,7 @@ test_array_vlen_array(void)
/* Initialize array data to write */
for(i=0; i<SPACE1_DIM1; i++)
for(j=0; j<ARRAY1_DIM1; j++) {
- wdata[i][j].p=malloc((i+j+1)*(sizeof(unsigned int)*ARRAY1_DIM1));
+ wdata[i][j].p=HDmalloc((i+j+1)*(sizeof(unsigned int)*ARRAY1_DIM1));
wdata[i][j].len=i+j+1;
for(k=0; k<(i+j+1); k++)
for(l=0; l<ARRAY1_DIM1; l++)
@@ -1633,7 +1633,7 @@ test_array_bkg(void)
/* Release memory resources */
/* ------------------------ */
for (i = 0; i < dtsinfo.nsubfields; i++)
- free(dtsinfo.name[i]);
+ HDfree(dtsinfo.name[i]);
/* Release IDs */
diff --git a/test/tattr.c b/test/tattr.c
index e9430fe..57b3263 100644
--- a/test/tattr.c
+++ b/test/tattr.c
@@ -3261,12 +3261,12 @@ test_attr_dense_dup_ids(hid_t fcpl, hid_t fapl)
VERIFY(is_dense, TRUE, "H5O_is_attr_dense_test");
/* Open first attribute for the dataset */
- attr = H5Aopen_by_idx(dataset, ".", H5_INDEX_NAME, H5_ITER_INC, 4,
+ attr = H5Aopen_by_idx(dataset, ".", H5_INDEX_NAME, H5_ITER_INC, (hsize_t)4,
H5P_DEFAULT, H5P_DEFAULT);
CHECK(attr, FAIL, "H5Aopen");
/* Open attribute for the second time */
- attr2 = H5Aopen_by_idx(dataset, ".", H5_INDEX_NAME, H5_ITER_INC, 4,
+ attr2 = H5Aopen_by_idx(dataset, ".", H5_INDEX_NAME, H5_ITER_INC, (hsize_t)4,
H5P_DEFAULT, H5P_DEFAULT);
CHECK(attr, FAIL, "H5Aopen");
@@ -3317,13 +3317,13 @@ test_attr_dense_dup_ids(hid_t fcpl, hid_t fapl)
VERIFY(is_dense, TRUE, "H5O_is_attr_dense_test");
/* Open attribute of the dataset for the first time */
- attr = H5Aopen_by_idx(dataset, ".", H5_INDEX_NAME, H5_ITER_INC, 2,
+ attr = H5Aopen_by_idx(dataset, ".", H5_INDEX_NAME, H5_ITER_INC, (hsize_t)2,
H5P_DEFAULT, H5P_DEFAULT);
CHECK(attr, FAIL, "H5Aopen");
/* Delete a few attributes until the storage switches to compact */
for(u = max_compact; u >= min_dense - 1; u--) {
- ret = H5Adelete_by_idx(dataset, ".", H5_INDEX_NAME, H5_ITER_INC, u,
+ ret = H5Adelete_by_idx(dataset, ".", H5_INDEX_NAME, H5_ITER_INC, (hsize_t)u,
H5P_DEFAULT);
CHECK(ret, FAIL, "H5Adelete_by_idx");
}
@@ -3333,7 +3333,7 @@ test_attr_dense_dup_ids(hid_t fcpl, hid_t fapl)
VERIFY(is_dense, FALSE, "H5O_is_attr_dense_test");
/* Open attribute for the second time */
- attr2 = H5Aopen_by_idx(dataset, ".", H5_INDEX_NAME, H5_ITER_INC, 2,
+ attr2 = H5Aopen_by_idx(dataset, ".", H5_INDEX_NAME, H5_ITER_INC, (hsize_t)2,
H5P_DEFAULT, H5P_DEFAULT);
CHECK(attr, FAIL, "H5Aopen");
@@ -3384,7 +3384,7 @@ test_attr_dense_dup_ids(hid_t fcpl, hid_t fapl)
VERIFY(is_dense, FALSE, "H5O_is_attr_dense_test");
/* Open attribute of the dataset for the first time */
- attr = H5Aopen_by_idx(dataset, ".", H5_INDEX_NAME, H5_ITER_INC, 3,
+ attr = H5Aopen_by_idx(dataset, ".", H5_INDEX_NAME, H5_ITER_INC, (hsize_t)3,
H5P_DEFAULT, H5P_DEFAULT);
CHECK(attr, FAIL, "H5Aopen");
@@ -3409,7 +3409,7 @@ test_attr_dense_dup_ids(hid_t fcpl, hid_t fapl)
VERIFY(is_dense, TRUE, "H5O_is_attr_dense_test");
/* Open attribute for the second time */
- attr2 = H5Aopen_by_idx(dataset, ".", H5_INDEX_NAME, H5_ITER_INC, 3,
+ attr2 = H5Aopen_by_idx(dataset, ".", H5_INDEX_NAME, H5_ITER_INC, (hsize_t)3,
H5P_DEFAULT, H5P_DEFAULT);
CHECK(attr, FAIL, "H5Aopen");
@@ -4086,7 +4086,7 @@ test_attr_deprec(hid_t fcpl, hid_t fapl)
/* Get number of attributes with bad ID */
- ret = H5Aget_num_attrs(-1);
+ ret = H5Aget_num_attrs((hid_t)-1);
VERIFY(ret, FAIL, "H5Aget_num_attrs");
/* Get number of attributes */
@@ -6859,7 +6859,7 @@ test_attr_iterate2(hbool_t new_format, hid_t fcpl, hid_t fapl)
/* Allocate the "visited link" array */
iter_info.max_visit = max_compact * 2;
- visited = HDmalloc(sizeof(hbool_t) * iter_info.max_visit);
+ visited = (hbool_t*)HDmalloc(sizeof(hbool_t) * iter_info.max_visit);
CHECK(visited, NULL, "HDmalloc");
iter_info.visited = visited;
diff --git a/test/tconfig.c b/test/tconfig.c
index 7978727..f3ac242 100644
--- a/test/tconfig.c
+++ b/test/tconfig.c
@@ -65,8 +65,8 @@ void test_exit_definitions(void);
* 16 Dec 2009
* On Boeing's OpenVMS, the value of EXIT_FAILURE is 268435458.
* (The test is in test_exit_definitions.) Their document says
- * it's supposed to be 2. I commented it out for further
- * consideration.
+ * it's supposed to be 2. I commented it out for OpenVMS for
+ * further consideration.
*-------------------------------------------------------------------------
*/
void
diff --git a/test/tcoords.c b/test/tcoords.c
index abe63dd..306c6b2 100644
--- a/test/tcoords.c
+++ b/test/tcoords.c
@@ -143,7 +143,7 @@ static void test_singleEnd_selElements(hid_t file, hbool_t is_chunked)
/* ****** Case 1: ******
* Testing the full selection in the fastest-growing end */
did = H5Dopen2(file, dset_name, H5P_DEFAULT);
- CHECK(did, FAIL, "H5Dopen");
+ CHECK(did, FAIL, "H5Dopen2");
/* Select the elements in the dataset */
elmts_numb = 12;
@@ -176,7 +176,7 @@ static void test_singleEnd_selElements(hid_t file, hbool_t is_chunked)
/* ****** Case 2: ******
* Testing the full selection in the slowest-growing end */
did = H5Dopen2(file, dset_name, H5P_DEFAULT);
- CHECK(did, FAIL, "H5Dopen");
+ CHECK(did, FAIL, "H5Dopen2");
/* Select the elements in the dataset */
elmts_numb = 6;
@@ -209,7 +209,7 @@ static void test_singleEnd_selElements(hid_t file, hbool_t is_chunked)
/* ****** Case 3: ******
* Testing the full selection in the middle dimensions */
did = H5Dopen2(file, dset_name, H5P_DEFAULT);
- CHECK(did, FAIL, "H5Dopen");
+ CHECK(did, FAIL, "H5Dopen2");
/* Select the elements in the dataset */
elmts_numb = 18;
@@ -298,7 +298,7 @@ static void test_singleEnd_selHyperslab(hid_t file, hbool_t is_chunked)
/* ****** Case 1: ******
* Testing the full selection in the fastest-growing end */
did = H5Dopen2(file, dset_name, H5P_DEFAULT);
- CHECK(did, FAIL, "H5Dopen");
+ CHECK(did, FAIL, "H5Dopen2");
/* Select the elements in the dataset */
ret = H5Sselect_hyperslab(sid, H5S_SELECT_SET, mem1_start, mem1_stride, mem1_count, mem1_block);
@@ -329,7 +329,7 @@ static void test_singleEnd_selHyperslab(hid_t file, hbool_t is_chunked)
/* ****** Case 2: ******
* Testing the full selection in the slowest-growing end */
did = H5Dopen2(file, dset_name, H5P_DEFAULT);
- CHECK(did, FAIL, "H5Dopen");
+ CHECK(did, FAIL, "H5Dopen2");
/* Select the elements in the dataset */
ret = H5Sselect_hyperslab(sid, H5S_SELECT_SET, mem2_start, mem2_stride, mem2_count, mem2_block);
@@ -360,7 +360,7 @@ static void test_singleEnd_selHyperslab(hid_t file, hbool_t is_chunked)
/* ****** Case 3: ******
* Testing the full selection in the middle dimensions */
did = H5Dopen2(file, dset_name, H5P_DEFAULT);
- CHECK(did, FAIL, "H5Dopen");
+ CHECK(did, FAIL, "H5Dopen2");
/* Select the elements in the dataset */
ret = H5Sselect_hyperslab(sid, H5S_SELECT_SET, mem3_start, mem3_stride, mem3_count, mem3_block);
@@ -493,7 +493,7 @@ static void test_multiple_ends(hid_t file, hbool_t is_chunked)
/* ****** Case 1: ******
* Testing the full selections in the fastest-growing end and in the middle dimensions*/
did = H5Dopen2(file, dset_name, H5P_DEFAULT);
- CHECK(did, FAIL, "H5Dopen");
+ CHECK(did, FAIL, "H5Dopen2");
/* Select the elements in the dataset */
ret = H5Sselect_hyperslab(sid, H5S_SELECT_SET, mem1_start, mem1_stride, mem1_count, mem1_block);
@@ -525,7 +525,7 @@ static void test_multiple_ends(hid_t file, hbool_t is_chunked)
/* ****** Case 2: ******
* Testing the full selections in the slowest-growing end and in the middle dimensions*/
did = H5Dopen2(file, dset_name, H5P_DEFAULT);
- CHECK(did, FAIL, "H5Dopen");
+ CHECK(did, FAIL, "H5Dopen2");
/* Select the elements in the dataset */
ret = H5Sselect_hyperslab(sid, H5S_SELECT_SET, mem2_start, mem2_stride, mem2_count, mem2_block);
@@ -557,7 +557,7 @@ static void test_multiple_ends(hid_t file, hbool_t is_chunked)
/* ****** Case 3: ******
* Testing two unadjacent full selections in the middle dimensions */
did = H5Dopen2(file, dset_name, H5P_DEFAULT);
- CHECK(did, FAIL, "H5Dopen");
+ CHECK(did, FAIL, "H5Dopen2");
/* Select the elements in the dataset */
ret = H5Sselect_hyperslab(sid, H5S_SELECT_SET, mem3_start, mem3_stride, mem3_count, mem3_block);
@@ -589,7 +589,7 @@ static void test_multiple_ends(hid_t file, hbool_t is_chunked)
/* ****** Case 4: ******
* Testing the full selections in the fastest-growing end and the slowest-growing end */
did = H5Dopen2(file, dset_name, H5P_DEFAULT);
- CHECK(did, FAIL, "H5Dopen");
+ CHECK(did, FAIL, "H5Dopen2");
/* Select the elements in the dataset */
ret = H5Sselect_hyperslab(sid, H5S_SELECT_SET, mem4_start, mem4_stride, mem4_count, mem4_block);
@@ -623,7 +623,7 @@ static void test_multiple_ends(hid_t file, hbool_t is_chunked)
* Testing the full selections in the fastest-growing end and the slowest-growing end,
* and also in the middle dimensions */
did = H5Dopen2(file, dset_name, H5P_DEFAULT);
- CHECK(did, FAIL, "H5Dopen");
+ CHECK(did, FAIL, "H5Dopen2");
/* Select the elements in the dataset */
ret = H5Sselect_hyperslab(sid, H5S_SELECT_SET, mem5_start, mem5_stride, mem5_count, mem5_block);
diff --git a/test/testfiles/err_compat_1 b/test/testfiles/err_compat_1
index 3a85b86..d471e13 100644
--- a/test/testfiles/err_compat_1
+++ b/test/testfiles/err_compat_1
@@ -54,9 +54,6 @@ HDF5-DIAG: Error detected in HDF5 (version (number)) thread (IDs):
#001: (file name) line (number) in test_error2(): H5Dwrite shouldn't succeed
major: Error API
minor: Write failed
- #002: (file name) line (number) in H5Dwrite(): can't prepare for writing data
- major: Dataset
- minor: Write failed
- #003: (file name) line (number) in H5D__pre_write(): not a dataset
+ #002: (file name) line (number) in H5Dwrite(): not a dataset
major: Invalid arguments to routine
minor: Inappropriate type
diff --git a/test/testframe.c b/test/testframe.c
index 8805a82..6a878da 100644
--- a/test/testframe.c
+++ b/test/testframe.c
@@ -69,6 +69,8 @@ static int (*TestPrivateParser)(int ac, char *av[]) = NULL;
* TheDescr--Long description of the test.
* Parameters--pointer to extra parameters. Use NULL if none used.
* Since only the pointer is copied, the contents should not change.
+ * Return: Void
+ * exit EXIT_FAILURE if error is encountered.
*/
void
AddTest(const char *TheName, void (*TheCall) (void), void (*Cleanup) (void), const char *TheDescr, const void *Parameters)
@@ -77,17 +79,17 @@ AddTest(const char *TheName, void (*TheCall) (void), void (*Cleanup) (void), con
if (Index >= MAXNUMOFTESTS) {
printf("Too many tests added, increase MAXNUMOFTESTS(%d).\n",
MAXNUMOFTESTS);
- exit(-1);
+ exit(EXIT_FAILURE);
} /* end if */
if (HDstrlen(TheDescr) >= MAXTESTDESC) {
printf("Test description too long, increase MAXTESTDESC(%d).\n",
MAXTESTDESC);
- exit(-1);
+ exit(EXIT_FAILURE);
} /* end if */
if (HDstrlen(TheName) >= MAXTESTNAME) {
printf("Test name too long, increase MAXTESTNAME(%d).\n",
MAXTESTNAME);
- exit(-1);
+ exit(EXIT_FAILURE);
} /* end if */
/* Set up test function */
@@ -207,6 +209,9 @@ void TestInfo(const char *ProgName)
* Parse command line information.
* argc, argv: the usual command line argument count and strings
*
+ * Return: Void
+ * exit EXIT_FAILURE if error is encountered.
+ *
* Modification:
* 2004/08/18 Albert Cheng. Add extra_parse feature.
*/
@@ -222,7 +227,7 @@ void TestParseCmdLine(int argc, char *argv[])
ParseTestVerbosity(*argv);
}else{
TestUsage();
- exit(1);
+ exit(EXIT_FAILURE);
}
}
else if (((HDstrcmp(*argv, "-exclude") == 0) ||
@@ -232,7 +237,7 @@ void TestParseCmdLine(int argc, char *argv[])
SetTest(*argv, SKIPTEST);
}else{
TestUsage();
- exit(1);
+ exit(EXIT_FAILURE);
}
}
else if (((HDstrcmp(*argv, "-begin") == 0) ||
@@ -242,7 +247,7 @@ void TestParseCmdLine(int argc, char *argv[])
SetTest(*argv, BEGINTEST);
}else{
TestUsage();
- exit(1);
+ exit(EXIT_FAILURE);
}
}
else if (((HDstrcmp(*argv, "-only") == 0) ||
@@ -256,14 +261,14 @@ void TestParseCmdLine(int argc, char *argv[])
SetTest(*argv, ONLYTEST);
}else{
TestUsage();
- exit(1);
+ exit(EXIT_FAILURE);
}
}
else if ((HDstrcmp(*argv, "-summary") == 0) || (HDstrcmp(*argv, "-s") == 0))
Summary = 1;
else if ((HDstrcmp(*argv, "-help") == 0) || (HDstrcmp(*argv, "-h") == 0)) {
TestUsage();
- exit(0);
+ exit(EXIT_SUCCESS);
}
else if ((HDstrcmp(*argv, "-cleanoff") == 0) || (HDstrcmp(*argv, "-c") == 0))
SetTestNoCleanup();
@@ -278,7 +283,7 @@ void TestParseCmdLine(int argc, char *argv[])
if (NULL != TestPrivateParser){
ret_code=TestPrivateParser(argc+1, argv-1);
if (ret_code != 0)
- exit(-1);
+ exit(EXIT_FAILURE);
}
}
diff --git a/test/testhdf5.c b/test/testhdf5.c
index eade815..e7a5cf1 100644
--- a/test/testhdf5.c
+++ b/test/testhdf5.c
@@ -66,8 +66,9 @@ main(int argc, char *argv[])
AddTest("array", test_array, cleanup_array, "Array Datatypes", NULL);
AddTest("genprop", test_genprop, cleanup_genprop, "Generic Properties", NULL);
AddTest("unicode", test_unicode, cleanup_unicode, "UTF-8 Encoding", NULL);
- AddTest("id", test_ids, NULL, "User-Created Identifiers", NULL);
AddTest("misc", test_misc, cleanup_misc, "Miscellaneous", NULL);
+ /* id test needs to be the last test. */
+ AddTest("id", test_ids, NULL, "User-Created Identifiers", NULL);
/* Display testing information */
TestInfo(argv[0]);
@@ -89,7 +90,8 @@ main(int argc, char *argv[])
/* Exit failure if errors encountered; else exit success. */
/* No need to print anything since PerformTests() already does. */
if (GetTestNumErrs() > 0)
- exit(EXIT_FAILURE);
+ /* Since exiting failed, don't do at_exit stuff by calling _exit */
+ _exit(EXIT_FAILURE);
else
exit(EXIT_SUCCESS);
} /* end main() */
diff --git a/test/tfile.c b/test/tfile.c
index bf4a8c2..82e0182 100644
--- a/test/tfile.c
+++ b/test/tfile.c
@@ -1032,7 +1032,7 @@ test_get_obj_ids(void)
H5Fclose(fid);
/* Get the number of all opened objects */
- oid_count = H5Fget_obj_count(H5F_OBJ_ALL, H5F_OBJ_ALL);
+ oid_count = H5Fget_obj_count((hid_t)H5F_OBJ_ALL, H5F_OBJ_ALL);
CHECK(oid_count, FAIL, "H5Fget_obj_count");
VERIFY(oid_count, NDSETS, "H5Fget_obj_count");
@@ -1040,7 +1040,7 @@ test_get_obj_ids(void)
CHECK(oid_list, NULL, "HDcalloc");
/* Get the list of all opened objects */
- ret_count = H5Fget_obj_ids(H5F_OBJ_ALL, H5F_OBJ_ALL, (size_t)oid_count, oid_list);
+ ret_count = H5Fget_obj_ids((hid_t)H5F_OBJ_ALL, H5F_OBJ_ALL, (size_t)oid_count, oid_list);
CHECK(ret_count, FAIL, "H5Fget_obj_ids");
VERIFY(ret_count, NDSETS, "H5Fget_obj_count");
@@ -1092,7 +1092,7 @@ test_get_file_id(void)
CHECK(ret, FAIL, "H5Fclose");
/* Test H5Iget_file_id() */
- check_file_id(-1, group_id);
+ check_file_id((hid_t)-1, group_id);
ret = H5Gclose(group_id);
CHECK(ret, FAIL, "H5Gclose");
@@ -1231,32 +1231,32 @@ test_obj_count_and_id(hid_t fid1, hid_t fid2, hid_t did, hid_t gid1,
CHECK(fid4, FAIL, "H5Fcreate");
/* test object count of all files IDs open */
- oid_count = H5Fget_obj_count(H5F_OBJ_ALL, H5F_OBJ_FILE);
+ oid_count = H5Fget_obj_count((hid_t)H5F_OBJ_ALL, H5F_OBJ_FILE);
CHECK(oid_count, FAIL, "H5Fget_obj_count");
VERIFY(oid_count, OBJ_ID_COUNT_4, "H5Fget_obj_count");
/* test object count of all datasets open */
- oid_count = H5Fget_obj_count(H5F_OBJ_ALL, H5F_OBJ_DATASET);
+ oid_count = H5Fget_obj_count((hid_t)H5F_OBJ_ALL, H5F_OBJ_DATASET);
CHECK(oid_count, FAIL, "H5Fget_obj_count");
VERIFY(oid_count, OBJ_ID_COUNT_1, "H5Fget_obj_count");
/* test object count of all groups open */
- oid_count = H5Fget_obj_count(H5F_OBJ_ALL, H5F_OBJ_GROUP);
+ oid_count = H5Fget_obj_count((hid_t)H5F_OBJ_ALL, H5F_OBJ_GROUP);
CHECK(oid_count, FAIL, "H5Fget_obj_count");
VERIFY(oid_count, OBJ_ID_COUNT_3, "H5Fget_obj_count");
/* test object count of all named datatypes open */
- oid_count = H5Fget_obj_count(H5F_OBJ_ALL, H5F_OBJ_DATATYPE);
+ oid_count = H5Fget_obj_count((hid_t)H5F_OBJ_ALL, H5F_OBJ_DATATYPE);
CHECK(oid_count, FAIL, "H5Fget_obj_count");
VERIFY(oid_count, OBJ_ID_COUNT_0, "H5Fget_obj_count");
/* test object count of all attributes open */
- oid_count = H5Fget_obj_count(H5F_OBJ_ALL, H5F_OBJ_ATTR);
+ oid_count = H5Fget_obj_count((hid_t)H5F_OBJ_ALL, H5F_OBJ_ATTR);
CHECK(oid_count, FAIL, "H5Fget_obj_count");
VERIFY(oid_count, OBJ_ID_COUNT_0, "H5Fget_obj_count");
/* test object count of all objects currently open */
- oid_count = H5Fget_obj_count(H5F_OBJ_ALL, H5F_OBJ_ALL);
+ oid_count = H5Fget_obj_count((hid_t)H5F_OBJ_ALL, H5F_OBJ_ALL);
CHECK(oid_count, FAIL, "H5Fget_obj_count");
VERIFY(oid_count, OBJ_ID_COUNT_8, "H5Fget_obj_count");
@@ -1267,7 +1267,7 @@ test_obj_count_and_id(hid_t fid1, hid_t fid2, hid_t did, hid_t gid1,
if(oid_list != NULL) {
int i;
- ret_count = H5Fget_obj_ids(H5F_OBJ_ALL, H5F_OBJ_ALL, (size_t)oid_count, oid_list);
+ ret_count = H5Fget_obj_ids((hid_t)H5F_OBJ_ALL, H5F_OBJ_ALL, (size_t)oid_count, oid_list);
CHECK(ret_count, FAIL, "H5Fget_obj_ids");
for(i = 0; i < oid_count; i++) {
@@ -2815,7 +2815,7 @@ test_libver_bounds_real(H5F_libver_t libver_create, unsigned oh_vers_create,
/****************************************************************
**
** test_libver_bounds():
-** Verify that a file created and modified with various
+** Verify that a file created and modified with various
** libver bounds is handled correctly. (Further testing
** welcome)
**
diff --git a/test/tgenprop.c b/test/tgenprop.c
index 4e93dd5..004e346 100644
--- a/test/tgenprop.c
+++ b/test/tgenprop.c
@@ -1818,7 +1818,7 @@ test_genprop_path(void)
VERIFY(ret, 1, "H5Pequal");
/* Release the path string */
- free(path);
+ HDfree(path);
/* Close class */
ret = H5Pclose_class(cid3);
diff --git a/test/tid.c b/test/tid.c
index 87f3d37..5889b95 100644
--- a/test/tid.c
+++ b/test/tid.c
@@ -56,7 +56,7 @@ static int basic_id_test(void)
/* Try to access IDs with ficticious types */
H5E_BEGIN_TRY
- testPtr = H5Iobject_verify(100, (H5I_type_t) 0);
+ testPtr = H5Iobject_verify((hid_t)100, (H5I_type_t) 0);
H5E_END_TRY
VERIFY(testPtr, NULL, "H5Iobject_verify");
@@ -64,7 +64,7 @@ static int basic_id_test(void)
goto out;
H5E_BEGIN_TRY
- testPtr = H5Iobject_verify(700, (H5I_type_t) 700);
+ testPtr = H5Iobject_verify((hid_t)700, (H5I_type_t) 700);
H5E_END_TRY
VERIFY(testPtr, NULL, "H5Iobject_verify");
@@ -81,13 +81,13 @@ static int basic_id_test(void)
/* Register an ID and retrieve the object it points to.
* Once the ID has been registered, testObj will be freed when
* its ID type is destroyed. */
- testObj = malloc(7 * sizeof(int));
+ testObj = HDmalloc(7 * sizeof(int));
arrayID = H5Iregister(myType, testObj);
CHECK(arrayID, H5I_INVALID_HID, "H5Iregister");
if(arrayID == H5I_INVALID_HID)
{
- free(testObj);
+ HDfree(testObj);
goto out;
}
@@ -175,13 +175,13 @@ static int basic_id_test(void)
* freed when the previous type was destroyed. Allocate new
* memory for it.
*/
- testObj = malloc(7 * sizeof(int));
+ testObj = HDmalloc(7 * sizeof(int));
arrayID = H5Iregister(myType, testObj);
CHECK(arrayID, H5I_INVALID_HID, "H5Iregister");
if(arrayID == H5I_INVALID_HID)
{
- free(testObj);
+ HDfree(testObj);
goto out;
}
@@ -250,7 +250,7 @@ static int id_predefined_test(void )
void * testPtr;
herr_t testErr;
- testObj = malloc(sizeof(int));
+ testObj = HDmalloc(sizeof(int));
/* Try to perform illegal functions on various predefined types */
H5E_BEGIN_TRY
@@ -319,14 +319,14 @@ static int id_predefined_test(void )
/* testObj was never registered as an atom, so it will not be
* automatically freed. */
- free(testObj);
+ HDfree(testObj);
return 0;
out:
if(typeID != H5I_INVALID_HID)
H5Tclose(typeID);
if(testObj != NULL)
- free(testObj);
+ HDfree(testObj);
return -1;
}
@@ -393,7 +393,7 @@ static int test_is_valid(void)
goto out;
/* Check that an id of -1 is invalid */
- tri_ret = H5Iis_valid(-1);
+ tri_ret = H5Iis_valid((hid_t)-1);
VERIFY(tri_ret, FALSE, "H4Iis_valid");
if (tri_ret != FALSE)
goto out;
@@ -427,13 +427,13 @@ static int test_get_type(void)
goto out;
/* Check that the ID is correct */
- type_ret = H5Iget_type(H5T_STRING);
+ type_ret = H5Iget_type((hid_t)H5T_STRING);
VERIFY(type_ret, H5I_BADID, "H5Iget_type");
if (type_ret != H5I_BADID)
goto out;
/* Check that the ID is correct */
- type_ret = H5Iget_type(-1);
+ type_ret = H5Iget_type((hid_t)-1);
VERIFY(type_ret, H5I_BADID, "H5Iget_type");
if (type_ret != H5I_BADID)
goto out;
@@ -533,6 +533,140 @@ out:
return -1;
}
+/* 'Fake' free routine for ID wrapping test */
+static herr_t fake_free(void *obj)
+{
+ /* Shut compilers up */
+ obj = obj;
+
+ return(0);
+}
+
+ /* Test boundary cases with lots of IDs */
+
+/* Type IDs range from 0 to ID_MASK before wrapping around. The code will assign */
+/* IDs in sequential order until ID_MASK IDs have been given out. */
+/* This test will allocate IDs up to ID_MASK, ensure that IDs wrap around */
+/* to low values successfully, then ensure that deleting types frees up their IDs. */
+/* NOTE: this test depends on the implementation of IDs, so may break */
+/* if the implementation changes. */
+static int test_id_wrap(void)
+{
+ H5I_type_t testType; /* ID class for testing */
+ hid_t *id_array=NULL; /* Array of IDs allocated */
+ hid_t test_id; /* Test ID */
+ void *obj; /* Object pointer returned for ID */
+ unsigned u; /* Local index variable */
+ hsize_t nids; /* Number of IDs registered for type */
+ herr_t status; /* Status from routine */
+
+ /* Allocate array for storing IDs */
+ id_array = (hid_t *)HDmalloc((ID_MASK + 1) * sizeof(hid_t));
+ CHECK(id_array, NULL, "HDmalloc");
+
+ /* Register type for testing */
+ testType = H5Iregister_type((size_t)8, 0, (H5I_free_t)fake_free);
+ CHECK(testType, H5I_BADID, "H5Iregister_type");
+ if(testType == H5I_BADID)
+ goto out;
+
+ /* Get IDs, up to the maximum possible */
+ for(u = 0; u <= ID_MASK; u++) {
+ id_array[u] = H5Iregister(testType, &id_array[u]);
+ CHECK(id_array[u], FAIL, "H5Iregister");
+ if(id_array[u] < 0)
+ goto out;
+ if(u > 0) {
+ /* IDs should be returned in increasing order */
+ /* (Since application-registered IDs don't reuse ID values) */
+ if(id_array[u] < id_array[u - 1])
+ goto out;
+
+ /* Release the previous ID in the array */
+ obj = H5Iremove_verify(id_array[u - 1], testType);
+ CHECK(obj, NULL, "H5Iremove_verify");
+ if(NULL == obj)
+ goto out;
+ VERIFY(obj, &id_array[u - 1], "H5Iremove_verify");
+ if(&id_array[u - 1] != obj)
+ goto out;
+ } /* end if */
+
+ /* Verify number of registered IDs */
+ /* (Should stay at 1) */
+ status = H5Inmembers(testType, &nids);
+ CHECK(status, FAIL, "H5Inmembers");
+ if(status < 0)
+ goto out;
+ VERIFY(nids, 1, "H5Inmembers");
+ if(nids != 1)
+ goto out;
+ } /* end for */
+
+ /* Register another object, will wraparound */
+ test_id = H5Iregister(testType, &id_array[0]);
+ CHECK(test_id, FAIL, "H5Iregister");
+ if(test_id < 0)
+ goto out;
+ VERIFY(test_id, id_array[0], "H5Iregister");
+ if(id_array[0] != test_id)
+ goto out;
+
+ /* Verify number of registered IDs */
+ /* (Should be 2 now) */
+ status = H5Inmembers(testType, &nids);
+ CHECK(status, FAIL, "H5Inmembers");
+ if(status < 0)
+ goto out;
+ VERIFY(nids, 2, "H5Inmembers");
+ if(nids != 2)
+ goto out;
+
+ /* Release the first ID in the array */
+ obj = H5Iremove_verify(id_array[0], testType);
+ CHECK(obj, NULL, "H5Iremove_verify");
+ if(NULL == obj)
+ goto out;
+ VERIFY(obj, &id_array[0], "H5Iremove_verify");
+ if(&id_array[0] != obj)
+ goto out;
+
+ /* Release the last ID in the array */
+ obj = H5Iremove_verify(id_array[ID_MASK], testType);
+ CHECK(obj, NULL, "H5Iremove_verify");
+ if(NULL == obj)
+ goto out;
+ VERIFY(obj, &id_array[ID_MASK], "H5Iremove_verify");
+ if(&id_array[ID_MASK] != obj)
+ goto out;
+
+ /* Verify number of registered IDs */
+ /* (Should be 0 now) */
+ status = H5Inmembers(testType, &nids);
+ CHECK(status, FAIL, "H5Inmembers");
+ if(status < 0)
+ goto out;
+ VERIFY(nids, 0, "H5Inmembers");
+ if(nids != 0)
+ goto out;
+
+ status = H5Idestroy_type(testType);
+ CHECK(status, FAIL, "H5Idestroy_type");
+ if(status < 0)
+ goto out;
+
+ HDfree(id_array);
+
+ return(0);
+
+out:
+ /* cleanup */
+ if (id_array)
+ HDfree(id_array);
+
+ return(-1);
+}
+
void test_ids(void)
{
if (basic_id_test() < 0) TestErrPrintf("Basic ID test failed\n");
@@ -540,5 +674,5 @@ void test_ids(void)
if (test_is_valid() < 0) TestErrPrintf("H5Iis_valid test failed\n");
if (test_get_type() < 0) TestErrPrintf("H5Iget_type test failed\n");
if (test_id_type_list() < 0) TestErrPrintf("ID type list test failed\n");
-
+ if (test_id_wrap() < 0) TestErrPrintf("ID wraparound test failed\n");
}
diff --git a/test/tmisc.c b/test/tmisc.c
index d599199..fcb5eac 100644
--- a/test/tmisc.c
+++ b/test/tmisc.c
@@ -1686,7 +1686,7 @@ test_misc8(void)
/* Free the read & write buffers */
HDfree(wdata);
#ifdef VERIFY_DATA
- free(rdata);
+ HDfree(rdata);
#endif /* VERIFY_DATA */
} /* end test_misc8() */
@@ -1910,7 +1910,7 @@ test_misc11(void)
file = H5Fopen(MISC11_FILE, H5F_ACC_RDONLY, H5P_DEFAULT);
CHECK(file, FAIL, "H5Fcreate");
- /* Get the file's dataset creation property list */
+ /* Get the file's creation property list */
fcpl = H5Fget_create_plist(file);
CHECK(fcpl, FAIL, "H5Fget_create_plist");
diff --git a/test/trefer.c b/test/trefer.c
index 376d2f5..bd105a3 100644
--- a/test/trefer.c
+++ b/test/trefer.c
@@ -89,9 +89,9 @@ test_reference_params(void)
MESSAGE(5, ("Testing Reference Parameters\n"));
/* Allocate write & read buffers */
- wbuf = (hobj_ref_t *)malloc(MAX(sizeof(unsigned), sizeof(hobj_ref_t)) * SPACE1_DIM1);
- rbuf = (hobj_ref_t *)malloc(MAX(sizeof(unsigned), sizeof(hobj_ref_t)) * SPACE1_DIM1);
- tbuf = (hobj_ref_t *)malloc(MAX(sizeof(unsigned), sizeof(hobj_ref_t)) * SPACE1_DIM1);
+ wbuf = (hobj_ref_t *)HDmalloc(MAX(sizeof(unsigned), sizeof(hobj_ref_t)) * SPACE1_DIM1);
+ rbuf = (hobj_ref_t *)HDmalloc(MAX(sizeof(unsigned), sizeof(hobj_ref_t)) * SPACE1_DIM1);
+ tbuf = (hobj_ref_t *)HDmalloc(MAX(sizeof(unsigned), sizeof(hobj_ref_t)) * SPACE1_DIM1);
/* Create file */
fid1 = H5Fcreate(FILE1, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
@@ -163,23 +163,23 @@ test_reference_params(void)
CHECK(ret, FAIL, "H5Dcreate2");
/* Test parameters to H5Rcreate */
- ret = H5Rcreate(NULL, fid1, "/Group1/Dataset1", H5R_OBJECT, -1);
+ ret = H5Rcreate(NULL, fid1, "/Group1/Dataset1", H5R_OBJECT, (hid_t)-1);
VERIFY(ret, FAIL, "H5Rcreate ref");
- ret = H5Rcreate(&wbuf[0], -1, "/Group1/Dataset1", H5R_OBJECT, -1);
+ ret = H5Rcreate(&wbuf[0], (hid_t)-1, "/Group1/Dataset1", H5R_OBJECT, (hid_t)-1);
VERIFY(ret, FAIL, "H5Rcreate loc_id");
- ret = H5Rcreate(&wbuf[0], fid1, NULL, H5R_OBJECT, -1);
+ ret = H5Rcreate(&wbuf[0], fid1, NULL, H5R_OBJECT, (hid_t)-1);
VERIFY(ret, FAIL, "H5Rcreate name");
- ret = H5Rcreate(&wbuf[0], fid1, "", H5R_OBJECT, -1);
+ ret = H5Rcreate(&wbuf[0], fid1, "", H5R_OBJECT, (hid_t)-1);
VERIFY(ret, FAIL, "H5Rcreate null name");
- ret = H5Rcreate(&wbuf[0], fid1, "/Group1/Dataset1", H5R_MAXTYPE, -1);
+ ret = H5Rcreate(&wbuf[0], fid1, "/Group1/Dataset1", H5R_MAXTYPE, (hid_t)-1);
VERIFY(ret, FAIL, "H5Rcreate type");
- ret = H5Rcreate(&wbuf[0], fid1, "/Group1/Dataset1", H5R_DATASET_REGION, -1);
+ ret = H5Rcreate(&wbuf[0], fid1, "/Group1/Dataset1", H5R_DATASET_REGION, (hid_t)-1);
VERIFY(ret, FAIL, "H5Rcreate region space");
- ret = H5Rcreate(&wbuf[0], fid1, "/Group1/Dataset1", H5R_MAXTYPE, 0);
+ ret = H5Rcreate(&wbuf[0], fid1, "/Group1/Dataset1", H5R_MAXTYPE, (hid_t)0);
VERIFY(ret, FAIL, "H5Rcreate space");
/* Test parameters to H5Rdereference */
- dset2 = H5Rdereference(-1, H5R_OBJECT, &rbuf[0]);
+ dset2 = H5Rdereference((hid_t)-1, H5R_OBJECT, &rbuf[0]);
VERIFY(dset2, FAIL, "H5Rdereference loc_id");
dset2 = H5Rdereference(dataset, H5R_OBJECT, NULL);
VERIFY(dset2, FAIL, "H5Rdereference ref");
@@ -187,7 +187,7 @@ test_reference_params(void)
VERIFY(dset2, FAIL, "H5Rdereference type");
/* Test parameters to H5Rget_obj_type2 */
- ret = H5Rget_obj_type2(-1, H5R_OBJECT, &rbuf[0], NULL);
+ ret = H5Rget_obj_type2((hid_t)-1, H5R_OBJECT, &rbuf[0], NULL);
VERIFY(ret, FAIL, "H5Rget_obj_type2 loc_id");
ret = H5Rget_obj_type2(fid1, H5R_OBJECT, NULL, NULL);
VERIFY(ret, FAIL, "H5Rget_obj_type2 ref");
@@ -195,15 +195,15 @@ test_reference_params(void)
VERIFY(ret, FAIL, "H5Rget_obj_type2 type");
/* Test parameters to H5Rget_name */
- name_size = H5Rget_name(-1, H5R_DATASET_REGION, &rbuf[0], NULL, 0);
+ name_size = H5Rget_name((hid_t)-1, H5R_DATASET_REGION, &rbuf[0], NULL, 0);
VERIFY(name_size, FAIL, "H5Rget_name loc_id");
name_size = H5Rget_name(fid1, H5R_DATASET_REGION, NULL, NULL, 0);
- VERIFY(ret, FAIL, "H5Rget_name ref");
+ VERIFY(name_size, FAIL, "H5Rget_name ref");
name_size = H5Rget_name(fid1, H5R_MAXTYPE, &rbuf[0], NULL, 0);
- VERIFY(ret, FAIL, "H5Rget_name type");
+ VERIFY(name_size, FAIL, "H5Rget_name type");
/* Test parameters to H5Rget_region */
- ret = H5Rget_region(-1, H5R_OBJECT, &rbuf[0]);
+ ret = H5Rget_region((hid_t)-1, H5R_OBJECT, &rbuf[0]);
VERIFY(ret, FAIL, "H5Rget_region loc_id");
ret = H5Rget_region(fid1, H5R_OBJECT, NULL);
VERIFY(ret, FAIL, "H5Rget_region ref");
@@ -223,9 +223,9 @@ test_reference_params(void)
CHECK(ret, FAIL, "H5Fclose");
/* Free memory buffers */
- free(wbuf);
- free(rbuf);
- free(tbuf);
+ HDfree(wbuf);
+ HDfree(rbuf);
+ HDfree(tbuf);
} /* test_reference_obj() */
/****************************************************************
@@ -237,31 +237,31 @@ test_reference_params(void)
static void
test_reference_obj(void)
{
- hid_t fid1; /* HDF5 File IDs */
- hid_t dataset, /* Dataset ID */
- dset2; /* Dereferenced dataset ID */
+ hid_t fid1; /* HDF5 File IDs */
+ hid_t dataset, /* Dataset ID */
+ dset2; /* Dereferenced dataset ID */
hid_t group; /* Group ID */
hid_t sid1; /* Dataspace ID */
hid_t tid1; /* Datatype ID */
hsize_t dims1[] = {SPACE1_DIM1};
- hobj_ref_t *wbuf, /* buffer to write to disk */
- *rbuf, /* buffer read from disk */
- *tbuf; /* temp. buffer read from disk */
+ hobj_ref_t *wbuf, /* buffer to write to disk */
+ *rbuf, /* buffer read from disk */
+ *tbuf; /* temp. buffer read from disk */
hobj_ref_t nvrbuf[3]={0,101,1000000000}; /* buffer with non-valid refs */
- unsigned *tu32; /* Temporary pointer to uint32 data */
- int i, j; /* counting variables */
+ unsigned *tu32; /* Temporary pointer to uint32 data */
+ int i, j; /* counting variables */
const char *write_comment="Foo!"; /* Comments for group */
char read_comment[10];
- H5O_type_t obj_type; /* Object type */
- herr_t ret; /* Generic return value */
+ H5O_type_t obj_type; /* Object type */
+ herr_t ret; /* Generic return value */
/* Output message about test being performed */
MESSAGE(5, ("Testing Object Reference Functions\n"));
/* Allocate write & read buffers */
- wbuf = (hobj_ref_t *)malloc(MAX(sizeof(unsigned), sizeof(hobj_ref_t)) * SPACE1_DIM1);
- rbuf = (hobj_ref_t *)malloc(MAX(sizeof(unsigned), sizeof(hobj_ref_t)) * SPACE1_DIM1);
- tbuf = (hobj_ref_t *)malloc(MAX(sizeof(unsigned), sizeof(hobj_ref_t)) * SPACE1_DIM1);
+ wbuf = (hobj_ref_t *)HDmalloc(MAX(sizeof(unsigned), sizeof(hobj_ref_t)) * SPACE1_DIM1);
+ rbuf = (hobj_ref_t *)HDmalloc(MAX(sizeof(unsigned), sizeof(hobj_ref_t)) * SPACE1_DIM1);
+ tbuf = (hobj_ref_t *)HDmalloc(MAX(sizeof(unsigned), sizeof(hobj_ref_t)) * SPACE1_DIM1);
/* Create file */
fid1 = H5Fcreate(FILE1, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
@@ -333,28 +333,28 @@ test_reference_obj(void)
CHECK(ret, FAIL, "H5Dcreate2");
/* Create reference to dataset */
- ret = H5Rcreate(&wbuf[0], fid1, "/Group1/Dataset1", H5R_OBJECT, -1);
+ ret = H5Rcreate(&wbuf[0], fid1, "/Group1/Dataset1", H5R_OBJECT, (hid_t)-1);
CHECK(ret, FAIL, "H5Rcreate");
ret = H5Rget_obj_type2(dataset, H5R_OBJECT, &wbuf[0], &obj_type);
CHECK(ret, FAIL, "H5Rget_obj_type2");
VERIFY(obj_type, H5O_TYPE_DATASET, "H5Rget_obj_type2");
/* Create reference to dataset */
- ret = H5Rcreate(&wbuf[1], fid1, "/Group1/Dataset2", H5R_OBJECT, -1);
+ ret = H5Rcreate(&wbuf[1], fid1, "/Group1/Dataset2", H5R_OBJECT, (hid_t)-1);
CHECK(ret, FAIL, "H5Rcreate");
ret = H5Rget_obj_type2(dataset, H5R_OBJECT, &wbuf[1], &obj_type);
CHECK(ret, FAIL, "H5Rget_obj_type2");
VERIFY(obj_type, H5O_TYPE_DATASET, "H5Rget_obj_type2");
/* Create reference to group */
- ret = H5Rcreate(&wbuf[2], fid1, "/Group1", H5R_OBJECT, -1);
+ ret = H5Rcreate(&wbuf[2], fid1, "/Group1", H5R_OBJECT, (hid_t)-1);
CHECK(ret, FAIL, "H5Rcreate");
ret = H5Rget_obj_type2(dataset, H5R_OBJECT, &wbuf[2], &obj_type);
CHECK(ret, FAIL, "H5Rget_obj_type2");
VERIFY(obj_type, H5O_TYPE_GROUP, "H5Rget_obj_type2");
/* Create reference to named datatype */
- ret = H5Rcreate(&wbuf[3], fid1, "/Group1/Datatype1", H5R_OBJECT, -1);
+ ret = H5Rcreate(&wbuf[3], fid1, "/Group1/Datatype1", H5R_OBJECT, (hid_t)-1);
CHECK(ret, FAIL, "H5Rcreate");
ret = H5Rget_obj_type2(dataset, H5R_OBJECT, &wbuf[3], &obj_type);
CHECK(ret, FAIL, "H5Rget_obj_type2");
@@ -462,9 +462,9 @@ test_reference_obj(void)
CHECK(ret, FAIL, "H5Fclose");
/* Free memory buffers */
- free(wbuf);
- free(rbuf);
- free(tbuf);
+ HDfree(wbuf);
+ HDfree(rbuf);
+ HDfree(tbuf);
} /* test_reference_obj() */
/****************************************************************
@@ -734,10 +734,10 @@ test_reference_region(void)
CHECK(ret, FAIL, "H5Fclose");
/* Free memory buffers */
- free(wbuf);
- free(rbuf);
- free(dwbuf);
- free(drbuf);
+ HDfree(wbuf);
+ HDfree(rbuf);
+ HDfree(dwbuf);
+ HDfree(drbuf);
} /* test_reference_region() */
/****************************************************************
@@ -1010,10 +1010,10 @@ test_reference_region_1D(void)
CHECK(ret, FAIL, "H5Fclose");
/* Free memory buffers */
- free(wbuf);
- free(rbuf);
- free(dwbuf);
- free(drbuf);
+ HDfree(wbuf);
+ HDfree(rbuf);
+ HDfree(dwbuf);
+ HDfree(drbuf);
} /* test_reference_region_1D() */
/****************************************************************
@@ -1054,7 +1054,7 @@ test_reference_obj_deleted(void)
CHECK(dataset, FAIL, "H5Dcreate2");
/* Create reference to dataset */
- ret = H5Rcreate(&oref, fid1, "/Dataset1", H5R_OBJECT, -1);
+ ret = H5Rcreate(&oref, fid1, "/Dataset1", H5R_OBJECT, (hid_t)-1);
CHECK(ret, FAIL, "H5Rcreate");
ret = H5Rget_obj_type2(dataset, H5R_OBJECT, &oref, &obj_type);
CHECK(ret, FAIL, "H5Rget_obj_type2");
@@ -1209,7 +1209,7 @@ test_reference_group(void)
CHECK(did, FAIL, "H5Dcreate2");
/* Create reference to group */
- ret = H5Rcreate(&wref, fid, GROUPNAME, H5R_OBJECT, -1);
+ ret = H5Rcreate(&wref, fid, GROUPNAME, H5R_OBJECT, (hid_t)-1);
CHECK(ret, FAIL, "H5Rcreate");
/* Write reference to disk */
@@ -1378,19 +1378,19 @@ test_reference_compat(void)
CHECK(ret, FAIL, "H5Dcreate2");
/* Create reference to dataset */
- ret = H5Rcreate(&wbuf_obj[0], fid1, "/Group1/Dataset1", H5R_OBJECT, -1);
+ ret = H5Rcreate(&wbuf_obj[0], fid1, "/Group1/Dataset1", H5R_OBJECT, (hid_t)-1);
CHECK(ret, FAIL, "H5Rcreate");
/* Create reference to dataset */
- ret = H5Rcreate(&wbuf_obj[1], fid1, "/Group1/Dataset2", H5R_OBJECT, -1);
+ ret = H5Rcreate(&wbuf_obj[1], fid1, "/Group1/Dataset2", H5R_OBJECT, (hid_t)-1);
CHECK(ret, FAIL, "H5Rcreate");
/* Create reference to group */
- ret = H5Rcreate(&wbuf_obj[2], fid1, "/Group1", H5R_OBJECT, -1);
+ ret = H5Rcreate(&wbuf_obj[2], fid1, "/Group1", H5R_OBJECT, (hid_t)-1);
CHECK(ret, FAIL, "H5Rcreate");
/* Create reference to named datatype */
- ret = H5Rcreate(&wbuf_obj[3], fid1, "/Group1/Datatype1", H5R_OBJECT, -1);
+ ret = H5Rcreate(&wbuf_obj[3], fid1, "/Group1/Datatype1", H5R_OBJECT, (hid_t)-1);
CHECK(ret, FAIL, "H5Rcreate");
/* Write references to disk */
@@ -1517,7 +1517,6 @@ test_reference_compat(void)
ret = H5Dclose(dataset);
CHECK(ret, FAIL, "H5Dclose");
-
/* Close file */
ret = H5Fclose(fid1);
CHECK(ret, FAIL, "H5Fclose");
diff --git a/test/tselect.c b/test/tselect.c
index 7dfb6d7..4f15694 100644
--- a/test/tselect.c
+++ b/test/tselect.c
@@ -362,8 +362,8 @@ test_select_hyper(hid_t xfer_plist)
CHECK(ret, FAIL, "H5Fclose");
/* Free memory buffers */
- free(wbuf);
- free(rbuf);
+ HDfree(wbuf);
+ HDfree(rbuf);
} /* test_select_hyper() */
struct pnt_iter {
@@ -645,8 +645,8 @@ test_select_point(hid_t xfer_plist)
CHECK(ret, FAIL, "H5Fclose");
/* Free memory buffers */
- free(wbuf);
- free(rbuf);
+ HDfree(wbuf);
+ HDfree(rbuf);
} /* test_select_point() */
/****************************************************************
@@ -758,8 +758,8 @@ test_select_all(hid_t xfer_plist)
CHECK(ret, FAIL, "H5Fclose");
/* Free memory buffers */
- free(wbuf);
- free(rbuf);
+ HDfree(wbuf);
+ HDfree(rbuf);
} /* test_select_all() */
/****************************************************************
@@ -898,8 +898,8 @@ test_select_all_hyper(hid_t xfer_plist)
CHECK(ret, FAIL, "H5Fclose");
/* Free memory buffers */
- free(wbuf);
- free(rbuf);
+ HDfree(wbuf);
+ HDfree(rbuf);
} /* test_select_all_hyper() */
/****************************************************************
@@ -1640,8 +1640,8 @@ verify_select_hyper_contig_dr__run_test(const uint16_t *cube_buf,
/* Advance to next element */
cube_ptr++;
expected_value++;
- s++;
- m++;
+ s++;
+ m++;
} while((cube_rank > 0) && (m < edge_size));
l++;
} while((cube_rank > 1) && (l < edge_size));
@@ -1658,10 +1658,10 @@ verify_select_hyper_contig_dr__run_test(const uint16_t *cube_buf,
/****************************************************************
**
-** test_select_hyper_contig_dr__run_test(): Test H5S (dataspace)
-** selection code with contiguous source and target having
+** test_select_hyper_contig_dr__run_test(): Test H5S (dataspace)
+** selection code with contiguous source and target having
** different ranks but the same shape. We have already
-** tested H5S_shape_same in isolation, so now we try to do
+** tested H5S_shape_same in isolation, so now we try to do
** I/O.
**
****************************************************************/
@@ -1765,13 +1765,13 @@ test_select_hyper_contig_dr__run_test(int test_num, const uint16_t *cube_buf,
CHECK(file_large_cube_sid, FAIL, "H5Screate_simple");
/* if chunk edge size is greater than zero, set up the small and
- * large data set creation property lists to specify chunked
+ * large data set creation property lists to specify chunked
* datasets.
*/
if(chunk_edge_size > 0) {
hsize_t chunk_dims[SS_DR_MAX_RANK]; /* Chunk dimensions */
- chunk_dims[0] = chunk_dims[1] =
+ chunk_dims[0] = chunk_dims[1] =
chunk_dims[2] = chunk_dims[3] = chunk_dims[4] = (hsize_t)chunk_edge_size;
small_cube_dcpl_id = H5Pcreate(H5P_DATASET_CREATE);
@@ -1795,7 +1795,7 @@ test_select_hyper_contig_dr__run_test(int test_num, const uint16_t *cube_buf,
} /* end if */
/* create the small cube dataset */
- small_cube_dataset = H5Dcreate2(fid1, "small_cube_dataset", dset_type,
+ small_cube_dataset = H5Dcreate2(fid1, "small_cube_dataset", dset_type,
small_cube_sid, H5P_DEFAULT, small_cube_dcpl_id, H5P_DEFAULT);
CHECK(small_cube_dataset, FAIL, "H5Dcreate2");
@@ -1806,7 +1806,7 @@ test_select_hyper_contig_dr__run_test(int test_num, const uint16_t *cube_buf,
} /* end if */
/* create the large cube dataset */
- large_cube_dataset = H5Dcreate2(fid1, "large_cube_dataset", dset_type,
+ large_cube_dataset = H5Dcreate2(fid1, "large_cube_dataset", dset_type,
file_large_cube_sid, H5P_DEFAULT, large_cube_dcpl_id, H5P_DEFAULT);
CHECK(large_cube_dataset, FAIL, "H5Dcreate2");
@@ -1818,16 +1818,16 @@ test_select_hyper_contig_dr__run_test(int test_num, const uint16_t *cube_buf,
/* write initial data to the on disk datasets */
- ret = H5Dwrite(small_cube_dataset, H5T_NATIVE_UINT16, small_cube_sid,
+ ret = H5Dwrite(small_cube_dataset, H5T_NATIVE_UINT16, small_cube_sid,
small_cube_sid, xfer_plist, cube_buf);
CHECK(ret, FAIL, "H5Dwrite");
- ret = H5Dwrite(large_cube_dataset, H5T_NATIVE_UINT16, mem_large_cube_sid,
+ ret = H5Dwrite(large_cube_dataset, H5T_NATIVE_UINT16, mem_large_cube_sid,
file_large_cube_sid, xfer_plist, cube_buf);
CHECK(ret, FAIL, "H5Dwrite");
/* read initial data from disk and verify that it is as expected. */
- ret = H5Dread(small_cube_dataset, H5T_NATIVE_UINT16, small_cube_sid,
+ ret = H5Dread(small_cube_dataset, H5T_NATIVE_UINT16, small_cube_sid,
small_cube_sid, xfer_plist, small_cube_buf_1);
CHECK(ret, FAIL, "H5Dread");
@@ -1835,7 +1835,7 @@ test_select_hyper_contig_dr__run_test(int test_num, const uint16_t *cube_buf,
verify_select_hyper_contig_dr__run_test(small_cube_buf_1, small_cube_size,
edge_size, small_rank);
- ret = H5Dread(large_cube_dataset, H5T_NATIVE_UINT16, mem_large_cube_sid,
+ ret = H5Dread(large_cube_dataset, H5T_NATIVE_UINT16, mem_large_cube_sid,
file_large_cube_sid, xfer_plist, large_cube_buf_1);
CHECK(ret, FAIL, "H5Dread");
@@ -1848,12 +1848,12 @@ test_select_hyper_contig_dr__run_test(int test_num, const uint16_t *cube_buf,
* of different rank that H5S_select_shape_same() views as being of the
* same shape.
*
- * Start by reading small_rank-D slice from the on disk large cube, and
- * verifying that the data read is correct. Verify that H5S_select_shape_same()
+ * Start by reading small_rank-D slice from the on disk large cube, and
+ * verifying that the data read is correct. Verify that H5S_select_shape_same()
* returns true on the memory and file selections.
*/
-
+
/* set up start, stride, count, and block -- note that we will
* change start[] so as to read slices of the large cube.
*/
@@ -1885,18 +1885,18 @@ test_select_hyper_contig_dr__run_test(int test_num, const uint16_t *cube_buf,
start[3] = (hsize_t)x;
start[4] = (hsize_t)0;
- ret = H5Sselect_hyperslab(file_large_cube_sid,
+ ret = H5Sselect_hyperslab(file_large_cube_sid,
H5S_SELECT_SET,
- start_ptr,
- stride_ptr,
- count_ptr,
+ start_ptr,
+ stride_ptr,
+ count_ptr,
block_ptr);
CHECK(ret, FAIL, "H5Sselect_hyperslab");
- /* verify that H5S_select_shape_same() reports the two
+ /* verify that H5S_select_shape_same() reports the two
* selections as having the same shape.
*/
- check = H5S_select_shape_same_test(small_cube_sid,
+ check = H5S_select_shape_same_test(small_cube_sid,
file_large_cube_sid);
VERIFY(check, TRUE, "H5S_select_shape_same_test");
@@ -1933,7 +1933,7 @@ test_select_hyper_contig_dr__run_test(int test_num, const uint16_t *cube_buf,
} while((large_rank >= 4) && (small_rank <= 3) && (v < edge_size));
u++;
} while((large_rank >= 5) && (small_rank <= 4) && (u < edge_size));
-
+
/* similarly, read the on disk small cube into slices through the in memory
* large cube, and verify that the correct data (and only the correct data)
@@ -1961,19 +1961,19 @@ test_select_hyper_contig_dr__run_test(int test_num, const uint16_t *cube_buf,
start[3] = (hsize_t)x;
start[4] = (hsize_t)0;
- ret = H5Sselect_hyperslab(mem_large_cube_sid,
+ ret = H5Sselect_hyperslab(mem_large_cube_sid,
H5S_SELECT_SET,
- start_ptr,
- stride_ptr,
- count_ptr,
+ start_ptr,
+ stride_ptr,
+ count_ptr,
block_ptr);
CHECK(ret, FAIL, "H5Sselect_hyperslab");
- /* verify that H5S_select_shape_same() reports the two
+ /* verify that H5S_select_shape_same() reports the two
* selections as having the same shape.
*/
- check = H5S_select_shape_same_test(small_cube_sid,
+ check = H5S_select_shape_same_test(small_cube_sid,
mem_large_cube_sid);
VERIFY(check, TRUE, "H5S_select_shape_same_test");
@@ -1988,7 +1988,7 @@ test_select_hyper_contig_dr__run_test(int test_num, const uint16_t *cube_buf,
CHECK(ret, FAIL, "H5Dread");
- /* verify that the expected data and only the
+ /* verify that the expected data and only the
* expected data was read.
*/
start_index = (u * edge_size * edge_size * edge_size * edge_size) +
@@ -2024,7 +2024,7 @@ test_select_hyper_contig_dr__run_test(int test_num, const uint16_t *cube_buf,
/* Zero out the buffer for the next pass */
HDmemset(large_cube_buf_1 + start_index, 0, small_cube_size * sizeof(uint16_t));
-
+
x++;
} while((large_rank >= 2) && (small_rank <= 1) && (x < edge_size));
w++;
@@ -2035,16 +2035,16 @@ test_select_hyper_contig_dr__run_test(int test_num, const uint16_t *cube_buf,
} while((large_rank >= 5) && (small_rank <= 4) && (u < edge_size));
- /* now we go in the opposite direction, verifying that we can write
- * from memory to file using selections of different rank that
+ /* now we go in the opposite direction, verifying that we can write
+ * from memory to file using selections of different rank that
* H5S_select_shape_same() views as being of the same shape.
*
- * Start by writing small_rank D slices from the in memory large cube, to
+ * Start by writing small_rank D slices from the in memory large cube, to
* the the on disk small cube dataset. After each write, read the small
* cube dataset back from disk, and verify that it contains the expected
- * data. Verify that H5S_select_shape_same() returns true on the
+ * data. Verify that H5S_select_shape_same() returns true on the
* memory and file selections.
- */
+ */
u = 0;
do {
@@ -2060,15 +2060,15 @@ test_select_hyper_contig_dr__run_test(int test_num, const uint16_t *cube_buf,
*/
/* zero out the on disk small cube */
- ret = H5Dwrite(small_cube_dataset,
- H5T_NATIVE_UINT16,
- small_cube_sid,
- small_cube_sid,
- xfer_plist,
+ ret = H5Dwrite(small_cube_dataset,
+ H5T_NATIVE_UINT16,
+ small_cube_sid,
+ small_cube_sid,
+ xfer_plist,
zero_buf);
CHECK(ret, FAIL, "H5Dwrite");
- /* select the portion of the in memory large cube from which we
+ /* select the portion of the in memory large cube from which we
* are going to write data.
*/
start[0] = (hsize_t)u;
@@ -2077,40 +2077,40 @@ test_select_hyper_contig_dr__run_test(int test_num, const uint16_t *cube_buf,
start[3] = (hsize_t)x;
start[4] = (hsize_t)0;
- ret = H5Sselect_hyperslab(mem_large_cube_sid,
+ ret = H5Sselect_hyperslab(mem_large_cube_sid,
H5S_SELECT_SET,
- start_ptr,
- stride_ptr,
- count_ptr,
+ start_ptr,
+ stride_ptr,
+ count_ptr,
block_ptr);
CHECK(ret, FAIL, "H5Sselect_hyperslab");
- /* verify that H5S_select_shape_same() reports the in
- * memory slice through the cube selection and the
+ /* verify that H5S_select_shape_same() reports the in
+ * memory slice through the cube selection and the
* on disk full small cube selections as having the same shape.
*/
- check = H5S_select_shape_same_test(small_cube_sid,
+ check = H5S_select_shape_same_test(small_cube_sid,
mem_large_cube_sid);
VERIFY(check, TRUE, "H5S_select_shape_same_test");
/* write the slice from the in memory large cube to the on disk small cube */
- ret = H5Dwrite(small_cube_dataset,
- H5T_NATIVE_UINT16,
- mem_large_cube_sid,
- small_cube_sid,
- xfer_plist,
+ ret = H5Dwrite(small_cube_dataset,
+ H5T_NATIVE_UINT16,
+ mem_large_cube_sid,
+ small_cube_sid,
+ xfer_plist,
cube_buf);
CHECK(ret, FAIL, "H5Dwrite");
/* read the on disk small cube into memory */
- ret = H5Dread(small_cube_dataset,
+ ret = H5Dread(small_cube_dataset,
H5T_NATIVE_UINT16,
small_cube_sid,
- small_cube_sid,
- xfer_plist,
+ small_cube_sid,
+ xfer_plist,
small_cube_buf_1);
CHECK(ret, FAIL, "H5Dread");
@@ -2130,7 +2130,7 @@ test_select_hyper_contig_dr__run_test(int test_num, const uint16_t *cube_buf,
} /* end for */
if(mis_match )
TestErrPrintf("small cube data don't match! Line=%d\n",__LINE__);
-
+
x++;
} while((large_rank >= 2) && (small_rank <= 1) && (x < edge_size));
w++;
@@ -2141,10 +2141,10 @@ test_select_hyper_contig_dr__run_test(int test_num, const uint16_t *cube_buf,
} while((large_rank >= 5) && (small_rank <= 4) && (u < edge_size));
- /* Now write the contents of the in memory small cube to slices of
+ /* Now write the contents of the in memory small cube to slices of
* the on disk cube. After each write, read the on disk cube
- * into memeory, and verify that it contains the expected
- * data. Verify that H5S_select_shape_same() returns true on
+ * into memeory, and verify that it contains the expected
+ * data. Verify that H5S_select_shape_same() returns true on
* the memory and file selections.
*/
@@ -2169,16 +2169,16 @@ test_select_hyper_contig_dr__run_test(int test_num, const uint16_t *cube_buf,
*/
/* zero out the on disk cube */
- ret = H5Dwrite(large_cube_dataset,
- H5T_NATIVE_USHORT,
- mem_large_cube_sid,
- file_large_cube_sid,
- xfer_plist,
+ ret = H5Dwrite(large_cube_dataset,
+ H5T_NATIVE_USHORT,
+ mem_large_cube_sid,
+ file_large_cube_sid,
+ xfer_plist,
zero_buf);
CHECK(ret, FAIL, "H5Dwrite");
- /* select the portion of the in memory large cube to which we
+ /* select the portion of the in memory large cube to which we
* are going to write data.
*/
start[0] = (hsize_t)u;
@@ -2187,31 +2187,31 @@ test_select_hyper_contig_dr__run_test(int test_num, const uint16_t *cube_buf,
start[3] = (hsize_t)x;
start[4] = (hsize_t)0;
- ret = H5Sselect_hyperslab(file_large_cube_sid,
+ ret = H5Sselect_hyperslab(file_large_cube_sid,
H5S_SELECT_SET,
- start_ptr,
- stride_ptr,
- count_ptr,
+ start_ptr,
+ stride_ptr,
+ count_ptr,
block_ptr);
CHECK(ret, FAIL, "H5Sselect_hyperslab");
- /* verify that H5S_select_shape_same() reports the in
- * memory full selection of the small cube and the
- * on disk slice through the large cube selection
+ /* verify that H5S_select_shape_same() reports the in
+ * memory full selection of the small cube and the
+ * on disk slice through the large cube selection
* as having the same shape.
*/
- check = H5S_select_shape_same_test(small_cube_sid,
+ check = H5S_select_shape_same_test(small_cube_sid,
file_large_cube_sid);
VERIFY(check, TRUE, "H5S_select_shape_same_test");
/* write the cube from memory to the target slice of the disk cube */
- ret = H5Dwrite(large_cube_dataset,
- H5T_NATIVE_UINT16,
- small_cube_sid,
- file_large_cube_sid,
- xfer_plist,
+ ret = H5Dwrite(large_cube_dataset,
+ H5T_NATIVE_UINT16,
+ small_cube_sid,
+ file_large_cube_sid,
+ xfer_plist,
cube_buf);
CHECK(ret, FAIL, "H5Dwrite");
@@ -2220,16 +2220,16 @@ test_select_hyper_contig_dr__run_test(int test_num, const uint16_t *cube_buf,
ret = H5Sselect_all(file_large_cube_sid);
CHECK(ret, FAIL, "H5Sselect_all");
- ret = H5Dread(large_cube_dataset,
+ ret = H5Dread(large_cube_dataset,
H5T_NATIVE_UINT16,
mem_large_cube_sid,
- file_large_cube_sid,
- xfer_plist,
+ file_large_cube_sid,
+ xfer_plist,
large_cube_buf_1);
CHECK(ret, FAIL, "H5Dread");
- /* verify that the expected data and only the
+ /* verify that the expected data and only the
* expected data was read.
*/
start_index = (u * edge_size * edge_size * edge_size * edge_size) +
@@ -2262,7 +2262,7 @@ test_select_hyper_contig_dr__run_test(int test_num, const uint16_t *cube_buf,
} /* end for */
if(mis_match)
TestErrPrintf("large cube written from small cube has bad data! Line=%d\n", __LINE__);
-
+
x++;
} while((large_rank >= 2) && (small_rank <= 1) && (x < edge_size));
w++;
@@ -2305,10 +2305,10 @@ test_select_hyper_contig_dr__run_test(int test_num, const uint16_t *cube_buf,
/****************************************************************
**
-** test_select_hyper_contig_dr(): Test H5S (dataspace)
-** selection code with contiguous source and target having
+** test_select_hyper_contig_dr(): Test H5S (dataspace)
+** selection code with contiguous source and target having
** different ranks but the same shape. We have already
-** tested H5S_shape_same in isolation, so now we try to do
+** tested H5S_shape_same in isolation, so now we try to do
** I/O.
**
****************************************************************/
@@ -2373,12 +2373,12 @@ test_select_hyper_contig_dr(hid_t dset_type, hid_t xfer_plist)
/****************************************************************
**
-** test_select_hyper_checker_board_dr__select_checker_board():
-** Given an n-cube data space with each edge of length
+** test_select_hyper_checker_board_dr__select_checker_board():
+** Given an n-cube data space with each edge of length
** edge_size, and a checker_edge_size either select a checker
** board selection of the entire cube(if sel_rank == n),
** or select a checker board selection of a
-** sel_rank dimensional slice through n-cube parallel to the
+** sel_rank dimensional slice through n-cube parallel to the
** sel_rank fastest changing indices, with origin (in the
** higher indices) as indicated by the start array.
**
@@ -2434,7 +2434,7 @@ test_select_hyper_checker_board_dr__select_checker_board(hid_t tgt_n_cube_sid,
offset_count++;
/* Now set up the stride and block arrays, and portions of the start
- * and count arrays that will not be altered during the selection of
+ * and count arrays that will not be altered during the selection of
* the checker board.
*/
u = 0;
@@ -2463,7 +2463,7 @@ test_select_hyper_checker_board_dr__select_checker_board(hid_t tgt_n_cube_sid,
u++;
} /* end while */
-
+
i = 0;
do {
if(0 >= sel_offset) {
@@ -2478,7 +2478,7 @@ test_select_hyper_checker_board_dr__select_checker_board(hid_t tgt_n_cube_sid,
} /* end if */
j = 0;
- do {
+ do {
if(1 >= sel_offset) {
if(j == 0 ) {
start[1] = 0;
@@ -2531,22 +2531,22 @@ test_select_hyper_checker_board_dr__select_checker_board(hid_t tgt_n_cube_sid,
if(((i + j + k + l + m) % 2) == 0) {
if(first_selection) {
- first_selection = FALSE;
+ first_selection = FALSE;
- ret = H5Sselect_hyperslab(tgt_n_cube_sid,
+ ret = H5Sselect_hyperslab(tgt_n_cube_sid,
H5S_SELECT_SET,
- &(start[n_cube_offset]),
- &(stride[n_cube_offset]),
- &(count[n_cube_offset]),
+ &(start[n_cube_offset]),
+ &(stride[n_cube_offset]),
+ &(count[n_cube_offset]),
&(block[n_cube_offset]));
CHECK(ret, FAIL, "H5Sselect_hyperslab");
} /* end if */
else {
- ret = H5Sselect_hyperslab(tgt_n_cube_sid,
+ ret = H5Sselect_hyperslab(tgt_n_cube_sid,
H5S_SELECT_OR,
- &(start[n_cube_offset]),
- &(stride[n_cube_offset]),
- &(count[n_cube_offset]),
+ &(start[n_cube_offset]),
+ &(stride[n_cube_offset]),
+ &(count[n_cube_offset]),
&(block[n_cube_offset]));
CHECK(ret, FAIL, "H5Sselect_hyperslab");
} /* end else */
@@ -2584,21 +2584,21 @@ test_select_hyper_checker_board_dr__select_checker_board(hid_t tgt_n_cube_sid,
/****************************************************************
**
-** test_select_hyper_checker_board_dr__verify_data():
+** test_select_hyper_checker_board_dr__verify_data():
**
-** Examine the supplied buffer to see if it contains the
-** expected data. Return TRUE if it does, and FALSE
+** Examine the supplied buffer to see if it contains the
+** expected data. Return TRUE if it does, and FALSE
** otherwise.
**
** The supplied buffer is presumed to contain the results
-** of read or writing a checkerboard selection of an
+** of read or writing a checkerboard selection of an
** n-cube, or a checkerboard selection of an m (1 <= m < n)
-** dimensional slice through an n-cube parallel to the
-** fastest changing indices.
+** dimensional slice through an n-cube parallel to the
+** fastest changing indices.
**
** It is further presumed that the buffer was zeroed before
-** the read, and that the n-cube was initialize with the
-** natural numbers listed in order from the origin along
+** the read, and that the n-cube was initialize with the
+** natural numbers listed in order from the origin along
** the fastest changing axis.
**
** Thus for a 10x10x10 3-cube, the value stored in location
@@ -2607,19 +2607,19 @@ test_select_hyper_checker_board_dr__select_checker_board(hid_t tgt_n_cube_sid,
**
** (10 * 10 * x) + (10 * y) + z
**
-** Thus, if the buffer contains the result of reading a
+** Thus, if the buffer contains the result of reading a
** checker board selection of a 10x10x10 3-cube, location
** (x, y, z) will contain zero if it is not in a checker,
** and 100x + 10y + z if (x, y, z) is in a checker.
**
-** If the buffer contains the result of reading a 3
+** If the buffer contains the result of reading a 3
** dimensional slice (parallel to the three fastest changing
-** indices) through an n cube (n > 3), then the expected
+** indices) through an n cube (n > 3), then the expected
** values in the buffer will be the same, save that we will
-** add a constant determined by the origin of the 3-cube
+** add a constant determined by the origin of the 3-cube
** in the n-cube.
**
-** Finally, the function presumes that the first element
+** Finally, the function presumes that the first element
** of the buffer resides either at the origin of either
** a selected or an unselected checker.
**
@@ -2679,7 +2679,7 @@ test_select_hyper_checker_board_dr__verify_data(uint16_t * buf_ptr,
l = 0;
y = 0;
start_in_checker[3] = start_in_checker[2];
- do {
+ do {
if(y >= checker_edge_size) {
start_in_checker[3] = ! start_in_checker[3];
y = 0;
@@ -2693,7 +2693,7 @@ test_select_hyper_checker_board_dr__verify_data(uint16_t * buf_ptr,
in_checker = ! in_checker;
z = 0;
} /* end if */
-
+
if(in_checker) {
if(*val_ptr != expected_value)
good_data = FALSE;
@@ -2702,10 +2702,10 @@ test_select_hyper_checker_board_dr__verify_data(uint16_t * buf_ptr,
if(*val_ptr != 0)
good_data = FALSE;
} /* end else */
-
+
val_ptr++;
expected_value++;
-
+
m++;
z++;
} while((rank >= (test_max_rank - 4)) && (m < edge_size));
@@ -2728,10 +2728,10 @@ test_select_hyper_checker_board_dr__verify_data(uint16_t * buf_ptr,
/****************************************************************
**
-** test_select_hyper_checker_board_dr__run_test(): Test H5S
-** (dataspace) selection code with checker board source and
-** target selections having different ranks but the same
-** shape. We have already tested H5S_shape_same in
+** test_select_hyper_checker_board_dr__run_test(): Test H5S
+** (dataspace) selection code with checker board source and
+** target selections having different ranks but the same
+** shape. We have already tested H5S_shape_same in
** isolation, so now we try to do I/O.
**
****************************************************************/
@@ -2856,11 +2856,11 @@ test_select_hyper_checker_board_dr__run_test(int test_num, const uint16_t *cube_
/* if chunk edge size is greater than zero, set up the small and
- * large data set creation property lists to specify chunked
+ * large data set creation property lists to specify chunked
* datasets.
*/
if(chunk_edge_size > 0) {
- chunk_dims[0] = chunk_dims[1] =
+ chunk_dims[0] = chunk_dims[1] =
chunk_dims[2] = chunk_dims[3] = chunk_dims[4] = chunk_edge_size;
small_cube_dcpl_id = H5Pcreate(H5P_DATASET_CREATE);
@@ -2885,7 +2885,7 @@ test_select_hyper_checker_board_dr__run_test(int test_num, const uint16_t *cube_
/* create the small cube dataset */
- small_cube_dataset = H5Dcreate2(fid, "small_cube_dataset", dset_type,
+ small_cube_dataset = H5Dcreate2(fid, "small_cube_dataset", dset_type,
file_small_cube_sid, H5P_DEFAULT, small_cube_dcpl_id, H5P_DEFAULT);
CHECK(small_cube_dataset, FAIL, "H5Dcreate2");
@@ -2896,7 +2896,7 @@ test_select_hyper_checker_board_dr__run_test(int test_num, const uint16_t *cube_
} /* end if */
/* create the large cube dataset */
- large_cube_dataset = H5Dcreate2(fid, "large_cube_dataset", dset_type,
+ large_cube_dataset = H5Dcreate2(fid, "large_cube_dataset", dset_type,
file_large_cube_sid, H5P_DEFAULT, large_cube_dcpl_id, H5P_DEFAULT);
CHECK(large_cube_dataset, FAIL, "H5Dcreate2");
@@ -2908,17 +2908,17 @@ test_select_hyper_checker_board_dr__run_test(int test_num, const uint16_t *cube_
/* write initial data to the on disk datasets */
- ret = H5Dwrite(small_cube_dataset, H5T_NATIVE_UINT16, full_small_cube_sid,
+ ret = H5Dwrite(small_cube_dataset, H5T_NATIVE_UINT16, full_small_cube_sid,
full_small_cube_sid, xfer_plist, cube_buf);
CHECK(ret, FAIL, "H5Dwrite");
- ret = H5Dwrite(large_cube_dataset, H5T_NATIVE_UINT16, full_large_cube_sid,
+ ret = H5Dwrite(large_cube_dataset, H5T_NATIVE_UINT16, full_large_cube_sid,
full_large_cube_sid, xfer_plist, cube_buf);
CHECK(ret, FAIL, "H5Dwrite");
/* read initial small cube data from disk and verify that it is as expected. */
- ret = H5Dread(small_cube_dataset, H5T_NATIVE_UINT16, full_small_cube_sid,
+ ret = H5Dread(small_cube_dataset, H5T_NATIVE_UINT16, full_small_cube_sid,
full_small_cube_sid, xfer_plist, small_cube_buf_1);
CHECK(ret, FAIL, "H5Dread");
@@ -2927,7 +2927,7 @@ test_select_hyper_checker_board_dr__run_test(int test_num, const uint16_t *cube_
edge_size, small_rank);
/* read initial large cube data from disk and verify that it is as expected. */
- ret = H5Dread(large_cube_dataset, H5T_NATIVE_UINT16, full_large_cube_sid,
+ ret = H5Dread(large_cube_dataset, H5T_NATIVE_UINT16, full_large_cube_sid,
full_large_cube_sid, xfer_plist, large_cube_buf_1);
CHECK(ret, FAIL, "H5Dread");
@@ -2940,11 +2940,11 @@ test_select_hyper_checker_board_dr__run_test(int test_num, const uint16_t *cube_
* of different rank that H5S_select_shape_same() views as being of the
* same shape.
*
- * Start by reading small_rank-D slice from the on disk large cube, and
- * verifying that the data read is correct. Verify that H5S_select_shape_same()
+ * Start by reading small_rank-D slice from the on disk large cube, and
+ * verifying that the data read is correct. Verify that H5S_select_shape_same()
* returns true on the memory and file selections.
*
- * The first step is to set up the needed checker board selection in the
+ * The first step is to set up the needed checker board selection in the
* in memory small small cube
*/
@@ -2957,8 +2957,8 @@ test_select_hyper_checker_board_dr__run_test(int test_num, const uint16_t *cube_
small_rank,
sel_start);
- /* now read slices from the large, on-disk cube into the small cube.
- * Note how we adjust sel_start only in the dimensions peculiar to the
+ /* now read slices from the large, on-disk cube into the small cube.
+ * Note how we adjust sel_start only in the dimensions peculiar to the
* large cube.
*/
@@ -3003,10 +3003,10 @@ test_select_hyper_checker_board_dr__run_test(int test_num, const uint16_t *cube_
sel_start
);
- /* verify that H5S_select_shape_same() reports the two
+ /* verify that H5S_select_shape_same() reports the two
* selections as having the same shape.
*/
- check = H5S_select_shape_same_test(mem_small_cube_sid,
+ check = H5S_select_shape_same_test(mem_small_cube_sid,
file_large_cube_sid);
VERIFY(check, TRUE, "H5S_select_shape_same_test");
@@ -3041,18 +3041,18 @@ test_select_hyper_checker_board_dr__run_test(int test_num, const uint16_t *cube_
TestErrPrintf("small cube read from largecube has bad data! Line=%d\n",__LINE__);
x++;
- } while((large_rank >= (test_max_rank - 3)) &&
+ } while((large_rank >= (test_max_rank - 3)) &&
(small_rank <= (test_max_rank - 4)) && (x < edge_size));
w++;
- } while((large_rank >= (test_max_rank - 2)) &&
+ } while((large_rank >= (test_max_rank - 2)) &&
(small_rank <= (test_max_rank - 3)) && (w < edge_size));
v++;
- } while((large_rank >= (test_max_rank - 1)) &&
+ } while((large_rank >= (test_max_rank - 1)) &&
(small_rank <= (test_max_rank - 2)) && (v < edge_size));
u++;
- } while((large_rank >= test_max_rank) &&
+ } while((large_rank >= test_max_rank) &&
(small_rank <= (test_max_rank - 1)) && (u < edge_size));
-
+
/* similarly, read the on disk small cube into slices through the in memory
* large cube, and verify that the correct data (and only the correct data)
@@ -3110,10 +3110,10 @@ test_select_hyper_checker_board_dr__run_test(int test_num, const uint16_t *cube_
sel_start
);
- /* verify that H5S_select_shape_same() reports the two
+ /* verify that H5S_select_shape_same() reports the two
* selections as having the same shape.
*/
- check = H5S_select_shape_same_test(file_small_cube_sid,
+ check = H5S_select_shape_same_test(file_small_cube_sid,
mem_large_cube_sid);
VERIFY(check, TRUE, "H5S_select_shape_same_test");
@@ -3131,7 +3131,7 @@ test_select_hyper_checker_board_dr__run_test(int test_num, const uint16_t *cube_
CHECK(ret, FAIL, "H5Dread");
- /* verify that the expected data and only the
+ /* verify that the expected data and only the
* expected data was read.
*/
data_ok = TRUE;
@@ -3179,29 +3179,29 @@ test_select_hyper_checker_board_dr__run_test(int test_num, const uint16_t *cube_
TestErrPrintf("large cube read from small cube has bad data! Line=%d\n",__LINE__);
x++;
- } while((large_rank >= (test_max_rank - 3)) &&
+ } while((large_rank >= (test_max_rank - 3)) &&
(small_rank <= (test_max_rank - 4)) && (x < edge_size));
w++;
- } while((large_rank >= (test_max_rank - 2)) &&
+ } while((large_rank >= (test_max_rank - 2)) &&
(small_rank <= (test_max_rank - 3)) && (w < edge_size));
v++;
- } while((large_rank >= (test_max_rank - 1)) &&
+ } while((large_rank >= (test_max_rank - 1)) &&
(small_rank <= (test_max_rank - 2)) && (v < edge_size));
u++;
- } while((large_rank >= test_max_rank) &&
+ } while((large_rank >= test_max_rank) &&
(small_rank <= (test_max_rank - 1)) && (u < edge_size));
- /* now we go in the opposite direction, verifying that we can write
- * from memory to file using selections of different rank that
+ /* now we go in the opposite direction, verifying that we can write
+ * from memory to file using selections of different rank that
* H5S_select_shape_same() views as being of the same shape.
*
- * Start by writing small_rank D slices from the in memory large cube, to
+ * Start by writing small_rank D slices from the in memory large cube, to
* the the on disk small cube dataset. After each write, read the small
* cube dataset back from disk, and verify that it contains the expected
- * data. Verify that H5S_select_shape_same() returns true on the
+ * data. Verify that H5S_select_shape_same() returns true on the
* memory and file selections.
- */
+ */
/* select a checker board in the file small cube dataspace */
sel_start[0] = sel_start[1] = sel_start[2] = sel_start[3] = sel_start[4] = 0;
@@ -3233,11 +3233,11 @@ test_select_hyper_checker_board_dr__run_test(int test_num, const uint16_t *cube_
sel_start[3] = x;
/* zero out the on disk small cube */
- ret = H5Dwrite(small_cube_dataset,
- H5T_NATIVE_UINT16,
- full_small_cube_sid,
- full_small_cube_sid,
- xfer_plist,
+ ret = H5Dwrite(small_cube_dataset,
+ H5T_NATIVE_UINT16,
+ full_small_cube_sid,
+ full_small_cube_sid,
+ xfer_plist,
zero_buf);
CHECK(ret, FAIL, "H5Dwrite");
@@ -3263,22 +3263,22 @@ test_select_hyper_checker_board_dr__run_test(int test_num, const uint16_t *cube_
sel_start
);
- /* verify that H5S_select_shape_same() reports the two
+ /* verify that H5S_select_shape_same() reports the two
* selections as having the same shape.
*/
- check = H5S_select_shape_same_test(file_small_cube_sid,
+ check = H5S_select_shape_same_test(file_small_cube_sid,
mem_large_cube_sid);
VERIFY(check, TRUE, "H5S_select_shape_same_test");
- /* write the slice from the in memory large cube to the
- * on disk small cube
+ /* write the slice from the in memory large cube to the
+ * on disk small cube
*/
- ret = H5Dwrite(small_cube_dataset,
- H5T_NATIVE_UINT16,
- mem_large_cube_sid,
- file_small_cube_sid,
- xfer_plist,
+ ret = H5Dwrite(small_cube_dataset,
+ H5T_NATIVE_UINT16,
+ mem_large_cube_sid,
+ file_small_cube_sid,
+ xfer_plist,
cube_buf);
CHECK(ret, FAIL, "H5Dwrite");
@@ -3287,11 +3287,11 @@ test_select_hyper_checker_board_dr__run_test(int test_num, const uint16_t *cube_
HDmemset(small_cube_buf_1, 0, sizeof(*small_cube_buf_1) * small_cube_size);
/* read the on disk small cube into memory */
- ret = H5Dread(small_cube_dataset,
+ ret = H5Dread(small_cube_dataset,
H5T_NATIVE_UINT16,
full_small_cube_sid,
- full_small_cube_sid,
- xfer_plist,
+ full_small_cube_sid,
+ xfer_plist,
small_cube_buf_1);
CHECK(ret, FAIL, "H5Dread");
@@ -3314,24 +3314,24 @@ test_select_hyper_checker_board_dr__run_test(int test_num, const uint16_t *cube_
TestErrPrintf("small cube read from largecube has bad data! Line=%d\n",__LINE__);
x++;
- } while((large_rank >= (test_max_rank - 3)) &&
+ } while((large_rank >= (test_max_rank - 3)) &&
(small_rank <= (test_max_rank - 4)) && (x < edge_size));
w++;
- } while((large_rank >= (test_max_rank - 2)) &&
+ } while((large_rank >= (test_max_rank - 2)) &&
(small_rank <= (test_max_rank - 3)) && (w < edge_size));
v++;
- } while((large_rank >= (test_max_rank - 1)) &&
+ } while((large_rank >= (test_max_rank - 1)) &&
(small_rank <= (test_max_rank - 2)) && (v < edge_size));
u++;
- } while((large_rank >= test_max_rank) &&
+ } while((large_rank >= test_max_rank) &&
(small_rank <= (test_max_rank - 1)) && (u < edge_size));
- /* Now write checker board selections of the entries in memory
- * small cube to slices of the on disk cube. After each write,
- * read the on disk large cube * into memeory, and verify that
- * it contains the expected * data. Verify that
- * H5S_select_shape_same() returns true on the memory and file
+ /* Now write checker board selections of the entries in memory
+ * small cube to slices of the on disk cube. After each write,
+ * read the on disk large cube * into memeory, and verify that
+ * it contains the expected * data. Verify that
+ * H5S_select_shape_same() returns true on the memory and file
* selections.
*/
@@ -3365,11 +3365,11 @@ test_select_hyper_checker_board_dr__run_test(int test_num, const uint16_t *cube_
sel_start[3] = x;
/* zero out the on disk cube */
- ret = H5Dwrite(large_cube_dataset,
- H5T_NATIVE_USHORT,
- full_large_cube_sid,
- full_large_cube_sid,
- xfer_plist,
+ ret = H5Dwrite(large_cube_dataset,
+ H5T_NATIVE_USHORT,
+ full_large_cube_sid,
+ full_large_cube_sid,
+ xfer_plist,
zero_buf);
CHECK(ret, FAIL, "H5Dwrite");
@@ -3395,10 +3395,10 @@ test_select_hyper_checker_board_dr__run_test(int test_num, const uint16_t *cube_
sel_start
);
- /* verify that H5S_select_shape_same() reports the two
+ /* verify that H5S_select_shape_same() reports the two
* selections as having the same shape.
*/
- check = H5S_select_shape_same_test(file_large_cube_sid,
+ check = H5S_select_shape_same_test(file_large_cube_sid,
mem_small_cube_sid);
VERIFY(check, TRUE, "H5S_select_shape_same_test");
@@ -3407,11 +3407,11 @@ test_select_hyper_checker_board_dr__run_test(int test_num, const uint16_t *cube_
* small cube to a slice through the on disk large
* cube.
*/
- ret = H5Dwrite(large_cube_dataset,
- H5T_NATIVE_UINT16,
- mem_small_cube_sid,
- file_large_cube_sid,
- xfer_plist,
+ ret = H5Dwrite(large_cube_dataset,
+ H5T_NATIVE_UINT16,
+ mem_small_cube_sid,
+ file_large_cube_sid,
+ xfer_plist,
cube_buf);
CHECK(ret, FAIL, "H5Dwrite");
@@ -3420,16 +3420,16 @@ test_select_hyper_checker_board_dr__run_test(int test_num, const uint16_t *cube_
HDmemset(large_cube_buf_1, 0, sizeof(*large_cube_buf_1) * large_cube_size);
/* read the on disk large cube into memory */
- ret = H5Dread(large_cube_dataset,
+ ret = H5Dread(large_cube_dataset,
H5T_NATIVE_UINT16,
full_large_cube_sid,
- full_large_cube_sid,
- xfer_plist,
+ full_large_cube_sid,
+ xfer_plist,
large_cube_buf_1);
CHECK(ret, FAIL, "H5Dread");
- /* verify that the expected data and only the
+ /* verify that the expected data and only the
* expected data was written to the on disk large
* cube.
*/
@@ -3479,18 +3479,18 @@ test_select_hyper_checker_board_dr__run_test(int test_num, const uint16_t *cube_
TestErrPrintf("large cube written from small cube has bad data! Line=%d\n",__LINE__);
x++;
- } while((large_rank >= (test_max_rank - 3)) &&
+ } while((large_rank >= (test_max_rank - 3)) &&
(small_rank <= (test_max_rank - 4)) && (x < edge_size));
w++;
- } while((large_rank >= (test_max_rank - 2)) &&
+ } while((large_rank >= (test_max_rank - 2)) &&
(small_rank <= (test_max_rank - 3)) && (w < edge_size));
v++;
- } while((large_rank >= (test_max_rank - 1)) &&
+ } while((large_rank >= (test_max_rank - 1)) &&
(small_rank <= (test_max_rank - 2)) && (v < edge_size));
u++;
- } while((large_rank >= test_max_rank) &&
+ } while((large_rank >= test_max_rank) &&
(small_rank <= (test_max_rank - 1)) && (u < edge_size));
-
+
/* Close memory dataspaces */
ret = H5Sclose(full_small_cube_sid);
@@ -5409,8 +5409,8 @@ test_select_hyper_and_2d(void)
CHECK(ret, FAIL, "H5Fclose");
/* Free memory buffers */
- free(wbuf);
- free(rbuf);
+ HDfree(wbuf);
+ HDfree(rbuf);
} /* test_select_hyper_and_2d() */
/****************************************************************
@@ -5540,8 +5540,8 @@ test_select_hyper_xor_2d(void)
CHECK(ret, FAIL, "H5Fclose");
/* Free memory buffers */
- free(wbuf);
- free(rbuf);
+ HDfree(wbuf);
+ HDfree(rbuf);
} /* test_select_hyper_xor_2d() */
/****************************************************************
@@ -5670,8 +5670,8 @@ test_select_hyper_notb_2d(void)
CHECK(ret, FAIL, "H5Fclose");
/* Free memory buffers */
- free(wbuf);
- free(rbuf);
+ HDfree(wbuf);
+ HDfree(rbuf);
} /* test_select_hyper_notb_2d() */
/****************************************************************
@@ -6443,8 +6443,8 @@ test_select_point_chunk(void)
ret = H5Fclose(file);
CHECK(ret, FAIL, "H5Fclose");
- free(data);
- free (data_out);
+ HDfree(data);
+ HDfree (data_out);
} /* test_select_point_chunk() */
/****************************************************************
@@ -6671,7 +6671,7 @@ test_select_combine(void)
none_id=H5Scopy(base_id);
CHECK(none_id, FAIL, "H5Scopy");
error=H5Sselect_none(none_id);
- CHECK(error, FAIL, "H5Sselect_all");
+ CHECK(error, FAIL, "H5Sselect_none");
sel_type=H5Sget_select_type(none_id);
VERIFY(sel_type, H5S_SEL_NONE, "H5Sget_select_type");
@@ -7623,8 +7623,8 @@ test_select_none(void)
CHECK(ret, FAIL, "H5Fclose");
/* Free memory buffers */
- free(wbuf);
- free(rbuf);
+ HDfree(wbuf);
+ HDfree(rbuf);
} /* test_select_none() */
/****************************************************************
@@ -12344,7 +12344,7 @@ test_space_rebuild(void)
ret = H5Sselect_hyperslab(sid_reg_ori5,H5S_SELECT_SET,start5,stride5,count5,block5);
CHECK(ret, FAIL, "H5Sselect_hyperslab");
- /* Build up four dimensional regular selection with H5_SELECT_OR, inside HDF5,
+ /* Build up five dimensional regular selection with H5_SELECT_OR, inside HDF5,
it will be treated as an irregular selection. */
start5[4] = 1;
count5[4] = 1;
@@ -12494,6 +12494,7 @@ test_space_rebuild(void)
CHECK(ret,FAIL,"H5S_hyper_rebuild");
}/* No need to do shape comparision */
+ /* Add more selections to make it regular again */
start5[3] = 5;
count5[3] = 1;
stride5[3] = 4;
diff --git a/test/ttsafe.c b/test/ttsafe.c
index 253470b..d0ab81a 100644
--- a/test/ttsafe.c
+++ b/test/ttsafe.c
@@ -52,69 +52,71 @@ int main(void)
#define NAME_OFFSET 6 /* offset for "name<num>" */
/* pre-condition: num must be a non-negative number */
-static int num_digits(int num)
+static unsigned
+num_digits(int num)
{
- int i;
+ unsigned u;
- if (num == 0)
- return 1;
+ if(num == 0)
+ return 1;
- for (i = 0; num > 0; i++)
- num = num / 10;
+ for(u = 0; num > 0; u++)
+ num = num / 10;
- return i;
+ return u;
}
/* Routine to generate attribute names for numeric values */
char *gen_name(int value)
{
- char *temp;
- int i, length;
+ char *temp;
+ unsigned length;
+ int i;
- length = num_digits(MAX_NUM_NAME - 1);
- temp = (char *)HDmalloc((NAME_OFFSET + length + 1) * sizeof(char));
- temp = HDstrcpy(temp, "attrib");
- temp[NAME_OFFSET + length] = '\0';
+ length = num_digits(MAX_NUM_NAME - 1);
+ temp = (char *)HDmalloc(NAME_OFFSET + length + 1);
+ temp = HDstrcpy(temp, "attrib");
+ temp[NAME_OFFSET + length] = '\0';
- for (i = length - 1; i >= 0; i--) {
- temp[NAME_OFFSET + i] = (char)((int)'0' + value % 10);
- value = value / 10;
- }
+ for (i = (int)(length - 1); i >= 0; i--) {
+ temp[NAME_OFFSET + i] = (char)((int)'0' + value % 10);
+ value = value / 10;
+ }
- return temp;
+ return temp;
}
int main(int argc, char *argv[])
{
- /* Initialize testing framework */
- TestInit(argv[0], NULL, NULL);
+ /* Initialize testing framework */
+ TestInit(argv[0], NULL, NULL);
- /* Tests are generally arranged from least to most complexity... */
- AddTest("dcreate", tts_dcreate, cleanup_dcreate, "multi-dataset creation", NULL);
- AddTest("error", tts_error, cleanup_error, "per-thread error stacks", NULL);
+ /* Tests are generally arranged from least to most complexity... */
+ AddTest("dcreate", tts_dcreate, cleanup_dcreate, "multi-dataset creation", NULL);
+ AddTest("error", tts_error, cleanup_error, "per-thread error stacks", NULL);
#ifdef H5_HAVE_PTHREAD_H
- /* Thread cancellability only supported with pthreads ... */
- AddTest("cancel", tts_cancel, cleanup_cancel, "thread cancellation safety test", NULL);
+ /* Thread cancellability only supported with pthreads ... */
+ AddTest("cancel", tts_cancel, cleanup_cancel, "thread cancellation safety test", NULL);
#endif /* H5_HAVE_PTHREAD_H */
- AddTest("acreate", tts_acreate, cleanup_acreate, "multi-attribute creation", NULL);
+ AddTest("acreate", tts_acreate, cleanup_acreate, "multi-attribute creation", NULL);
- /* Display testing information */
- TestInfo(argv[0]);
+ /* Display testing information */
+ TestInfo(argv[0]);
- /* Parse command line arguments */
- TestParseCmdLine(argc,argv);
+ /* Parse command line arguments */
+ TestParseCmdLine(argc,argv);
- /* Perform requested testing */
- PerformTests();
+ /* Perform requested testing */
+ PerformTests();
- /* Display test summary, if requested */
- if (GetTestSummary())
- TestSummary();
+ /* Display test summary, if requested */
+ if (GetTestSummary())
+ TestSummary();
- /* Clean up test files, if allowed */
- if (GetTestCleanup() && !getenv("HDF5_NOCLEANUP"))
- TestCleanup();
+ /* Clean up test files, if allowed */
+ if (GetTestCleanup() && !getenv("HDF5_NOCLEANUP"))
+ TestCleanup();
- return GetTestNumErrs();
+ return GetTestNumErrs();
} /* end main() */
#endif /*H5_HAVE_THREADSAFE*/
diff --git a/test/ttsafe_acreate.c b/test/ttsafe_acreate.c
index 0efd02c..dec2eee 100644
--- a/test/ttsafe_acreate.c
+++ b/test/ttsafe_acreate.c
@@ -113,7 +113,7 @@ void tts_acreate(void)
* with the dataset
*/
for(i = 0; i < NUM_THREADS; i++) {
- attrib_data = malloc(sizeof(ttsafe_name_data_t));
+ attrib_data = HDmalloc(sizeof(ttsafe_name_data_t));
attrib_data->dataset = dataset;
attrib_data->datatype = datatype;
attrib_data->dataspace = dataspace;
@@ -170,7 +170,7 @@ void *tts_acreate_thread(void *client_data)
H5P_DEFAULT, H5P_DEFAULT);
/* Write data to the attribute */
- attribute_data = malloc(sizeof(int));
+ attribute_data = HDmalloc(sizeof(int));
*attribute_data = attrib_data->current_index;
H5Awrite(attribute, H5T_NATIVE_INT, attribute_data);
H5Aclose(attribute);
diff --git a/test/ttsafe_cancel.c b/test/ttsafe_cancel.c
index 8264403..56f431e 100644
--- a/test/ttsafe_cancel.c
+++ b/test/ttsafe_cancel.c
@@ -145,7 +145,7 @@ void *tts_cancel_thread(void UNUSED *arg)
assert(dataset >= 0);
/* If thread is cancelled, make cleanup call */
- cleanup_structure = (cancel_cleanup_t*)malloc(sizeof(cancel_cleanup_t));
+ cleanup_structure = (cancel_cleanup_t*)HDmalloc(sizeof(cancel_cleanup_t));
cleanup_structure->dataset = dataset;
cleanup_structure->datatype = datatype;
cleanup_structure->dataspace = dataspace;
@@ -156,7 +156,7 @@ void *tts_cancel_thread(void UNUSED *arg)
ret=H5Dwrite(dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, &datavalue);
assert(ret>=0);
- buffer = malloc(sizeof(int));
+ buffer = HDmalloc(sizeof(int));
ret=H5Dread(dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, buffer);
assert(ret>=0);
ret=H5Diterate(buffer, H5T_NATIVE_INT, dataspace, tts_cancel_callback, &dataset);
diff --git a/test/tunicode.c b/test/tunicode.c
index 6f3e3a9..856c2cb 100644
--- a/test/tunicode.c
+++ b/test/tunicode.c
@@ -454,7 +454,7 @@ void test_objnames(hid_t fid, const char* string)
CHECK(ret, FAIL, "H5Dcreate2");
/* Create reference to named datatype */
- ret = H5Rcreate(&obj_ref, grp2_id, string, H5R_OBJECT, -1);
+ ret = H5Rcreate(&obj_ref, grp2_id, string, H5R_OBJECT, (hid_t)-1);
CHECK(ret, FAIL, "H5Rcreate");
/* Write selection and read it back*/
ret = H5Dwrite(dset_id, H5T_STD_REF_OBJ, H5S_ALL, H5S_ALL, H5P_DEFAULT, &obj_ref);
diff --git a/testpar/CMakeLists.txt b/testpar/CMakeLists.txt
index 968eba6..2a1ce8d 100644
--- a/testpar/CMakeLists.txt
+++ b/testpar/CMakeLists.txt
@@ -4,7 +4,7 @@ PROJECT (HDF5_TEST_PAR)
#-----------------------------------------------------------------------------
# Apply Definitions to compiler in this directory and below
#-----------------------------------------------------------------------------
-add_definitions (${HDF5_EXTRA_C_FLAGS})
+add_definitions (${HDF_EXTRA_C_FLAGS})
INCLUDE_DIRECTORIES (${HDF5_TEST_SRC_DIR})
INCLUDE_DIRECTORIES (${HDF5_TOOLS_SRC_DIR}/lib )
@@ -42,7 +42,6 @@ ENDMACRO (ADD_H5P_EXE file)
set (H5P_TESTS
t_mpi
-# t_posix_compliant
t_cache
t_pflush1
t_pflush2
@@ -53,8 +52,4 @@ foreach (testp ${H5P_TESTS})
ADD_H5P_EXE(${testp})
endforeach (testp ${H5P_TESTS})
-if (NOT WIN32)
- ADD_H5P_EXE(t_posix_compliant)
-endif (NOT WIN32)
-
include (CMakeTests.cmake)
diff --git a/testpar/CMakeTests.cmake b/testpar/CMakeTests.cmake
index 8165eff..3716ee6 100644
--- a/testpar/CMakeTests.cmake
+++ b/testpar/CMakeTests.cmake
@@ -11,7 +11,10 @@ foreach (testp ${H5P_TESTS})
add_test (NAME TEST_PAR_${testp} COMMAND ${MPIEXEC} ${MPIEXEC_PREFLAGS} ${MPIEXEC_NUMPROC_FLAG} ${MPIEXEC_MAX_NUMPROCS} ${MPIEXEC_POSTFLAGS} $<TARGET_FILE:${testp}>)
endforeach (testp ${H5P_TESTS})
-SET_TESTS_PROPERTIES(TEST_PAR_t_pflush2 PROPERTIES DEPENDS TEST_PAR_t_pflush1)
+# The following will only be correct on windows shared
+#set_tests_properties (TEST_PAR_t_pflush1 PROPERTIES WILL_FAIL "true")
+set_property (TEST TEST_PAR_t_pflush1 PROPERTY PASS_REGULAR_EXPRESSION "PASSED")
+set_tests_properties (TEST_PAR_t_pflush2 PROPERTIES DEPENDS TEST_PAR_t_pflush1)
if (HDF5_TEST_VFD)
@@ -45,7 +48,7 @@ if (HDF5_TEST_VFD)
-D "TEST_EXPECT=${resultcode}"
-D "TEST_OUTPUT=${test}"
-D "TEST_FOLDER=${PROJECT_BINARY_DIR}"
- -P "${HDF5_RESOURCES_DIR}/vfdTest.cmake"
+ -P "${HDF_RESOURCES_DIR}/vfdTest.cmake"
)
endforeach (test ${H5P_VFD_TESTS})
endif (NOT HDF5_ENABLE_USING_MEMCHECKER)
diff --git a/testpar/Makefile.in b/testpar/Makefile.in
index 87d0e29..dc5b6b1 100644
--- a/testpar/Makefile.in
+++ b/testpar/Makefile.in
@@ -525,7 +525,6 @@ MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MPE = @MPE@
-MPI_GET_SIZE = @MPI_GET_SIZE@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
diff --git a/testpar/t_cache.c b/testpar/t_cache.c
index 234df01..85315ce 100644
--- a/testpar/t_cache.c
+++ b/testpar/t_cache.c
@@ -2847,7 +2847,7 @@ expunge_entry(H5F_t * file_ptr,
if ( nerrors == 0 ) {
- result = H5AC_expunge_entry(file_ptr, -1, &(types[0]),
+ result = H5AC_expunge_entry(file_ptr, (hid_t)-1, &(types[0]),
entry_ptr->header.addr, H5AC__NO_FLAGS_SET);
if ( result < 0 ) {
diff --git a/testpar/t_chunk_alloc.c b/testpar/t_chunk_alloc.c
index 43b45af..1ed21a2 100644
--- a/testpar/t_chunk_alloc.c
+++ b/testpar/t_chunk_alloc.c
@@ -36,13 +36,9 @@ get_filesize(const char *filename)
int mpierr;
MPI_File fd;
MPI_Offset filesize;
-#ifndef H5_HAVE_MPI_GET_SIZE
- h5_stat_t stat_buf;
-#endif
-#ifdef H5_HAVE_MPI_GET_SIZE
mpierr = MPI_File_open(MPI_COMM_SELF, (char*)filename, MPI_MODE_RDONLY,
- MPI_INFO_NULL, &fd);
+ MPI_INFO_NULL, &fd);
VRFY((mpierr == MPI_SUCCESS), "");
mpierr = MPI_File_get_size(fd, &filesize);
@@ -50,16 +46,6 @@ get_filesize(const char *filename)
mpierr = MPI_File_close(&fd);
VRFY((mpierr == MPI_SUCCESS), "");
-#else
- /* Some systems (only SGI Altix Propack 4 so far) doesn't return correct
- * file size for MPI_File_get_size. Use stat instead.
- */
- if((mpierr=HDstat(filename, &stat_buf))<0)
- VRFY((mpierr == MPI_SUCCESS), "");
-
- /* Hopefully this casting is safe */
- filesize = (MPI_Offset)(stat_buf.st_size);
-#endif
return(filesize);
}
diff --git a/testpar/t_coll_chunk.c b/testpar/t_coll_chunk.c
index 133b91d..ab9de09 100644
--- a/testpar/t_coll_chunk.c
+++ b/testpar/t_coll_chunk.c
@@ -644,7 +644,7 @@ coll_chunktest(const char* filename,
dims[1] = SPACE_DIM2;
/* allocate memory for data buffer */
- data_array1 = (int *)malloc(dims[0] * dims[1] * sizeof(int));
+ data_array1 = (int *)HDmalloc(dims[0] * dims[1] * sizeof(int));
VRFY((data_array1 != NULL), "data_array1 malloc succeeded");
/* set up dimensions of the slab this process accesses */
@@ -910,11 +910,11 @@ coll_chunktest(const char* filename,
/* Use collective read to verify the correctness of collective write. */
/* allocate memory for data buffer */
- data_array1 = (int *)malloc(dims[0]*dims[1]*sizeof(int));
+ data_array1 = (int *)HDmalloc(dims[0]*dims[1]*sizeof(int));
VRFY((data_array1 != NULL), "data_array1 malloc succeeded");
/* allocate memory for data buffer */
- data_origin1 = (int *)malloc(dims[0]*dims[1]*sizeof(int));
+ data_origin1 = (int *)HDmalloc(dims[0]*dims[1]*sizeof(int));
VRFY((data_origin1 != NULL), "data_origin1 malloc succeeded");
acc_plist = create_faccess_plist(comm, info, facc_type);
@@ -1266,7 +1266,7 @@ ccdataset_vrfy(hsize_t start[],
if (vrfyerrs++ < MAX_ERR_REPORT || VERBOSE_MED){
printf("Dataset Verify failed at [%lu][%lu]: expect %d, got %d\n",
(unsigned long)i, (unsigned long)j,
- *(original), *(dataset));
+ *(oriptr), *(dataptr));
}
}
}
diff --git a/testpar/t_dset.c b/testpar/t_dset.c
index 96d3836..2bc3b09 100644
--- a/testpar/t_dset.c
+++ b/testpar/t_dset.c
@@ -302,8 +302,8 @@ dataset_writeInd(void)
MPI_Comm_rank(MPI_COMM_WORLD,&mpi_rank);
/* allocate memory for data buffer */
- data_array1 = (DATATYPE *)malloc(dim0*dim1*sizeof(DATATYPE));
- VRFY((data_array1 != NULL), "data_array1 malloc succeeded");
+ data_array1 = (DATATYPE *)HDmalloc(dim0*dim1*sizeof(DATATYPE));
+ VRFY((data_array1 != NULL), "data_array1 HDmalloc succeeded");
/* ----------------------------------------
* CREATE AN HDF5 FILE WITH PARALLEL ACCESS
@@ -412,7 +412,7 @@ MPI_Barrier(MPI_COMM_WORLD);
H5Fclose(fid);
/* release data buffers */
- if(data_array1) free(data_array1);
+ if(data_array1) HDfree(data_array1);
}
/* Example of using the parallel HDF5 library to read a dataset */
@@ -447,10 +447,10 @@ dataset_readInd(void)
MPI_Comm_rank(MPI_COMM_WORLD,&mpi_rank);
/* allocate memory for data buffer */
- data_array1 = (DATATYPE *)malloc(dim0*dim1*sizeof(DATATYPE));
- VRFY((data_array1 != NULL), "data_array1 malloc succeeded");
- data_origin1 = (DATATYPE *)malloc(dim0*dim1*sizeof(DATATYPE));
- VRFY((data_origin1 != NULL), "data_origin1 malloc succeeded");
+ data_array1 = (DATATYPE *)HDmalloc(dim0*dim1*sizeof(DATATYPE));
+ VRFY((data_array1 != NULL), "data_array1 HDmalloc succeeded");
+ data_origin1 = (DATATYPE *)HDmalloc(dim0*dim1*sizeof(DATATYPE));
+ VRFY((data_origin1 != NULL), "data_origin1 HDmalloc succeeded");
/* setup file access template */
acc_tpl = create_faccess_plist(comm, info, facc_type);
@@ -520,8 +520,8 @@ dataset_readInd(void)
H5Fclose(fid);
/* release data buffers */
- if(data_array1) free(data_array1);
- if(data_origin1) free(data_origin1);
+ if(data_array1) HDfree(data_array1);
+ if(data_origin1) HDfree(data_origin1);
}
@@ -583,8 +583,8 @@ dataset_writeAll(void)
VRFY((coords != NULL), "coords malloc succeeded");
/* allocate memory for data buffer */
- data_array1 = (DATATYPE *)malloc(dim0*dim1*sizeof(DATATYPE));
- VRFY((data_array1 != NULL), "data_array1 malloc succeeded");
+ data_array1 = (DATATYPE *)HDmalloc(dim0*dim1*sizeof(DATATYPE));
+ VRFY((data_array1 != NULL), "data_array1 HDmalloc succeeded");
/* -------------------
* START AN HDF5 FILE
@@ -1115,10 +1115,10 @@ dataset_readAll(void)
VRFY((coords != NULL), "coords malloc succeeded");
/* allocate memory for data buffer */
- data_array1 = (DATATYPE *)malloc(dim0*dim1*sizeof(DATATYPE));
- VRFY((data_array1 != NULL), "data_array1 malloc succeeded");
- data_origin1 = (DATATYPE *)malloc(dim0*dim1*sizeof(DATATYPE));
- VRFY((data_origin1 != NULL), "data_origin1 malloc succeeded");
+ data_array1 = (DATATYPE *)HDmalloc(dim0*dim1*sizeof(DATATYPE));
+ VRFY((data_array1 != NULL), "data_array1 HDmalloc succeeded");
+ data_origin1 = (DATATYPE *)HDmalloc(dim0*dim1*sizeof(DATATYPE));
+ VRFY((data_origin1 != NULL), "data_origin1 HDmalloc succeeded");
/* -------------------
* OPEN AN HDF5 FILE
@@ -1527,8 +1527,8 @@ extend_writeInd(void)
chunk_dims[1] = chunkdim1;
/* allocate memory for data buffer */
- data_array1 = (DATATYPE *)malloc(dim0*dim1*sizeof(DATATYPE));
- VRFY((data_array1 != NULL), "data_array1 malloc succeeded");
+ data_array1 = (DATATYPE *)HDmalloc(dim0*dim1*sizeof(DATATYPE));
+ VRFY((data_array1 != NULL), "data_array1 HDmalloc succeeded");
/* -------------------
* START AN HDF5 FILE
@@ -1707,7 +1707,7 @@ extend_writeInd(void)
H5Fclose(fid);
/* release data buffers */
- if(data_array1) free(data_array1);
+ if(data_array1) HDfree(data_array1);
}
/*
@@ -1911,12 +1911,12 @@ extend_readInd(void)
MPI_Comm_rank(MPI_COMM_WORLD,&mpi_rank);
/* allocate memory for data buffer */
- data_array1 = (DATATYPE *)malloc(dim0*dim1*sizeof(DATATYPE));
- VRFY((data_array1 != NULL), "data_array1 malloc succeeded");
- data_array2 = (DATATYPE *)malloc(dim0*dim1*sizeof(DATATYPE));
- VRFY((data_array2 != NULL), "data_array2 malloc succeeded");
- data_origin1 = (DATATYPE *)malloc(dim0*dim1*sizeof(DATATYPE));
- VRFY((data_origin1 != NULL), "data_origin1 malloc succeeded");
+ data_array1 = (DATATYPE *)HDmalloc(dim0*dim1*sizeof(DATATYPE));
+ VRFY((data_array1 != NULL), "data_array1 HDmalloc succeeded");
+ data_array2 = (DATATYPE *)HDmalloc(dim0*dim1*sizeof(DATATYPE));
+ VRFY((data_array2 != NULL), "data_array2 HDmalloc succeeded");
+ data_origin1 = (DATATYPE *)HDmalloc(dim0*dim1*sizeof(DATATYPE));
+ VRFY((data_origin1 != NULL), "data_origin1 HDmalloc succeeded");
/* -------------------
* OPEN AN HDF5 FILE
@@ -2039,9 +2039,9 @@ extend_readInd(void)
H5Fclose(fid);
/* release data buffers */
- if(data_array1) free(data_array1);
- if(data_array2) free(data_array2);
- if(data_origin1) free(data_origin1);
+ if(data_array1) HDfree(data_array1);
+ if(data_array2) HDfree(data_array2);
+ if(data_origin1) HDfree(data_origin1);
}
/*
@@ -2098,8 +2098,8 @@ extend_writeAll(void)
chunk_dims[1] = chunkdim1;
/* allocate memory for data buffer */
- data_array1 = (DATATYPE *)malloc(dim0*dim1*sizeof(DATATYPE));
- VRFY((data_array1 != NULL), "data_array1 malloc succeeded");
+ data_array1 = (DATATYPE *)HDmalloc(dim0*dim1*sizeof(DATATYPE));
+ VRFY((data_array1 != NULL), "data_array1 HDmalloc succeeded");
/* -------------------
* START AN HDF5 FILE
@@ -2303,7 +2303,7 @@ extend_writeAll(void)
H5Fclose(fid);
/* release data buffers */
- if(data_array1) free(data_array1);
+ if(data_array1) HDfree(data_array1);
}
/* Example of using the parallel HDF5 library to read an extendible dataset */
@@ -2341,12 +2341,12 @@ extend_readAll(void)
MPI_Comm_rank(MPI_COMM_WORLD,&mpi_rank);
/* allocate memory for data buffer */
- data_array1 = (DATATYPE *)malloc(dim0*dim1*sizeof(DATATYPE));
- VRFY((data_array1 != NULL), "data_array1 malloc succeeded");
- data_array2 = (DATATYPE *)malloc(dim0*dim1*sizeof(DATATYPE));
- VRFY((data_array2 != NULL), "data_array2 malloc succeeded");
- data_origin1 = (DATATYPE *)malloc(dim0*dim1*sizeof(DATATYPE));
- VRFY((data_origin1 != NULL), "data_origin1 malloc succeeded");
+ data_array1 = (DATATYPE *)HDmalloc(dim0*dim1*sizeof(DATATYPE));
+ VRFY((data_array1 != NULL), "data_array1 HDmalloc succeeded");
+ data_array2 = (DATATYPE *)HDmalloc(dim0*dim1*sizeof(DATATYPE));
+ VRFY((data_array2 != NULL), "data_array2 HDmalloc succeeded");
+ data_origin1 = (DATATYPE *)HDmalloc(dim0*dim1*sizeof(DATATYPE));
+ VRFY((data_origin1 != NULL), "data_origin1 HDmalloc succeeded");
/* -------------------
* OPEN AN HDF5 FILE
@@ -2493,9 +2493,9 @@ extend_readAll(void)
H5Fclose(fid);
/* release data buffers */
- if(data_array1) free(data_array1);
- if(data_array2) free(data_array2);
- if(data_origin1) free(data_origin1);
+ if(data_array1) HDfree(data_array1);
+ if(data_array2) HDfree(data_array2);
+ if(data_origin1) HDfree(data_origin1);
}
/*
@@ -2534,9 +2534,9 @@ compress_readAll(void)
/* Allocate data buffer */
data_orig = (DATATYPE *)HDmalloc((size_t)dim*sizeof(DATATYPE));
- VRFY((data_orig != NULL), "data_origin1 malloc succeeded");
+ VRFY((data_orig != NULL), "data_origin1 HDmalloc succeeded");
data_read = (DATATYPE *)HDmalloc((size_t)dim*sizeof(DATATYPE));
- VRFY((data_read != NULL), "data_array1 malloc succeeded");
+ VRFY((data_read != NULL), "data_array1 HDmalloc succeeded");
/* Initialize data buffers */
for(u=0; u<dim;u++)
@@ -2766,11 +2766,11 @@ none_selection_chunk(void)
/* allocate memory for data buffer. Only allocate enough buffer for
* each processor's data. */
if(mpi_rank) {
- data_origin = (DATATYPE *)malloc(block[0]*block[1]*sizeof(DATATYPE));
- VRFY((data_origin != NULL), "data_origin malloc succeeded");
+ data_origin = (DATATYPE *)HDmalloc(block[0]*block[1]*sizeof(DATATYPE));
+ VRFY((data_origin != NULL), "data_origin HDmalloc succeeded");
- data_array = (DATATYPE *)malloc(block[0]*block[1]*sizeof(DATATYPE));
- VRFY((data_array != NULL), "data_array malloc succeeded");
+ data_array = (DATATYPE *)HDmalloc(block[0]*block[1]*sizeof(DATATYPE));
+ VRFY((data_array != NULL), "data_array HDmalloc succeeded");
/* put some trivial data in the data_array */
mstart[0] = mstart[1] = 0;
@@ -2867,8 +2867,8 @@ none_selection_chunk(void)
H5Fclose(fid);
/* release data buffers */
- if(data_origin) free(data_origin);
- if(data_array) free(data_array);
+ if(data_origin) HDfree(data_origin);
+ if(data_array) HDfree(data_array);
}
@@ -3218,7 +3218,7 @@ test_actual_io_mode(int selection_mode) {
/* Allocate and initialize the buffer */
buffer = (int *)HDmalloc(sizeof(int) * length);
- VRFY((buffer != NULL), "malloc of buffer succeeded");
+ VRFY((buffer != NULL), "HDmalloc of buffer succeeded");
for(i = 0; i < length; i++)
buffer[i] = i;
@@ -3649,7 +3649,7 @@ test_no_collective_cause_mode(int selection_mode)
/* Allocate and initialize the buffer */
buffer = (int *)HDmalloc(sizeof(int) * length);
- VRFY((buffer != NULL), "malloc of buffer succeeded");
+ VRFY((buffer != NULL), "HDmalloc of buffer succeeded");
for(i = 0; i < length; i++)
buffer[i] = i;
@@ -3889,7 +3889,7 @@ test_no_collective_cause_mode_filter(int selection_mode)
/* Allocate and initialize the buffer */
buffer = (int *)HDmalloc(sizeof(int) * length);
- VRFY((buffer != NULL), "malloc of buffer succeeded");
+ VRFY((buffer != NULL), "HDmalloc of buffer succeeded");
for(i = 0; i < length; i++)
buffer[i] = i;
@@ -4073,11 +4073,11 @@ dataset_atomicity(void)
buf_size = dim0 * dim1;
/* allocate memory for data buffer */
- write_buf = (int *)calloc(buf_size, sizeof(int));
- VRFY((write_buf != NULL), "write_buf malloc succeeded");
+ write_buf = (int *)HDcalloc(buf_size, sizeof(int));
+ VRFY((write_buf != NULL), "write_buf HDcalloc succeeded");
/* allocate memory for data buffer */
- read_buf = (int *)calloc(buf_size, sizeof(int));
- VRFY((read_buf != NULL), "read_buf malloc succeeded");
+ read_buf = (int *)HDcalloc(buf_size, sizeof(int));
+ VRFY((read_buf != NULL), "read_buf HDcalloc succeeded");
/* setup file access template */
acc_tpl = create_faccess_plist(comm, info, facc_type);
@@ -4219,19 +4219,19 @@ dataset_atomicity(void)
VRFY((ret >= 0), "H5D close succeeded");
/* release data buffers */
- if(write_buf) free(write_buf);
- if(read_buf) free(read_buf);
+ if(write_buf) HDfree(write_buf);
+ if(read_buf) HDfree(read_buf);
/* open dataset2 (non-contiguous case) */
dataset2 = H5Dopen2(fid, DATASETNAME6, H5P_DEFAULT);
VRFY((dataset2 >= 0), "H5Dopen2 succeeded");
/* allocate memory for data buffer */
- write_buf = (int *)calloc(buf_size, sizeof(int));
- VRFY((write_buf != NULL), "write_buf malloc succeeded");
+ write_buf = (int *)HDcalloc(buf_size, sizeof(int));
+ VRFY((write_buf != NULL), "write_buf HDcalloc succeeded");
/* allocate memory for data buffer */
- read_buf = (int *)calloc(buf_size, sizeof(int));
- VRFY((read_buf != NULL), "read_buf malloc succeeded");
+ read_buf = (int *)HDcalloc(buf_size, sizeof(int));
+ VRFY((read_buf != NULL), "read_buf HDcalloc succeeded");
for (i=0 ; i<buf_size ; i++) {
write_buf[i] = 5;
@@ -4341,8 +4341,8 @@ dataset_atomicity(void)
VRFY((ret >= 0), "H5Sclose succeeded");
/* release data buffers */
- if(write_buf) free(write_buf);
- if(read_buf) free(read_buf);
+ if(write_buf) HDfree(write_buf);
+ if(read_buf) HDfree(read_buf);
ret = H5Fclose(fid);
VRFY((ret >= 0), "H5Fclose succeeded");
diff --git a/testpar/t_filter_read.c b/testpar/t_filter_read.c
index f38b30e..7e782ce 100644
--- a/testpar/t_filter_read.c
+++ b/testpar/t_filter_read.c
@@ -186,8 +186,8 @@ filter_read_internal(const char *filename, hid_t dcpl,
hrc = H5Fclose (file);
VRFY(hrc>=0, "H5Fclose");
- free(points);
- free(check);
+ HDfree(points);
+ HDfree(check);
MPI_Barrier(MPI_COMM_WORLD);
}
diff --git a/testpar/t_mdset.c b/testpar/t_mdset.c
index fa1a980..f294b93 100644
--- a/testpar/t_mdset.c
+++ b/testpar/t_mdset.c
@@ -74,6 +74,63 @@ get_size(void)
} /* get_size() */
/*
+ * Example of using PHDF5 to create a zero sized dataset.
+ *
+ */
+void zero_dim_dset(void)
+{
+ int mpi_size, mpi_rank;
+ const char *filename;
+ hid_t fid, plist, dcpl, dsid, sid;
+ hsize_t dim, chunk_dim;
+ herr_t ret;
+ int data[1];
+
+ MPI_Comm_rank(MPI_COMM_WORLD, &mpi_rank);
+ MPI_Comm_size(MPI_COMM_WORLD, &mpi_size);
+
+ filename = GetTestParameters();
+
+ plist = create_faccess_plist(MPI_COMM_WORLD, MPI_INFO_NULL, facc_type);
+ VRFY((plist>=0), "create_faccess_plist succeeded");
+
+ fid = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, plist);
+ VRFY((fid>=0), "H5Fcreate succeeded");
+ ret = H5Pclose(plist);
+ VRFY((ret>=0), "H5Pclose succeeded");
+
+ dcpl = H5Pcreate(H5P_DATASET_CREATE);
+ VRFY((dcpl>=0), "failed H5Pcreate");
+
+ /* Set 1 chunk size */
+ chunk_dim = 1;
+ ret = H5Pset_chunk(dcpl, 1, &chunk_dim);
+ VRFY((ret>=0), "failed H5Pset_chunk");
+
+ /* Create 1D dataspace with 0 dim size */
+ dim = 0;
+ sid = H5Screate_simple(1, &dim, NULL);
+ VRFY((sid>=0), "failed H5Screate_simple");
+
+ /* Create chunked dataset */
+ dsid = H5Dcreate2(fid, "dset", H5T_NATIVE_INT, sid, H5P_DEFAULT, dcpl, H5P_DEFAULT);
+ VRFY((dsid>=0), "failed H5Dcreate2");
+
+ /* write 0 elements from dataset */
+ ret = H5Dwrite(dsid, H5T_NATIVE_INT, sid, sid, H5P_DEFAULT, data);
+ VRFY((ret>=0), "failed H5Dwrite");
+
+ /* Read 0 elements from dataset */
+ ret = H5Dread(dsid, H5T_NATIVE_INT, sid, sid, H5P_DEFAULT, data);
+ VRFY((ret>=0), "failed H5Dread");
+
+ H5Pclose(dcpl);
+ H5Dclose(dsid);
+ H5Sclose(sid);
+ H5Fclose(fid);
+}
+
+/*
* Example of using PHDF5 to create ndatasets datasets. Each process write
* a slab of array to the file.
*
diff --git a/testpar/t_mpi.c b/testpar/t_mpi.c
index 6e2348b..7bd2f58 100644
--- a/testpar/t_mpi.c
+++ b/testpar/t_mpi.c
@@ -31,11 +31,11 @@
/* FILENAME and filenames must have the same number of names */
const char *FILENAME[2]={
- "MPItest",
- NULL};
-char filenames[2][200];
-int nerrors = 0;
-hid_t fapl; /* file access property list */
+ "MPItest",
+ NULL};
+char filenames[2][200];
+int nerrors = 0;
+hid_t fapl; /* file access property list */
/* protocols */
static int errors_sum(int nerrs);
@@ -49,10 +49,10 @@ test_mpio_overlap_writes(char *filename)
MPI_Comm comm;
MPI_Info info = MPI_INFO_NULL;
int color, mrc;
- MPI_File fh;
+ MPI_File fh;
int i;
int vrfyerrs, nerrs;
- unsigned char buf[4093]; /* use some prime number for size */
+ unsigned char buf[4093]; /* use some prime number for size */
int bufsize = sizeof(buf);
MPI_Offset stride;
MPI_Offset mpi_off;
@@ -60,8 +60,8 @@ test_mpio_overlap_writes(char *filename)
if (VERBOSE_MED)
- printf("MPIO independent overlapping writes test on file %s\n",
- filename);
+ printf("MPIO independent overlapping writes test on file %s\n",
+ filename);
nerrs = 0;
/* set up MPI parameters */
@@ -70,10 +70,10 @@ test_mpio_overlap_writes(char *filename)
/* Need at least 2 processes */
if (mpi_size < 2) {
- if (MAINPROCESS)
- printf("Need at least 2 processes to run MPIO test.\n");
- printf(" -SKIP- \n");
- return 0;
+ if (MAINPROCESS)
+ printf("Need at least 2 processes to run MPIO test.\n");
+ printf(" -SKIP- \n");
+ return 0;
}
/* splits processes 0 to n-2 into one comm. and the last one into another */
@@ -82,85 +82,85 @@ test_mpio_overlap_writes(char *filename)
VRFY((mrc==MPI_SUCCESS), "Comm_split succeeded");
if (color==0){
- /* First n-1 processes (color==0) open a file and write it */
- mrc = MPI_File_open(comm, filename, MPI_MODE_CREATE|MPI_MODE_RDWR,
- info, &fh);
- VRFY((mrc==MPI_SUCCESS), "");
-
- stride = 1;
- mpi_off = mpi_rank*stride;
- while (mpi_off < MPIO_TEST_WRITE_SIZE){
- /* make sure the write does not exceed the TEST_WRITE_SIZE */
- if (mpi_off+stride > MPIO_TEST_WRITE_SIZE)
- stride = MPIO_TEST_WRITE_SIZE - mpi_off;
-
- /* set data to some trivial pattern for easy verification */
- for (i=0; i<stride; i++)
- buf[i] = (unsigned char)(mpi_off+i);
- mrc = MPI_File_write_at(fh, mpi_off, buf, (int)stride, MPI_BYTE,
- &mpi_stat);
- VRFY((mrc==MPI_SUCCESS), "");
-
- /* move the offset pointer to last byte written by all processes */
- mpi_off += (mpi_size - 1 - mpi_rank) * stride;
-
- /* Increase chunk size without exceeding buffer size. */
- /* Then move the starting offset for next write. */
- stride *= 2;
- if (stride > bufsize)
- stride = bufsize;
- mpi_off += mpi_rank*stride;
- }
-
- /* close file and free the communicator */
- mrc = MPI_File_close(&fh);
- VRFY((mrc==MPI_SUCCESS), "MPI_FILE_CLOSE");
- mrc = MPI_Comm_free(&comm);
- VRFY((mrc==MPI_SUCCESS), "MPI_Comm_free");
-
- /* sync with the other waiting processes */
- mrc = MPI_Barrier(MPI_COMM_WORLD);
- VRFY((mrc==MPI_SUCCESS), "Sync after writes");
- }else{
- /* last process waits till writes are done,
- * then opens file to verify data.
- */
- mrc = MPI_Barrier(MPI_COMM_WORLD);
- VRFY((mrc==MPI_SUCCESS), "Sync after writes");
-
- mrc = MPI_File_open(comm, filename, MPI_MODE_RDONLY,
- info, &fh);
- VRFY((mrc==MPI_SUCCESS), "");
-
- stride = bufsize;
- for (mpi_off=0; mpi_off < MPIO_TEST_WRITE_SIZE; mpi_off += bufsize){
- /* make sure it does not read beyond end of data */
- if (mpi_off+stride > MPIO_TEST_WRITE_SIZE)
- stride = MPIO_TEST_WRITE_SIZE - mpi_off;
- mrc = MPI_File_read_at(fh, mpi_off, buf, (int)stride, MPI_BYTE,
- &mpi_stat);
- VRFY((mrc==MPI_SUCCESS), "");
- vrfyerrs=0;
- for (i=0; i<stride; i++){
- unsigned char expected;
- expected = (unsigned char)(mpi_off+i);
- if ((expected != buf[i]) &&
- (vrfyerrs++ < MAX_ERR_REPORT || VERBOSE_MED)) {
- printf("proc %d: found data error at [%ld], expect %u, got %u\n",
- mpi_rank, (long)(mpi_off+i), expected, buf[i]);
- }
- }
- if (vrfyerrs > MAX_ERR_REPORT && !VERBOSE_MED)
- printf("proc %d: [more errors ...]\n", mpi_rank);
+ /* First n-1 processes (color==0) open a file and write it */
+ mrc = MPI_File_open(comm, filename, MPI_MODE_CREATE|MPI_MODE_RDWR,
+ info, &fh);
+ VRFY((mrc==MPI_SUCCESS), "");
+
+ stride = 1;
+ mpi_off = mpi_rank*stride;
+ while (mpi_off < MPIO_TEST_WRITE_SIZE){
+ /* make sure the write does not exceed the TEST_WRITE_SIZE */
+ if (mpi_off+stride > MPIO_TEST_WRITE_SIZE)
+ stride = MPIO_TEST_WRITE_SIZE - mpi_off;
+
+ /* set data to some trivial pattern for easy verification */
+ for (i=0; i<stride; i++)
+ buf[i] = (unsigned char)(mpi_off+i);
+ mrc = MPI_File_write_at(fh, mpi_off, buf, (int)stride, MPI_BYTE,
+ &mpi_stat);
+ VRFY((mrc==MPI_SUCCESS), "");
+
+ /* move the offset pointer to last byte written by all processes */
+ mpi_off += (mpi_size - 1 - mpi_rank) * stride;
+
+ /* Increase chunk size without exceeding buffer size. */
+ /* Then move the starting offset for next write. */
+ stride *= 2;
+ if (stride > bufsize)
+ stride = bufsize;
+ mpi_off += mpi_rank*stride;
+ }
- nerrs += vrfyerrs;
- }
+ /* close file and free the communicator */
+ mrc = MPI_File_close(&fh);
+ VRFY((mrc==MPI_SUCCESS), "MPI_FILE_CLOSE");
+ mrc = MPI_Comm_free(&comm);
+ VRFY((mrc==MPI_SUCCESS), "MPI_Comm_free");
- /* close file and free the communicator */
- mrc = MPI_File_close(&fh);
- VRFY((mrc==MPI_SUCCESS), "MPI_FILE_CLOSE");
- mrc = MPI_Comm_free(&comm);
- VRFY((mrc==MPI_SUCCESS), "MPI_Comm_free");
+ /* sync with the other waiting processes */
+ mrc = MPI_Barrier(MPI_COMM_WORLD);
+ VRFY((mrc==MPI_SUCCESS), "Sync after writes");
+ }else{
+ /* last process waits till writes are done,
+ * then opens file to verify data.
+ */
+ mrc = MPI_Barrier(MPI_COMM_WORLD);
+ VRFY((mrc==MPI_SUCCESS), "Sync after writes");
+
+ mrc = MPI_File_open(comm, filename, MPI_MODE_RDONLY,
+ info, &fh);
+ VRFY((mrc==MPI_SUCCESS), "");
+
+ stride = bufsize;
+ for (mpi_off=0; mpi_off < MPIO_TEST_WRITE_SIZE; mpi_off += bufsize){
+ /* make sure it does not read beyond end of data */
+ if (mpi_off+stride > MPIO_TEST_WRITE_SIZE)
+ stride = MPIO_TEST_WRITE_SIZE - mpi_off;
+ mrc = MPI_File_read_at(fh, mpi_off, buf, (int)stride, MPI_BYTE,
+ &mpi_stat);
+ VRFY((mrc==MPI_SUCCESS), "");
+ vrfyerrs=0;
+ for (i=0; i<stride; i++){
+ unsigned char expected;
+ expected = (unsigned char)(mpi_off+i);
+ if ((expected != buf[i]) &&
+ (vrfyerrs++ < MAX_ERR_REPORT || VERBOSE_MED)) {
+ printf("proc %d: found data error at [%ld], expect %u, got %u\n",
+ mpi_rank, (long)(mpi_off+i), expected, buf[i]);
+ }
+ }
+ if (vrfyerrs > MAX_ERR_REPORT && !VERBOSE_MED)
+ printf("proc %d: [more errors ...]\n", mpi_rank);
+
+ nerrs += vrfyerrs;
+ }
+
+ /* close file and free the communicator */
+ mrc = MPI_File_close(&fh);
+ VRFY((mrc==MPI_SUCCESS), "MPI_FILE_CLOSE");
+ mrc = MPI_Comm_free(&comm);
+ VRFY((mrc==MPI_SUCCESS), "MPI_Comm_free");
}
/*
@@ -194,19 +194,18 @@ test_mpio_gb_file(char *filename)
int mpi_size, mpi_rank;
MPI_Info info = MPI_INFO_NULL;
int mrc;
- MPI_File fh;
+ MPI_File fh;
int i, j, n;
int vrfyerrs;
- int writerrs; /* write errors */
+ int writerrs; /* write errors */
int nerrs;
- int ntimes; /* how many times */
+ int ntimes; /* how many times */
char *buf = NULL;
char expected;
MPI_Offset size;
MPI_Offset mpi_off;
MPI_Offset mpi_off_old;
MPI_Status mpi_stat;
- h5_stat_t stat_buf;
int is_signed, sizeof_mpi_offset;
nerrs = 0;
@@ -226,202 +225,186 @@ test_mpio_gb_file(char *filename)
* Verify the sizeof MPI_Offset and correctness of handling multiple GB
* sizes.
*/
- if (MAINPROCESS){ /* only process 0 needs to check it*/
- printf("MPI_Offset is %s %d bytes integeral type\n",
- is_signed ? "signed" : "unsigned", (int)sizeof(MPI_Offset));
- if (sizeof_mpi_offset <= 4 && is_signed){
- printf("Skipped 2GB range test "
- "because MPI_Offset cannot support it\n");
- }else {
- /* verify correctness of assigning 2GB sizes */
- mpi_off = 2 * 1024 * (MPI_Offset)MB;
- INFO((mpi_off>0), "2GB OFFSET assignment no overflow");
- INFO((mpi_off-1)==TWO_GB_LESS1, "2GB OFFSET assignment succeed");
-
- /* verify correctness of increasing from below 2 GB to above 2GB */
- mpi_off = TWO_GB_LESS1;
- for (i=0; i < 3; i++){
- mpi_off_old = mpi_off;
- mpi_off = mpi_off + 1;
- /* no overflow */
- INFO((mpi_off>0), "2GB OFFSET increment no overflow");
- /* correct inc. */
- INFO((mpi_off-1)==mpi_off_old, "2GB OFFSET increment succeed");
- }
- }
-
- if (sizeof_mpi_offset <= 4){
- printf("Skipped 4GB range test "
- "because MPI_Offset cannot support it\n");
- }else {
- /* verify correctness of assigning 4GB sizes */
- mpi_off = 4 * 1024 * (MPI_Offset)MB;
- INFO((mpi_off>0), "4GB OFFSET assignment no overflow");
- INFO((mpi_off-1)==FOUR_GB_LESS1, "4GB OFFSET assignment succeed");
-
- /* verify correctness of increasing from below 4 GB to above 4 GB */
- mpi_off = FOUR_GB_LESS1;
- for (i=0; i < 3; i++){
- mpi_off_old = mpi_off;
- mpi_off = mpi_off + 1;
- /* no overflow */
- INFO((mpi_off>0), "4GB OFFSET increment no overflow");
- /* correct inc. */
- INFO((mpi_off-1)==mpi_off_old, "4GB OFFSET increment succeed");
- }
- }
+ if (MAINPROCESS){ /* only process 0 needs to check it*/
+ printf("MPI_Offset is %s %d bytes integeral type\n",
+ is_signed ? "signed" : "unsigned", (int)sizeof(MPI_Offset));
+ if (sizeof_mpi_offset <= 4 && is_signed){
+ printf("Skipped 2GB range test "
+ "because MPI_Offset cannot support it\n");
+ }else {
+ /* verify correctness of assigning 2GB sizes */
+ mpi_off = 2 * 1024 * (MPI_Offset)MB;
+ INFO((mpi_off>0), "2GB OFFSET assignment no overflow");
+ INFO((mpi_off-1)==TWO_GB_LESS1, "2GB OFFSET assignment succeed");
+
+ /* verify correctness of increasing from below 2 GB to above 2GB */
+ mpi_off = TWO_GB_LESS1;
+ for (i=0; i < 3; i++){
+ mpi_off_old = mpi_off;
+ mpi_off = mpi_off + 1;
+ /* no overflow */
+ INFO((mpi_off>0), "2GB OFFSET increment no overflow");
+ /* correct inc. */
+ INFO((mpi_off-1)==mpi_off_old, "2GB OFFSET increment succeed");
+ }
+ }
+
+ if (sizeof_mpi_offset <= 4){
+ printf("Skipped 4GB range test "
+ "because MPI_Offset cannot support it\n");
+ }else {
+ /* verify correctness of assigning 4GB sizes */
+ mpi_off = 4 * 1024 * (MPI_Offset)MB;
+ INFO((mpi_off>0), "4GB OFFSET assignment no overflow");
+ INFO((mpi_off-1)==FOUR_GB_LESS1, "4GB OFFSET assignment succeed");
+
+ /* verify correctness of increasing from below 4 GB to above 4 GB */
+ mpi_off = FOUR_GB_LESS1;
+ for (i=0; i < 3; i++){
+ mpi_off_old = mpi_off;
+ mpi_off = mpi_off + 1;
+ /* no overflow */
+ INFO((mpi_off>0), "4GB OFFSET increment no overflow");
+ /* correct inc. */
+ INFO((mpi_off-1)==mpi_off_old, "4GB OFFSET increment succeed");
+ }
+ }
}
/*
* Verify if we can write to a file of multiple GB sizes.
*/
if (VERBOSE_MED)
- printf("MPIO GB file test %s\n", filename);
+ printf("MPIO GB file test %s\n", filename);
if (sizeof_mpi_offset <= 4){
- printf("Skipped GB file range test "
- "because MPI_Offset cannot support it\n");
+ printf("Skipped GB file range test "
+ "because MPI_Offset cannot support it\n");
}else{
- buf = malloc(MB);
- VRFY((buf!=NULL), "malloc succeed");
-
- /* open a new file. Remove it first in case it exists. */
- /* Must delete because MPI_File_open does not have a Truncate mode. */
- /* Don't care if it has error. */
- MPI_File_delete(filename, MPI_INFO_NULL);
- MPI_Barrier(MPI_COMM_WORLD); /* prevent racing condition */
-
- mrc = MPI_File_open(MPI_COMM_WORLD, filename, MPI_MODE_CREATE|MPI_MODE_RDWR,
- info, &fh);
- VRFY((mrc==MPI_SUCCESS), "MPI_FILE_OPEN");
-
- printf("MPIO GB file write test %s\n", filename);
-
- /* instead of writing every bytes of the file, we will just write
- * some data around the 2 and 4 GB boundaries. That should cover
- * potential integer overflow and filesystem size limits.
- */
- writerrs = 0;
- for (n=2; n <= 4; n+=2){
- ntimes = GB/MB*n/mpi_size + 1;
- for (i=ntimes-2; i <= ntimes; i++){
- mpi_off = (i*mpi_size + mpi_rank)*(MPI_Offset)MB;
- if (VERBOSE_MED)
- HDfprintf(stdout,"proc %d: write to mpi_off=%016llx, %lld\n",
- mpi_rank, mpi_off, mpi_off);
- /* set data to some trivial pattern for easy verification */
- for (j=0; j<MB; j++)
- *(buf+j) = i*mpi_size + mpi_rank;
- if (VERBOSE_MED)
- HDfprintf(stdout,"proc %d: writing %d bytes at offset %lld\n",
- mpi_rank, MB, mpi_off);
- mrc = MPI_File_write_at(fh, mpi_off, buf, MB, MPI_BYTE, &mpi_stat);
- INFO((mrc==MPI_SUCCESS), "GB size file write");
- if (mrc!=MPI_SUCCESS)
- writerrs++;
- }
- }
-
- /* close file and free the communicator */
- mrc = MPI_File_close(&fh);
- VRFY((mrc==MPI_SUCCESS), "MPI_FILE_CLOSE");
-
- mrc = MPI_Barrier(MPI_COMM_WORLD);
- VRFY((mrc==MPI_SUCCESS), "Sync after writes");
-
- /*
- * Verify if we can read the multiple GB file just created.
- */
- /* open it again to verify the data written */
- /* but only if there was no write errors */
- printf("MPIO GB file read test %s\n", filename);
- if (errors_sum(writerrs)>0){
- printf("proc %d: Skip read test due to previous write errors\n",
- mpi_rank);
- goto finish;
- }
- mrc = MPI_File_open(MPI_COMM_WORLD, filename, MPI_MODE_RDONLY, info, &fh);
- VRFY((mrc==MPI_SUCCESS), "");
-
- /* Only read back parts of the file that have been written. */
- for (n=2; n <= 4; n+=2){
- ntimes = GB/MB*n/mpi_size + 1;
- for (i=ntimes-2; i <= ntimes; i++){
- mpi_off = (i*mpi_size + (mpi_size - mpi_rank - 1))*(MPI_Offset)MB;
- if (VERBOSE_MED)
- HDfprintf(stdout,"proc %d: read from mpi_off=%016llx, %lld\n",
- mpi_rank, mpi_off, mpi_off);
- mrc = MPI_File_read_at(fh, mpi_off, buf, MB, MPI_BYTE, &mpi_stat);
- INFO((mrc==MPI_SUCCESS), "GB size file read");
- expected = i*mpi_size + (mpi_size - mpi_rank - 1);
- vrfyerrs=0;
- for (j=0; j<MB; j++){
- if ((*(buf+j) != expected) &&
- (vrfyerrs++ < MAX_ERR_REPORT || VERBOSE_MED)){
- printf("proc %d: found data error at [%ld+%d], expect %d, got %d\n",
- mpi_rank, (long)mpi_off, j, expected, *(buf+j));
- }
- }
- if (vrfyerrs > MAX_ERR_REPORT && !VERBOSE_MED)
- printf("proc %d: [more errors ...]\n", mpi_rank);
+ buf = HDmalloc(MB);
+ VRFY((buf!=NULL), "malloc succeed");
+
+ /* open a new file. Remove it first in case it exists. */
+ /* Must delete because MPI_File_open does not have a Truncate mode. */
+ /* Don't care if it has error. */
+ MPI_File_delete(filename, MPI_INFO_NULL);
+ MPI_Barrier(MPI_COMM_WORLD); /* prevent racing condition */
+
+ mrc = MPI_File_open(MPI_COMM_WORLD, filename, MPI_MODE_CREATE|MPI_MODE_RDWR,
+ info, &fh);
+ VRFY((mrc==MPI_SUCCESS), "MPI_FILE_OPEN");
+
+ printf("MPIO GB file write test %s\n", filename);
+
+ /* instead of writing every bytes of the file, we will just write
+ * some data around the 2 and 4 GB boundaries. That should cover
+ * potential integer overflow and filesystem size limits.
+ */
+ writerrs = 0;
+ for (n=2; n <= 4; n+=2){
+ ntimes = GB/MB*n/mpi_size + 1;
+ for (i=ntimes-2; i <= ntimes; i++){
+ mpi_off = (i*mpi_size + mpi_rank)*(MPI_Offset)MB;
+ if (VERBOSE_MED)
+ HDfprintf(stdout,"proc %d: write to mpi_off=%016llx, %lld\n",
+ mpi_rank, mpi_off, mpi_off);
+ /* set data to some trivial pattern for easy verification */
+ for (j=0; j<MB; j++)
+ *(buf+j) = i*mpi_size + mpi_rank;
+ if (VERBOSE_MED)
+ HDfprintf(stdout,"proc %d: writing %d bytes at offset %lld\n",
+ mpi_rank, MB, mpi_off);
+ mrc = MPI_File_write_at(fh, mpi_off, buf, MB, MPI_BYTE, &mpi_stat);
+ INFO((mrc==MPI_SUCCESS), "GB size file write");
+ if (mrc!=MPI_SUCCESS)
+ writerrs++;
+ }
+ }
- nerrs += vrfyerrs;
- }
- }
-
- /* close file and free the communicator */
- mrc = MPI_File_close(&fh);
- VRFY((mrc==MPI_SUCCESS), "MPI_FILE_CLOSE");
-
- /*
- * one more sync to ensure all processes have done reading
- * before ending this test.
- */
- mrc = MPI_Barrier(MPI_COMM_WORLD);
- VRFY((mrc==MPI_SUCCESS), "Sync before leaving test");
-
- /*
- * Check if MPI_File_get_size works correctly. Some systems (only SGI Altix
- * Propack 4 so far) return wrong file size. It can be avoided by reconfiguring
- * with "--disable-mpi-size".
- */
-#ifdef H5_HAVE_MPI_GET_SIZE
- printf("Test if MPI_File_get_size works correctly with %s\n", filename);
-
- mrc = MPI_File_open(MPI_COMM_WORLD, filename, MPI_MODE_RDONLY, info, &fh);
- VRFY((mrc==MPI_SUCCESS), "");
+ /* close file and free the communicator */
+ mrc = MPI_File_close(&fh);
+ VRFY((mrc==MPI_SUCCESS), "MPI_FILE_CLOSE");
+
+ mrc = MPI_Barrier(MPI_COMM_WORLD);
+ VRFY((mrc==MPI_SUCCESS), "Sync after writes");
+
+ /*
+ * Verify if we can read the multiple GB file just created.
+ */
+ /* open it again to verify the data written */
+ /* but only if there was no write errors */
+ printf("MPIO GB file read test %s\n", filename);
+ if (errors_sum(writerrs)>0){
+ printf("proc %d: Skip read test due to previous write errors\n",
+ mpi_rank);
+ goto finish;
+ }
+ mrc = MPI_File_open(MPI_COMM_WORLD, filename, MPI_MODE_RDONLY, info, &fh);
+ VRFY((mrc==MPI_SUCCESS), "");
+
+ /* Only read back parts of the file that have been written. */
+ for (n=2; n <= 4; n+=2){
+ ntimes = GB/MB*n/mpi_size + 1;
+ for (i=ntimes-2; i <= ntimes; i++){
+ mpi_off = (i*mpi_size + (mpi_size - mpi_rank - 1))*(MPI_Offset)MB;
+ if (VERBOSE_MED)
+ HDfprintf(stdout,"proc %d: read from mpi_off=%016llx, %lld\n",
+ mpi_rank, mpi_off, mpi_off);
+ mrc = MPI_File_read_at(fh, mpi_off, buf, MB, MPI_BYTE, &mpi_stat);
+ INFO((mrc==MPI_SUCCESS), "GB size file read");
+ expected = i*mpi_size + (mpi_size - mpi_rank - 1);
+ vrfyerrs=0;
+ for (j=0; j<MB; j++){
+ if ((*(buf+j) != expected) &&
+ (vrfyerrs++ < MAX_ERR_REPORT || VERBOSE_MED)){
+ printf("proc %d: found data error at [%ld+%d], expect %d, got %d\n",
+ mpi_rank, (long)mpi_off, j, expected, *(buf+j));
+ }
+ }
+ if (vrfyerrs > MAX_ERR_REPORT && !VERBOSE_MED)
+ printf("proc %d: [more errors ...]\n", mpi_rank);
+
+ nerrs += vrfyerrs;
+ }
+ }
- if (MAINPROCESS){ /* only process 0 needs to check it*/
- mrc = MPI_File_get_size(fh, &size);
- VRFY((mrc==MPI_SUCCESS), "");
+ /* close file and free the communicator */
+ mrc = MPI_File_close(&fh);
+ VRFY((mrc==MPI_SUCCESS), "MPI_FILE_CLOSE");
- mrc=HDstat(filename, &stat_buf);
- VRFY((mrc==0), "");
+ /*
+ * one more sync to ensure all processes have done reading
+ * before ending this test.
+ */
+ mrc = MPI_Barrier(MPI_COMM_WORLD);
+ VRFY((mrc==MPI_SUCCESS), "Sync before leaving test");
- /* Hopefully this casting is safe */
- if(size != (MPI_Offset)(stat_buf.st_size)) {
- printf("Warning: MPI_File_get_size doesn't return correct file size. To avoid using it in the library, reconfigure and rebuild the library with --disable-mpi-size.\n");
- }
+ printf("Test if MPI_File_get_size works correctly with %s\n", filename);
+
+ mrc = MPI_File_open(MPI_COMM_WORLD, filename, MPI_MODE_RDONLY, info, &fh);
+ VRFY((mrc==MPI_SUCCESS), "");
+
+ if (MAINPROCESS){ /* only process 0 needs to check it*/
+ mrc = MPI_File_get_size(fh, &size);
+ VRFY((mrc==MPI_SUCCESS), "");
+ VRFY((size == mpi_off+MB), "MPI_File_get_size doesn't return correct file size.");
}
- /* close file and free the communicator */
- mrc = MPI_File_close(&fh);
- VRFY((mrc==MPI_SUCCESS), "MPI_FILE_CLOSE");
+ /* close file and free the communicator */
+ mrc = MPI_File_close(&fh);
+ VRFY((mrc==MPI_SUCCESS), "MPI_FILE_CLOSE");
- /*
- * one more sync to ensure all processes have done reading
- * before ending this test.
- */
- mrc = MPI_Barrier(MPI_COMM_WORLD);
- VRFY((mrc==MPI_SUCCESS), "Sync before leaving test");
-#else
- printf("Skipped testing MPI_File_get_size because it's disabled\n");
-#endif
+ /*
+ * one more sync to ensure all processes have done reading
+ * before ending this test.
+ */
+ mrc = MPI_Barrier(MPI_COMM_WORLD);
+ VRFY((mrc==MPI_SUCCESS), "Sync before leaving test");
}
finish:
if (buf)
- HDfree(buf);
+ HDfree(buf);
return (nerrs);
}
@@ -443,11 +426,11 @@ finish:
* Each process writes something, then reads all data back.
*/
-#define DIMSIZE 32 /* Dimension size. */
+#define DIMSIZE 32 /* Dimension size. */
#define PRINTID printf("Proc %d: ", mpi_rank)
#define USENONE 0
-#define USEATOM 1 /* request atomic I/O */
-#define USEFSYNC 2 /* request file_sync */
+#define USEATOM 1 /* request atomic I/O */
+#define USEFSYNC 2 /* request file_sync */
static int
@@ -462,7 +445,7 @@ test_mpio_1wMr(char *filename, int special_request)
unsigned char writedata[DIMSIZE], readdata[DIMSIZE];
unsigned char expect_val;
int i, irank;
- int nerrs = 0; /* number of errors */
+ int nerrs = 0; /* number of errors */
int atomicity;
MPI_Offset mpi_off;
MPI_Status mpi_stat;
@@ -472,35 +455,35 @@ test_mpio_1wMr(char *filename, int special_request)
if (MAINPROCESS && VERBOSE_MED){
printf("Testing one process writes, all processes read.\n");
- printf("Using %d processes accessing file %s\n", mpi_size, filename);
+ printf("Using %d processes accessing file %s\n", mpi_size, filename);
printf(" (Filename can be specified via program argument)\n");
}
/* show the hostname so that we can tell where the processes are running */
if (VERBOSE_DEF){
- if (gethostname(hostname, 128) < 0){
- PRINTID;
- printf("gethostname failed\n");
- return 1;
- }
- PRINTID;
- printf("hostname=%s\n", hostname);
+ if (gethostname(hostname, 128) < 0){
+ PRINTID;
+ printf("gethostname failed\n");
+ return 1;
+ }
+ PRINTID;
+ printf("hostname=%s\n", hostname);
}
/* Delete any old file in order to start anew. */
/* Must delete because MPI_File_open does not have a Truncate mode. */
/* Don't care if it has error. */
MPI_File_delete(filename, MPI_INFO_NULL);
- MPI_Barrier(MPI_COMM_WORLD); /* prevent racing condition */
+ MPI_Barrier(MPI_COMM_WORLD); /* prevent racing condition */
if ((mpi_err = MPI_File_open(MPI_COMM_WORLD, filename,
- MPI_MODE_RDWR | MPI_MODE_CREATE ,
- MPI_INFO_NULL, &fh))
- != MPI_SUCCESS){
- MPI_Error_string(mpi_err, mpi_err_str, &mpi_err_strlen);
- PRINTID;
- printf("MPI_File_open failed (%s)\n", mpi_err_str);
- return 1;
+ MPI_MODE_RDWR | MPI_MODE_CREATE ,
+ MPI_INFO_NULL, &fh))
+ != MPI_SUCCESS){
+ MPI_Error_string(mpi_err, mpi_err_str, &mpi_err_strlen);
+ PRINTID;
+ printf("MPI_File_open failed (%s)\n", mpi_err_str);
+ return 1;
}
if (special_request & USEATOM){
@@ -509,31 +492,31 @@ if (special_request & USEATOM){
* should not need this.
* ==================================================*/
if ((mpi_err = MPI_File_get_atomicity(fh, &atomicity)) != MPI_SUCCESS){
- MPI_Error_string(mpi_err, mpi_err_str, &mpi_err_strlen);
- PRINTID;
- printf("MPI_File_get_atomicity failed (%s)\n", mpi_err_str);
+ MPI_Error_string(mpi_err, mpi_err_str, &mpi_err_strlen);
+ PRINTID;
+ printf("MPI_File_get_atomicity failed (%s)\n", mpi_err_str);
}
if (VERBOSE_HI)
- printf("Initial atomicity = %d\n", atomicity);
+ printf("Initial atomicity = %d\n", atomicity);
if ((mpi_err = MPI_File_set_atomicity(fh, 1)) != MPI_SUCCESS){
- MPI_Error_string(mpi_err, mpi_err_str, &mpi_err_strlen);
- PRINTID;
- printf("MPI_File_set_atomicity failed (%s)\n", mpi_err_str);
+ MPI_Error_string(mpi_err, mpi_err_str, &mpi_err_strlen);
+ PRINTID;
+ printf("MPI_File_set_atomicity failed (%s)\n", mpi_err_str);
}
if ((mpi_err = MPI_File_get_atomicity(fh, &atomicity)) != MPI_SUCCESS){
- MPI_Error_string(mpi_err, mpi_err_str, &mpi_err_strlen);
- PRINTID;
- printf("MPI_File_get_atomicity failed (%s)\n", mpi_err_str);
+ MPI_Error_string(mpi_err, mpi_err_str, &mpi_err_strlen);
+ PRINTID;
+ printf("MPI_File_get_atomicity failed (%s)\n", mpi_err_str);
}
if (VERBOSE_HI)
- printf("After set_atomicity atomicity = %d\n", atomicity);
+ printf("After set_atomicity atomicity = %d\n", atomicity);
}
/* This barrier is not necessary but do it anyway. */
MPI_Barrier(MPI_COMM_WORLD);
if (VERBOSE_HI){
- PRINTID;
- printf("between MPI_Barrier and MPI_File_write_at\n");
+ PRINTID;
+ printf("between MPI_Barrier and MPI_File_write_at\n");
}
/* ==================================================
@@ -542,31 +525,31 @@ if (special_request & USEATOM){
* ==================================================*/
irank=0;
for (i=0; i < DIMSIZE; i++)
- writedata[i] = irank*DIMSIZE + i;
+ writedata[i] = irank*DIMSIZE + i;
mpi_off = irank*DIMSIZE;
/* Only one process writes */
if (mpi_rank==irank){
- if (VERBOSE_HI){
- PRINTID; printf("wrote %d bytes at %ld\n", DIMSIZE, (long)mpi_off);
- }
- if ((mpi_err = MPI_File_write_at(fh, mpi_off, writedata, DIMSIZE,
- MPI_BYTE, &mpi_stat))
- != MPI_SUCCESS){
- MPI_Error_string(mpi_err, mpi_err_str, &mpi_err_strlen);
- PRINTID;
- printf("MPI_File_write_at offset(%ld), bytes (%d), failed (%s)\n",
- (long) mpi_off, DIMSIZE, mpi_err_str);
- return 1;
- };
+ if (VERBOSE_HI){
+ PRINTID; printf("wrote %d bytes at %ld\n", DIMSIZE, (long)mpi_off);
+ }
+ if ((mpi_err = MPI_File_write_at(fh, mpi_off, writedata, DIMSIZE,
+ MPI_BYTE, &mpi_stat))
+ != MPI_SUCCESS){
+ MPI_Error_string(mpi_err, mpi_err_str, &mpi_err_strlen);
+ PRINTID;
+ printf("MPI_File_write_at offset(%ld), bytes (%d), failed (%s)\n",
+ (long) mpi_off, DIMSIZE, mpi_err_str);
+ return 1;
+ };
};
/* Bcast the return code and */
/* make sure all writing are done before reading. */
MPI_Bcast(&mpi_err, 1, MPI_INT, irank, MPI_COMM_WORLD);
if (VERBOSE_HI){
- PRINTID;
- printf("MPI_Bcast: mpi_err = %d\n", mpi_err);
+ PRINTID;
+ printf("MPI_Bcast: mpi_err = %d\n", mpi_err);
}
if (special_request & USEFSYNC){
@@ -575,19 +558,19 @@ if (special_request & USEFSYNC){
* should not need this.
* ==================================================*/
if (VERBOSE_HI)
- printf("Apply MPI_File_sync\n");
+ printf("Apply MPI_File_sync\n");
/* call file_sync to force the write out */
if ((mpi_err = MPI_File_sync(fh)) != MPI_SUCCESS){
- MPI_Error_string(mpi_err, mpi_err_str, &mpi_err_strlen);
- PRINTID;
- printf("MPI_File_sync failed (%s)\n", mpi_err_str);
+ MPI_Error_string(mpi_err, mpi_err_str, &mpi_err_strlen);
+ PRINTID;
+ printf("MPI_File_sync failed (%s)\n", mpi_err_str);
}
MPI_Barrier(MPI_COMM_WORLD);
/* call file_sync to force the write out */
if ((mpi_err = MPI_File_sync(fh)) != MPI_SUCCESS){
- MPI_Error_string(mpi_err, mpi_err_str, &mpi_err_strlen);
- PRINTID;
- printf("MPI_File_sync failed (%s)\n", mpi_err_str);
+ MPI_Error_string(mpi_err, mpi_err_str, &mpi_err_strlen);
+ PRINTID;
+ printf("MPI_File_sync failed (%s)\n", mpi_err_str);
}
}
@@ -595,8 +578,8 @@ if (special_request & USEFSYNC){
/* should take care of it. Do it anyway. */
MPI_Barrier(MPI_COMM_WORLD);
if (VERBOSE_HI){
- PRINTID;
- printf("after MPI_Barrier\n");
+ PRINTID;
+ printf("after MPI_Barrier\n");
}
/* ==================================================
@@ -605,29 +588,29 @@ if (special_request & USEFSYNC){
irank=0;
mpi_off = irank*DIMSIZE;
if ((mpi_err = MPI_File_read_at(fh, mpi_off, readdata, DIMSIZE, MPI_BYTE,
- &mpi_stat))
- != MPI_SUCCESS){
- MPI_Error_string(mpi_err, mpi_err_str, &mpi_err_strlen);
- PRINTID;
- printf("MPI_File_read_at offset(%ld), bytes (%d), failed (%s)\n",
- (long) mpi_off, DIMSIZE, mpi_err_str);
- return 1;
+ &mpi_stat))
+ != MPI_SUCCESS){
+ MPI_Error_string(mpi_err, mpi_err_str, &mpi_err_strlen);
+ PRINTID;
+ printf("MPI_File_read_at offset(%ld), bytes (%d), failed (%s)\n",
+ (long) mpi_off, DIMSIZE, mpi_err_str);
+ return 1;
};
for (i=0; i < DIMSIZE; i++){
- expect_val = irank*DIMSIZE + i;
- if (readdata[i] != expect_val){
- PRINTID;
- printf("read data[%d:%d] got %02x, expect %02x\n", irank, i,
- readdata[i], expect_val);
- nerrs++;
- }
+ expect_val = irank*DIMSIZE + i;
+ if (readdata[i] != expect_val){
+ PRINTID;
+ printf("read data[%d:%d] got %02x, expect %02x\n", irank, i,
+ readdata[i], expect_val);
+ nerrs++;
+ }
}
MPI_File_close(&fh);
if (VERBOSE_HI){
- PRINTID;
- printf("%d data errors detected\n", nerrs);
+ PRINTID;
+ printf("%d data errors detected\n", nerrs);
}
mpi_err = MPI_Barrier(MPI_COMM_WORLD);
@@ -645,18 +628,18 @@ and this platform.
1. Details for the test:
1) Create two derived datatypes with MPI_Type_hindexed:
datatype1:
- count = 1, blocklens = 1, offsets = 0,
- base type = MPI_BYTE(essentially a char)
+ count = 1, blocklens = 1, offsets = 0,
+ base type = MPI_BYTE(essentially a char)
datatype2:
- count = 1, blocklens = 1, offsets = 1(byte),
- base type = MPI_BYTE
+ count = 1, blocklens = 1, offsets = 1(byte),
+ base type = MPI_BYTE
2) Using these two derived datatypes,
Build another derived datatype with MPI_Type_struct:
advtype: derived from datatype1 and datatype2
advtype:
- count = 2, blocklens[0] = 1, blocklens[1]=1,
- offsets[0] = 0, offsets[1] = 1(byte),
+ count = 2, blocklens[0] = 1, blocklens[1]=1,
+ offsets[0] = 0, offsets[1] = 1(byte),
bas_type[0]=datatype1,
bas_type[1] = datatype2;
@@ -695,7 +678,7 @@ static int test_mpio_derived_dtype(char *filename) {
int mpi_err_strlen;
int mpi_err;
int i;
- int nerrors = 0; /* number of errors */
+ int nerrors = 0; /* number of errors */
MPI_Datatype etype,filetype;
MPI_Datatype adv_filetype,bas_filetype[2];
MPI_Datatype etypenew, filetypenew;
@@ -719,12 +702,12 @@ static int test_mpio_derived_dtype(char *filename) {
if ((mpi_err = MPI_File_open(MPI_COMM_WORLD, filename,
- MPI_MODE_RDWR | MPI_MODE_CREATE,
- MPI_INFO_NULL, &fh))
- != MPI_SUCCESS){
- MPI_Error_string(mpi_err, mpi_err_str, &mpi_err_strlen);
- printf("MPI_File_open failed (%s)\n", mpi_err_str);
- return 1;
+ MPI_MODE_RDWR | MPI_MODE_CREATE,
+ MPI_INFO_NULL, &fh))
+ != MPI_SUCCESS){
+ MPI_Error_string(mpi_err, mpi_err_str, &mpi_err_strlen);
+ printf("MPI_File_open failed (%s)\n", mpi_err_str);
+ return 1;
}
disp = 0;
@@ -736,15 +719,15 @@ static int test_mpio_derived_dtype(char *filename) {
if((mpi_err= MPI_Type_hindexed(count,blocklens,offsets,MPI_BYTE,&filetype))
!= MPI_SUCCESS){
- MPI_Error_string(mpi_err, mpi_err_str, &mpi_err_strlen);
- printf("MPI_Type_contiguous failed (%s)\n", mpi_err_str);
- return 1;
+ MPI_Error_string(mpi_err, mpi_err_str, &mpi_err_strlen);
+ printf("MPI_Type_contiguous failed (%s)\n", mpi_err_str);
+ return 1;
}
if((mpi_err=MPI_Type_commit(&filetype))!=MPI_SUCCESS){
MPI_Error_string(mpi_err, mpi_err_str, &mpi_err_strlen);
- printf("MPI_Type_commit failed (%s)\n", mpi_err_str);
- return 1;
+ printf("MPI_Type_commit failed (%s)\n", mpi_err_str);
+ return 1;
}
count = 1;
@@ -752,15 +735,15 @@ static int test_mpio_derived_dtype(char *filename) {
offsets[0] = 1;
if((mpi_err= MPI_Type_hindexed(count,blocklens,offsets,MPI_BYTE,&filetypenew))
!= MPI_SUCCESS){
- MPI_Error_string(mpi_err, mpi_err_str, &mpi_err_strlen);
- printf("MPI_Type_contiguous failed (%s)\n", mpi_err_str);
- return 1;
+ MPI_Error_string(mpi_err, mpi_err_str, &mpi_err_strlen);
+ printf("MPI_Type_contiguous failed (%s)\n", mpi_err_str);
+ return 1;
}
if((mpi_err=MPI_Type_commit(&filetypenew))!=MPI_SUCCESS){
MPI_Error_string(mpi_err, mpi_err_str, &mpi_err_strlen);
- printf("MPI_Type_commit failed (%s)\n", mpi_err_str);
- return 1;
+ printf("MPI_Type_commit failed (%s)\n", mpi_err_str);
+ return 1;
}
outcount = 2;
@@ -773,48 +756,48 @@ static int test_mpio_derived_dtype(char *filename) {
if((mpi_err= MPI_Type_struct(outcount,adv_blocklens,adv_disp,bas_filetype,&adv_filetype))
!= MPI_SUCCESS){
- MPI_Error_string(mpi_err, mpi_err_str, &mpi_err_strlen);
- printf("MPI_Type_struct failed (%s)\n", mpi_err_str);
- return 1;
+ MPI_Error_string(mpi_err, mpi_err_str, &mpi_err_strlen);
+ printf("MPI_Type_struct failed (%s)\n", mpi_err_str);
+ return 1;
}
if((mpi_err=MPI_Type_commit(&adv_filetype))!=MPI_SUCCESS){
MPI_Error_string(mpi_err, mpi_err_str, &mpi_err_strlen);
- printf("MPI_Type_commit failed (%s)\n", mpi_err_str);
- return 1;
+ printf("MPI_Type_commit failed (%s)\n", mpi_err_str);
+ return 1;
}
if((mpi_err = MPI_File_set_view(fh,disp,etype,adv_filetype,"native",MPI_INFO_NULL))!= MPI_SUCCESS){
MPI_Error_string(mpi_err, mpi_err_str, &mpi_err_strlen);
- printf("MPI_File_set_view failed (%s)\n", mpi_err_str);
- return 1;
+ printf("MPI_File_set_view failed (%s)\n", mpi_err_str);
+ return 1;
}
if((mpi_err = MPI_File_write(fh,buf,3,MPI_BYTE,&Status))!= MPI_SUCCESS){
MPI_Error_string(mpi_err, mpi_err_str, &mpi_err_strlen);
- printf("MPI_File_write failed (%s)\n", mpi_err_str);
- return 1;
+ printf("MPI_File_write failed (%s)\n", mpi_err_str);
+ return 1;
;
}
if((mpi_err = MPI_File_close(&fh)) != MPI_SUCCESS){
MPI_Error_string(mpi_err, mpi_err_str, &mpi_err_strlen);
- printf("MPI_File_close failed (%s)\n", mpi_err_str);
- return 1;
+ printf("MPI_File_close failed (%s)\n", mpi_err_str);
+ return 1;
}
if((mpi_err = MPI_File_open(MPI_COMM_WORLD,filename,MPI_MODE_RDONLY,MPI_INFO_NULL,&fh)) != MPI_SUCCESS){
MPI_Error_string(mpi_err, mpi_err_str, &mpi_err_strlen);
- printf("MPI_File_open failed (%s)\n", mpi_err_str);
- return 1;
+ printf("MPI_File_open failed (%s)\n", mpi_err_str);
+ return 1;
}
if((mpi_err = MPI_File_set_view(fh,0,MPI_BYTE,MPI_BYTE,"native",MPI_INFO_NULL))!= MPI_SUCCESS){
MPI_Error_string(mpi_err, mpi_err_str, &mpi_err_strlen);
- printf("MPI_File_set_view failed (%s)\n", mpi_err_str);
- return 1;
+ printf("MPI_File_set_view failed (%s)\n", mpi_err_str);
+ return 1;
}
if((mpi_err = MPI_File_read(fh,outbuf,3,MPI_BYTE,&Status))!=MPI_SUCCESS){
MPI_Error_string(mpi_err, mpi_err_str, &mpi_err_strlen);
@@ -837,8 +820,8 @@ static int test_mpio_derived_dtype(char *filename) {
if((mpi_err = MPI_File_close(&fh)) != MPI_SUCCESS){
MPI_Error_string(mpi_err, mpi_err_str, &mpi_err_strlen);
- printf("MPI_File_close failed (%s)\n", mpi_err_str);
- return 1;
+ printf("MPI_File_close failed (%s)\n", mpi_err_str);
+ return 1;
}
@@ -1022,55 +1005,55 @@ static int
parse_options(int argc, char **argv)
{
while (--argc){
- if (**(++argv) != '-'){
- break;
- }else{
- switch(*(*argv+1)){
- case 'v': if (*((*argv+1)+1))
- ParseTestVerbosity((*argv+1)+1);
- else
- SetTestVerbosity(VERBO_MED);
- break;
- case 'f': if (--argc < 1) {
- nerrors++;
- return(1);
- }
- if (**(++argv) == '-') {
- nerrors++;
- return(1);
- }
- paraprefix = *argv;
- break;
- case 'h': /* print help message--return with nerrors set */
- return(1);
- default: nerrors++;
- return(1);
- }
- }
+ if (**(++argv) != '-'){
+ break;
+ }else{
+ switch(*(*argv+1)){
+ case 'v': if (*((*argv+1)+1))
+ ParseTestVerbosity((*argv+1)+1);
+ else
+ SetTestVerbosity(VERBO_MED);
+ break;
+ case 'f': if (--argc < 1) {
+ nerrors++;
+ return(1);
+ }
+ if (**(++argv) == '-') {
+ nerrors++;
+ return(1);
+ }
+ paraprefix = *argv;
+ break;
+ case 'h': /* print help message--return with nerrors set */
+ return(1);
+ default: nerrors++;
+ return(1);
+ }
+ }
} /*while*/
/* compose the test filenames */
{
- int i, n;
- hid_t plist;
-
- plist = H5Pcreate (H5P_FILE_ACCESS);
- H5Pset_fapl_mpio(plist, MPI_COMM_WORLD, MPI_INFO_NULL);
- n = sizeof(FILENAME)/sizeof(FILENAME[0]) - 1; /* exclude the NULL */
-
- for (i=0; i < n; i++)
- if (h5_fixname(FILENAME[i],plist,filenames[i],sizeof(filenames[i]))
- == NULL){
- printf("h5_fixname failed\n");
- nerrors++;
- return(1);
- }
- H5Pclose(plist);
- if (VERBOSE_MED){
- printf("Test filenames are:\n");
- for (i=0; i < n; i++)
- printf(" %s\n", filenames[i]);
- }
+ int i, n;
+ hid_t plist;
+
+ plist = H5Pcreate (H5P_FILE_ACCESS);
+ H5Pset_fapl_mpio(plist, MPI_COMM_WORLD, MPI_INFO_NULL);
+ n = sizeof(FILENAME)/sizeof(FILENAME[0]) - 1; /* exclude the NULL */
+
+ for (i=0; i < n; i++)
+ if (h5_fixname(FILENAME[i],plist,filenames[i],sizeof(filenames[i]))
+ == NULL){
+ printf("h5_fixname failed\n");
+ nerrors++;
+ return(1);
+ }
+ H5Pclose(plist);
+ if (VERBOSE_MED){
+ printf("Test filenames are:\n");
+ for (i=0; i < n; i++)
+ printf(" %s\n", filenames[i]);
+ }
}
return(0);
@@ -1104,7 +1087,7 @@ errors_sum(int nerrs)
int
main(int argc, char **argv)
{
- int mpi_size, mpi_rank; /* mpi variables */
+ int mpi_size, mpi_rank; /* mpi variables */
int ret_code;
MPI_Init(&argc, &argv);
@@ -1117,23 +1100,23 @@ main(int argc, char **argv)
* calls. By then, MPI calls may not work.
*/
if (H5dont_atexit() < 0){
- printf("Failed to turn off atexit processing. Continue.\n", mpi_rank);
+ printf("Failed to turn off atexit processing. Continue.\n", mpi_rank);
};
H5open();
if (parse_options(argc, argv) != 0){
- if (MAINPROCESS)
- usage();
- goto finish;
+ if (MAINPROCESS)
+ usage();
+ goto finish;
}
if (MAINPROCESS){
- printf("===================================\n");
- printf("MPI functionality tests\n");
- printf("===================================\n");
+ printf("===================================\n");
+ printf("MPI functionality tests\n");
+ printf("===================================\n");
}
if (VERBOSE_MED)
- h5_show_hostname();
+ h5_show_hostname();
fapl = H5Pcreate (H5P_FILE_ACCESS);
H5Pset_fapl_mpio(fapl, MPI_COMM_WORLD, MPI_INFO_NULL);
@@ -1149,28 +1132,28 @@ main(int argc, char **argv)
ret_code = test_mpio_1wMr(filenames[0], USENONE);
ret_code = errors_sum(ret_code);
if (mpi_rank==0 && ret_code > 0){
- printf("***FAILED with %d total errors\n", ret_code);
- nerrors += ret_code;
+ printf("***FAILED with %d total errors\n", ret_code);
+ nerrors += ret_code;
}
/* test atomicity and file sync in high verbose mode only */
/* since they often hang when broken and PHDF5 does not use them. */
if (VERBOSE_HI){
- MPI_BANNER("MPIO 1 write Many read test with atomicity...");
- ret_code = test_mpio_1wMr(filenames[0], USEATOM);
- ret_code = errors_sum(ret_code);
- if (mpi_rank==0 && ret_code > 0){
- printf("***FAILED with %d total errors\n", ret_code);
- nerrors += ret_code;
- }
-
- MPI_BANNER("MPIO 1 write Many read test with file sync...");
- ret_code = test_mpio_1wMr(filenames[0], USEFSYNC);
- ret_code = errors_sum(ret_code);
- if (mpi_rank==0 && ret_code > 0){
- printf("***FAILED with %d total errors\n", ret_code);
- nerrors += ret_code;
- }
+ MPI_BANNER("MPIO 1 write Many read test with atomicity...");
+ ret_code = test_mpio_1wMr(filenames[0], USEATOM);
+ ret_code = errors_sum(ret_code);
+ if (mpi_rank==0 && ret_code > 0){
+ printf("***FAILED with %d total errors\n", ret_code);
+ nerrors += ret_code;
+ }
+
+ MPI_BANNER("MPIO 1 write Many read test with file sync...");
+ ret_code = test_mpio_1wMr(filenames[0], USEFSYNC);
+ ret_code = errors_sum(ret_code);
+ if (mpi_rank==0 && ret_code > 0){
+ printf("***FAILED with %d total errors\n", ret_code);
+ nerrors += ret_code;
+ }
}
@@ -1190,7 +1173,6 @@ main(int argc, char **argv)
printf(" will be skipped on Windows (JIRA HDDFV-8064)\n");
#endif
-
/*=======================================
* MPIO independent overlapping writes
*=======================================*/
@@ -1198,8 +1180,8 @@ main(int argc, char **argv)
ret_code = test_mpio_overlap_writes(filenames[0]);
ret_code = errors_sum(ret_code);
if (mpi_rank==0 && ret_code > 0){
- printf("***FAILED with %d total errors\n", ret_code);
- nerrors += ret_code;
+ printf("***FAILED with %d total errors\n", ret_code);
+ nerrors += ret_code;
}
/*=======================================
@@ -1209,8 +1191,8 @@ main(int argc, char **argv)
ret_code = test_mpio_derived_dtype(filenames[0]);
ret_code = errors_sum(ret_code);
if (mpi_rank==0 && ret_code > 0){
- printf("***FAILED with %d total errors\n", ret_code);
- nerrors += ret_code;
+ printf("***FAILED with %d total errors\n", ret_code);
+ nerrors += ret_code;
}
/*=======================================
@@ -1230,8 +1212,8 @@ main(int argc, char **argv)
sc_finish:
ret_code = errors_sum(ret_code);
if (mpi_rank==0 && ret_code > 0){
- printf("***FAILED with %d total errors\n", ret_code);
- nerrors += ret_code;
+ printf("***FAILED with %d total errors\n", ret_code);
+ nerrors += ret_code;
}
@@ -1240,15 +1222,15 @@ finish:
* and exit.
*/
MPI_Barrier(MPI_COMM_WORLD);
- if (MAINPROCESS){ /* only process 0 reports */
- printf("===================================\n");
- if (nerrors){
- printf("***MPI tests detected %d errors***\n", nerrors);
- }
- else{
- printf("MPI tests finished with no errors\n");
- }
- printf("===================================\n");
+ if (MAINPROCESS){ /* only process 0 reports */
+ printf("===================================\n");
+ if (nerrors){
+ printf("***MPI tests detected %d errors***\n", nerrors);
+ }
+ else{
+ printf("MPI tests finished with no errors\n");
+ }
+ printf("===================================\n");
}
/* turn off alarm */
diff --git a/testpar/testphdf5.c b/testpar/testphdf5.c
index d91c24c..865d381 100644
--- a/testpar/testphdf5.c
+++ b/testpar/testphdf5.c
@@ -28,15 +28,15 @@ int dim0;
int dim1;
int chunkdim0;
int chunkdim1;
-int nerrors = 0; /* errors count */
-int ndatasets = 300; /* number of datasets to create*/
+int nerrors = 0; /* errors count */
+int ndatasets = 300; /* number of datasets to create*/
int ngroups = 512; /* number of groups to create in root
* group. */
-int facc_type = FACC_MPIO; /*Test file access type */
+int facc_type = FACC_MPIO; /*Test file access type */
int dxfer_coll_type = DXFER_COLLECTIVE_IO;
-H5E_auto2_t old_func; /* previous error handler */
-void *old_client_data; /* previous error handler arg.*/
+H5E_auto2_t old_func; /* previous error handler */
+void *old_client_data; /* previous error handler arg.*/
/* other option flags */
@@ -48,10 +48,10 @@ void *old_client_data; /* previous error handler arg.*/
#define NFILENAME 2
#define PARATESTFILE filenames[0]
const char *FILENAME[NFILENAME]={
- "ParaTest",
- NULL};
-char filenames[NFILENAME][PATH_MAX];
-hid_t fapl; /* file access property list */
+ "ParaTest",
+ NULL};
+char filenames[NFILENAME][PATH_MAX];
+hid_t fapl; /* file access property list */
#ifdef USE_PAUSE
/* pause the process for a moment to allow debugger to attach if desired. */
@@ -64,7 +64,7 @@ void pause_proc(void)
{
int pid;
- h5_stat_t statbuf;
+ h5_stat_t statbuf;
char greenlight[] = "go";
int maxloop = 10;
int loops = 0;
@@ -82,14 +82,14 @@ void pause_proc(void)
if (MAINPROCESS)
while ((HDstat(greenlight, &statbuf) == -1) && loops < maxloop){
- if (!loops++){
- printf("Proc %d (%*s, %d): to debug, attach %d\n",
- mpi_rank, mpi_namelen, mpi_name, pid, pid);
- }
- printf("waiting(%ds) for file %s ...\n", time_int, greenlight);
- fflush(stdout);
- sleep(time_int);
- }
+ if (!loops++){
+ printf("Proc %d (%*s, %d): to debug, attach %d\n",
+ mpi_rank, mpi_namelen, mpi_name, pid, pid);
+ }
+ printf("waiting(%ds) for file %s ...\n", time_int, greenlight);
+ fflush(stdout);
+ sleep(time_int);
+ }
MPI_Barrier(MPI_COMM_WORLD);
}
@@ -101,7 +101,7 @@ int MPI_Init(int *argc, char ***argv)
pause_proc();
return (ret_code);
}
-#endif /* USE_PAUSE */
+#endif /* USE_PAUSE */
/*
@@ -111,15 +111,15 @@ static void
usage(void)
{
printf(" [-r] [-w] [-m<n_datasets>] [-n<n_groups>] "
- "[-o] [-f <prefix>] [-d <dim0> <dim1>]\n");
+ "[-o] [-f <prefix>] [-d <dim0> <dim1>]\n");
printf("\t-m<n_datasets>"
- "\tset number of datasets for the multiple dataset test\n");
+ "\tset number of datasets for the multiple dataset test\n");
printf("\t-n<n_groups>"
"\tset number of groups for the multiple group test\n");
printf("\t-f <prefix>\tfilename prefix\n");
printf("\t-2\t\tuse Split-file together with MPIO\n");
printf("\t-d <factor0> <factor1>\tdataset dimensions factors. Defaults (%d,%d)\n",
- ROW_FACTOR, COL_FACTOR);
+ ROW_FACTOR, COL_FACTOR);
printf("\t-c <dim0> <dim1>\tdataset chunk dimensions. Defaults (dim0/10,dim1/10)\n");
printf("\n");
}
@@ -131,7 +131,7 @@ usage(void)
static int
parse_options(int argc, char **argv)
{
- int mpi_size, mpi_rank; /* mpi variables */
+ int mpi_size, mpi_rank; /* mpi variables */
MPI_Comm_size(MPI_COMM_WORLD, &mpi_size);
MPI_Comm_rank(MPI_COMM_WORLD, &mpi_rank);
@@ -142,107 +142,107 @@ parse_options(int argc, char **argv)
chunkdim1 = (dim1+9)/10;
while (--argc){
- if (**(++argv) != '-'){
- break;
- }else{
- switch(*(*argv+1)){
- case 'm': ndatasets = atoi((*argv+1)+1);
- if (ndatasets < 0){
- nerrors++;
- return(1);
- }
- break;
- case 'n': ngroups = atoi((*argv+1)+1);
- if (ngroups < 0){
+ if (**(++argv) != '-'){
+ break;
+ }else{
+ switch(*(*argv+1)){
+ case 'm': ndatasets = atoi((*argv+1)+1);
+ if (ndatasets < 0){
+ nerrors++;
+ return(1);
+ }
+ break;
+ case 'n': ngroups = atoi((*argv+1)+1);
+ if (ngroups < 0){
nerrors++;
return(1);
- }
+ }
break;
- case 'f': if (--argc < 1) {
- nerrors++;
- return(1);
- }
- if (**(++argv) == '-') {
- nerrors++;
- return(1);
- }
- paraprefix = *argv;
- break;
- case 'i': /* Collective MPI-IO access with independent IO */
- dxfer_coll_type = DXFER_INDEPENDENT_IO;
- break;
- case '2': /* Use the split-file driver with MPIO access */
- /* Can use $HDF5_METAPREFIX to define the */
- /* meta-file-prefix. */
- facc_type = FACC_MPIO | FACC_SPLIT;
- break;
- case 'd': /* dimensizes */
- if (--argc < 2){
- nerrors++;
- return(1);
- }
- dim0 = atoi(*(++argv))*mpi_size;
- argc--;
- dim1 = atoi(*(++argv))*mpi_size;
- /* set default chunkdim sizes too */
- chunkdim0 = (dim0+9)/10;
- chunkdim1 = (dim1+9)/10;
- break;
- case 'c': /* chunk dimensions */
- if (--argc < 2){
- nerrors++;
- return(1);
- }
- chunkdim0 = atoi(*(++argv));
- argc--;
- chunkdim1 = atoi(*(++argv));
- break;
- case 'h': /* print help message--return with nerrors set */
- return(1);
- default: printf("Illegal option(%s)\n", *argv);
- nerrors++;
- return(1);
- }
- }
+ case 'f': if (--argc < 1) {
+ nerrors++;
+ return(1);
+ }
+ if (**(++argv) == '-') {
+ nerrors++;
+ return(1);
+ }
+ paraprefix = *argv;
+ break;
+ case 'i': /* Collective MPI-IO access with independent IO */
+ dxfer_coll_type = DXFER_INDEPENDENT_IO;
+ break;
+ case '2': /* Use the split-file driver with MPIO access */
+ /* Can use $HDF5_METAPREFIX to define the */
+ /* meta-file-prefix. */
+ facc_type = FACC_MPIO | FACC_SPLIT;
+ break;
+ case 'd': /* dimensizes */
+ if (--argc < 2){
+ nerrors++;
+ return(1);
+ }
+ dim0 = atoi(*(++argv))*mpi_size;
+ argc--;
+ dim1 = atoi(*(++argv))*mpi_size;
+ /* set default chunkdim sizes too */
+ chunkdim0 = (dim0+9)/10;
+ chunkdim1 = (dim1+9)/10;
+ break;
+ case 'c': /* chunk dimensions */
+ if (--argc < 2){
+ nerrors++;
+ return(1);
+ }
+ chunkdim0 = atoi(*(++argv));
+ argc--;
+ chunkdim1 = atoi(*(++argv));
+ break;
+ case 'h': /* print help message--return with nerrors set */
+ return(1);
+ default: printf("Illegal option(%s)\n", *argv);
+ nerrors++;
+ return(1);
+ }
+ }
} /*while*/
/* check validity of dimension and chunk sizes */
if (dim0 <= 0 || dim1 <= 0){
- printf("Illegal dim sizes (%d, %d)\n", dim0, dim1);
- nerrors++;
- return(1);
+ printf("Illegal dim sizes (%d, %d)\n", dim0, dim1);
+ nerrors++;
+ return(1);
}
if (chunkdim0 <= 0 || chunkdim1 <= 0){
- printf("Illegal chunkdim sizes (%d, %d)\n", chunkdim0, chunkdim1);
- nerrors++;
- return(1);
+ printf("Illegal chunkdim sizes (%d, %d)\n", chunkdim0, chunkdim1);
+ nerrors++;
+ return(1);
}
/* Make sure datasets can be divided into equal portions by the processes */
if ((dim0 % mpi_size) || (dim1 % mpi_size)){
- if (MAINPROCESS)
- printf("dim0(%d) and dim1(%d) must be multiples of processes(%d)\n",
- dim0, dim1, mpi_size);
- nerrors++;
- return(1);
+ if (MAINPROCESS)
+ printf("dim0(%d) and dim1(%d) must be multiples of processes(%d)\n",
+ dim0, dim1, mpi_size);
+ nerrors++;
+ return(1);
}
/* compose the test filenames */
{
- int i, n;
-
- n = sizeof(FILENAME)/sizeof(FILENAME[0]) - 1; /* exclude the NULL */
-
- for (i=0; i < n; i++)
- if (h5_fixname(FILENAME[i],fapl,filenames[i],sizeof(filenames[i]))
- == NULL){
- printf("h5_fixname failed\n");
- nerrors++;
- return(1);
- }
- printf("Test filenames are:\n");
- for (i=0; i < n; i++)
- printf(" %s\n", filenames[i]);
+ int i, n;
+
+ n = sizeof(FILENAME)/sizeof(FILENAME[0]) - 1; /* exclude the NULL */
+
+ for (i=0; i < n; i++)
+ if (h5_fixname(FILENAME[i],fapl,filenames[i],sizeof(filenames[i]))
+ == NULL){
+ printf("h5_fixname failed\n");
+ nerrors++;
+ return(1);
+ }
+ printf("Test filenames are:\n");
+ for (i=0; i < n; i++)
+ printf(" %s\n", filenames[i]);
}
return(0);
@@ -257,7 +257,7 @@ create_faccess_plist(MPI_Comm comm, MPI_Info info, int l_facc_type)
{
hid_t ret_pl = -1;
herr_t ret; /* generic return value */
- int mpi_rank; /* mpi variables */
+ int mpi_rank; /* mpi variables */
/* need the rank for error checking macros */
MPI_Comm_rank(MPI_COMM_WORLD, &mpi_rank);
@@ -266,32 +266,32 @@ create_faccess_plist(MPI_Comm comm, MPI_Info info, int l_facc_type)
VRFY((ret_pl >= 0), "H5P_FILE_ACCESS");
if (l_facc_type == FACC_DEFAULT)
- return (ret_pl);
+ return (ret_pl);
if (l_facc_type == FACC_MPIO){
- /* set Parallel access with communicator */
- ret = H5Pset_fapl_mpio(ret_pl, comm, info);
- VRFY((ret >= 0), "");
- return(ret_pl);
+ /* set Parallel access with communicator */
+ ret = H5Pset_fapl_mpio(ret_pl, comm, info);
+ VRFY((ret >= 0), "");
+ return(ret_pl);
}
if (l_facc_type == (FACC_MPIO | FACC_SPLIT)){
- hid_t mpio_pl;
-
- mpio_pl = H5Pcreate (H5P_FILE_ACCESS);
- VRFY((mpio_pl >= 0), "");
- /* set Parallel access with communicator */
- ret = H5Pset_fapl_mpio(mpio_pl, comm, info);
- VRFY((ret >= 0), "");
-
- /* setup file access template */
- ret_pl = H5Pcreate (H5P_FILE_ACCESS);
- VRFY((ret_pl >= 0), "");
- /* set Parallel access with communicator */
- ret = H5Pset_fapl_split(ret_pl, ".meta", mpio_pl, ".raw", mpio_pl);
- VRFY((ret >= 0), "H5Pset_fapl_split succeeded");
- H5Pclose(mpio_pl);
- return(ret_pl);
+ hid_t mpio_pl;
+
+ mpio_pl = H5Pcreate (H5P_FILE_ACCESS);
+ VRFY((mpio_pl >= 0), "");
+ /* set Parallel access with communicator */
+ ret = H5Pset_fapl_mpio(mpio_pl, comm, info);
+ VRFY((ret >= 0), "");
+
+ /* setup file access template */
+ ret_pl = H5Pcreate (H5P_FILE_ACCESS);
+ VRFY((ret_pl >= 0), "");
+ /* set Parallel access with communicator */
+ ret = H5Pset_fapl_split(ret_pl, ".meta", mpio_pl, ".raw", mpio_pl);
+ VRFY((ret >= 0), "H5Pset_fapl_split succeeded");
+ H5Pclose(mpio_pl);
+ return(ret_pl);
}
/* unknown file access types */
@@ -301,7 +301,7 @@ create_faccess_plist(MPI_Comm comm, MPI_Info info, int l_facc_type)
int main(int argc, char **argv)
{
- int mpi_size, mpi_rank; /* mpi variables */
+ int mpi_size, mpi_rank; /* mpi variables */
H5Ptest_param_t ndsets_params, ngroups_params;
H5Ptest_param_t collngroups_params;
H5Ptest_param_t io_mode_confusion_params;
@@ -319,9 +319,9 @@ int main(int argc, char **argv)
dim1 = COL_FACTOR*mpi_size;
if (MAINPROCESS){
- printf("===================================\n");
- printf("PHDF5 TESTS START\n");
- printf("===================================\n");
+ printf("===================================\n");
+ printf("PHDF5 TESTS START\n");
+ printf("===================================\n");
}
/* Attempt to turn off atexit post processing so that in case errors
@@ -340,62 +340,65 @@ int main(int argc, char **argv)
/* Tests are generally arranged from least to most complexity... */
AddTest("mpiodup", test_fapl_mpio_dup, NULL,
- "fapl_mpio duplicate", NULL);
+ "fapl_mpio duplicate", NULL);
AddTest("split", test_split_comm_access, NULL,
- "dataset using split communicators", PARATESTFILE);
+ "dataset using split communicators", PARATESTFILE);
AddTest("idsetw", dataset_writeInd, NULL,
- "dataset independent write", PARATESTFILE);
+ "dataset independent write", PARATESTFILE);
AddTest("idsetr", dataset_readInd, NULL,
- "dataset independent read", PARATESTFILE);
+ "dataset independent read", PARATESTFILE);
AddTest("cdsetw", dataset_writeAll, NULL,
- "dataset collective write", PARATESTFILE);
+ "dataset collective write", PARATESTFILE);
AddTest("cdsetr", dataset_readAll, NULL,
- "dataset collective read", PARATESTFILE);
+ "dataset collective read", PARATESTFILE);
AddTest("eidsetw", extend_writeInd, NULL,
- "extendible dataset independent write", PARATESTFILE);
+ "extendible dataset independent write", PARATESTFILE);
AddTest("eidsetr", extend_readInd, NULL,
- "extendible dataset independent read", PARATESTFILE);
+ "extendible dataset independent read", PARATESTFILE);
AddTest("ecdsetw", extend_writeAll, NULL,
- "extendible dataset collective write", PARATESTFILE);
+ "extendible dataset collective write", PARATESTFILE);
AddTest("ecdsetr", extend_readAll, NULL,
- "extendible dataset collective read", PARATESTFILE);
+ "extendible dataset collective read", PARATESTFILE);
AddTest("eidsetw2", extend_writeInd2, NULL,
- "extendible dataset independent write #2", PARATESTFILE);
+ "extendible dataset independent write #2", PARATESTFILE);
AddTest("selnone", none_selection_chunk, NULL,
"chunked dataset with none-selection", PARATESTFILE);
AddTest("calloc", test_chunk_alloc, NULL,
- "parallel extend Chunked allocation on serial file", PARATESTFILE);
+ "parallel extend Chunked allocation on serial file", PARATESTFILE);
AddTest("fltread", test_filter_read, NULL,
- "parallel read of dataset written serially with filters", PARATESTFILE);
+ "parallel read of dataset written serially with filters", PARATESTFILE);
#ifdef H5_HAVE_FILTER_DEFLATE
AddTest("cmpdsetr", compress_readAll, NULL,
- "compressed dataset collective read", PARATESTFILE);
+ "compressed dataset collective read", PARATESTFILE);
#endif /* H5_HAVE_FILTER_DEFLATE */
+ AddTest("zerodsetr", zero_dim_dset, NULL,
+ "zero dim dset", PARATESTFILE);
+
ndsets_params.name = PARATESTFILE;
ndsets_params.count = ndatasets;
AddTest("ndsetw", multiple_dset_write, NULL,
- "multiple datasets write", &ndsets_params);
+ "multiple datasets write", &ndsets_params);
ngroups_params.name = PARATESTFILE;
ngroups_params.count = ngroups;
AddTest("ngrpw", multiple_group_write, NULL,
- "multiple groups write", &ngroups_params);
+ "multiple groups write", &ngroups_params);
AddTest("ngrpr", multiple_group_read, NULL,
- "multiple groups read", &ngroups_params);
+ "multiple groups read", &ngroups_params);
AddTest("compact", compact_dataset, NULL,
- "compact dataset test", PARATESTFILE);
+ "compact dataset test", PARATESTFILE);
collngroups_params.name = PARATESTFILE;
collngroups_params.count = ngroups;
AddTest("cngrpw", collective_group_write, NULL,
- "collective group and dataset write", &collngroups_params);
+ "collective group and dataset write", &collngroups_params);
AddTest("ingrpr", independent_group_read, NULL,
"independent group and dataset read", &collngroups_params);
#ifndef H5_HAVE_WIN32_API
@@ -405,71 +408,71 @@ int main(int argc, char **argv)
printf("big dataset test will be skipped on Windows (JIRA HDDFV-8064)\n");
#endif
AddTest("fill", dataset_fillvalue, NULL,
- "dataset fill value", PARATESTFILE);
+ "dataset fill value", PARATESTFILE);
AddTest("cchunk1",
- coll_chunk1,NULL, "simple collective chunk io",PARATESTFILE);
+ coll_chunk1,NULL, "simple collective chunk io",PARATESTFILE);
AddTest("cchunk2",
- coll_chunk2,NULL, "noncontiguous collective chunk io",PARATESTFILE);
+ coll_chunk2,NULL, "noncontiguous collective chunk io",PARATESTFILE);
AddTest("cchunk3",
- coll_chunk3,NULL, "multi-chunk collective chunk io",PARATESTFILE);
+ coll_chunk3,NULL, "multi-chunk collective chunk io",PARATESTFILE);
AddTest("cchunk4",
coll_chunk4,NULL, "collective chunk io with partial non-selection ",PARATESTFILE);
if((mpi_size < 3)&& MAINPROCESS ) {
- printf("Collective chunk IO optimization APIs ");
- printf("needs at least 3 processes to participate\n");
- printf("Collective chunk IO API tests will be skipped \n");
+ printf("Collective chunk IO optimization APIs ");
+ printf("needs at least 3 processes to participate\n");
+ printf("Collective chunk IO API tests will be skipped \n");
}
AddTest((mpi_size <3)? "-cchunk5":"cchunk5" ,
coll_chunk5,NULL,
- "linked chunk collective IO without optimization",PARATESTFILE);
+ "linked chunk collective IO without optimization",PARATESTFILE);
AddTest((mpi_size < 3)? "-cchunk6" : "cchunk6",
- coll_chunk6,NULL,
- "multi-chunk collective IO with direct request",PARATESTFILE);
+ coll_chunk6,NULL,
+ "multi-chunk collective IO with direct request",PARATESTFILE);
AddTest((mpi_size < 3)? "-cchunk7" : "cchunk7",
- coll_chunk7,NULL,
- "linked chunk collective IO with optimization",PARATESTFILE);
+ coll_chunk7,NULL,
+ "linked chunk collective IO with optimization",PARATESTFILE);
AddTest((mpi_size < 3)? "-cchunk8" : "cchunk8",
- coll_chunk8,NULL,
- "linked chunk collective IO transferring to multi-chunk",PARATESTFILE);
+ coll_chunk8,NULL,
+ "linked chunk collective IO transferring to multi-chunk",PARATESTFILE);
AddTest((mpi_size < 3)? "-cchunk9" : "cchunk9",
- coll_chunk9,NULL,
- "multiple chunk collective IO with optimization",PARATESTFILE);
+ coll_chunk9,NULL,
+ "multiple chunk collective IO with optimization",PARATESTFILE);
AddTest((mpi_size < 3)? "-cchunk10" : "cchunk10",
- coll_chunk10,NULL,
- "multiple chunk collective IO transferring to independent IO",PARATESTFILE);
+ coll_chunk10,NULL,
+ "multiple chunk collective IO transferring to independent IO",PARATESTFILE);
/* irregular collective IO tests*/
AddTest("ccontw",
- coll_irregular_cont_write,NULL,
- "collective irregular contiguous write",PARATESTFILE);
+ coll_irregular_cont_write,NULL,
+ "collective irregular contiguous write",PARATESTFILE);
AddTest("ccontr",
- coll_irregular_cont_read,NULL,
- "collective irregular contiguous read",PARATESTFILE);
+ coll_irregular_cont_read,NULL,
+ "collective irregular contiguous read",PARATESTFILE);
AddTest("cschunkw",
- coll_irregular_simple_chunk_write,NULL,
- "collective irregular simple chunk write",PARATESTFILE);
+ coll_irregular_simple_chunk_write,NULL,
+ "collective irregular simple chunk write",PARATESTFILE);
AddTest("cschunkr",
- coll_irregular_simple_chunk_read,NULL,
- "collective irregular simple chunk read",PARATESTFILE);
+ coll_irregular_simple_chunk_read,NULL,
+ "collective irregular simple chunk read",PARATESTFILE);
AddTest("ccchunkw",
- coll_irregular_complex_chunk_write,NULL,
- "collective irregular complex chunk write",PARATESTFILE);
+ coll_irregular_complex_chunk_write,NULL,
+ "collective irregular complex chunk write",PARATESTFILE);
AddTest("ccchunkr",
- coll_irregular_complex_chunk_read,NULL,
- "collective irregular complex chunk read",PARATESTFILE);
+ coll_irregular_complex_chunk_read,NULL,
+ "collective irregular complex chunk read",PARATESTFILE);
AddTest("null", null_dataset, NULL,
- "null dataset test", PARATESTFILE);
+ "null dataset test", PARATESTFILE);
io_mode_confusion_params.name = PARATESTFILE;
io_mode_confusion_params.count = 0; /* value not used */
AddTest("I/Omodeconf", io_mode_confusion, NULL,
- "I/O mode confusion test -- hangs quickly on failure",
+ "I/O mode confusion test -- hangs quickly on failure",
&io_mode_confusion_params);
if((mpi_size < 3) && MAINPROCESS) {
@@ -536,9 +539,9 @@ int main(int argc, char **argv)
TestParseCmdLine(argc, argv);
if (dxfer_coll_type == DXFER_INDEPENDENT_IO && MAINPROCESS){
- printf("===================================\n"
- " Using Independent I/O with file set view to replace collective I/O \n"
- "===================================\n");
+ printf("===================================\n"
+ " Using Independent I/O with file set view to replace collective I/O \n"
+ "===================================\n");
}
@@ -563,16 +566,16 @@ int main(int argc, char **argv)
{
int temp;
MPI_Allreduce(&nerrors, &temp, 1, MPI_INT, MPI_MAX, MPI_COMM_WORLD);
- nerrors=temp;
+ nerrors=temp;
}
- if (MAINPROCESS){ /* only process 0 reports */
- printf("===================================\n");
- if (nerrors)
- printf("***PHDF5 tests detected %d errors***\n", nerrors);
- else
- printf("PHDF5 tests finished with no errors\n");
- printf("===================================\n");
+ if (MAINPROCESS){ /* only process 0 reports */
+ printf("===================================\n");
+ if (nerrors)
+ printf("***PHDF5 tests detected %d errors***\n", nerrors);
+ else
+ printf("PHDF5 tests finished with no errors\n");
+ printf("===================================\n");
}
/* close HDF5 library */
H5close();
diff --git a/testpar/testphdf5.h b/testpar/testphdf5.h
index 100fa41..efd3424 100644
--- a/testpar/testphdf5.h
+++ b/testpar/testphdf5.h
@@ -236,6 +236,7 @@ extern int facc_type; /*Test file access type */
extern int dxfer_coll_type;
/* Test program prototypes */
+void zero_dim_dset(void);
void multiple_dset_write(void);
void multiple_group_write(void);
void multiple_group_read(void);
diff --git a/tools/CMakeLists.txt b/tools/CMakeLists.txt
index 27820ae..a9a8c49 100644
--- a/tools/CMakeLists.txt
+++ b/tools/CMakeLists.txt
@@ -4,7 +4,7 @@ PROJECT (HDF5_TOOLS)
#-----------------------------------------------------------------------------
# Apply Definitions to compiler in this directory and below
#-----------------------------------------------------------------------------
-add_definitions (${HDF5_EXTRA_C_FLAGS})
+add_definitions (${HDF_EXTRA_C_FLAGS})
#-----------------------------------------------------------------------------
# Setup include Directories
diff --git a/tools/Makefile.in b/tools/Makefile.in
index c592973..0b0e2d0 100644
--- a/tools/Makefile.in
+++ b/tools/Makefile.in
@@ -505,7 +505,6 @@ MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MPE = @MPE@
-MPI_GET_SIZE = @MPI_GET_SIZE@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
diff --git a/tools/h5copy/CMakeLists.txt b/tools/h5copy/CMakeLists.txt
index e5a1a9f..267d92b 100644
--- a/tools/h5copy/CMakeLists.txt
+++ b/tools/h5copy/CMakeLists.txt
@@ -37,9 +37,9 @@ endif (BUILD_TESTING)
##############################################################################
##############################################################################
-#-----------------------------------------------------------------------------
-# Rules for Installation of tools using make Install target
-#-----------------------------------------------------------------------------
+#-----------------------------------------------------------------------------
+# Rules for Installation of tools using make Install target
+#-----------------------------------------------------------------------------
#INSTALL_PROGRAM_PDB (h5copy ${HDF5_INSTALL_BIN_DIR} toolsapplications)
diff --git a/tools/h5copy/CMakeTests.cmake b/tools/h5copy/CMakeTests.cmake
index 77399a8..9002e5a 100644
--- a/tools/h5copy/CMakeTests.cmake
+++ b/tools/h5copy/CMakeTests.cmake
@@ -230,7 +230,7 @@
-D "TEST_EXPECT=${resultcode}"
-D "TEST_REFERENCE=./testfiles/${testname}.out"
-D "TEST_MASK=true"
- -P "${HDF5_RESOURCES_DIR}/runTest.cmake"
+ -P "${HDF_RESOURCES_EXT_DIR}/runTest.cmake"
)
set_tests_properties (H5COPY-CMP-${testname} PROPERTIES DEPENDS H5COPY-CMP-${testname}-clear-objects)
endif (HDF5_ENABLE_USING_MEMCHECKER)
diff --git a/tools/h5copy/Makefile.in b/tools/h5copy/Makefile.in
index fef0136..76573a0 100644
--- a/tools/h5copy/Makefile.in
+++ b/tools/h5copy/Makefile.in
@@ -513,7 +513,6 @@ MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MPE = @MPE@
-MPI_GET_SIZE = @MPI_GET_SIZE@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
diff --git a/tools/h5copy/h5copygentest.c b/tools/h5copy/h5copygentest.c
index e45d24a..49204f5 100644
--- a/tools/h5copy/h5copygentest.c
+++ b/tools/h5copy/h5copygentest.c
@@ -237,10 +237,10 @@ static void gent_named_vl(hid_t loc_id)
/* allocate and initialize VL dataset to write */
buf[0].len = 1;
- buf[0].p = malloc( 1 * sizeof(int));
+ buf[0].p = HDmalloc( 1 * sizeof(int));
((int *)buf[0].p)[0]=1;
buf[1].len = 2;
- buf[1].p = malloc( 2 * sizeof(int));
+ buf[1].p = HDmalloc( 2 * sizeof(int));
((int *)buf[1].p)[0]=2;
((int *)buf[1].p)[1]=3;
@@ -283,16 +283,16 @@ static void gent_nested_vl(hid_t loc_id)
/* allocate and initialize VL dataset to write */
buf[0].len = 1;
- buf[0].p = malloc( 1 * sizeof(hvl_t));
+ buf[0].p = HDmalloc( 1 * sizeof(hvl_t));
tvl = (hvl_t *)buf[0].p;
- tvl->p = malloc( 1 * sizeof(int) );
+ tvl->p = HDmalloc( 1 * sizeof(int) );
tvl->len = 1;
((int *)tvl->p)[0]=1;
buf[1].len = 1;
- buf[1].p = malloc( 1 * sizeof(hvl_t));
+ buf[1].p = HDmalloc( 1 * sizeof(hvl_t));
tvl = (hvl_t *)buf[1].p;
- tvl->p = malloc( 2 * sizeof(int) );
+ tvl->p = HDmalloc( 2 * sizeof(int) );
tvl->len = 2;
((int *)tvl->p)[0]=2;
((int *)tvl->p)[1]=3;
@@ -454,23 +454,23 @@ static herr_t gen_obj_ref(hid_t loc_id)
/*--------------
* add group */
- oid = H5Gcreate2 (loc_id, OBJ_REF_GRP, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+ oid = H5Gcreate2 (loc_id, OBJ_REF_GRP, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
if (oid < 0)
{
fprintf(stderr, "Error: %s %d> H5Gcreate2 failed.\n", FUNC, __LINE__);
ret = FAIL;
goto out;
}
- H5Gclose(oid);
+ H5Gclose(oid);
- status = H5Rcreate (&or_data[0], loc_id, OBJ_REF_DS, H5R_OBJECT, -1);
+ status = H5Rcreate (&or_data[0], loc_id, OBJ_REF_DS, H5R_OBJECT, (hid_t)-1);
if (status < 0)
{
fprintf(stderr, "Error: %s %d> H5Rcreate failed.\n", FUNC, __LINE__);
ret = FAIL;
goto out;
}
- status = H5Rcreate (&or_data[1], loc_id, OBJ_REF_GRP, H5R_OBJECT, -1);
+ status = H5Rcreate (&or_data[1], loc_id, OBJ_REF_GRP, H5R_OBJECT, (hid_t)-1);
if (status < 0)
{
fprintf(stderr, "Error: %s %d> H5Rcreate failed.\n", FUNC, __LINE__);
diff --git a/tools/h5diff/CMakeLists.txt b/tools/h5diff/CMakeLists.txt
index 5620968..35c55a4 100644
--- a/tools/h5diff/CMakeLists.txt
+++ b/tools/h5diff/CMakeLists.txt
@@ -55,9 +55,9 @@ endif (BUILD_TESTING)
##############################################################################
##############################################################################
-#-----------------------------------------------------------------------------
-# Rules for Installation of tools using make Install target
-#-----------------------------------------------------------------------------
+#-----------------------------------------------------------------------------
+# Rules for Installation of tools using make Install target
+#-----------------------------------------------------------------------------
#INSTALL_PROGRAM_PDB (h5diff ${HDF5_INSTALL_BIN_DIR} toolsapplications)
diff --git a/tools/h5diff/CMakeTests.cmake b/tools/h5diff/CMakeTests.cmake
index 0986d89..686803b 100644
--- a/tools/h5diff/CMakeTests.cmake
+++ b/tools/h5diff/CMakeTests.cmake
@@ -317,7 +317,7 @@
-D "TEST_EXPECT=${resultcode}"
-D "TEST_REFERENCE=${resultfile}.txt"
-D "TEST_APPEND=EXIT CODE:"
- -P "${HDF5_RESOURCES_DIR}/runTest.cmake"
+ -P "${HDF_RESOURCES_EXT_DIR}/runTest.cmake"
)
set_tests_properties (H5DIFF-${resultfile} PROPERTIES DEPENDS "H5DIFF-${resultfile}-clear-objects")
endif (HDF5_ENABLE_USING_MEMCHECKER)
@@ -355,7 +355,7 @@
# -D "TEST_APPEND=EXIT CODE: [0-9]"
# -D "TEST_REF_FILTER=EXIT CODE: 0"
-D "TEST_SKIP_COMPARE=TRUE"
- -P "${HDF5_RESOURCES_DIR}/prunTest.cmake"
+ -P "${HDF_RESOURCES_EXT_DIR}/prunTest.cmake"
)
set_tests_properties (PH5DIFF-${resultfile} PROPERTIES DEPENDS "PH5DIFF-${resultfile}-clear-objects")
endif (HDF5_ENABLE_USING_MEMCHECKER)
diff --git a/tools/h5diff/Makefile.in b/tools/h5diff/Makefile.in
index 08008d7..6a8d2ac 100644
--- a/tools/h5diff/Makefile.in
+++ b/tools/h5diff/Makefile.in
@@ -520,7 +520,6 @@ MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MPE = @MPE@
-MPI_GET_SIZE = @MPI_GET_SIZE@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
diff --git a/tools/h5diff/h5diffgentest.c b/tools/h5diff/h5diffgentest.c
index 2271703..80405e9 100644
--- a/tools/h5diff/h5diffgentest.c
+++ b/tools/h5diff/h5diffgentest.c
@@ -978,8 +978,8 @@ int test_attributes(const char *file,
*/
write_attr_in(did,"dset",fid,make_diffs);
- write_attr_in(gid,NULL,0,make_diffs);
- write_attr_in(root_id,NULL,0,make_diffs);
+ write_attr_in(gid,NULL,(hid_t)0,make_diffs);
+ write_attr_in(root_id,NULL,(hid_t)0,make_diffs);
/* Close */
@@ -4127,9 +4127,9 @@ static int test_comp_vlen_strings(const char *fname1, const char *grp_name, int
did_comp = H5Dcreate2(gid, "Compound_dset9", tid9_comp, sid_comp, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
/* obj references */
- status=H5Rcreate(&(comp9_buf.objref1),gid,"Compound_dset2",H5R_OBJECT,-1);
- status=H5Rcreate(&(comp9_buf.objref2),gid,"Compound_dset3",H5R_OBJECT,-1);
- status=H5Rcreate(&(comp9_buf.objref3),gid,"Compound_dset4",H5R_OBJECT,-1);
+ status=H5Rcreate(&(comp9_buf.objref1),gid,"Compound_dset2",H5R_OBJECT,(hid_t)-1);
+ status=H5Rcreate(&(comp9_buf.objref2),gid,"Compound_dset3",H5R_OBJECT,(hid_t)-1);
+ status=H5Rcreate(&(comp9_buf.objref3),gid,"Compound_dset4",H5R_OBJECT,(hid_t)-1);
status = H5Dwrite(did_comp, tid9_comp, H5S_ALL, H5S_ALL, H5P_DEFAULT, &comp9_buf);
if (status < 0)
@@ -4475,7 +4475,7 @@ static void test_comps_vlen (const char * fname, const char *dset, const char *a
for(i=0; i<SDIM_DSET; i++)
{
wdata[i].i1 = i;
- wdata[i].vl.p = malloc((i+1)*sizeof(cmpd2_t));
+ wdata[i].vl.p = HDmalloc((i+1)*sizeof(cmpd2_t));
wdata[i].vl.len = i+1;
for(j=0; j<(i+1); j++)
{
@@ -4600,7 +4600,7 @@ static void test_comps_array_vlen (const char * fname, const char *dset,const ch
for(j=0; j < SDIM_CMPD_ARRAY; j++)
{
wdata[i].cmpd2[j].i2 = j*10;
- wdata[i].cmpd2[j].vl.p = malloc((j+1)*sizeof(cmpd3_t));
+ wdata[i].cmpd2[j].vl.p = HDmalloc((j+1)*sizeof(cmpd3_t));
wdata[i].cmpd2[j].vl.len = j+1;
for(k=0; k<(j+1); k++)
{
@@ -4744,7 +4744,7 @@ static void test_comps_vlen_arry (const char * fname, const char *dset, const ch
{
/* compound 1 data */
wdata[i].i1 = i;
- wdata[i].vl.p = malloc((i+1)*sizeof(cmpd2_t));
+ wdata[i].vl.p = HDmalloc((i+1)*sizeof(cmpd2_t));
wdata[i].vl.len = i+1;
for(j=0; j<(i+1); j++)
{
@@ -4874,7 +4874,7 @@ static void test_data_nocomparables (const char * fname, int make_diffs)
int data1[DIM_ARRY] = {0,0,0};
int data2[DIM_ARRY] = {1,1,1};
int data3[DIM_ARRY+1] = {1,1,1,1};
- int data1_dim2[DIM_ARRY][1] = {0,0,0};
+ int data1_dim2[DIM_ARRY][1] = {{0},{0},{0}};
int rank_attr;
char data1_str[DIM_ARRY][STR_SIZE]= {"ab","cd","ef"};
herr_t status = SUCCEED;
@@ -5416,8 +5416,8 @@ void write_attr_in(hid_t loc_id,
/* Create references to dataset */
if (dset_name)
{
- status=H5Rcreate(&buf4[0],fid,dset_name,H5R_OBJECT,-1);
- status=H5Rcreate(&buf4[1],fid,dset_name,H5R_OBJECT,-1);
+ status=H5Rcreate(&buf4[0],fid,dset_name,H5R_OBJECT,(hid_t)-1);
+ status=H5Rcreate(&buf4[1],fid,dset_name,H5R_OBJECT,(hid_t)-1);
write_attr(loc_id,1,dims,"reference",H5T_STD_REF_OBJ,buf4);
}
@@ -5456,10 +5456,10 @@ void write_attr_in(hid_t loc_id,
/* Allocate and initialize VL dataset to write */
buf5[0].len = 1;
- buf5[0].p = malloc( 1 * sizeof(int));
+ buf5[0].p = HDmalloc( 1 * sizeof(int));
((int *)buf5[0].p)[0]=1;
buf5[1].len = 2;
- buf5[1].p = malloc( 2 * sizeof(int));
+ buf5[1].p = HDmalloc( 2 * sizeof(int));
((int *)buf5[1].p)[0]=2;
((int *)buf5[1].p)[1]=3;
@@ -5698,7 +5698,7 @@ void write_attr_in(hid_t loc_id,
{
for (i = 0; i < 3; i++) {
for (j = 0; j < 2; j++) {
- status=H5Rcreate(&buf42[i][j],fid,dset_name,H5R_OBJECT,-1);
+ status=H5Rcreate(&buf42[i][j],fid,dset_name,H5R_OBJECT,(hid_t)-1);
}
}
write_attr(loc_id,2,dims2,"reference2D",H5T_STD_REF_OBJ,buf42);
@@ -5743,7 +5743,7 @@ void write_attr_in(hid_t loc_id,
n=0;
for (i = 0; i < 3; i++) {
for (j = 0; j < 2; j++) {
- buf52[i][j].p = malloc((i + 1) * sizeof(int));
+ buf52[i][j].p = HDmalloc((i + 1) * sizeof(int));
buf52[i][j].len = i + 1;
for (l = 0; l < i + 1; l++)
if (make_diffs)((int *)buf52[i][j].p)[l] = 0;
@@ -6094,7 +6094,7 @@ void write_attr_in(hid_t loc_id,
for (i = 0; i < 4; i++) {
for (j = 0; j < 3; j++) {
for (k = 0; k < 2; k++)
- status=H5Rcreate(&buf43[i][j][k],fid,dset_name,H5R_OBJECT,-1);
+ status=H5Rcreate(&buf43[i][j][k],fid,dset_name,H5R_OBJECT,(hid_t)-1);
}
}
write_attr(loc_id,3,dims3,"reference3D",H5T_STD_REF_OBJ,buf43);
@@ -6159,7 +6159,7 @@ void write_attr_in(hid_t loc_id,
for (i = 0; i < 4; i++) {
for (j = 0; j < 3; j++) {
for (k = 0; k < 2; k++) {
- buf53[i][j][k].p = malloc((i + 1) * sizeof(int));
+ buf53[i][j][k].p = HDmalloc((i + 1) * sizeof(int));
buf53[i][j][k].len = i + 1;
for (l = 0; l < i + 1; l++)
if (make_diffs)((int *)buf53[i][j][k].p)[l] = 0;
@@ -6460,8 +6460,8 @@ void write_dset_in(hid_t loc_id,
/* Create references to dataset */
if (dset_name)
{
- status=H5Rcreate(&buf4[0],fid,dset_name,H5R_OBJECT,-1);
- status=H5Rcreate(&buf4[1],fid,dset_name,H5R_OBJECT,-1);
+ status=H5Rcreate(&buf4[0],fid,dset_name,H5R_OBJECT,(hid_t)-1);
+ status=H5Rcreate(&buf4[1],fid,dset_name,H5R_OBJECT,(hid_t)-1);
write_dset(loc_id,1,dims,"reference",H5T_STD_REF_OBJ,buf4);
}
@@ -6490,10 +6490,10 @@ void write_dset_in(hid_t loc_id,
/* Allocate and initialize VL dataset to write */
buf5[0].len = 1;
- buf5[0].p = malloc( 1 * sizeof(int));
+ buf5[0].p = HDmalloc( 1 * sizeof(int));
((int *)buf5[0].p)[0]=1;
buf5[1].len = 2;
- buf5[1].p = malloc( 2 * sizeof(int));
+ buf5[1].p = HDmalloc( 2 * sizeof(int));
((int *)buf5[1].p)[0]=2;
((int *)buf5[1].p)[1]=3;
@@ -6675,7 +6675,7 @@ void write_dset_in(hid_t loc_id,
{
for (i = 0; i < 3; i++) {
for (j = 0; j < 2; j++) {
- status=H5Rcreate(&buf42[i][j],fid,dset_name,H5R_OBJECT,-1);
+ status=H5Rcreate(&buf42[i][j],fid,dset_name,H5R_OBJECT,(hid_t)-1);
}
}
write_dset(loc_id,2,dims2,"reference2D",H5T_STD_REF_OBJ,buf42);
@@ -6703,7 +6703,7 @@ void write_dset_in(hid_t loc_id,
{
for(j = 0; j < 2; j++)
{
- buf52[i][j].p = malloc((i + 1) * sizeof(int));
+ buf52[i][j].p = HDmalloc((i + 1) * sizeof(int));
buf52[i][j].len = i + 1;
for(l = 0; l < i + 1; l++)
{
@@ -6886,7 +6886,7 @@ void write_dset_in(hid_t loc_id,
for (i = 0; i < 4; i++) {
for (j = 0; j < 3; j++) {
for (k = 0; k < 2; k++)
- status=H5Rcreate(&buf43[i][j][k],fid,dset_name,H5R_OBJECT,-1);
+ status=H5Rcreate(&buf43[i][j][k],fid,dset_name,H5R_OBJECT,(hid_t)-1);
}
}
write_dset(loc_id,3,dims3,"reference3D",H5T_STD_REF_OBJ,buf43);
@@ -6916,7 +6916,7 @@ void write_dset_in(hid_t loc_id,
{
for(k = 0; k < 2; k++)
{
- buf53[i][j][k].p = malloc((i + 1) * sizeof(int));
+ buf53[i][j][k].p = HDmalloc((i + 1) * sizeof(int));
buf53[i][j][k].len = i + 1;
for(l = 0; l < i + 1; l++)
{
diff --git a/tools/h5diff/ph5diff_main.c b/tools/h5diff/ph5diff_main.c
index 62e1e73..a26b6e9 100644
--- a/tools/h5diff/ph5diff_main.c
+++ b/tools/h5diff/ph5diff_main.c
@@ -321,6 +321,9 @@ void h5diff_exit(int status)
status = EXIT_SUCCESS; /* Reset exit status, since some mpiexec commands generate output on failure status */
}
- exit(status);
+ /* Always exit(0), since MPI implementations do weird stuff when they
+ * receive a non-zero exit value. - QAK
+ */
+ exit(0);
}
diff --git a/tools/h5diff/testfiles/h5diff_101w.txt b/tools/h5diff/testfiles/h5diff_101w.txt
index d1f49da..71f4e87 100644
--- a/tools/h5diff/testfiles/h5diff_101w.txt
+++ b/tools/h5diff/testfiles/h5diff_101w.txt
@@ -1,11 +1,11 @@
-dataset: </g1/d1> and </g1/d2>
-size: [3x2] [3x2]
-position d1 d2 difference
-------------------------------------------------------------
-[ 0 1 ] 1e-016 4e-016 3e-016
-[ 1 0 ] 1e-016 2e-016 1e-016
-[ 1 1 ] 0 1e-016 1e-016
-[ 2 0 ] 3.3e-016 1e-016 2.3e-016
-[ 2 1 ] 1e-016 0 1e-016
-5 differences found
-EXIT CODE: 1
+dataset: </g1/d1> and </g1/d2>
+size: [3x2] [3x2]
+position d1 d2 difference
+------------------------------------------------------------
+[ 0 1 ] 1e-016 4e-016 3e-016
+[ 1 0 ] 1e-016 2e-016 1e-016
+[ 1 1 ] 0 1e-016 1e-016
+[ 2 0 ] 3.3e-016 1e-016 2.3e-016
+[ 2 1 ] 1e-016 0 1e-016
+5 differences found
+EXIT CODE: 1
diff --git a/tools/h5diff/testfiles/h5diff_102w.txt b/tools/h5diff/testfiles/h5diff_102w.txt
index dda3581..19a097c 100644
--- a/tools/h5diff/testfiles/h5diff_102w.txt
+++ b/tools/h5diff/testfiles/h5diff_102w.txt
@@ -1,10 +1,10 @@
-dataset: </g1/fp1> and </g1/fp2>
-size: [3x2] [3x2]
-position fp1 fp2 difference
-------------------------------------------------------------
-[ 0 1 ] 1e-007 2e-007 1e-007
-[ 1 0 ] 1e-007 3e-007 2e-007
-[ 1 1 ] 2.2e-007 1e-007 1.2e-007
-[ 2 0 ] 1e-007 0 1e-007
-4 differences found
-EXIT CODE: 1
+dataset: </g1/fp1> and </g1/fp2>
+size: [3x2] [3x2]
+position fp1 fp2 difference
+------------------------------------------------------------
+[ 0 1 ] 1e-007 2e-007 1e-007
+[ 1 0 ] 1e-007 3e-007 2e-007
+[ 1 1 ] 2.2e-007 1e-007 1.2e-007
+[ 2 0 ] 1e-007 0 1e-007
+4 differences found
+EXIT CODE: 1
diff --git a/tools/h5diff/testh5diff.sh.in b/tools/h5diff/testh5diff.sh.in
old mode 100755
new mode 100644
index ee8a09b..3be0b80
--- a/tools/h5diff/testh5diff.sh.in
+++ b/tools/h5diff/testh5diff.sh.in
@@ -807,12 +807,7 @@ TOOLTEST h5diff_80.txt -v h5diff_dset1.h5 h5diff_dset2.h5
TOOLTEST h5diff_90.txt -v h5diff_basic2.h5 h5diff_basic2.h5
# 10. read by hyperslab, print indexes
-if test -n "$pmode" -a "$mydomainname" = hdfgroup.uiuc.edu; then
- # skip this test which sometimes hangs in some THG machines
- SKIP -v h5diff_hyper1.h5 h5diff_hyper2.h5
-else
- TOOLTEST h5diff_100.txt -v h5diff_hyper1.h5 h5diff_hyper2.h5
-fi
+TOOLTEST h5diff_100.txt -v h5diff_hyper1.h5 h5diff_hyper2.h5
# 11. floating point comparison
# double value
diff --git a/tools/h5diff/testph5diff.sh.in b/tools/h5diff/testph5diff.sh.in
old mode 100755
new mode 100644
diff --git a/tools/h5dump/CMakeLists.txt b/tools/h5dump/CMakeLists.txt
index 1a46586..584222e 100644
--- a/tools/h5dump/CMakeLists.txt
+++ b/tools/h5dump/CMakeLists.txt
@@ -48,9 +48,9 @@ endif (BUILD_TESTING)
##############################################################################
##############################################################################
-#-----------------------------------------------------------------------------
-# Rules for Installation of tools using make Install target
-#-----------------------------------------------------------------------------
+#-----------------------------------------------------------------------------
+# Rules for Installation of tools using make Install target
+#-----------------------------------------------------------------------------
#INSTALL_PROGRAM_PDB (h5dump ${HDF5_INSTALL_BIN_DIR} toolsapplications)
diff --git a/tools/h5dump/CMakeTests.cmake b/tools/h5dump/CMakeTests.cmake
index c42882a..07a48f7 100644
--- a/tools/h5dump/CMakeTests.cmake
+++ b/tools/h5dump/CMakeTests.cmake
@@ -311,7 +311,7 @@
# copy test files from source dir to test dir
#
foreach (tst_h5_file ${HDF5_REFERENCE_TEST_FILES})
- GET_FILENAME_COMPONENT(fname "${tst_h5_file}" NAME)
+ get_filename_component (fname "${tst_h5_file}" NAME)
set (dest "${PROJECT_BINARY_DIR}/testfiles/std/${fname}")
#message (STATUS " Copying ${tst_h5_file}")
add_custom_command (
@@ -337,7 +337,7 @@
endforeach (tst_exp_file ${HDF5_REFERENCE_EXP_FILES})
foreach (tst_other_file ${HDF5_REFERENCE_FILES})
- GET_FILENAME_COMPONENT(fname "${tst_other_file}" NAME)
+ get_filename_component (fname "${tst_other_file}" NAME)
set (dest "${PROJECT_BINARY_DIR}/testfiles/std/${fname}")
#message (STATUS " Copying ${tst_other_file}")
add_custom_command (
@@ -349,7 +349,7 @@
endforeach (tst_other_file ${HDF5_REFERENCE_FILES})
foreach (tst_error_file ${HDF5_ERROR_REFERENCE_TEST_FILES})
- GET_FILENAME_COMPONENT(fname "${tst_error_file}" NAME)
+ get_filename_component (fname "${tst_error_file}" NAME)
set (dest "${PROJECT_BINARY_DIR}/testfiles/std/${fname}")
#message (STATUS " Copying ${tst_error_file}")
add_custom_command (
@@ -413,7 +413,7 @@
-D "TEST_OUTPUT=h5dump-${testname}.out"
-D "TEST_EXPECT=${resultcode}"
-D "TEST_REFERENCE=h5dump-${testname}.txt"
- -P "${HDF5_RESOURCES_DIR}/runTest.cmake"
+ -P "${HDF_RESOURCES_EXT_DIR}/runTest.cmake"
)
set_tests_properties (H5DUMP-h5dump-${testname} PROPERTIES DEPENDS "H5DUMP-h5dump-${testname}-clear-objects")
endif (HDF5_ENABLE_USING_MEMCHECKER)
@@ -459,7 +459,7 @@
-D "TEST_OUTPUT=${resultfile}.out"
-D "TEST_EXPECT=${resultcode}"
-D "TEST_REFERENCE=${resultfile}.ddl"
- -P "${HDF5_RESOURCES_DIR}/runTest.cmake"
+ -P "${HDF_RESOURCES_EXT_DIR}/runTest.cmake"
)
set_tests_properties (H5DUMP-${resultfile} PROPERTIES DEPENDS "H5DUMP-${resultfile}-clear-objects")
endif (HDF5_ENABLE_USING_MEMCHECKER)
@@ -492,7 +492,7 @@
-D "TEST_OUTPUT=${resultfile}-N.out"
-D "TEST_EXPECT=${resultcode}"
-D "TEST_REFERENCE=${resultfile}.ddl"
- -P "${HDF5_RESOURCES_DIR}/runTest.cmake"
+ -P "${HDF_RESOURCES_EXT_DIR}/runTest.cmake"
)
set_tests_properties (H5DUMP-N-${resultfile} PROPERTIES DEPENDS "H5DUMP-N-${resultfile}-clear-objects")
endif (HDF5_ENABLE_USING_MEMCHECKER)
@@ -525,7 +525,7 @@
-D "TEST_OUTPUT=${resultfile}.out"
-D "TEST_EXPECT=${resultcode}"
-D "TEST_REFERENCE=${resultfile}.ddl"
- -P "${HDF5_RESOURCES_DIR}/runTest.cmake"
+ -P "${HDF_RESOURCES_EXT_DIR}/runTest.cmake"
)
set_tests_properties (H5DUMP-${resultfile} PROPERTIES DEPENDS "H5DUMP-${resultfile}-clear-objects")
add_test (
@@ -565,7 +565,7 @@
-D "TEST_OUTPUT=${resultfile}.out"
-D "TEST_EXPECT=${resultcode}"
-D "TEST_REFERENCE=${resultfile}.ddl"
- -P "${HDF5_RESOURCES_DIR}/runTest.cmake"
+ -P "${HDF_RESOURCES_EXT_DIR}/runTest.cmake"
)
set_tests_properties (H5DUMP-${resultfile} PROPERTIES DEPENDS "H5DUMP-${resultfile}-clear-objects")
add_test (
@@ -627,7 +627,7 @@
-D "TEST_EXPECT=${resultcode}"
-D "TEST_REFERENCE=${resultfile}.ddl"
-D "TEST_MASK_ERROR=true"
- -P "${HDF5_RESOURCES_DIR}/runTest.cmake"
+ -P "${HDF_RESOURCES_EXT_DIR}/runTest.cmake"
)
set_tests_properties (H5DUMP-${resultfile} PROPERTIES DEPENDS "H5DUMP-${resultfile}-clear-objects")
endif (NOT HDF5_ENABLE_USING_MEMCHECKER)
@@ -652,7 +652,7 @@
-D "TEST_REFERENCE=${resultfile}.ddl"
-D "TEST_ERRREF=${resultfile}.err"
-D "TEST_MASK_ERROR=true"
- -P "${HDF5_RESOURCES_DIR}/runTest.cmake"
+ -P "${HDF_RESOURCES_EXT_DIR}/runTest.cmake"
)
set_tests_properties (H5DUMP-${resultfile} PROPERTIES DEPENDS "H5DUMP-${resultfile}-clear-objects")
endif (NOT HDF5_ENABLE_USING_MEMCHECKER)
@@ -679,7 +679,7 @@
-D "TEST_MASK_ERROR=true"
-D "TEST_ENV_VAR:STRING=${envvar}"
-D "TEST_ENV_VALUE:STRING=${envval}"
- -P "${HDF5_RESOURCES_DIR}/runTest.cmake"
+ -P "${HDF_RESOURCES_EXT_DIR}/runTest.cmake"
)
set_tests_properties (H5DUMP-${resultfile} PROPERTIES DEPENDS "H5DUMP-${resultfile}-clear-objects")
endif (NOT HDF5_ENABLE_USING_MEMCHECKER)
@@ -703,7 +703,7 @@
-D "TEST_OUTPUT=${conffile}.out"
-D "TEST_EXPECT=${resultcode}"
-D "TEST_REFERENCE=${conffile}.ddl"
- -P "${HDF5_RESOURCES_DIR}/runTest.cmake"
+ -P "${HDF_RESOURCES_EXT_DIR}/runTest.cmake"
)
set_tests_properties (H5DUMP-IMPORT-${resultfile} PROPERTIES DEPENDS "H5DUMP-IMPORT-${resultfile}-clear-objects")
add_test (NAME H5DUMP-IMPORT-h5import-${resultfile} COMMAND h5import ${resultfile}.bin -c ${conffile}.out -o ${resultfile}.h5)
diff --git a/tools/h5dump/CMakeTestsPBITS.cmake b/tools/h5dump/CMakeTestsPBITS.cmake
index a920198..421e020 100644
--- a/tools/h5dump/CMakeTestsPBITS.cmake
+++ b/tools/h5dump/CMakeTestsPBITS.cmake
@@ -155,7 +155,7 @@
-D "TEST_OUTPUT=${resultfile}.out"
-D "TEST_EXPECT=${resultcode}"
-D "TEST_REFERENCE=${resultfile}.ddl"
- -P "${HDF5_RESOURCES_DIR}/runTest.cmake"
+ -P "${HDF_RESOURCES_EXT_DIR}/runTest.cmake"
)
set_tests_properties (H5DUMP-${resultfile} PROPERTIES DEPENDS "H5DUMP-${resultfile}-clear-objects")
endif (HDF5_ENABLE_USING_MEMCHECKER)
diff --git a/tools/h5dump/CMakeTestsXML.cmake b/tools/h5dump/CMakeTestsXML.cmake
index ffc1cae..0d4e0f4 100644
--- a/tools/h5dump/CMakeTestsXML.cmake
+++ b/tools/h5dump/CMakeTestsXML.cmake
@@ -196,7 +196,7 @@
-D "TEST_OUTPUT=${resultfile}.out"
-D "TEST_EXPECT=${resultcode}"
-D "TEST_REFERENCE=${resultfile}.xml"
- -P "${HDF5_RESOURCES_DIR}/runTest.cmake"
+ -P "${HDF_RESOURCES_EXT_DIR}/runTest.cmake"
)
set_tests_properties (H5DUMP-XML-${resultfile} PROPERTIES DEPENDS "H5DUMP-XML-${resultfile}-clear-objects")
endif (HDF5_ENABLE_USING_MEMCHECKER)
diff --git a/tools/h5dump/Makefile.in b/tools/h5dump/Makefile.in
index f479679..8cb1661 100644
--- a/tools/h5dump/Makefile.in
+++ b/tools/h5dump/Makefile.in
@@ -519,7 +519,6 @@ MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MPE = @MPE@
-MPI_GET_SIZE = @MPI_GET_SIZE@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
diff --git a/tools/h5dump/h5dump_xml.c b/tools/h5dump/h5dump_xml.c
index c081ee0..64667cb 100644
--- a/tools/h5dump/h5dump_xml.c
+++ b/tools/h5dump/h5dump_xml.c
@@ -1937,7 +1937,7 @@ xml_dump_data(hid_t obj_id, int obj_data, struct subset_t UNUSED * sset, int UNU
datactx.need_prefix = TRUE;
datactx.indent_level = ctx.indent_level;
datactx.cur_column = ctx.cur_column;
- status = h5tools_dump_dset(rawoutstream, outputformat, &datactx, obj_id, -1, NULL);
+ status = h5tools_dump_dset(rawoutstream, outputformat, &datactx, obj_id, NULL);
}
}
else {
diff --git a/tools/h5dump/h5dumpgentest.c b/tools/h5dump/h5dumpgentest.c
index 884670e..046c5e1 100644
--- a/tools/h5dump/h5dumpgentest.c
+++ b/tools/h5dump/h5dumpgentest.c
@@ -2043,16 +2043,16 @@ static void gent_objref(void)
dataset = H5Dcreate2(fid1, "Dataset3", H5T_STD_REF_OBJ, sid1, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
/* Create reference to dataset */
- H5Rcreate(&wbuf[0], fid1, "/Group1/Dataset1", H5R_OBJECT, -1);
+ H5Rcreate(&wbuf[0], fid1, "/Group1/Dataset1", H5R_OBJECT, (hid_t)-1);
/* Create reference to dataset */
- H5Rcreate(&wbuf[1], fid1, "/Group1/Dataset2", H5R_OBJECT, -1);
+ H5Rcreate(&wbuf[1], fid1, "/Group1/Dataset2", H5R_OBJECT, (hid_t)-1);
/* Create reference to group */
- H5Rcreate(&wbuf[2], fid1, "/Group1", H5R_OBJECT, -1);
+ H5Rcreate(&wbuf[2], fid1, "/Group1", H5R_OBJECT, (hid_t)-1);
/* Create reference to named datatype */
- H5Rcreate(&wbuf[3], fid1, "/Group1/Datatype1", H5R_OBJECT, -1);
+ H5Rcreate(&wbuf[3], fid1, "/Group1/Datatype1", H5R_OBJECT, (hid_t)-1);
/* Write selection to disk */
H5Dwrite(dataset, H5T_STD_REF_OBJ, H5S_ALL, H5S_ALL, H5P_DEFAULT, wbuf);
@@ -3913,8 +3913,8 @@ static void write_attr_in(hid_t loc_id,
/* Create references to dataset */
if(dset_name)
{
- status=H5Rcreate(&buf4[0],fid,dset_name,H5R_OBJECT,-1);
- status=H5Rcreate(&buf4[1],fid,dset_name,H5R_OBJECT,-1);
+ status=H5Rcreate(&buf4[0],fid,dset_name,H5R_OBJECT,(hid_t)-1);
+ status=H5Rcreate(&buf4[1],fid,dset_name,H5R_OBJECT,(hid_t)-1);
write_attr(loc_id,1,dims,"reference",H5T_STD_REF_OBJ,buf4);
}
@@ -4020,7 +4020,7 @@ static void write_attr_in(hid_t loc_id,
{
for(i = 0; i < 3; i++) {
for(j = 0; j < 2; j++) {
- status=H5Rcreate(&buf42[i][j],fid,dset_name,H5R_OBJECT,-1);
+ status=H5Rcreate(&buf42[i][j],fid,dset_name,H5R_OBJECT,(hid_t)-1);
}
}
write_attr(loc_id,2,dims2,"reference2D",H5T_STD_REF_OBJ,buf42);
@@ -4151,7 +4151,7 @@ static void write_attr_in(hid_t loc_id,
for(i = 0; i < 4; i++) {
for(j = 0; j < 3; j++) {
for(k = 0; k < 2; k++)
- status=H5Rcreate(&buf43[i][j][k],fid,dset_name,H5R_OBJECT,-1);
+ status=H5Rcreate(&buf43[i][j][k],fid,dset_name,H5R_OBJECT,(hid_t)-1);
}
}
write_attr(loc_id,3,dims3,"reference3D",H5T_STD_REF_OBJ,buf43);
@@ -4355,8 +4355,8 @@ static void write_dset_in(hid_t loc_id,
/* Create references to dataset */
if(dset_name)
{
- status=H5Rcreate(&buf4[0],fid,dset_name,H5R_OBJECT,-1);
- status=H5Rcreate(&buf4[1],fid,dset_name,H5R_OBJECT,-1);
+ status=H5Rcreate(&buf4[0],fid,dset_name,H5R_OBJECT,(hid_t)-1);
+ status=H5Rcreate(&buf4[1],fid,dset_name,H5R_OBJECT,(hid_t)-1);
write_dset(loc_id,1,dims,"reference",H5T_STD_REF_OBJ,buf4);
}
@@ -4462,7 +4462,7 @@ static void write_dset_in(hid_t loc_id,
{
for(i = 0; i < 3; i++) {
for(j = 0; j < 2; j++) {
- status=H5Rcreate(&buf42[i][j],fid,dset_name,H5R_OBJECT,-1);
+ status=H5Rcreate(&buf42[i][j],fid,dset_name,H5R_OBJECT,(hid_t)-1);
}
}
write_dset(loc_id,2,dims2,"reference2D",H5T_STD_REF_OBJ,buf42);
@@ -4605,7 +4605,7 @@ static void write_dset_in(hid_t loc_id,
for(i = 0; i < 4; i++) {
for(j = 0; j < 3; j++) {
for(k = 0; k < 2; k++)
- status=H5Rcreate(&buf43[i][j][k],fid,dset_name,H5R_OBJECT,-1);
+ status=H5Rcreate(&buf43[i][j][k],fid,dset_name,H5R_OBJECT,(hid_t)-1);
}
}
write_dset(loc_id,3,dims3,"reference3D",H5T_STD_REF_OBJ,buf43);
@@ -4730,8 +4730,8 @@ static void gent_attr_all(void)
*/
write_attr_in(did,"dset",fid);
- write_attr_in(group_id,NULL,0);
- write_attr_in(root_id,NULL,0);
+ write_attr_in(group_id,NULL,(hid_t)0);
+ write_attr_in(root_id,NULL,(hid_t)0);
/*-------------------------------------------------------------------------
* write a series of datasets on group 2
diff --git a/tools/h5import/CMakeLists.txt b/tools/h5import/CMakeLists.txt
index 36a3a9e..a18133f 100644
--- a/tools/h5import/CMakeLists.txt
+++ b/tools/h5import/CMakeLists.txt
@@ -38,9 +38,9 @@ endif (BUILD_TESTING)
##############################################################################
##############################################################################
-#-----------------------------------------------------------------------------
-# Rules for Installation of tools using make Install target
-#-----------------------------------------------------------------------------
+#-----------------------------------------------------------------------------
+# Rules for Installation of tools using make Install target
+#-----------------------------------------------------------------------------
#INSTALL_PROGRAM_PDB (h5import ${HDF5_INSTALL_BIN_DIR} toolsapplications)
diff --git a/tools/h5import/CMakeTests.cmake b/tools/h5import/CMakeTests.cmake
index 5c5b4de..6986aee 100644
--- a/tools/h5import/CMakeTests.cmake
+++ b/tools/h5import/CMakeTests.cmake
@@ -133,7 +133,7 @@
-D "TEST_EXPECT=0"
-D "TEST_FILTER=(^(HDF5)[^\n]*)"
-D "TEST_SKIP_COMPARE=TRUE"
- -P "${HDF5_RESOURCES_DIR}/runTest.cmake"
+ -P "${HDF_RESOURCES_EXT_DIR}/runTest.cmake"
)
set_tests_properties (H5IMPORT-${testname}-H5DMP PROPERTIES DEPENDS H5IMPORT-${testname})
add_test (
@@ -146,7 +146,7 @@
-D "TEST_EXPECT=0"
-D "TEST_FILTER=(^(HDF5)[^\n]*)"
-D "TEST_REFERENCE=${testfile}.new"
- -P "${HDF5_RESOURCES_DIR}/runTest.cmake"
+ -P "${HDF_RESOURCES_EXT_DIR}/runTest.cmake"
)
set_tests_properties (H5IMPORT-${testname}-H5DMP_CMP PROPERTIES DEPENDS H5IMPORT-${testname}-H5DMP)
endif (HDF5_ENABLE_USING_MEMCHECKER)
@@ -180,7 +180,7 @@
-D "TEST_OUTPUT=d${testfile}.dmp"
-D "TEST_EXPECT=0"
-D "TEST_SKIP_COMPARE=TRUE"
- -P "${HDF5_RESOURCES_DIR}/runTest.cmake"
+ -P "${HDF_RESOURCES_EXT_DIR}/runTest.cmake"
)
else ("${ARGN}" STREQUAL "BINARY")
add_test (
@@ -192,7 +192,7 @@
-D "TEST_OUTPUT=d${testfile}.dmp"
-D "TEST_EXPECT=0"
-D "TEST_SKIP_COMPARE=TRUE"
- -P "${HDF5_RESOURCES_DIR}/runTest.cmake"
+ -P "${HDF_RESOURCES_EXT_DIR}/runTest.cmake"
)
endif ("${ARGN}" STREQUAL "BINARY")
set_tests_properties (H5IMPORT-DUMP-${testname}-H5DMP PROPERTIES DEPENDS "H5IMPORT-DUMP-${testname}-clear-objects")
@@ -206,7 +206,7 @@
-D "TEST_OUTPUT=d${testfile}.imp"
-D "TEST_EXPECT=0"
-D "TEST_SKIP_COMPARE=TRUE"
- -P "${HDF5_RESOURCES_DIR}/runTest.cmake"
+ -P "${HDF_RESOURCES_EXT_DIR}/runTest.cmake"
)
set_tests_properties (H5IMPORT-DUMP-${testname} PROPERTIES DEPENDS "H5IMPORT-DUMP-${testname}-H5DMP")
@@ -214,13 +214,13 @@
NAME H5IMPORT-DUMP-${testname}-H5DFF
COMMAND "${CMAKE_COMMAND}"
-D "TEST_PROGRAM=$<TARGET_FILE:h5diff>"
- -D "TEST_ARGS:STRING=-v;d${testfile};testfiles/${testfile};${datasetname};${datasetname}"
+ -D "TEST_ARGS:STRING=-r;d${testfile};testfiles/${testfile};${datasetname};${datasetname}"
-D "TEST_FOLDER=${PROJECT_BINARY_DIR}"
-D "TEST_OUTPUT=d${testfile}.dff"
-D "TEST_EXPECT=0"
-D "TEST_FILTER=(^(Warning)[^\n]*)"
-D "TEST_REFERENCE=testfiles/d${testfile}.txt"
- -P "${HDF5_RESOURCES_DIR}/runTest.cmake"
+ -P "${HDF_RESOURCES_EXT_DIR}/runTest.cmake"
)
set_tests_properties (H5IMPORT-DUMP-${testname}-H5DFF PROPERTIES DEPENDS "H5IMPORT-DUMP-${testname}")
endif (NOT HDF5_ENABLE_USING_MEMCHECKER)
diff --git a/tools/h5import/Makefile.in b/tools/h5import/Makefile.in
index 5cba138..d3b0185 100644
--- a/tools/h5import/Makefile.in
+++ b/tools/h5import/Makefile.in
@@ -513,7 +513,6 @@ MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MPE = @MPE@
-MPI_GET_SIZE = @MPI_GET_SIZE@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
diff --git a/tools/h5import/h5import.c b/tools/h5import/h5import.c
index 74c67b9..96fb6f9 100644
--- a/tools/h5import/h5import.c
+++ b/tools/h5import/h5import.c
@@ -874,12 +874,9 @@ static int processStrData(FILE *strm, struct Input *in, hid_t file_id)
*-------------------------------------------------------------------------
*/
- while (!HDfeof(strm)) {
- c = HDfgetc(strm);
-
+ while(EOF != (c = HDfgetc(strm)))
if (c == 10) /* eol */
nlines++;
- }
if (!nlines)
return 0;
@@ -940,9 +937,7 @@ static int processStrData(FILE *strm, struct Input *in, hid_t file_id)
line = 0;
- while (!HDfeof(strm)) {
- c = HDfgetc(strm);
-
+ while(EOF != (c = HDfgetc(strm))) {
str[i] = (char)c;
i++;
diff --git a/tools/h5jam/CMakeLists.txt b/tools/h5jam/CMakeLists.txt
index b0d5ac8..a8e3a7c 100644
--- a/tools/h5jam/CMakeLists.txt
+++ b/tools/h5jam/CMakeLists.txt
@@ -64,9 +64,9 @@ endif (BUILD_TESTING)
##############################################################################
##############################################################################
-#-----------------------------------------------------------------------------
-# Rules for Installation of tools using make Install target
-#-----------------------------------------------------------------------------
+#-----------------------------------------------------------------------------
+# Rules for Installation of tools using make Install target
+#-----------------------------------------------------------------------------
#INSTALL_PROGRAM_PDB (h5jam ${HDF5_INSTALL_BIN_DIR} toolsapplications)
diff --git a/tools/h5jam/CMakeTests.cmake b/tools/h5jam/CMakeTests.cmake
index fb64313..b5dc256 100644
--- a/tools/h5jam/CMakeTests.cmake
+++ b/tools/h5jam/CMakeTests.cmake
@@ -77,7 +77,7 @@
-D "TEST_OUTPUT=${expectfile}.out"
-D "TEST_EXPECT=${resultcode}"
-D "TEST_REFERENCE=testfiles/${expectfile}.txt"
- -P "${HDF5_RESOURCES_DIR}/runTest.cmake"
+ -P "${HDF_RESOURCES_EXT_DIR}/runTest.cmake"
)
set_tests_properties (H5JAM-${expectfile} PROPERTIES DEPENDS H5JAM-${expectfile}-clear-objects)
endif (HDF5_ENABLE_USING_MEMCHECKER)
@@ -111,7 +111,7 @@
-D "TEST_OUTPUT=${expectfile}.out"
-D "TEST_EXPECT=${resultcode}"
-D "TEST_REFERENCE=testfiles/${expectfile}.txt"
- -P "${HDF5_RESOURCES_DIR}/runTest.cmake"
+ -P "${HDF_RESOURCES_EXT_DIR}/runTest.cmake"
)
set_tests_properties (H5JAM-UNJAM-${expectfile} PROPERTIES DEPENDS H5JAM-UNJAM-${expectfile}-clear-objects)
endif (HDF5_ENABLE_USING_MEMCHECKER)
@@ -140,7 +140,7 @@
-D "TEST_EXPECT=0"
-D "TEST_FILTER=(^(HDF5)[^\n]*)"
-D "TEST_SKIP_COMPARE=TRUE"
- -P "${HDF5_RESOURCES_DIR}/runTest.cmake"
+ -P "${HDF_RESOURCES_EXT_DIR}/runTest.cmake"
)
set_tests_properties (H5JAM-${testname}-CHECKFILE-H5DMP PROPERTIES DEPENDS H5JAM-${testname}-CHECKFILE-clear-objects)
add_test (
@@ -153,7 +153,7 @@
-D "TEST_EXPECT=0"
-D "TEST_FILTER=(^(HDF5)[^\n]*)"
-D "TEST_REFERENCE=${actual}.new"
- -P "${HDF5_RESOURCES_DIR}/runTest.cmake"
+ -P "${HDF_RESOURCES_EXT_DIR}/runTest.cmake"
)
set_tests_properties (H5JAM-${testname}-CHECKFILE-H5DMP_CMP PROPERTIES DEPENDS H5JAM-${testname}-CHECKFILE-H5DMP)
endif (NOT HDF5_ENABLE_USING_MEMCHECKER)
@@ -200,7 +200,7 @@
-D "TEST_OUTPUT=${outfile}.ufile.txt"
-D "TEST_EXPECT=0"
-D "TEST_SKIP_COMPARE=TRUE"
- -P "${HDF5_RESOURCES_DIR}/runTest.cmake"
+ -P "${HDF_RESOURCES_EXT_DIR}/runTest.cmake"
)
set_tests_properties (H5JAM-${testname}-UNJAM PROPERTIES DEPENDS H5JAM-${testname}-UNJAM_D-clear-objects)
set (compare_test "${outfile}.ufile.txt")
@@ -231,7 +231,7 @@
-D "TEST_UFILE=${compare_test}"
-D "TEST_EXPECT=0"
-D "TEST_OFILE="
- -P "${HDF5_RESOURCES_DIR}/userblockTest.cmake"
+ -P "${HDF_RESOURCES_DIR}/userblockTest.cmake"
)
set_tests_properties (H5JAM-${testname}-UNJAM-CHECK_UB_1 PROPERTIES DEPENDS H5JAM-${testname}-UNJAM-CHECK_UB_1-clear-objects)
endif (NOT "${compare_test}" STREQUAL "")
@@ -247,7 +247,7 @@
-D "TEST_EXPECT=0"
-D "TEST_UFILE=NULL"
-D "TEST_OFILE=NULL"
- -P "${HDF5_RESOURCES_DIR}/userblockTest.cmake"
+ -P "${HDF_RESOURCES_DIR}/userblockTest.cmake"
)
if (NOT "${compare_test}" STREQUAL "")
set_tests_properties (H5JAM-${testname}-UNJAM-CHECK_NOUB PROPERTIES DEPENDS H5JAM-${testname}-UNJAM-CHECK_UB_1)
@@ -295,7 +295,7 @@
-D "TEST_UFILE=testfiles/${jamfile}"
-D "TEST_EXPECT=0"
-D "TEST_OFILE=${compare_orig}"
- -P "${HDF5_RESOURCES_DIR}/userblockTest.cmake"
+ -P "${HDF_RESOURCES_DIR}/userblockTest.cmake"
)
set_tests_properties (H5JAM-${testname}-CHECK_UB_1 PROPERTIES DEPENDS H5JAM-${testname}-CHECK_UB_1-clear-objects)
CHECKFILE (${testname} "H5JAM-${testname}-CHECK_UB_1" ${chkfile} ${outfile})
@@ -350,7 +350,7 @@
-D "TEST_UFILE=testfiles/${jamfile}"
-D "TEST_EXPECT=0"
-D "TEST_OFILE=${compare_orig}"
- -P "${HDF5_RESOURCES_DIR}/userblockTest.cmake"
+ -P "${HDF_RESOURCES_DIR}/userblockTest.cmake"
)
set_tests_properties (H5JAM-${testname}_NONE-CHECK_UB_1 PROPERTIES DEPENDS H5JAM-${testname}_NONE-CHECK_UB_1-clear-objects)
CHECKFILE (${testname} "H5JAM-${testname}_NONE-CHECK_UB_1" ${infile} ${chkfile})
diff --git a/tools/h5jam/Makefile.in b/tools/h5jam/Makefile.in
index a50a9c9..d0c8f16 100644
--- a/tools/h5jam/Makefile.in
+++ b/tools/h5jam/Makefile.in
@@ -525,7 +525,6 @@ MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MPE = @MPE@
-MPI_GET_SIZE = @MPI_GET_SIZE@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
diff --git a/tools/h5jam/getub.c b/tools/h5jam/getub.c
index afb0da6..776eaeb 100644
--- a/tools/h5jam/getub.c
+++ b/tools/h5jam/getub.c
@@ -162,7 +162,7 @@ main (int argc, const char *argv[])
if (res < (long)size)
{
if (buf)
- free (buf);
+ HDfree (buf);
HDclose (fd);
exit (EXIT_FAILURE);
}
@@ -170,7 +170,7 @@ main (int argc, const char *argv[])
HDwrite (1, buf, (unsigned)size);
if (buf)
- free (buf);
+ HDfree (buf);
HDclose (fd);
return (EXIT_SUCCESS);
}
diff --git a/tools/h5ls/CMakeLists.txt b/tools/h5ls/CMakeLists.txt
index 5220087..f3749e3 100644
--- a/tools/h5ls/CMakeLists.txt
+++ b/tools/h5ls/CMakeLists.txt
@@ -31,9 +31,9 @@ endif (BUILD_TESTING)
##############################################################################
##############################################################################
-#-----------------------------------------------------------------------------
-# Rules for Installation of tools using make Install target
-#-----------------------------------------------------------------------------
+#-----------------------------------------------------------------------------
+# Rules for Installation of tools using make Install target
+#-----------------------------------------------------------------------------
#INSTALL_PROGRAM_PDB (h5ls ${HDF5_INSTALL_BIN_DIR} toolsapplications)
diff --git a/tools/h5ls/CMakeTests.cmake b/tools/h5ls/CMakeTests.cmake
index b739130..a42fa17 100644
--- a/tools/h5ls/CMakeTests.cmake
+++ b/tools/h5ls/CMakeTests.cmake
@@ -140,7 +140,7 @@
-D "TEST_OUTPUT=${resultfile}.out"
-D "TEST_EXPECT=${resultcode}"
-D "TEST_REFERENCE=${resultfile}.ls"
- -P "${HDF5_RESOURCES_DIR}/runTest.cmake"
+ -P "${HDF_RESOURCES_EXT_DIR}/runTest.cmake"
)
set_tests_properties (H5LS-${resultfile} PROPERTIES DEPENDS "H5LS-${resultfile}-clear-objects")
endif (HDF5_ENABLE_USING_MEMCHECKER)
diff --git a/tools/h5ls/Makefile.in b/tools/h5ls/Makefile.in
index af9d170..2c4fe10 100644
--- a/tools/h5ls/Makefile.in
+++ b/tools/h5ls/Makefile.in
@@ -505,7 +505,6 @@ MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MPE = @MPE@
-MPI_GET_SIZE = @MPI_GET_SIZE@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
diff --git a/tools/h5ls/h5ls.c b/tools/h5ls/h5ls.c
index 257d4d1..4b8a50b 100644
--- a/tools/h5ls/h5ls.c
+++ b/tools/h5ls/h5ls.c
@@ -820,8 +820,6 @@ print_float_type(h5tools_str_t *buffer, hid_t type, int ind)
* Programmer: Robb Matzke
* Thursday, November 5, 1998
*
- * Modifications:
- *
*-------------------------------------------------------------------------
*/
static hbool_t
@@ -836,8 +834,7 @@ print_cmpd_type(h5tools_str_t *buffer, hid_t type, int ind)
if(H5T_COMPOUND != H5Tget_class(type))
return FALSE;
- nmembs = H5Tget_nmembers(type);
- if(nmembs <= 0)
+ if((nmembs = H5Tget_nmembers(type)) < 0)
return FALSE;
h5tools_str_append(buffer, "struct {");
@@ -859,6 +856,7 @@ print_cmpd_type(h5tools_str_t *buffer, hid_t type, int ind)
size = H5Tget_size(type);
h5tools_str_append(buffer, "\n%*s} %lu byte%s",
ind, "", (unsigned long)size, 1==size?"":"s");
+
return TRUE;
}
@@ -887,8 +885,7 @@ print_enum_type(h5tools_str_t *buffer, hid_t type, int ind)
if(H5T_ENUM != H5Tget_class(type))
return FALSE;
- nmembs = H5Tget_nmembers(type);
- if(nmembs < 0)
+ if((nmembs = H5Tget_nmembers(type)) < 0)
return FALSE;
super = H5Tget_super(type);
@@ -1467,7 +1464,7 @@ dump_dataset_values(hid_t dset)
h5tools_render_element(rawoutstream, info, &ctx, &buffer, &curr_pos, (size_t)info->line_ncols, (hsize_t)0, (hsize_t)0);
ctx.need_prefix = TRUE;
ctx.cur_column = (size_t)curr_pos;
- if (h5tools_dump_dset(rawoutstream, info, &ctx, dset, -1, NULL) < 0) {
+ if (h5tools_dump_dset(rawoutstream, info, &ctx, dset, NULL) < 0) {
h5tools_str_reset(&buffer);
h5tools_str_append(&buffer, " Unable to print data.");
h5tools_render_element(rawoutstream, info, &ctx, &buffer, &curr_pos, (size_t)info->line_ncols, (hsize_t)0, (hsize_t)0);
diff --git a/tools/h5repack/CMakeLists.txt b/tools/h5repack/CMakeLists.txt
index 4d26c0c..cb8720e 100644
--- a/tools/h5repack/CMakeLists.txt
+++ b/tools/h5repack/CMakeLists.txt
@@ -51,7 +51,7 @@ if (BUILD_TESTING)
set (HDF5_TOOL_PLUGIN_LIB_CORENAME "dynlibadd")
set (HDF5_TOOL_PLUGIN_LIB_NAME "${HDF5_EXTERNAL_LIB_PREFIX}${HDF5_TOOL_PLUGIN_LIB_CORENAME}")
set (HDF5_TOOL_PLUGIN_LIB_TARGET ${HDF5_TOOL_PLUGIN_LIB_CORENAME})
- add_definitions (${HDF5_EXTRA_C_FLAGS})
+ add_definitions (${HDF_EXTRA_C_FLAGS})
INCLUDE_DIRECTORIES (${HDF5_SRC_DIR})
add_library (${HDF5_TOOL_PLUGIN_LIB_TARGET} ${LIB_TYPE} dynlib_rpk.c)
@@ -89,9 +89,9 @@ endif (BUILD_TESTING)
##############################################################################
##############################################################################
-#-----------------------------------------------------------------------------
-# Rules for Installation of tools using make Install target
-#-----------------------------------------------------------------------------
+#-----------------------------------------------------------------------------
+# Rules for Installation of tools using make Install target
+#-----------------------------------------------------------------------------
#INSTALL_PROGRAM_PDB (h5repack ${HDF5_INSTALL_BIN_DIR} toolsapplications)
diff --git a/tools/h5repack/CMakeTests.cmake b/tools/h5repack/CMakeTests.cmake
index 430defc..220c871 100644
--- a/tools/h5repack/CMakeTests.cmake
+++ b/tools/h5repack/CMakeTests.cmake
@@ -29,7 +29,7 @@
-D "TEST_EXPECT=${resultcode}"
-D "TEST_OUTPUT=h5repacktest"
-D "TEST_FOLDER=${PROJECT_BINARY_DIR}"
- -P "${HDF5_RESOURCES_DIR}/vfdTest.cmake"
+ -P "${HDF_RESOURCES_DIR}/vfdTest.cmake"
)
if (NOT "${last_test}" STREQUAL "")
set_tests_properties (H5REPACK-VFD-${vfdname}-h5repacktest PROPERTIES DEPENDS ${last_test})
@@ -136,7 +136,7 @@
-D "TEST_OUTPUT=h5repack-${testname}.out"
-D "TEST_EXPECT=${resultcode}"
-D "TEST_REFERENCE=h5repack-${testname}.txt"
- -P "${HDF5_RESOURCES_DIR}/runTest.cmake"
+ -P "${HDF_RESOURCES_EXT_DIR}/runTest.cmake"
)
set_tests_properties (H5REPACK-h5repack-${testname} PROPERTIES DEPENDS "H5REPACK-h5repack-${testname}-clear-objects")
endif (HDF5_ENABLE_USING_MEMCHECKER)
@@ -215,7 +215,7 @@
-D "TEST_EXPECT=${resultcode}"
-D "TEST_FILTER:STRING=${testfilter}"
-D "TEST_REFERENCE=${resultfile}.tst"
- -P "${HDF5_RESOURCES_DIR}/runTest.cmake"
+ -P "${HDF_RESOURCES_EXT_DIR}/runTest.cmake"
)
endif (HDF5_ENABLE_USING_MEMCHECKER)
if (NOT "${last_test}" STREQUAL "")
@@ -250,7 +250,7 @@
-D "TEST_OUTPUT=${resultfile}-${testname}.out"
-D "TEST_EXPECT=${resultcode}"
-D "TEST_REFERENCE=${testname}.${resultfile}.ddl"
- -P "${HDF5_RESOURCES_DIR}/runTest.cmake"
+ -P "${HDF_RESOURCES_EXT_DIR}/runTest.cmake"
)
set_tests_properties (H5REPACK_DMP-h5dump-${testname} PROPERTIES DEPENDS "H5REPACK_DMP-${testname}")
endif (NOT HDF5_ENABLE_USING_MEMCHECKER)
@@ -290,7 +290,7 @@
-D "TEST_EXPECT=${resultcode}"
-D "TEST_FILTER:STRING=${testfilter}"
-D "TEST_REFERENCE=${testfilter}"
- -P "${HDF5_RESOURCES_DIR}/grepTest.cmake"
+ -P "${HDF_RESOURCES_EXT_DIR}/grepTest.cmake"
)
set_tests_properties (H5REPACK_VERIFY_LAYOUT-${testname}_DMP PROPERTIES DEPENDS H5REPACK_VERIFY_LAYOUT-${testname}_DFF)
else (${resultcode} STREQUAL "0")
@@ -313,7 +313,7 @@
-D "TEST_EXPECT=${resultcode}"
-D "TEST_FILTER:STRING=${nottestfilter}"
-D "TEST_REFERENCE=${testfilter}"
- -P "${HDF5_RESOURCES_DIR}/grepTest.cmake"
+ -P "${HDF_RESOURCES_EXT_DIR}/grepTest.cmake"
)
set_tests_properties (H5REPACK_VERIFY_LAYOUT-${testname}_DMP PROPERTIES DEPENDS H5REPACK_VERIFY_LAYOUT-${testname}_DFF)
endif (${resultcode} STREQUAL "0")
@@ -365,7 +365,7 @@
-D "TEST_REFERENCE=${testname}.${resultfile}.tst"
-D "TEST_ENV_VAR=HDF5_PLUGIN_PATH"
-D "TEST_ENV_VALUE=${CMAKE_BINARY_DIR}/plugins"
- -P "${HDF5_RESOURCES_DIR}/runTest.cmake"
+ -P "${HDF_RESOURCES_EXT_DIR}/runTest.cmake"
)
set_tests_properties (H5REPACK_UD-${testname} PROPERTIES DEPENDS H5REPACK_UD-${testname}-clearall-objects)
add_test (
@@ -379,7 +379,7 @@
-D "TEST_REFERENCE=${resultfile}-${testname}.ddl"
-D "TEST_ENV_VAR=HDF5_PLUGIN_PATH"
-D "TEST_ENV_VALUE=${CMAKE_BINARY_DIR}/plugins"
- -P "${HDF5_RESOURCES_DIR}/runTest.cmake"
+ -P "${HDF_RESOURCES_EXT_DIR}/runTest.cmake"
)
set_tests_properties (H5REPACK_UD-h5dump-${testname} PROPERTIES DEPENDS "H5REPACK_UD-${testname}")
endif (HDF5_BUILD_TOOLS AND NOT HDF5_ENABLE_USING_MEMCHECKER)
diff --git a/tools/h5repack/Makefile.in b/tools/h5repack/Makefile.in
index 44ffb9d..50e7341 100644
--- a/tools/h5repack/Makefile.in
+++ b/tools/h5repack/Makefile.in
@@ -537,7 +537,6 @@ MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MPE = @MPE@
-MPI_GET_SIZE = @MPI_GET_SIZE@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
diff --git a/tools/h5repack/h5repack_copy.c b/tools/h5repack/h5repack_copy.c
index 63b5373..a25e789 100644
--- a/tools/h5repack/h5repack_copy.c
+++ b/tools/h5repack/h5repack_copy.c
@@ -39,7 +39,7 @@
#define CHECK_H5DRW_ERROR(_fun, _did, _mtid, _msid, _fsid, _pid, _buf) { \
H5E_BEGIN_TRY { \
if(_fun(_did, _mtid, _msid, _fsid, _pid, _buf) < 0) { \
- int _err_num = 0; \
+ hid_t _err_num = 0; \
char _msg[80]; \
H5Ewalk2(H5E_DEFAULT, H5E_WALK_DOWNWARD, walk_error_callback, &_err_num); \
H5Eget_msg(_err_num, NULL, _msg, (size_t)80); \
diff --git a/tools/h5repack/h5repack_main.c b/tools/h5repack/h5repack_main.c
index c25b7ea..3d4de6f 100644
--- a/tools/h5repack/h5repack_main.c
+++ b/tools/h5repack/h5repack_main.c
@@ -21,6 +21,8 @@
#define PROGRAMNAME "h5repack"
static int parse_command_line(int argc, const char **argv, pack_opt_t* options);
+static void leave(int ret);
+
/* module-scoped variables */
static int has_i_o = 0;
@@ -520,7 +522,6 @@ done:
int main(int argc, const char **argv) {
pack_opt_t options; /*the global options */
- int ret = -1;
h5tools_setprogname(PROGRAMNAME);
h5tools_setstatus(EXIT_SUCCESS);
diff --git a/tools/h5repack/h5repack_refs.c b/tools/h5repack/h5repack_refs.c
index b844280..2b39249 100644
--- a/tools/h5repack/h5repack_refs.c
+++ b/tools/h5repack/h5repack_refs.c
@@ -189,7 +189,7 @@ int do_copy_refobjs(hid_t fidin,
*/
if((refname = MapIdToName(refobj_id, travt)) != NULL) {
/* create the reference, -1 parameter for objects */
- if(H5Rcreate(&refbuf[u], fidout, refname, H5R_OBJECT, -1) < 0)
+ if(H5Rcreate(&refbuf[u], fidout, refname, H5R_OBJECT, (hid_t)-1) < 0)
goto error;
if(options->verbose)
{
diff --git a/tools/h5repack/h5repacktst.c b/tools/h5repack/h5repacktst.c
index 4510bd5..a32f33a 100644
--- a/tools/h5repack/h5repacktst.c
+++ b/tools/h5repack/h5repacktst.c
@@ -2271,7 +2271,7 @@ int make_deflate(hid_t loc_id)
/* create a reference to the dataset, test second seeep of file for references */
- if (H5Rcreate(&bufref[0],loc_id,"dset_deflate",H5R_OBJECT,-1) < 0)
+ if (H5Rcreate(&bufref[0],loc_id,"dset_deflate",H5R_OBJECT,(hid_t)-1) < 0)
goto out;
if (write_dset(loc_id,1,dims1r,"ref",H5T_STD_REF_OBJ,bufref) < 0)
goto out;
@@ -3322,7 +3322,7 @@ int make_big(hid_t loc_id)
goto out;
/* initialize buffer to 0 */
- buf=(signed char *) calloc( nelmts, size);
+ buf=(signed char *) HDcalloc( nelmts, size);
if (H5Sselect_hyperslab (f_sid,H5S_SELECT_SET,hs_start,NULL,hs_size, NULL) < 0)
goto out;
@@ -3769,7 +3769,7 @@ int write_dset_in(hid_t loc_id,
buf4[1]=0;
if (dset_name)
{
- if (H5Rcreate(&buf4[0],file_id,dset_name,H5R_OBJECT,-1) < 0)
+ if (H5Rcreate(&buf4[0],file_id,dset_name,H5R_OBJECT,(hid_t)-1) < 0)
goto out;
if (write_dset(loc_id,1,dims1r,"refobj",H5T_STD_REF_OBJ,buf4) < 0)
goto out;
@@ -3803,10 +3803,10 @@ int write_dset_in(hid_t loc_id,
/* Allocate and initialize VL dataset to write */
buf5[0].len = 1;
- buf5[0].p = malloc( 1 * sizeof(int));
+ buf5[0].p = HDmalloc( 1 * sizeof(int));
((int *)buf5[0].p)[0]=1;
buf5[1].len = 2;
- buf5[1].p = malloc( 2 * sizeof(int));
+ buf5[1].p = HDmalloc( 2 * sizeof(int));
((int *)buf5[1].p)[0] = 2;
((int *)buf5[1].p)[1] = 3;
@@ -3865,7 +3865,7 @@ int write_dset_in(hid_t loc_id,
/* allocate and initialize array data to write */
size = ( TEST_BUFSIZE / sizeof(double) + 1 ) * sizeof(double);
- dbuf = (double*)malloc( size );
+ dbuf = (double*)HDmalloc( size );
if (NULL == dbuf)
{
printf ("\nError: Cannot allocate memory for \"arrayd\" data buffer size %dMB.\n", (int) size / 1000000 );
@@ -4004,7 +4004,7 @@ int write_dset_in(hid_t loc_id,
/* Create references to dataset */
if (dset_name)
{
- if (H5Rcreate(&buf42[0][0], file_id, dset_name, H5R_OBJECT, -1) < 0)
+ if (H5Rcreate(&buf42[0][0], file_id, dset_name, H5R_OBJECT, (hid_t)-1) < 0)
goto out;
if (write_dset(loc_id, 2, dims2r, "refobj2D", H5T_STD_REF_OBJ, buf42) < 0)
goto out;
@@ -4039,7 +4039,7 @@ int write_dset_in(hid_t loc_id,
{
int l;
- buf52[i][j].p = malloc((i + 1) * sizeof(int));
+ buf52[i][j].p = HDmalloc((i + 1) * sizeof(int));
buf52[i][j].len = (size_t)(i + 1);
for(l = 0; l < i + 1; l++)
{
@@ -4223,7 +4223,7 @@ int write_dset_in(hid_t loc_id,
/* Create references to dataset */
if (dset_name)
{
- if (H5Rcreate(&buf43[0][0][0], file_id, dset_name, H5R_OBJECT, -1) < 0)
+ if (H5Rcreate(&buf43[0][0][0], file_id, dset_name, H5R_OBJECT, (hid_t)-1) < 0)
goto out;
if (write_dset(loc_id, 3, dims3r, "refobj3D", H5T_STD_REF_OBJ, buf43) < 0)
goto out;
@@ -4260,7 +4260,7 @@ int write_dset_in(hid_t loc_id,
{
int l;
- buf53[i][j][k].p = malloc((i + 1) * sizeof(int));
+ buf53[i][j][k].p = HDmalloc((i + 1) * sizeof(int));
buf53[i][j][k].len = (size_t)(i + 1);
for(l = 0; l < i + 1; l++)
{
@@ -4390,8 +4390,8 @@ int make_dset_reg_ref(hid_t loc_id)
int retval = -1; /* return value */
/* Allocate write & read buffers */
- wbuf = (hdset_reg_ref_t *)calloc(sizeof(hdset_reg_ref_t), (size_t)SPACE1_DIM1);
- dwbuf = (int *)malloc(sizeof(int) * SPACE2_DIM1 * SPACE2_DIM2);
+ wbuf = (hdset_reg_ref_t *)HDcalloc(sizeof(hdset_reg_ref_t), (size_t)SPACE1_DIM1);
+ dwbuf = (int *)HDmalloc(sizeof(int) * SPACE2_DIM1 * SPACE2_DIM2);
/* Create dataspace for datasets */
if ((sid2 = H5Screate_simple(SPACE2_RANK, dims2, NULL)) < 0)
@@ -4681,9 +4681,9 @@ int write_attr_in(hid_t loc_id,
/* object references ( H5R_OBJECT */
if (dset_name)
{
- if (H5Rcreate(&buf4[0],fid,dset_name,H5R_OBJECT,-1) < 0)
+ if (H5Rcreate(&buf4[0],fid,dset_name,H5R_OBJECT,(hid_t)-1) < 0)
goto out;
- if (H5Rcreate(&buf4[1],fid,dset_name,H5R_OBJECT,-1) < 0)
+ if (H5Rcreate(&buf4[1],fid,dset_name,H5R_OBJECT,(hid_t)-1) < 0)
goto out;
if (make_attr(loc_id,1,dims,"reference",H5T_STD_REF_OBJ,buf4) < 0)
goto out;
@@ -4731,10 +4731,10 @@ int write_attr_in(hid_t loc_id,
/* Allocate and initialize VL dataset to write */
buf5[0].len = 1;
- buf5[0].p = malloc( 1 * sizeof(int));
+ buf5[0].p = HDmalloc( 1 * sizeof(int));
((int *)buf5[0].p)[0]=1;
buf5[1].len = 2;
- buf5[1].p = malloc(2 * sizeof(int));
+ buf5[1].p = HDmalloc(2 * sizeof(int));
((int *)buf5[1].p)[0] = 2;
((int *)buf5[1].p)[1] = 3;
@@ -4995,7 +4995,7 @@ int write_attr_in(hid_t loc_id,
{
for (j = 0; j < 2; j++)
{
- if (H5Rcreate(&buf42[i][j],fid,dset_name,H5R_OBJECT,-1) < 0)
+ if (H5Rcreate(&buf42[i][j],fid,dset_name,H5R_OBJECT,(hid_t)-1) < 0)
goto out;
}
}
@@ -5051,7 +5051,7 @@ int write_attr_in(hid_t loc_id,
for (j = 0; j < 2; j++)
{
int l;
- buf52[i][j].p = malloc((i + 1) * sizeof(int));
+ buf52[i][j].p = HDmalloc((i + 1) * sizeof(int));
buf52[i][j].len = (size_t)(i + 1);
for (l = 0; l < i + 1; l++)
if (make_diffs)((int *)buf52[i][j].p)[l] = 0;
@@ -5430,7 +5430,7 @@ int write_attr_in(hid_t loc_id,
for (j = 0; j < 3; j++)
{
for (k = 0; k < 2; k++)
- if (H5Rcreate(&buf43[i][j][k],fid,dset_name,H5R_OBJECT,-1) < 0)
+ if (H5Rcreate(&buf43[i][j][k],fid,dset_name,H5R_OBJECT,(hid_t)-1) < 0)
goto out;
}
}
@@ -5517,7 +5517,7 @@ int write_attr_in(hid_t loc_id,
for (k = 0; k < 2; k++)
{
int l;
- buf53[i][j][k].p = malloc((i + 1) * sizeof(int));
+ buf53[i][j][k].p = HDmalloc((i + 1) * sizeof(int));
buf53[i][j][k].len = (size_t)i + 1;
for (l = 0; l < i + 1; l++)
if (make_diffs)
@@ -5939,7 +5939,7 @@ static herr_t add_attr_with_objref(hid_t file_id, hid_t obj_id)
* add attribute with obj ref type
*/
/* ref to dset */
- status = H5Rcreate(&data_attr_objref[0],file_id,NAME_OBJ_DS1,H5R_OBJECT,-1);
+ status = H5Rcreate(&data_attr_objref[0],file_id,NAME_OBJ_DS1,H5R_OBJECT,(hid_t)-1);
if (status < 0)
{
fprintf(stderr, "Error: %s %d> H5Rcreate failed.\n", FUNC, __LINE__);
@@ -5948,7 +5948,7 @@ static herr_t add_attr_with_objref(hid_t file_id, hid_t obj_id)
}
/* ref to group */
- status = H5Rcreate(&data_attr_objref[1],file_id,NAME_OBJ_GRP,H5R_OBJECT,-1);
+ status = H5Rcreate(&data_attr_objref[1],file_id,NAME_OBJ_GRP,H5R_OBJECT,(hid_t)-1);
if (status < 0)
{
fprintf(stderr, "Error: %s %d> H5Rcreate failed.\n", FUNC, __LINE__);
@@ -5957,7 +5957,7 @@ static herr_t add_attr_with_objref(hid_t file_id, hid_t obj_id)
}
/* ref to datatype */
- status = H5Rcreate(&data_attr_objref[2],file_id,NAME_OBJ_NDTYPE,H5R_OBJECT,-1);
+ status = H5Rcreate(&data_attr_objref[2],file_id,NAME_OBJ_NDTYPE,H5R_OBJECT,(hid_t)-1);
if (status < 0)
{
fprintf(stderr, "Error: %s %d> H5Rcreate failed.\n", FUNC, __LINE__);
@@ -6210,7 +6210,7 @@ static herr_t gen_obj_ref(hid_t loc_id)
* Passing -1 as reference is an object.*/
/* obj ref to dataset */
- status = H5Rcreate (&objref_buf[0], loc_id, NAME_OBJ_DS1, H5R_OBJECT, -1);
+ status = H5Rcreate (&objref_buf[0], loc_id, NAME_OBJ_DS1, H5R_OBJECT, (hid_t)-1);
if (status < 0)
{
fprintf(stderr, "Error: %s %d> H5Rcreate failed.\n", FUNC, __LINE__);
@@ -6219,7 +6219,7 @@ static herr_t gen_obj_ref(hid_t loc_id)
}
/* obj ref to group */
- status = H5Rcreate (&objref_buf[1], loc_id, NAME_OBJ_GRP, H5R_OBJECT, -1);
+ status = H5Rcreate (&objref_buf[1], loc_id, NAME_OBJ_GRP, H5R_OBJECT, (hid_t)-1);
if (status < 0)
{
fprintf(stderr, "Error: %s %d> H5Rcreate failed.\n", FUNC, __LINE__);
@@ -6228,7 +6228,7 @@ static herr_t gen_obj_ref(hid_t loc_id)
}
/* obj ref to named-datatype */
- status = H5Rcreate (&objref_buf[2], loc_id, NAME_OBJ_NDTYPE, H5R_OBJECT, -1);
+ status = H5Rcreate (&objref_buf[2], loc_id, NAME_OBJ_NDTYPE, H5R_OBJECT, (hid_t)-1);
if (status < 0)
{
fprintf(stderr, "Error: %s %d> H5Rcreate failed.\n", FUNC, __LINE__);
@@ -6650,7 +6650,7 @@ static herr_t make_complex_attr_references(hid_t loc_id)
* Create the object references into compound type
*/
/* references to dataset */
- status = H5Rcreate (&(comp_objref_data[0].val_objref), loc_id, NAME_OBJ_DS1, H5R_OBJECT,-1);
+ status = H5Rcreate (&(comp_objref_data[0].val_objref), loc_id, NAME_OBJ_DS1, H5R_OBJECT,(hid_t)-1);
if (status < 0)
{
fprintf(stderr, "Error: %s %d> H5Rcreate failed.\n", FUNC, __LINE__);
@@ -6660,7 +6660,7 @@ static herr_t make_complex_attr_references(hid_t loc_id)
comp_objref_data[0].val_int = 0;
/* references to group */
- status = H5Rcreate (&(comp_objref_data[1].val_objref), loc_id, NAME_OBJ_GRP, H5R_OBJECT,-1);
+ status = H5Rcreate (&(comp_objref_data[1].val_objref), loc_id, NAME_OBJ_GRP, H5R_OBJECT,(hid_t)-1);
if (status < 0)
{
fprintf(stderr, "Error: %s %d> H5Rcreate failed.\n", FUNC, __LINE__);
@@ -6670,7 +6670,7 @@ static herr_t make_complex_attr_references(hid_t loc_id)
comp_objref_data[1].val_int = 10;
/* references to datatype */
- status = H5Rcreate (&(comp_objref_data[2].val_objref), loc_id, NAME_OBJ_NDTYPE, H5R_OBJECT,-1);
+ status = H5Rcreate (&(comp_objref_data[2].val_objref), loc_id, NAME_OBJ_NDTYPE, H5R_OBJECT,(hid_t)-1);
if (status < 0)
{
fprintf(stderr, "Error: %s %d> H5Rcreate failed.\n", FUNC, __LINE__);
@@ -6743,17 +6743,17 @@ static herr_t make_complex_attr_references(hid_t loc_id)
* prepare vlen data
*/
vlen_objref_data[0].len = LEN0_VLEN_OBJREF;
- vlen_objref_data[0].p = malloc (vlen_objref_data[0].len * sizeof(hobj_ref_t));
+ vlen_objref_data[0].p = HDmalloc (vlen_objref_data[0].len * sizeof(hobj_ref_t));
vlen_objref_data[1].len = LEN1_VLEN_OBJREF;
- vlen_objref_data[1].p = malloc (vlen_objref_data[1].len * sizeof(hobj_ref_t));
+ vlen_objref_data[1].p = HDmalloc (vlen_objref_data[1].len * sizeof(hobj_ref_t));
vlen_objref_data[2].len = LEN2_VLEN_OBJREF;
- vlen_objref_data[2].p = malloc (vlen_objref_data[2].len * sizeof(hobj_ref_t));
+ vlen_objref_data[2].p = HDmalloc (vlen_objref_data[2].len * sizeof(hobj_ref_t));
/*
* create obj references
*/
/* reference to dataset */
- status = H5Rcreate (&((hobj_ref_t*)vlen_objref_data[0].p)[0], loc_id, NAME_OBJ_DS1, H5R_OBJECT, -1);
+ status = H5Rcreate (&((hobj_ref_t*)vlen_objref_data[0].p)[0], loc_id, NAME_OBJ_DS1, H5R_OBJECT, (hid_t)-1);
if (status < 0)
{
fprintf(stderr, "Error: %s %d> H5Rcreate failed.\n", FUNC, __LINE__);
@@ -6761,7 +6761,7 @@ static herr_t make_complex_attr_references(hid_t loc_id)
goto out;
}
/* reference to group */
- status = H5Rcreate (&((hobj_ref_t*)vlen_objref_data[1].p)[0], loc_id, NAME_OBJ_GRP, H5R_OBJECT, -1);
+ status = H5Rcreate (&((hobj_ref_t*)vlen_objref_data[1].p)[0], loc_id, NAME_OBJ_GRP, H5R_OBJECT, (hid_t)-1);
if (status < 0)
{
fprintf(stderr, "Error: %s %d> H5Rcreate failed.\n", FUNC, __LINE__);
@@ -6769,7 +6769,7 @@ static herr_t make_complex_attr_references(hid_t loc_id)
goto out;
}
/* reference to datatype */
- status = H5Rcreate (&((hobj_ref_t*)vlen_objref_data[2].p)[0], loc_id, NAME_OBJ_NDTYPE, H5R_OBJECT, -1);
+ status = H5Rcreate (&((hobj_ref_t*)vlen_objref_data[2].p)[0], loc_id, NAME_OBJ_NDTYPE, H5R_OBJECT, (hid_t)-1);
if (status < 0)
{
fprintf(stderr, "Error: %s %d> H5Rcreate failed.\n", FUNC, __LINE__);
@@ -6812,7 +6812,7 @@ static herr_t make_complex_attr_references(hid_t loc_id)
* prepare vlen data
*/
vlen_regref_data[0].len = LEN0_VLEN_REGREF;
- vlen_regref_data[0].p = malloc (vlen_regref_data[0].len * sizeof(hdset_reg_ref_t));
+ vlen_regref_data[0].p = HDmalloc (vlen_regref_data[0].len * sizeof(hdset_reg_ref_t));
/*
* create region reference
diff --git a/tools/h5stat/CMakeLists.txt b/tools/h5stat/CMakeLists.txt
index 82f0ffb..0658216 100644
--- a/tools/h5stat/CMakeLists.txt
+++ b/tools/h5stat/CMakeLists.txt
@@ -40,9 +40,9 @@ endif (BUILD_TESTING)
##############################################################################
##############################################################################
-#-----------------------------------------------------------------------------
-# Rules for Installation of tools using make Install target
-#-----------------------------------------------------------------------------
+#-----------------------------------------------------------------------------
+# Rules for Installation of tools using make Install target
+#-----------------------------------------------------------------------------
#INSTALL_PROGRAM_PDB (h5stat ${HDF5_INSTALL_BIN_DIR} toolsapplications)
diff --git a/tools/h5stat/CMakeTests.cmake b/tools/h5stat/CMakeTests.cmake
index b803dff..4175eb2 100644
--- a/tools/h5stat/CMakeTests.cmake
+++ b/tools/h5stat/CMakeTests.cmake
@@ -101,7 +101,7 @@
-D "TEST_OUTPUT=${resultfile}.out"
-D "TEST_EXPECT=${resultcode}"
-D "TEST_REFERENCE=${resultfile}.ddl"
- -P "${HDF5_RESOURCES_DIR}/runTest.cmake"
+ -P "${HDF_RESOURCES_EXT_DIR}/runTest.cmake"
)
set_tests_properties (H5STAT-${resultfile} PROPERTIES DEPENDS "H5STAT-${resultfile}-clear-objects")
endif (HDF5_ENABLE_USING_MEMCHECKER)
diff --git a/tools/h5stat/Makefile.in b/tools/h5stat/Makefile.in
index f0c2674..32b6d4c 100644
--- a/tools/h5stat/Makefile.in
+++ b/tools/h5stat/Makefile.in
@@ -515,7 +515,6 @@ MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MPE = @MPE@
-MPI_GET_SIZE = @MPI_GET_SIZE@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
diff --git a/tools/h5stat/h5stat.c b/tools/h5stat/h5stat.c
index de36c19..a3a0d13 100644
--- a/tools/h5stat/h5stat.c
+++ b/tools/h5stat/h5stat.c
@@ -32,9 +32,9 @@
#define DEF_SIZE_SMALL_DSETS 10
#define DEF_SIZE_SMALL_ATTRS 10
-#define H5_NFILTERS_IMPL 8 /* Number of currently implemented filters + one to
- accommodate for user-define filters + one
- to accomodate datasets whithout any filters */
+#define H5_NFILTERS_IMPL 8 /* Number of currently implemented filters + one to
+ accommodate for user-define filters + one
+ to accomodate datasets whithout any filters */
@@ -855,7 +855,7 @@ parse_command_line(int argc, const char *argv[], struct handler_t **hand_ret)
error_msg("Invalid threshold for small datasets\n");
goto error;
}
- } else
+ } else
error_msg("Missing threshold for small datasets\n");
break;
@@ -878,7 +878,7 @@ parse_command_line(int argc, const char *argv[], struct handler_t **hand_ret)
goto error;
}
} else
- error_msg("Missing threshold for small # of attributes\n");
+ error_msg("Missing threshold for small # of attributes\n");
break;
@@ -1592,9 +1592,9 @@ main(int argc, const char *argv[])
iter.SM_heap_storage_size = finfo.sohm.msgs_info.heap_size;
} /* end else */
- iter.num_small_groups = (unsigned long *)calloc((size_t)sgroups_threshold, sizeof(unsigned long));
- iter.num_small_attrs = (unsigned long *)calloc((size_t)(sattrs_threshold+1), sizeof(unsigned long));
- iter.small_dset_dims = (unsigned long *)calloc((size_t)sdsets_threshold, sizeof(unsigned long));
+ iter.num_small_groups = (unsigned long *)HDcalloc((size_t)sgroups_threshold, sizeof(unsigned long));
+ iter.num_small_attrs = (unsigned long *)HDcalloc((size_t)(sattrs_threshold+1), sizeof(unsigned long));
+ iter.small_dset_dims = (unsigned long *)HDcalloc((size_t)sdsets_threshold, sizeof(unsigned long));
if(iter.num_small_groups == NULL || iter.num_small_attrs == NULL || iter.small_dset_dims == NULL) {
error_msg("Unable to allocate memory for tracking small groups/datasets/attributes\n");
diff --git a/tools/lib/CMakeLists.txt b/tools/lib/CMakeLists.txt
index c3b8294..e65673a 100644
--- a/tools/lib/CMakeLists.txt
+++ b/tools/lib/CMakeLists.txt
@@ -4,7 +4,7 @@ PROJECT (HDF5_TOOLS_LIB)
#-----------------------------------------------------------------------------
# Apply Definitions to compiler in this directory and below
#-----------------------------------------------------------------------------
-add_definitions (${HDF5_EXTRA_C_FLAGS})
+add_definitions (${HDF_EXTRA_C_FLAGS})
#-----------------------------------------------------------------------------
# Define Sources
@@ -71,21 +71,6 @@ install (
)
#-----------------------------------------------------------------------------
-# Because tools are installed into bin/tools we need to make sure the hdf5tools
-# library will be installed into the proper location.
-#-----------------------------------------------------------------------------
-if (APPLE)
- option (HDF5_BUILD_WITH_INSTALL_NAME "Build with library install_name set to the installation path" OFF)
- if (HDF5_BUILD_WITH_INSTALL_NAME)
- SET_TARGET_PROPERTIES(${HDF5_TOOLS_LIB_TARGET} PROPERTIES
- LINK_FLAGS "-current_version ${HDF5_PACKAGE_VERSION} -compatibility_version ${HDF5_PACKAGE_VERSION}"
- INSTALL_NAME_DIR "${CMAKE_INSTALL_PREFIX}/lib"
- BUILD_WITH_INSTALL_RPATH ${HDF5_BUILD_WITH_INSTALL_NAME}
- )
- endif (HDF5_BUILD_WITH_INSTALL_NAME)
-endif (APPLE)
-
-#-----------------------------------------------------------------------------
# Add Target(s) to CMake Install for import into other projects
#-----------------------------------------------------------------------------
if (HDF5_EXPORTED_TARGETS)
diff --git a/tools/lib/Makefile.in b/tools/lib/Makefile.in
index 5af2dfd..210b6b3 100644
--- a/tools/lib/Makefile.in
+++ b/tools/lib/Makefile.in
@@ -502,7 +502,6 @@ MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MPE = @MPE@
-MPI_GET_SIZE = @MPI_GET_SIZE@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
diff --git a/tools/lib/h5diff.c b/tools/lib/h5diff.c
index 883bd5f..2eb66f9 100644
--- a/tools/lib/h5diff.c
+++ b/tools/lib/h5diff.c
@@ -468,75 +468,81 @@ static herr_t trav_grp_symlinks(const char *path, const H5L_info_t *linfo,
switch(linfo->type)
{
- case H5L_TYPE_SOFT:
- ret = H5tools_get_symlink_info(tinfo->fid, path, &lnk_info, opts->follow_links);
- /* error */
- if (ret < 0)
- goto done;
- /* no dangling link option given and detect dangling link */
- else if (ret == 0)
- {
- tinfo->symlink_visited.dangle_link = TRUE;
- trav_info_visit_lnk(path, linfo, tinfo);
- if (opts->no_dangle_links)
- opts->err_stat = 1; /* make dgangling link is error */
- goto done;
- }
+ case H5L_TYPE_SOFT:
+ ret = H5tools_get_symlink_info(tinfo->fid, path, &lnk_info, opts->follow_links);
+ /* error */
+ if (ret < 0)
+ goto done;
+ /* no dangling link option given and detect dangling link */
+ else if (ret == 0)
+ {
+ tinfo->symlink_visited.dangle_link = TRUE;
+ trav_info_visit_lnk(path, linfo, tinfo);
+ if (opts->no_dangle_links)
+ opts->err_stat = 1; /* make dgangling link is error */
+ goto done;
+ }
- /* check if already visit the target object */
- if(symlink_is_visited( &(tinfo->symlink_visited), linfo->type, NULL, lnk_info.trg_path))
- goto done;
+ /* check if already visit the target object */
+ if(symlink_is_visited( &(tinfo->symlink_visited), linfo->type, NULL, lnk_info.trg_path))
+ goto done;
- /* add this link as visited link */
- if(symlink_visit_add( &(tinfo->symlink_visited), linfo->type, NULL, lnk_info.trg_path) < 0)
- goto done;
-
- if(h5trav_visit(tinfo->fid, path, TRUE, TRUE,
- trav_grp_objs,trav_grp_symlinks, tinfo) < 0)
- {
- parallel_print("Error: Could not get file contents\n");
- opts->err_stat = 1;
- goto done;
- }
- break;
-
- case H5L_TYPE_EXTERNAL:
- ret = H5tools_get_symlink_info(tinfo->fid, path, &lnk_info, opts->follow_links);
- /* error */
- if (ret < 0)
- goto done;
- /* no dangling link option given and detect dangling link */
- else if (ret == 0)
- {
- tinfo->symlink_visited.dangle_link = TRUE;
- trav_info_visit_lnk(path, linfo, tinfo);
- if (opts->no_dangle_links)
- opts->err_stat = 1; /* make dgangling link is error */
- goto done;
- }
+ /* add this link as visited link */
+ if(symlink_visit_add( &(tinfo->symlink_visited), linfo->type, NULL, lnk_info.trg_path) < 0)
+ goto done;
+
+ if(h5trav_visit(tinfo->fid, path, TRUE, TRUE,
+ trav_grp_objs,trav_grp_symlinks, tinfo) < 0)
+ {
+ parallel_print("Error: Could not get file contents\n");
+ opts->err_stat = 1;
+ goto done;
+ }
+ break;
+
+ case H5L_TYPE_EXTERNAL:
+ ret = H5tools_get_symlink_info(tinfo->fid, path, &lnk_info, opts->follow_links);
+ /* error */
+ if (ret < 0)
+ goto done;
+ /* no dangling link option given and detect dangling link */
+ else if (ret == 0)
+ {
+ tinfo->symlink_visited.dangle_link = TRUE;
+ trav_info_visit_lnk(path, linfo, tinfo);
+ if (opts->no_dangle_links)
+ opts->err_stat = 1; /* make dgangling link is error */
+ goto done;
+ }
- if(H5Lunpack_elink_val(lnk_info.trg_path, linfo->u.val_size, NULL, &ext_fname, &ext_path) < 0)
- goto done;
+ if(H5Lunpack_elink_val(lnk_info.trg_path, linfo->u.val_size, NULL, &ext_fname, &ext_path) < 0)
+ goto done;
- /* check if already visit the target object */
- if(symlink_is_visited( &(tinfo->symlink_visited), linfo->type, ext_fname, ext_path))
- goto done;
+ /* check if already visit the target object */
+ if(symlink_is_visited( &(tinfo->symlink_visited), linfo->type, ext_fname, ext_path))
+ goto done;
- /* add this link as visited link */
- if(symlink_visit_add( &(tinfo->symlink_visited), linfo->type, ext_fname, ext_path) < 0)
- goto done;
-
- if(h5trav_visit(tinfo->fid, path, TRUE, TRUE,
- trav_grp_objs,trav_grp_symlinks, tinfo) < 0)
- {
- parallel_print("Error: Could not get file contents\n");
+ /* add this link as visited link */
+ if(symlink_visit_add( &(tinfo->symlink_visited), linfo->type, ext_fname, ext_path) < 0)
+ goto done;
+
+ if(h5trav_visit(tinfo->fid, path, TRUE, TRUE,
+ trav_grp_objs,trav_grp_symlinks, tinfo) < 0)
+ {
+ parallel_print("Error: Could not get file contents\n");
+ opts->err_stat = 1;
+ goto done;
+ }
+ break;
+
+ case H5L_TYPE_HARD:
+ case H5L_TYPE_MAX:
+ case H5L_TYPE_ERROR:
+ default:
+ parallel_print("Error: Invalid link type\n");
opts->err_stat = 1;
goto done;
- }
- break;
- default:
- ;
- break;
+ break;
} /* end of switch */
done:
@@ -570,7 +576,6 @@ hsize_t h5diff(const char *fname1,
hid_t file2_id = (-1);
char filenames[2][MAX_FILENAME];
hsize_t nfound = 0;
- int i;
int l_ret1 = -1;
int l_ret2 = -1;
char * obj1fullname = NULL;
@@ -649,27 +654,37 @@ hsize_t h5diff(const char *fname1,
/* if any object is specified */
if (objname1)
{
- /* malloc 2 more for "/" and end-of-line */
- obj1fullname = (char*)HDcalloc(HDstrlen(objname1) + 2, sizeof(char));
- obj2fullname = (char*)HDcalloc(HDstrlen(objname2) + 2, sizeof(char));
-
/* make the given object1 fullpath, start with "/" */
if (HDstrncmp(objname1, "/", 1))
{
+#ifdef H5_HAVE_ASPRINTF
+ /* Use the asprintf() routine, since it does what we're trying to do below */
+ HDasprintf(&obj1fullname, "/%s", objname1);
+#else /* H5_HAVE_ASPRINTF */
+ /* (malloc 2 more for "/" and end-of-line) */
+ obj1fullname = (char*)HDmalloc(HDstrlen(objname1) + 2);
HDstrcpy(obj1fullname, "/");
HDstrcat(obj1fullname, objname1);
+#endif /* H5_HAVE_ASPRINTF */
}
else
- HDstrcpy(obj1fullname, objname1);
+ obj1fullname = HDstrdup(objname1);
/* make the given object2 fullpath, start with "/" */
if (HDstrncmp(objname2, "/", 1))
{
+#ifdef H5_HAVE_ASPRINTF
+ /* Use the asprintf() routine, since it does what we're trying to do below */
+ HDasprintf(&obj2fullname, "/%s", objname2);
+#else /* H5_HAVE_ASPRINTF */
+ /* (malloc 2 more for "/" and end-of-line) */
+ obj2fullname = (char*)HDmalloc(HDstrlen(objname2) + 2);
HDstrcpy(obj2fullname, "/");
HDstrcat(obj2fullname, objname2);
+#endif /* H5_HAVE_ASPRINTF */
}
else
- HDstrcpy(obj2fullname, objname2);
+ obj2fullname = HDstrdup(objname2);
/*----------------------------------------------------------
* check if obj1 is root, group, single object or symlink
@@ -701,7 +716,8 @@ hsize_t h5diff(const char *fname1,
*/
if(src_linfo1.type == H5L_TYPE_HARD)
{
- int idx = 0;
+ size_t idx;
+
/* optional data pass */
info1_obj->opts = (diff_opt_t*)options;
@@ -711,7 +727,7 @@ hsize_t h5diff(const char *fname1,
options->err_stat = 1;
goto out;
}
- obj1type = oinfo1.type;
+ obj1type = (h5trav_type_t)oinfo1.type;
trav_info_add(info1_obj, obj1fullname, obj1type);
idx = info1_obj->nused - 1;
info1_obj->paths[idx].objno = oinfo1.addr;
@@ -759,7 +775,8 @@ hsize_t h5diff(const char *fname1,
*/
if(src_linfo2.type == H5L_TYPE_HARD)
{
- int idx = 0;
+ size_t idx;
+
/* optional data pass */
info2_obj->opts = (diff_opt_t*)options;
@@ -769,7 +786,7 @@ hsize_t h5diff(const char *fname1,
options->err_stat = 1;
goto out;
}
- obj2type = oinfo2.type;
+ obj2type = (h5trav_type_t)oinfo2.type;
trav_info_add(info2_obj, obj2fullname, obj2type);
idx = info2_obj->nused - 1;
info2_obj->paths[idx].objno = oinfo2.addr;
@@ -791,11 +808,9 @@ hsize_t h5diff(const char *fname1,
else
{
/* set root group */
- obj1fullname = (char*)HDcalloc((size_t)2, sizeof(char));
- HDstrcat(obj1fullname, "/");
+ obj1fullname = (char*)HDstrdup("/");
obj1type = H5TRAV_TYPE_GROUP;
- obj2fullname = (char*)HDcalloc((size_t)2, sizeof(char));
- HDstrcat(obj2fullname, "/");
+ obj2fullname = (char*)HDstrdup("/");
obj2type = H5TRAV_TYPE_GROUP;
}
@@ -847,10 +862,11 @@ hsize_t h5diff(const char *fname1,
}
else if(l_ret1 != 2) /* symbolic link */
{
- obj1type = trg_linfo1.trg_type;
+ obj1type = (h5trav_type_t)trg_linfo1.trg_type;
if (info1_lp != NULL) {
- int idx = info1_lp->nused - 1;
- info1_lp->paths[idx].type = trg_linfo1.trg_type;
+ size_t idx = info1_lp->nused - 1;
+
+ info1_lp->paths[idx].type = (h5trav_type_t)trg_linfo1.trg_type;
info1_lp->paths[idx].objno = trg_linfo1.objno;
info1_lp->paths[idx].fileno = trg_linfo1.fileno;
}
@@ -891,10 +907,11 @@ hsize_t h5diff(const char *fname1,
}
else if(l_ret2 != 2) /* symbolic link */
{
- obj2type = trg_linfo2.trg_type;
+ obj2type = (h5trav_type_t)trg_linfo2.trg_type;
if (info2_lp != NULL) {
- int idx = info2_lp->nused - 1;
- info2_lp->paths[idx].type = trg_linfo2.trg_type;
+ size_t idx = info2_lp->nused - 1;
+
+ info2_lp->paths[idx].type = (h5trav_type_t)trg_linfo2.trg_type;
info2_lp->paths[idx].objno = trg_linfo2.objno;
info2_lp->paths[idx].fileno = trg_linfo2.fileno;
}
@@ -955,6 +972,8 @@ hsize_t h5diff(const char *fname1,
#ifdef H5_HAVE_PARALLEL
if(g_Parallel)
{
+ int i;
+
if((HDstrlen(fname1) > MAX_FILENAME) || (HDstrlen(fname2) > MAX_FILENAME))
{
HDfprintf(stderr, "The parallel diff only supports path names up to %d characters\n", MAX_FILENAME);
@@ -980,6 +999,8 @@ hsize_t h5diff(const char *fname1,
*/
if(options->m_verbose)
{
+ unsigned u;
+
parallel_print("\n");
/* if given objects is group under root */
if (HDstrcmp (obj1fullname,"/") || HDstrcmp (obj2fullname,"/"))
@@ -987,12 +1008,12 @@ hsize_t h5diff(const char *fname1,
else
parallel_print("file1 file2\n");
parallel_print("---------------------------------------\n");
- for(i = 0; i < match_list->nobjs; i++)
+ for(u = 0; u < match_list->nobjs; u++)
{
char c1, c2;
- c1 = (match_list->objs[i].flags[0]) ? 'x' : ' ';
- c2 = (match_list->objs[i].flags[1]) ? 'x' : ' ';
- parallel_print("%5c %6c %-15s\n", c1, c2, match_list->objs[i].name);
+ c1 = (match_list->objs[u].flags[0]) ? 'x' : ' ';
+ c2 = (match_list->objs[u].flags[1]) ? 'x' : ' ';
+ parallel_print("%5c %6c %-15s\n", c1, c2, match_list->objs[u].name);
} /* end for */
parallel_print ("\n");
} /* end if */
@@ -1074,8 +1095,8 @@ hsize_t diff_match(hid_t file1_id, const char *grp1, trav_info_t *info1,
hsize_t nfound = 0;
unsigned i;
- char * grp1_path = "";
- char * grp2_path = "";
+ const char * grp1_path = "";
+ const char * grp2_path = "";
char * obj1_fullpath = NULL;
char * obj2_fullpath = NULL;
diff_args_t argdata;
@@ -1087,10 +1108,10 @@ hsize_t diff_match(hid_t file1_id, const char *grp1, trav_info_t *info1,
* if not root, prepare object name to be pre-appended to group path to
* make full path
*/
- if (HDstrcmp (grp1, "/"))
- grp1_path = (char *)grp1;
- if (HDstrcmp (grp2, "/"))
- grp2_path = (char *)grp2;
+ if(HDstrcmp(grp1, "/"))
+ grp1_path = grp1;
+ if(HDstrcmp(grp2, "/"))
+ grp2_path = grp2;
/*-------------------------------------------------------------------------
* regarding the return value of h5diff (0, no difference in files, 1 difference )
@@ -1144,22 +1165,32 @@ hsize_t diff_match(hid_t file1_id, const char *grp1, trav_info_t *info1,
if( table->objs[i].flags[0] && table->objs[i].flags[1])
{
/* make full path for obj1 */
- obj1_fullpath = (char*)HDcalloc (HDstrlen(grp1_path) + strlen (table->objs[i].name) + 1, sizeof (char));
+#ifdef H5_HAVE_ASPRINTF
+ /* Use the asprintf() routine, since it does what we're trying to do below */
+ HDasprintf(&obj1_fullpath, "%s%s", grp1_path, table->objs[i].name);
+#else /* H5_HAVE_ASPRINTF */
+ obj1_fullpath = (char*)HDmalloc(HDstrlen(grp1_path) + HDstrlen(table->objs[i].name) + 1);
HDstrcpy(obj1_fullpath, grp1_path);
HDstrcat(obj1_fullpath, table->objs[i].name);
+#endif /* H5_HAVE_ASPRINTF */
/* make full path for obj2 */
- obj2_fullpath = (char*)HDcalloc (HDstrlen(grp2_path) + strlen (table->objs[i].name) + 1, sizeof (char));
+#ifdef H5_HAVE_ASPRINTF
+ /* Use the asprintf() routine, since it does what we're trying to do below */
+ HDasprintf(&obj2_fullpath, "%s%s", grp2_path, table->objs[i].name);
+#else /* H5_HAVE_ASPRINTF */
+ obj2_fullpath = (char*)HDmalloc(HDstrlen(grp2_path) + HDstrlen(table->objs[i].name) + 1);
HDstrcpy(obj2_fullpath, grp2_path);
HDstrcat(obj2_fullpath, table->objs[i].name);
+#endif /* H5_HAVE_ASPRINTF */
/* get index to figure out type of the object in file1 */
- while ( info1->paths[idx1].path &&
- (HDstrcmp (obj1_fullpath, info1->paths[idx1].path) != 0) )
+ while(info1->paths[idx1].path &&
+ (HDstrcmp(obj1_fullpath, info1->paths[idx1].path) != 0))
idx1++;
/* get index to figure out type of the object in file2 */
- while ( info2->paths[idx2].path &&
- (HDstrcmp (obj2_fullpath, info2->paths[idx2].path) != 0) )
+ while(info2->paths[idx2].path &&
+ (HDstrcmp(obj2_fullpath, info2->paths[idx2].path) != 0))
idx2++;
/* Set argdata to pass other args into diff() */
@@ -1343,10 +1374,10 @@ hsize_t diff_match(hid_t file1_id, const char *grp1, trav_info_t *info1,
} /* end if */
} /* end else */
#endif /* H5_HAVE_PARALLEL */
- if (obj1_fullpath)
- HDfree (obj1_fullpath);
- if (obj2_fullpath)
- HDfree (obj2_fullpath);
+ if(obj1_fullpath)
+ HDfree(obj1_fullpath);
+ if(obj2_fullpath)
+ HDfree(obj2_fullpath);
} /* end if */
} /* end for */
@@ -1561,12 +1592,12 @@ hsize_t diff(hid_t file1_id,
if (options->follow_links)
{
if (linkinfo1.linfo.type == H5L_TYPE_SOFT ||
- linkinfo1.linfo.type == H5L_TYPE_EXTERNAL)
- argdata->type[0] = linkinfo1.trg_type;
+ linkinfo1.linfo.type == H5L_TYPE_EXTERNAL)
+ argdata->type[0] = (h5trav_type_t)linkinfo1.trg_type;
if (linkinfo2.linfo.type == H5L_TYPE_SOFT ||
- linkinfo2.linfo.type == H5L_TYPE_EXTERNAL)
- argdata->type[1] = linkinfo2.trg_type;
+ linkinfo2.linfo.type == H5L_TYPE_EXTERNAL)
+ argdata->type[1] = (h5trav_type_t)linkinfo2.trg_type;
}
}
/* if objects are not the same type */
@@ -1607,29 +1638,30 @@ hsize_t diff(hid_t file1_id,
{
switch(object_type)
{
- case H5TRAV_TYPE_DATASET:
- do_print_objname("dataset", path1, path2, options);
- break;
- case H5TRAV_TYPE_NAMED_DATATYPE:
- do_print_objname("datatype", path1, path2, options);
- break;
- case H5TRAV_TYPE_GROUP:
- do_print_objname("group", path1, path2, options);
- break;
- case H5TRAV_TYPE_LINK:
- do_print_objname("link", path1, path2, options);
- break;
- case H5TRAV_TYPE_UDLINK:
- if(linkinfo1.linfo.type == H5L_TYPE_EXTERNAL && linkinfo2.linfo.type == H5L_TYPE_EXTERNAL)
- do_print_objname("external link", path1, path2, options);
- else
- do_print_objname ("user defined link", path1, path2, options);
- break;
- default:
- parallel_print("Comparison not supported: <%s> and <%s> are of type %s\n",
- path1, path2, get_type(object_type) );
- options->not_cmp = 1;
- break;
+ case H5TRAV_TYPE_DATASET:
+ do_print_objname("dataset", path1, path2, options);
+ break;
+ case H5TRAV_TYPE_NAMED_DATATYPE:
+ do_print_objname("datatype", path1, path2, options);
+ break;
+ case H5TRAV_TYPE_GROUP:
+ do_print_objname("group", path1, path2, options);
+ break;
+ case H5TRAV_TYPE_LINK:
+ do_print_objname("link", path1, path2, options);
+ break;
+ case H5TRAV_TYPE_UDLINK:
+ if(linkinfo1.linfo.type == H5L_TYPE_EXTERNAL && linkinfo2.linfo.type == H5L_TYPE_EXTERNAL)
+ do_print_objname("external link", path1, path2, options);
+ else
+ do_print_objname ("user defined link", path1, path2, options);
+ break;
+ case H5TRAV_TYPE_UNKNOWN:
+ default:
+ parallel_print("Comparison not supported: <%s> and <%s> are of type %s\n",
+ path1, path2, get_type(object_type) );
+ options->not_cmp = 1;
+ break;
} /* switch(type)*/
print_found(nfound);
@@ -1836,6 +1868,7 @@ hsize_t diff(hid_t file1_id,
}
break;
+ case H5TRAV_TYPE_UNKNOWN:
default:
if(options->m_verbose)
parallel_print("Comparison not supported: <%s> and <%s> are of type %s\n",
diff --git a/tools/lib/h5diff_dset.c b/tools/lib/h5diff_dset.c
index aea2192..157978d 100644
--- a/tools/lib/h5diff_dset.c
+++ b/tools/lib/h5diff_dset.c
@@ -433,13 +433,13 @@ hsize_t diff_datasetid( hid_t did1,
HDassert(sm_nbytes > 0);
} /* end for */
- /* malloc return code should be verified.
+ /* malloc return code should be verified.
* If fail, need to handle the error.
* This else branch should be recoded as a separate function.
* Note that there are many "goto error" within this branch
* that fails to address freeing other objects created here.
- * E.g., sm_space.
- */
+ * E.g., sm_space.
+ */
sm_buf1 = HDmalloc((size_t)sm_nbytes);
HDassert(sm_buf1);
sm_buf2 = HDmalloc((size_t)sm_nbytes);
diff --git a/tools/lib/h5tools.c b/tools/lib/h5tools.c
index fb12408..a7b0e5e 100644
--- a/tools/lib/h5tools.c
+++ b/tools/lib/h5tools.c
@@ -844,18 +844,18 @@ h5tools_simple_prefix(FILE *stream, const h5tool_format_t *info,
the prefix is printed one indentation level before */
if (info->pindex) {
for (i = 0; i < indentlevel - 1; i++) {
- PUTSTREAM(h5tools_str_fmt(&str, 0, info->line_indent), stream);
+ PUTSTREAM(h5tools_str_fmt(&str, (size_t)0, info->line_indent), stream);
}
}
if (elmtno == 0 && secnum == 0 && info->line_1st) {
- PUTSTREAM(h5tools_str_fmt(&prefix, 0, info->line_1st), stream);
+ PUTSTREAM(h5tools_str_fmt(&prefix, (size_t)0, info->line_1st), stream);
}
else if (secnum && info->line_cont) {
- PUTSTREAM(h5tools_str_fmt(&prefix, 0, info->line_cont), stream);
+ PUTSTREAM(h5tools_str_fmt(&prefix, (size_t)0, info->line_cont), stream);
}
else {
- PUTSTREAM(h5tools_str_fmt(&prefix, 0, info->line_pre), stream);
+ PUTSTREAM(h5tools_str_fmt(&prefix, (size_t)0, info->line_pre), stream);
}
templength = h5tools_str_len(&prefix);
@@ -863,7 +863,7 @@ h5tools_simple_prefix(FILE *stream, const h5tool_format_t *info,
for (i = 0; i < indentlevel; i++) {
/*we already made the indent for the array indices case */
if (!info->pindex) {
- PUTSTREAM(h5tools_str_fmt(&prefix, 0, info->line_indent), stream);
+ PUTSTREAM(h5tools_str_fmt(&prefix, (size_t)0, info->line_indent), stream);
templength += h5tools_str_len(&prefix);
}
else {
@@ -937,22 +937,22 @@ h5tools_region_simple_prefix(FILE *stream, const h5tool_format_t *info,
the prefix is printed one indentation level before */
if (info->pindex)
for (i = 0; i < indentlevel - 1; i++) {
- PUTSTREAM(h5tools_str_fmt(&str, 0, info->line_indent), stream);
+ PUTSTREAM(h5tools_str_fmt(&str, (size_t)0, info->line_indent), stream);
}
if (elmtno == 0 && secnum == 0 && info->line_1st) {
- PUTSTREAM(h5tools_str_fmt(&prefix, 0, info->line_1st), stream);
+ PUTSTREAM(h5tools_str_fmt(&prefix, (size_t)0, info->line_1st), stream);
} else if (secnum && info->line_cont) {
- PUTSTREAM(h5tools_str_fmt(&prefix, 0, info->line_cont), stream);
+ PUTSTREAM(h5tools_str_fmt(&prefix, (size_t)0, info->line_cont), stream);
} else
- PUTSTREAM(h5tools_str_fmt(&prefix, 0, info->line_pre), stream);
+ PUTSTREAM(h5tools_str_fmt(&prefix, (size_t)0, info->line_pre), stream);
templength = h5tools_str_len(&prefix);
for (i = 0; i < indentlevel; i++) {
/*we already made the indent for the array indices case */
if (!info->pindex) {
- PUTSTREAM(h5tools_str_fmt(&prefix, 0, info->line_indent), stream);
+ PUTSTREAM(h5tools_str_fmt(&prefix, (size_t)0, info->line_indent), stream);
templength += h5tools_str_len(&prefix);
}
else {
@@ -1009,7 +1009,7 @@ h5tools_render_element(FILE *stream, const h5tool_format_t *info,
if (stream == NULL)
return dimension_break;
- s = h5tools_str_fmt(buffer, 0, "%s");
+ s = h5tools_str_fmt(buffer, (size_t)0, "%s");
/*
* If the element would split on multiple lines if printed at our
@@ -1163,7 +1163,7 @@ h5tools_render_region_element(FILE *stream, const h5tool_format_t *info,
int secnum; /*section sequence number */
int multiline; /*datum was multiline */
- s = h5tools_str_fmt(buffer, 0, "%s");
+ s = h5tools_str_fmt(buffer, (size_t)0, "%s");
/*
* If the element would split on multiple lines if printed at our
diff --git a/tools/lib/h5tools_dump.c b/tools/lib/h5tools_dump.c
index f11065c..5ab066e 100644
--- a/tools/lib/h5tools_dump.c
+++ b/tools/lib/h5tools_dump.c
@@ -1748,11 +1748,11 @@ CATCH
*/
int
h5tools_dump_dset(FILE *stream, const h5tool_format_t *info, h5tools_context_t *ctx,
- hid_t dset, hid_t _p_type, struct subset_t *sset)
+ hid_t dset, struct subset_t *sset)
{
- hid_t f_space;
- hid_t p_type = _p_type;
- hid_t f_type;
+ hid_t f_space = -1;
+ hid_t p_type = -1;
+ hid_t f_type = -1;
H5S_class_t space_type;
int status = FAIL;
h5tool_format_t info_dflt;
@@ -1765,26 +1765,26 @@ h5tools_dump_dset(FILE *stream, const h5tool_format_t *info, h5tools_context_t *
info = &info_dflt;
}
- if (p_type < 0) {
- f_type = H5Dget_type(dset);
-
- if (info->raw || bin_form == 1)
- p_type = H5Tcopy(f_type);
- else if (bin_form == 2)
- p_type = h5tools_get_little_endian_type(f_type);
- else if (bin_form == 3)
- p_type = h5tools_get_big_endian_type(f_type);
- else
- p_type = h5tools_get_native_type(f_type);
+ f_type = H5Dget_type(dset);
+ if (f_type < 0)
+ goto done;
- H5Tclose(f_type);
+ if (info->raw || bin_form == 1)
+ p_type = H5Tcopy(f_type);
+ else if (bin_form == 2)
+ p_type = h5tools_get_little_endian_type(f_type);
+ else if (bin_form == 3)
+ p_type = h5tools_get_big_endian_type(f_type);
+ else
+ p_type = h5tools_get_native_type(f_type);
- if (p_type < 0)
- goto done;
- }
+ if (p_type < 0)
+ goto done;
/* Check the data space */
f_space = H5Dget_space(dset);
+ if (f_space < 0)
+ goto done;
space_type = H5Sget_simple_extent_type(f_space);
@@ -1799,12 +1799,13 @@ h5tools_dump_dset(FILE *stream, const h5tool_format_t *info, h5tools_context_t *
/* space is H5S_NULL */
status = SUCCEED;
- /* Close the dataspace */
- H5Sclose(f_space);
-
done:
- if (p_type != _p_type)
+ if (f_type > 0)
+ H5Tclose(f_type);
+ if (p_type > 0)
H5Tclose(p_type);
+ if (f_space > 0)
+ H5Sclose(f_space);
return status;
}
@@ -3859,7 +3860,7 @@ h5tools_dump_data(FILE *stream, const h5tool_format_t *info,
}
else
datactx.need_prefix = TRUE;
- status = h5tools_dump_dset(stream, info, &datactx, obj_id, -1, sset);
+ status = h5tools_dump_dset(stream, info, &datactx, obj_id, sset);
if((display_char && H5Tget_size(f_type) == 1) && (H5Tget_class(f_type) == H5T_INTEGER)) {
h5tools_str_reset(&buffer);
h5tools_str_append(&buffer, "\"");
diff --git a/tools/lib/h5tools_dump.h b/tools/lib/h5tools_dump.h
index 061a3db..b05f226 100644
--- a/tools/lib/h5tools_dump.h
+++ b/tools/lib/h5tools_dump.h
@@ -40,7 +40,7 @@ H5TOOLS_DLL void h5tools_dump_init(void);
H5TOOLS_DLL int h5tools_dump_dset(FILE *stream, const h5tool_format_t *info,
h5tools_context_t *ctx/*in,out*/, hid_t dset,
- hid_t p_typ, struct subset_t *sset);
+ struct subset_t *sset);
H5TOOLS_DLL int h5tools_dump_mem(FILE *stream, const h5tool_format_t *info,
h5tools_context_t *ctx/*in,out*/, hid_t obj_id,
hid_t type, hid_t space, void *mem);
diff --git a/tools/lib/h5tools_str.c b/tools/lib/h5tools_str.c
index d43fc33..ac191d6 100644
--- a/tools/lib/h5tools_str.c
+++ b/tools/lib/h5tools_str.c
@@ -352,7 +352,7 @@ h5tools_str_prefix(h5tools_str_t *str/*in,out*/, const h5tool_format_t *info,
}
/* Add prefix and suffix to the index */
- return h5tools_str_fmt(str, 0, OPT(info->idx_fmt, "%s: "));
+ return h5tools_str_fmt(str, (size_t)0, OPT(info->idx_fmt, "%s: "));
}
/*-------------------------------------------------------------------------
@@ -412,7 +412,7 @@ h5tools_str_region_prefix(h5tools_str_t *str, const h5tool_format_t *info,
}
/* Add prefix and suffix to the index */
- return h5tools_str_fmt(str, 0, OPT(info->idx_fmt, "%s: "));
+ return h5tools_str_fmt(str, (size_t)0, OPT(info->idx_fmt, "%s: "));
}
/*-------------------------------------------------------------------------
diff --git a/tools/misc/CMakeLists.txt b/tools/misc/CMakeLists.txt
index ed8c315..8af05b4 100644
--- a/tools/misc/CMakeLists.txt
+++ b/tools/misc/CMakeLists.txt
@@ -69,9 +69,9 @@ endif (BUILD_TESTING)
##############################################################################
##############################################################################
-#-----------------------------------------------------------------------------
-# Rules for Installation of tools using make Install target
-#-----------------------------------------------------------------------------
+#-----------------------------------------------------------------------------
+# Rules for Installation of tools using make Install target
+#-----------------------------------------------------------------------------
#INSTALL_PROGRAM_PDB (h5debug ${HDF5_INSTALL_BIN_DIR} toolsapplications)
#INSTALL_PROGRAM_PDB (h5repart ${HDF5_INSTALL_BIN_DIR} toolsapplications)
diff --git a/tools/misc/CMakeTests.cmake b/tools/misc/CMakeTests.cmake
index 0887fb6..d28b744 100644
--- a/tools/misc/CMakeTests.cmake
+++ b/tools/misc/CMakeTests.cmake
@@ -119,7 +119,7 @@
-D "TEST_EXPECT=${resultcode}"
-D "TEST_MASK_MOD=true"
-D "TEST_REFERENCE=${resultfile}.ls"
- -P "${HDF5_RESOURCES_DIR}/runTest.cmake"
+ -P "${HDF_RESOURCES_EXT_DIR}/runTest.cmake"
)
set_tests_properties (H5MKGRP-${resultfile}-h5ls PROPERTIES DEPENDS H5MKGRP-${resultfile})
endif (HDF5_ENABLE_USING_MEMCHECKER)
@@ -147,7 +147,7 @@
-D "TEST_OUTPUT=${resultfile}.out"
-D "TEST_EXPECT=${resultcode}"
-D "TEST_REFERENCE=${resultfile}.txt"
- -P "${HDF5_RESOURCES_DIR}/runTest.cmake"
+ -P "${HDF_RESOURCES_EXT_DIR}/runTest.cmake"
)
set_tests_properties (H5MKGRP_CMP-${resultfile} PROPERTIES DEPENDS H5MKGRP_CMP-${resultfile}-clear-objects)
endif (HDF5_ENABLE_USING_MEMCHECKER)
diff --git a/tools/misc/Makefile.in b/tools/misc/Makefile.in
index b0a7822..1160938 100644
--- a/tools/misc/Makefile.in
+++ b/tools/misc/Makefile.in
@@ -540,7 +540,6 @@ MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MPE = @MPE@
-MPI_GET_SIZE = @MPI_GET_SIZE@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
diff --git a/tools/misc/h5debug.c b/tools/misc/h5debug.c
index 6b043ba..9c9153a 100644
--- a/tools/misc/h5debug.c
+++ b/tools/misc/h5debug.c
@@ -21,33 +21,31 @@
*
* Purpose: Debugs an existing HDF5 file at a low level.
*
- * Modifications:
- *
*-------------------------------------------------------------------------
*/
-#define H5A_PACKAGE /*suppress error about including H5Apkg */
-#define H5B2_PACKAGE /*suppress error about including H5B2pkg */
-#define H5B2_TESTING /*suppress warning about H5B2 testing funcs*/
+#define H5A_PACKAGE /*suppress error about including H5Apkg */
+#define H5B2_PACKAGE /*suppress error about including H5B2pkg */
+#define H5B2_TESTING /*suppress warning about H5B2 testing funcs*/
#define H5D_PACKAGE /*suppress error about including H5Dpkg */
-#define H5F_PACKAGE /*suppress error about including H5Fpkg */
-#define H5G_PACKAGE /*suppress error about including H5Gpkg */
-#define H5HF_PACKAGE /*suppress error about including H5HFpkg */
-#define H5O_PACKAGE /*suppress error about including H5Opkg */
-#define H5SM_PACKAGE /*suppress error about including H5SMpkg */
-
-#include "H5private.h" /* Generic Functions */
-#include "H5Apkg.h" /* Attributes */
-#include "H5B2pkg.h" /* v2 B-trees */
-#include "H5Dpkg.h" /* Datasets */
-#include "H5Eprivate.h" /* Error handling */
-#include "H5Fpkg.h" /* File access */
-#include "H5FSprivate.h" /* Free space manager */
-#include "H5Gpkg.h" /* Groups */
-#include "H5HFpkg.h" /* Fractal heaps */
-#include "H5HGprivate.h" /* Global Heaps */
-#include "H5Iprivate.h" /* IDs */
-#include "H5Opkg.h" /* Object headers */
-#include "H5SMpkg.h" /* Implicitly shared messages */
+#define H5F_PACKAGE /*suppress error about including H5Fpkg */
+#define H5G_PACKAGE /*suppress error about including H5Gpkg */
+#define H5HF_PACKAGE /*suppress error about including H5HFpkg */
+#define H5O_PACKAGE /*suppress error about including H5Opkg */
+#define H5SM_PACKAGE /*suppress error about including H5SMpkg */
+
+#include "H5private.h" /* Generic Functions */
+#include "H5Apkg.h" /* Attributes */
+#include "H5B2pkg.h" /* v2 B-trees */
+#include "H5Dpkg.h" /* Datasets */
+#include "H5Eprivate.h" /* Error handling */
+#include "H5Fpkg.h" /* File access */
+#include "H5FSprivate.h" /* Free space manager */
+#include "H5Gpkg.h" /* Groups */
+#include "H5HFpkg.h" /* Fractal heaps */
+#include "H5HGprivate.h" /* Global Heaps */
+#include "H5Iprivate.h" /* IDs */
+#include "H5Opkg.h" /* Object headers */
+#include "H5SMpkg.h" /* Implicitly shared messages */
/* File drivers */
#include "H5FDfamily.h"
@@ -192,13 +190,13 @@ main(int argc, char *argv[])
* Parse command arguments.
*/
if(argc > 2)
- addr = HDstrtoll(argv[2], NULL, 0);
+ addr = (haddr_t)HDstrtoll(argv[2], NULL, 0);
if(argc > 3)
- extra = HDstrtoll(argv[3], NULL, 0);
+ extra = (haddr_t)HDstrtoll(argv[3], NULL, 0);
if(argc > 4)
- extra2 = HDstrtoll(argv[4], NULL, 0);
+ extra2 = (haddr_t)HDstrtoll(argv[4], NULL, 0);
if(argc > 5)
- extra3 = HDstrtoll(argv[5], NULL, 0);
+ extra3 = (haddr_t)HDstrtoll(argv[5], NULL, 0);
if(argc > 6)
extra4 = (haddr_t)HDstrtoll(argv[6], NULL, 0);
diff --git a/tools/misc/h5repart.c b/tools/misc/h5repart.c
index 07f6bfd..ffd52e8 100644
--- a/tools/misc/h5repart.c
+++ b/tools/misc/h5repart.c
@@ -290,7 +290,7 @@ main (int argc, char *argv[])
if (argno<argc) usage (prog_name);
/* Now the real work, split the file */
- buf = malloc (blk_size);
+ buf = HDmalloc (blk_size);
while (src_offset<src_size) {
/* Read a block. The amount to read is the minimum of:
@@ -498,6 +498,6 @@ main (int argc, char *argv[])
}
/* Free resources and return */
- free (buf);
+ HDfree (buf);
return EXIT_SUCCESS;
}
diff --git a/tools/misc/talign.c b/tools/misc/talign.c
index 3fd1694..2d0a9d1 100644
--- a/tools/misc/talign.c
+++ b/tools/misc/talign.c
@@ -126,7 +126,7 @@ int main(void)
H5Dclose(set);
/* Now open the set, and read it back in */
- data = (char *)malloc(H5Tget_size(fix));
+ data = (char *)HDmalloc(H5Tget_size(fix));
if(!data) {
perror("malloc() failed");
@@ -192,7 +192,7 @@ out:
}
if(data)
- free(data);
+ HDfree(data);
H5Sclose(spc);
H5Tclose(cmp);
H5Tclose(cmp1);
diff --git a/vms/c++/test/H5srcdir_str.h b/vms/c++/test/H5srcdir_str.h
index 9a0cb43..5febc35 100644
--- a/vms/c++/test/H5srcdir_str.h
+++ b/vms/c++/test/H5srcdir_str.h
@@ -1,23 +1,23 @@
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * Copyright by The HDF Group. *
- * Copyright by the Board of Trustees of the University of Illinois. *
- * All rights reserved. *
- * *
- * This file is part of HDF5. The full HDF5 copyright notice, including *
- * terms governing use, modification, and redistribution, is contained in *
- * the files COPYING and Copyright.html. COPYING can be found at the root *
- * of the source code distribution tree; Copyright.html can be found at the *
- * root level of an installed copy of the electronic HDF5 document set and *
- * is linked from the top-level documents page. It can also be found at *
- * http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have *
- * access to either file, you may request a copy from help at hdfgroup.org. *
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-
-/* If you are reading this file and it has a '.h' suffix, it was automatically
- * generated from the '.in' version. Make changes there. But for OpenVMS, this
- * file is created by hand.
- */
-
-/* Set the 'srcdir' path from configure time */
-static const char *config_srcdir = "[.]";
-
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group. *
+ * Copyright by the Board of Trustees of the University of Illinois. *
+ * All rights reserved. *
+ * *
+ * This file is part of HDF5. The full HDF5 copyright notice, including *
+ * terms governing use, modification, and redistribution, is contained in *
+ * the files COPYING and Copyright.html. COPYING can be found at the root *
+ * of the source code distribution tree; Copyright.html can be found at the *
+ * root level of an installed copy of the electronic HDF5 document set and *
+ * is linked from the top-level documents page. It can also be found at *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have *
+ * access to either file, you may request a copy from help at hdfgroup.org. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/* If you are reading this file and it has a '.h' suffix, it was automatically
+ * generated from the '.in' version. Make changes there. But for OpenVMS, this
+ * file is created by hand.
+ */
+
+/* Set the 'srcdir' path from configure time */
+static const char *config_srcdir = "[.]";
+
diff --git a/vms/src/h5pubconf.h b/vms/src/h5pubconf.h
index ddbf225..b2b12d4 100644
--- a/vms/src/h5pubconf.h
+++ b/vms/src/h5pubconf.h
@@ -253,9 +253,6 @@
/* Define to 1 if you have the <mpe.h> header file. */
/* #undef H5_HAVE_MPE_H */
-/* Define if MPI_File_get_size works correctly */
-/* #undef H5_HAVE_MPI_GET_SIZE */
-
/* Define if `MPI_Comm_c2f' and `MPI_Comm_f2c' exists */
/* #undef H5_HAVE_MPI_MULTI_LANG_Comm */
@@ -405,6 +402,9 @@
/* Define to 1 if you have the <unistd.h> header file. */
#define H5_HAVE_UNISTD_H 1
+/* Define to 1 if you have the `asprintf' function. */
+/* #undef H5_HAVE_ASPRINTF */
+
/* Define to 1 if you have the `vasprintf' function. */
/* #undef H5_HAVE_VASPRINTF */
@@ -482,10 +482,6 @@
/* Define if the metadata trace file code is to be compiled in */
/* #undef H5_METADATA_TRACE_FILE */
-/* Define if your system's `MPI_File_set_size' function works for files over
- 2GB. */
-/* #undef H5_MPI_FILE_SET_SIZE_BIG */
-
/* Define if we can violate pointer alignment restrictions */
#define H5_NO_ALIGNMENT_RESTRICTIONS 1
@@ -505,7 +501,7 @@
#define H5_PACKAGE_NAME "HDF5"
/* Define to the full name and version of this package. */
-#define H5_PACKAGE_STRING "HDF5 1.8.13"
+#define H5_PACKAGE_STRING "HDF5 1.8.14"
/* Define to the one symbol short name of this package. */
#define H5_PACKAGE_TARNAME "hdf5"
@@ -514,7 +510,7 @@
#define H5_PACKAGE_URL ""
/* Define to the version of this package. */
-#define H5_PACKAGE_VERSION "1.8.13"
+#define H5_PACKAGE_VERSION "1.8.14"
/* Width for printf() for type `long long' or `__int64', use `ll' */
#define H5_PRINTF_LL_WIDTH "ll"
@@ -677,7 +673,7 @@
/* #undef H5_USING_MEMCHECKER */
/* Version number of package */
-#define H5_VERSION "1.8.13"
+#define H5_VERSION "1.8.14"
/* Define if vsnprintf() returns the correct value for formatted strings that
don't fit into size allowed */
diff --git a/vms/test/H5srcdir_str.h b/vms/test/H5srcdir_str.h
index 9dfcf56..2eb1a39 100644
--- a/vms/test/H5srcdir_str.h
+++ b/vms/test/H5srcdir_str.h
@@ -1,22 +1,22 @@
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * Copyright by The HDF Group. *
- * Copyright by the Board of Trustees of the University of Illinois. *
- * All rights reserved. *
- * *
- * This file is part of HDF5. The full HDF5 copyright notice, including *
- * terms governing use, modification, and redistribution, is contained in *
- * the files COPYING and Copyright.html. COPYING can be found at the root *
- * of the source code distribution tree; Copyright.html can be found at the *
- * root level of an installed copy of the electronic HDF5 document set and *
- * is linked from the top-level documents page. It can also be found at *
- * http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have *
- * access to either file, you may request a copy from help at hdfgroup.org. *
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-
-/* If you are reading this file and it has a '.h' suffix, it was automatically
- * generated from the '.in' version. Make changes there. But for OpenVMS, this
- * file is created by hand.
- */
-
-/* Set the 'srcdir' path from configure time */
-static const char *config_srcdir = "[-.test]";
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group. *
+ * Copyright by the Board of Trustees of the University of Illinois. *
+ * All rights reserved. *
+ * *
+ * This file is part of HDF5. The full HDF5 copyright notice, including *
+ * terms governing use, modification, and redistribution, is contained in *
+ * the files COPYING and Copyright.html. COPYING can be found at the root *
+ * of the source code distribution tree; Copyright.html can be found at the *
+ * root level of an installed copy of the electronic HDF5 document set and *
+ * is linked from the top-level documents page. It can also be found at *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have *
+ * access to either file, you may request a copy from help at hdfgroup.org. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/* If you are reading this file and it has a '.h' suffix, it was automatically
+ * generated from the '.in' version. Make changes there. But for OpenVMS, this
+ * file is created by hand.
+ */
+
+/* Set the 'srcdir' path from configure time */
+static const char *config_srcdir = "[-.test]";
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-grass/hdf5.git
More information about the Pkg-grass-devel
mailing list