diff options
author | Larry Knox <lrknox@hdfgroup.org> | 2021-02-08 16:56:16 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-02-08 16:56:16 (GMT) |
commit | 22c67ff6570f16050f0a5654cf1c84df917bb598 (patch) | |
tree | 38fb63aa498b250c2543fe7e22a511706de96a42 /hl/src/H5DS.c | |
parent | 551f15f8ae02ca9c995619b216121081eb07633e (diff) | |
download | hdf5-hdf5-1_8_22.zip hdf5-hdf5-1_8_22.tar.gz hdf5-hdf5-1_8_22.tar.bz2 |
1.8/master (#317)hdf5-1_8_22
* Revert incorrect bool type
* Correct grep text for filter test
* Check sizeof type to use correct ref_type
* h5dump reg ref chnages has no error file
* Fix comment
* Remove unneeded files
* Verify the decoded version for "all" and "none" selection.
* Remove double entry
* Add missing include
* Snapshot version 1.8 release 22 (snap4)
Update version to 1.8-snap5
* Fixes for test failures with --disable-tests --disable-tools options.
Don't test ph5diff if tests are disabled.
* Correct conditions for parallel builds with and without tests.
* Snapshot version 1.8 release 22 (snap5)
Update version to 1.8.22-snap6
* TRILAB-192 merging warnings changes from develop
* Autotools reconfigure update
* Restore page ejects.
* Restore page eject chars
* Fix orphaned token
* Update LT files
* Correct extra flags and merge TRILAB-24
* Update release note for CMake warnings
* H5repack bug fixes from develop
* TRILAB-192 - merge changes from develop
Single source, config files, for warnings for both autotools and CMake.
Update CMake libraries, tools, tests to use correct flags.
* Add missing m4 file
* Remove 128bit config check fo 1.8
* TRILAB-192 update LTparse files
* A fix in the cleaning up code for datatype when datatype initialization via H5D__init_type() fails.
The code to fix the problem is the same as what is done in H5D__open_oid().
* Add missing " and update function calls incorrectly
named load_gcc_arguments.
Commit changes to gnu-cxxflags to remove unmatched " and to gnu-fflags
to not add C warnings flags to H5_FCFLAGS.
* TRILAB-192 - cleanup edits and match CMake CXX to autotools
* Fix shadowed type
* TRILAB-192 correct fortran commands
* TRILAB-192 version of std=f2008 special check
* Fix shadow variable
* Add prefix_relto_examplesdir function to set relative path to h5c++.
* TRILAB-192 - parser files cannot handle this warning
* Parallel Fortran tests now use the MPI module instead of including
mpif.h.
* Don't add general warnings flags for unsupported old versions of gcc and
g++ (older than gcc/g++ 4.2).
Correct gnu-cxxflags to determine warnings flags to be added based on
C++ compiler version instead of C compiler version.
* Snapshot version 1.8 release 22 (snap6)
Update version to 1.8.22-snap7
* TRILAB-244 separate CXX warnings and errors from C
* Fix NoFilter build
* Move ADD_H5_FLAGS macro from *CompilerFlags.cmake files to
config/cmake_ext_mod/HDFMacros.cmake for common use.
* Restrict errors to gcc 4.8 and above.
* OESS-65 replace szip with aec szip
* Correct CMake version
* Correct -Werror=unused-variable
* Add -Werror= flags to lists displayed in libhdf5.settings.
* Fix -Werror=unused-variable
* More fixes for unused variable
* Resolve warning errors from -Werror= flags:
-Werror=bad-function-cast
-Werror=bad-function-cast
-Werror=implicit-function-declaration
-Werror=nested-externs
* Remove verbose assignments in smoke_check 3 and 5 functions.
* Update to use optimization flags, C++ error flags, and correct
libhdf5.settings.in to remove unworkable changes.
* Update config/gnu-cxxflags.
* Add missing headers
* Fix ifort warning flag.
Restore AC_DEFUN([PAC_PROG_FC_DEFAULT_REALisDBLE] in m4/aclocal_fc.m4.
Add --enable-symbols, --enable-profiling, and --enable-optimization
options to autotools configure; all configure flags for
--enable-production and --disable-production should match HDF5 1.10 and
1.12 production and debug default flags.
* Add github actions file
* Correct path
* OESS-65 Fix packaging
* Update reference name
* Correct filename
* disable pr action and enable fail fast
* Snapshot 1.8.22-snap7
Update version to 1.8.22-snap8.
* Correct mingw path
* Correct mingw paths
* Revise gnu-*flags and cmake/HDF*CompilerFlags.cmake files to add warning
flags for GCC compilers version 4.8 and above.
Removed files from gnu-warnings that only apply to versions < 4.8.
Consolidated warnings from versions < 4.8 that apply to versions >= 4.8
into the 4.8 warnings files.
* Update MANIFEST for removal of older warnings files.
* Yanked all MPI-1 calls
Added batch scripts in bin/batch.
* Snapshot 1.8.22-snap8.
Update version to 1.8.22-snap9.
* Squashed commit of the following:
commit 45b0cbc71929930a874e1c09e0770aa64d0ae697
Author: Larry Knox <lrknox@hdfgroup.org>
Date: Thu Apr 23 13:14:56 2020 -0500
Add C++ warnings treated as error for autotools builds.
commit 6debcddcc766601799d5bd661bd60946f951a07e
Author: Larry Knox <lrknox@hdfgroup.org>
Date: Fri Jun 19 16:50:03 2020 -0500
Remove tests for develop branch from testh5cc.sh.in.
Add @H5_ECXXFLAGS@ to AM_CXXFLAGS.
commit fed497e7f207313b2a133d3b68c942b7d7104b90
Author: Larry Knox <lrknox@hdfgroup.org>
Date: Fri Jun 12 15:06:39 2020 -0500
Merge pull request #2646 in HDFFV/hdf5 from ~LRKNOX/hdf5_lrk:develop to develop
* commit '998c6470d78e14228695419c3b514c35ecf3d69e':
Remove unnecessary version conditions for Clang compilers.
commit 92e52ce5c211bd1d3991a3b8bb67287ac7b652aa
Author: Larry Knox <lrknox@hdfgroup.org>
Date: Wed Jun 10 18:53:45 2020 -0500
Merge pull request #2639 in HDFFV/hdf5 from ~LRKNOX/hdf5_lrk:develop to develop
* commit 'a33667faf226f5d8c9633bf537893e8fce1bf1f6':
Add c++ to --enable-sanitize-checks option.
commit 2e802534fb997b81fa98fdd1c7d97d4310898e0d
Author: Larry Knox <lrknox@hdfgroup.org>
Date: Wed Jun 10 15:18:36 2020 -0500
Merge pull request #2633 in HDFFV/hdf5 from ~LRKNOX/hdf5_lrk:develop to develop
* commit '20eab963899841c9a003baebead8e3bc07d9e127':
Remove duplicate entries in MANIFEST.
Make changes to CMake CompilerFlags.cmake files so extra flags are loaded for non-GNU compilers.
Update new clang files to not pick up clang as vendor for pgCC. Add new files to MANIFEST Temporary demotion of 2 -Werror warning flags that fail on macos 10.12 Remove Production flag unknown to Apple clang.
commit 96ef60a58a23847a7da89a891f2415055ec2ab60
Author: Larry Knox <lrknox@hdfgroup.org>
Date: Mon Jun 8 16:24:49 2020 -0500
Merge pull request #2631 in HDFFV/hdf5 from ~LRKNOX/hdf5_lrk:develop to develop
* commit 'b942a4d8a3e27317cac50ce37ff5302d477664d8':
Clean up code to get clang version in config/linux-gnulibc1
commit 8a7c687da568e8b50b38fa53da1ca63759be6ec4
Author: Larry Knox <lrknox@hdfgroup.org>
Date: Mon Jun 8 11:42:37 2020 -0500
Merge pull request #2623 in HDFFV/hdf5 from ~LRKNOX/hdf5_lrk:develop to develop
* commit 'c7626f79fdee4eee13925e240ef41e61f3367eab':
Add flags from config/clang-warnings/*general files to H5 C and CXX flags for all versions of Clang and Clang++ compilers. Switched from cut to awk in testcheck_version.sh.in to avoid dependence on tab vs. " " in version definitions in H5public.h.
Add files for adding warning flags for clang compilers in autotools configure.
commit db3ef7ff3c1ed79167cecef831501411cff8291f
Merge: 5a0f8d7 f9f1310
Author: Larry Knox <lrknox@hdfgroup.org>
Date: Fri Jun 19 14:46:22 2020 -0500
Merge branch 'hdf5_1_12' of https://bitbucket.hdfgroup.org/scm/~lrknox/hdf5_lrk into hdf5_1_12
commit 5a0f8d7940ae57b445f545a0abd7e303ce6924ee
Author: Larry Knox <lrknox@hdfgroup.org>
Date: Wed Jun 10 20:15:41 2020 -0500
Merge pull request #2636 in HDFFV/hdf5 from ~LRKNOX/hdf5_lrk:HDFFV-11000-update-testh5cc.sh.in-for-version to develop
* commit '5c0bd670d6e9919c463fbc05de99e2ba55b0761e':
Add tests for all version to H5_NO_DEPRECATED_SYMBOLS section and to section for current version, with and without default API version flags.
HDFFV-11000: update-testh5cc.sh.in to test sample versioned functions in HDF5 1.10, 1.12 and develop.
* Update configure and Makefile.ins after bin/reconfigure.
* Fix MANIFEST
* Fix HDFFV-10591
Description:
h52gif produced a segfault when a buffer overflow occurred because
the data size was corrupted and became very large. This commit added
a check on the data size against the buffer size to prevent the segfault.
It also added error reporting to h52gif to display an error message
instead of silently exiting when the failure occurred.
Platforms tested:
Linux/64 (jelly)
* Snapshot 1.8.22-snap9. Update version to 1.8.22-snap10.
* Merge pull request #2686 in HDFFV/hdf5 from ~LRKNOX/hdf5_lrk:develop to develop
* commit '800f93f7c994f88dfa716746153ded4b1e690e3a':
Remove path to szip header file from AM_CPPFLAGS when configure check of libsz fails. Fix for HDFFV-10830.
* Regenerate configure.
* Merge from 1.10-1.12-dev - LT parse needs update
* Incorporate pull request #2693 from develop for the fix to HDFFV-11080:
(1) Patch up the file pointer when reading attribute of variable length datatype
(2) Test to verify the fix when doing multiple threads
(3) Update MANIFEST
(4) Add new test to Cmake
* Switch bison and flex update of LT files from bin/genltanalyse to
bin/genparser, and from automatically updating the LT files whenever
reconfigure is run to running only on man<F12>ual command.
* Update hl/sr/H5LT files.
Add bin/genparser to MANIFEST; remove bin/genltanalyze.
* Fix to the merge of PR #2708 for HDFFV-11080 to the 1.8 branch.
Need to checkin test/Makefile.in for the new file added.
* Fix HDFFV-11120 and HDFFV-11121 (CVE-2018-13870 and CVE-2018-13869)
Description:
When a buffer overflow occurred because a name length was corrupted
and became very large, h5dump produced a segfault on one file and a
memcpy parameter overlap on another file. This commit added checks
that detect a read pass the end of the buffer to prevent these error
conditions.
Platforms tested:
Linux/64 (jelly)
* Fixed typo
* Check for header szlib.h only when libsz passes AC_CHECK_LIB, so that
H5_HAVE_SALIB_H is not defined when szip is not enabled, to prevent
compile failures for incompatible szlib.
* HDFFV-11127 - force RTLD_LOCAL in dlopen
* spelling
* Remove extra parens
* Remove unnecessary assignment freom configure.ac.
* Add hypen to subrelease regex
* Add special case when H5_VERS_SUBRELEASE is 0
* Revert H5_VERS_SUBRELEASE check
* The version string has a second use for packaging
* MinGW uses "MinGW Makefiles"
* Snapshot 1.8.22-snap10. Update version to 1.8.22-snap11.
* Merge clang-format changes from develop
* remove stray file
* Source formatted
* Add options to github actions.
* Add back file, remove py file
* HDFFV-11096 Correct h5dump usage text
* Update formating
* remove autogen for 1.8 branch
* Fix comment whitespace
* Change '==' to 'eq' in test script
* Merge from develop
github updates
bin scripts
parser updates
* Snapshot 1.8.22-snap11. Update version to 1.8.22-snap12.
* Merge from 1.10
Comments, whitespace
Simple init and if block brackets.
Minimal code changes limited to return value and spelling
* Update autotools files
* Update FD source
* More merges from 1.10 comments and inits
* Comment fixes
* Fix macro argument
* Remove autogen file and cache dir
* Revert autotools files to previous version
* Correct boolean value and missing define
* URL and options corrections
* revert autoconf files
* Fix compile issues with vfd drivers.
* Fix HDFS test
* Remove extra #endif
* Move init above execution
* Multiple changes to bring branch up-to-date (#87)
Correct TARGET variable and CMake config file location.
Add option to allow filter plugins to be built inline.
Update CMake tools macros.
* hdf5 1 8 release text (#113)
* Multiple changes to bring branch up-to-date
Correct TARGET variable and CMake config file location.
Add option to allow filter plugins to be built inline.
Update CMake tools macros.
* release text updates - mostly whitespace
* Fixed HDFFV-10480 and HDFFV-11159 (#145)
* Fixed HDFFV-10480 and HDFFV-11159
Description
Checked against buffer size to prevent segfault, in case of data corruption.
+ HDFFV-11159 CVE-2018-14033 Buffer over-read in H5O_layout_decode
+ HDFFV-10480 CVE-2018-11206 Buffer over-read in H5O_fill_new[/old]_decode and
A user's patch was applied to this previously, but it is redone
for a more correct fix, that is the check now accounted for the
previous advance of the buffer pointer.
Platforms tested:
Linux/64 (jelly)
* Fixed typo
* Update HDF5 1.8 copyright headers with updated copyright URL (#148)
* Update URL for COPYING file in copyright headers.
* Make fortran copyright headers uniformly spaced.
* Update url for Copyright file in c++/src/footer.html.
* OESS-98 Update plugin build option (#171)
* 1.8 has extra fortran CMake option (#176)
* 1.8 has extra fortran CMake option
* Update license URL
* OESS-98 fix tools test for plugins (#180)
* Hdf5 1 8 (#169)
* Fixed HDFFV-10480 and HDFFV-11159
Description
Checked against buffer size to prevent segfault, in case of data corruption.
+ HDFFV-11159 CVE-2018-14033 Buffer over-read in H5O_layout_decode
+ HDFFV-10480 CVE-2018-11206 Buffer over-read in H5O_fill_new[/old]_decode and
A user's patch was applied to this previously, but it is redone
for a more correct fix, that is the check now accounted for the
previous advance of the buffer pointer.
Platforms tested:
Linux/64 (jelly)
* Fixed typo
* Fixed HDFFV-11150
Description
Replaced an HDassert with a check for null pointer in H5O_dec_rc() to
catch null pointer in corrupted data situation.
Reversed the fix in svn-r24463 in which a check for null pointer prior
to calling H5O_dec_rc()
Platforms tested:
Linux/64 (jelly)
* HDF5 1 8 fix fortran build on macs (#186)
* Correct fortran and shared libs option
* Fix for no shared fortran build
* OESS-98 fix hdf5 link target (#191)
* Partial changes to RELEASE.txt for release. (#185)
* Partial changes to RELEASE.txt for release.
* Update supported and tested platforms.
* Update version to 1.8.22-12.
* close #195. (#196)
* Update HDF5PluginMacros.cmake
* Update HDF5PluginMacros.cmake
* Update directory for SZ filter in HDF5PluginMacros.cmake.
Updates for release:
Switch configure default to production mode.
Set HDF5_GENERATE_HEADERS to OFF.
* Restores maintainer mode in the autotools (#200)
Maintainer mode should be enabled in development branches.
Also adds helpful commenting.
Add bin/switch_maint_mode
Disable maintainer mode for release.
Fix incomplete merge for stub functions in H5Fdhdfs.c
* Update configure for Restores maintainer mode in the autotools (#200).
* Update MANIFEST for switch_maint_mode script.
* Restores maintainer mode in the autotools (#200) (#203)
* Restores maintainer mode in the autotools (#200)
Maintainer mode should be enabled in development branches.
Also adds helpful commenting.
Add bin/switch_maint_mode
Disable maintainer mode for release.
Fix incomplete merge for stub functions in H5Fdhdfs.c
* Update configure for Restores maintainer mode in the autotools (#200).
* Update MANIFEST for switch_maint_mode script.
Co-authored-by: Dana Robinson <43805+derobins@users.noreply.github.com>
* Hdf5 1 8 22 (#212)
* Restores maintainer mode in the autotools (#200)
Maintainer mode should be enabled in development branches.
Also adds helpful commenting.
Add bin/switch_maint_mode
Disable maintainer mode for release.
Fix incomplete merge for stub functions in H5Fdhdfs.c
* Update configure for Restores maintainer mode in the autotools (#200).
* Update MANIFEST for switch_maint_mode script.
Co-authored-by: Dana Robinson <43805+derobins@users.noreply.github.com>
* Update so numbers for 1.8.22 release.
* Add so numbers changes in Makefile.ins for 1.8.22 release.
* Brings ttsafe_attr_vlen.c changes from develop (#214)
Fixes exposed pthread problem on Windows.
* Update SO numbers for Hdf5 1 8 22 (#215)
* Restores maintainer mode in the autotools (#200)
Maintainer mode should be enabled in development branches.
Also adds helpful commenting.
Add bin/switch_maint_mode
Disable maintainer mode for release.
Fix incomplete merge for stub functions in H5Fdhdfs.c
* Update configure for Restores maintainer mode in the autotools (#200).
* Update MANIFEST for switch_maint_mode script.
* Update so numbers for 1.8.22 release.
* Add so numbers changes in Makefile.ins for 1.8.22 release.
Co-authored-by: Dana Robinson <43805+derobins@users.noreply.github.com>
* Update pkgconfig settings with version - #218 (#223)
* Add notice of final HDFF5 1.8 release.
Add solaris 64bit alignment issue to "Known Problems".
* Update 1.8 final release notice.
* Hdf5 1 8 22 (#224)
* Restores maintainer mode in the autotools (#200)
Maintainer mode should be enabled in development branches.
Also adds helpful commenting.
Add bin/switch_maint_mode
Disable maintainer mode for release.
Fix incomplete merge for stub functions in H5Fdhdfs.c
* Update configure for Restores maintainer mode in the autotools (#200).
* Update MANIFEST for switch_maint_mode script.
* Update so numbers for 1.8.22 release.
* Add so numbers changes in Makefile.ins for 1.8.22 release.
* Update pkgconfig settings with version - #218 (#223)
* Add notice of final HDFF5 1.8 release.
Add solaris 64bit alignment issue to "Known Problems".
* Update 1.8 final release notice.
Co-authored-by: Dana Robinson <43805+derobins@users.noreply.github.com>
Co-authored-by: Allen Byrne <50328838+byrnHDF@users.noreply.github.com>
* Update CMake/HDF5Examples version in bin/release
* Update CMake/HDF5Examples version number in bin/release (#225)
* Restores maintainer mode in the autotools (#200)
Maintainer mode should be enabled in development branches.
Also adds helpful commenting.
Add bin/switch_maint_mode
Disable maintainer mode for release.
Fix incomplete merge for stub functions in H5Fdhdfs.c
* Update configure for Restores maintainer mode in the autotools (#200).
* Update MANIFEST for switch_maint_mode script.
* Update so numbers for 1.8.22 release.
* Add so numbers changes in Makefile.ins for 1.8.22 release.
* Update pkgconfig settings with version - #218 (#223)
* Add notice of final HDFF5 1.8 release.
Add solaris 64bit alignment issue to "Known Problems".
* Update 1.8 final release notice.
* Update CMake/HDF5Examples version in bin/release
Co-authored-by: Dana Robinson <43805+derobins@users.noreply.github.com>
Co-authored-by: Allen Byrne <50328838+byrnHDF@users.noreply.github.com>
* Fixed typo in an error message. (#228)
* Fixed typo in an error message. (#227)
* Remove duplicate setting (#239)
* Bring 3 small changes from Hdf5 1.8 to 1.8.22 (#241)
* Restores maintainer mode in the autotools (#200)
Maintainer mode should be enabled in development branches.
Also adds helpful commenting.
Add bin/switch_maint_mode
Disable maintainer mode for release.
Fix incomplete merge for stub functions in H5Fdhdfs.c
* Update configure for Restores maintainer mode in the autotools (#200).
* Update MANIFEST for switch_maint_mode script.
* Update so numbers for 1.8.22 release.
* Add so numbers changes in Makefile.ins for 1.8.22 release.
* Update pkgconfig settings with version - #218 (#223)
* Add notice of final HDFF5 1.8 release.
Add solaris 64bit alignment issue to "Known Problems".
* Update 1.8 final release notice.
* Update CMake/HDF5Examples version in bin/release
* Fixed typo in an error message. (#227)
* Remove duplicate setting (#239)
Co-authored-by: Dana Robinson <43805+derobins@users.noreply.github.com>
Co-authored-by: Allen Byrne <50328838+byrnHDF@users.noreply.github.com>
Co-authored-by: bmribler <39579120+bmribler@users.noreply.github.com>
* Stat st blocks fix 1822 (#251)
* Restores maintainer mode in the autotools (#200)
Maintainer mode should be enabled in development branches.
Also adds helpful commenting.
Add bin/switch_maint_mode
Disable maintainer mode for release.
Fix incomplete merge for stub functions in H5Fdhdfs.c
* Update configure for Restores maintainer mode in the autotools (#200).
* Update MANIFEST for switch_maint_mode script.
* Update so numbers for 1.8.22 release.
* Add so numbers changes in Makefile.ins for 1.8.22 release.
* Update pkgconfig settings with version - #218 (#223)
* Add notice of final HDFF5 1.8 release.
Add solaris 64bit alignment issue to "Known Problems".
* Update 1.8 final release notice.
* Update CMake/HDF5Examples version in bin/release
* Fixed typo in an error message. (#227)
* Remove duplicate setting (#239)
* Fixes Autotools detection of the st_blocks field in stat (#246)
* Fixes Autotools detection of the st_blocks field in stat
The Autotools and CMake will now both correctly determine if the
stat struct has the st_blocks field and set H5_HAVE_STAT_ST_BLOCKS
appropriately.
* Fixes a typo in configure.ac
* Restore lines in RELEASE.txt.
Co-authored-by: Dana Robinson <43805+derobins@users.noreply.github.com>
Co-authored-by: Allen Byrne <50328838+byrnHDF@users.noreply.github.com>
Co-authored-by: bmribler <39579120+bmribler@users.noreply.github.com>
* Stat st blocks fix 1822 (#256)
* Restores maintainer mode in the autotools (#200)
Maintainer mode should be enabled in development branches.
Also adds helpful commenting.
Add bin/switch_maint_mode
Disable maintainer mode for release.
Fix incomplete merge for stub functions in H5Fdhdfs.c
* Update configure for Restores maintainer mode in the autotools (#200).
* Update MANIFEST for switch_maint_mode script.
* Update so numbers for 1.8.22 release.
* Add so numbers changes in Makefile.ins for 1.8.22 release.
* Update pkgconfig settings with version - #218 (#223)
* Add notice of final HDFF5 1.8 release.
Add solaris 64bit alignment issue to "Known Problems".
* Update 1.8 final release notice.
* Update CMake/HDF5Examples version in bin/release
* Fixed typo in an error message. (#227)
* Remove duplicate setting (#239)
* Fixes Autotools detection of the st_blocks field in stat (#246)
* Fixes Autotools detection of the st_blocks field in stat
The Autotools and CMake will now both correctly determine if the
stat struct has the st_blocks field and set H5_HAVE_STAT_ST_BLOCKS
appropriately.
* Fixes a typo in configure.ac
* Restore lines in RELEASE.txt.
* Updated configure with reconfigure.
Co-authored-by: Dana Robinson <43805+derobins@users.noreply.github.com>
Co-authored-by: Allen Byrne <50328838+byrnHDF@users.noreply.github.com>
Co-authored-by: bmribler <39579120+bmribler@users.noreply.github.com>
* RELEASE.txt cleanup.
* Hdf5 1 8 22 (#261)
* Restores maintainer mode in the autotools (#200)
Maintainer mode should be enabled in development branches.
Also adds helpful commenting.
Add bin/switch_maint_mode
Disable maintainer mode for release.
Fix incomplete merge for stub functions in H5Fdhdfs.c
* Update configure for Restores maintainer mode in the autotools (#200).
* Update MANIFEST for switch_maint_mode script.
* Update so numbers for 1.8.22 release.
* Add so numbers changes in Makefile.ins for 1.8.22 release.
* Update pkgconfig settings with version - #218 (#223)
* Add notice of final HDFF5 1.8 release.
Add solaris 64bit alignment issue to "Known Problems".
* Update 1.8 final release notice.
* Update CMake/HDF5Examples version in bin/release
* Fixed typo in an error message. (#227)
* Remove duplicate setting (#239)
* RELEASE.txt cleanup.
Co-authored-by: Dana Robinson <43805+derobins@users.noreply.github.com>
Co-authored-by: Allen Byrne <50328838+byrnHDF@users.noreply.github.com>
Co-authored-by: bmribler <39579120+bmribler@users.noreply.github.com>
* Add macOS Big Sur to tested machines, also missing entries for macOS 10.13 and 10.14.
* )Update version.
* Hdf5 1 8 22 (#266)
* Restores maintainer mode in the autotools (#200)
Maintainer mode should be enabled in development branches.
Also adds helpful commenting.
Add bin/switch_maint_mode
Disable maintainer mode for release.
Fix incomplete merge for stub functions in H5Fdhdfs.c
* Update configure for Restores maintainer mode in the autotools (#200).
* Update MANIFEST for switch_maint_mode script.
* Update so numbers for 1.8.22 release.
* Add so numbers changes in Makefile.ins for 1.8.22 release.
* Update pkgconfig settings with version - #218 (#223)
* Add notice of final HDFF5 1.8 release.
Add solaris 64bit alignment issue to "Known Problems".
* Update 1.8 final release notice.
* Update CMake/HDF5Examples version in bin/release
* Fixed typo in an error message. (#227)
* Remove duplicate setting (#239)
* RELEASE.txt cleanup.
* Add macOS Big Sur to tested machines, also missing entries for macOS 10.13 and 10.14.
* )Update version.
Co-authored-by: Dana Robinson <43805+derobins@users.noreply.github.com>
Co-authored-by: Allen Byrne <50328838+byrnHDF@users.noreply.github.com>
Co-authored-by: bmribler <39579120+bmribler@users.noreply.github.com>
* Reverts lock/unlock callback signature to 1.8.21 version (#254)
* Reverts lock/unlock callback signature to 1.8.21 version
This callback is unused in 1.8. The ros3 and hdfs VFDs are the only VFDs
that have the lock callback implemented and that is just as no-op stubs.
These stubs were removed so the callbacks are now NULL pointers, like
the other VFDs in 1.8.
* Trivial whitespace fix
* Update version to 1.8.22-14.
* Hdf5 1 8 22 - Reverts lock/unlock callback signature to 1.8.21 version (#267)
* Restores maintainer mode in the autotools (#200)
Maintainer mode should be enabled in development branches.
Also adds helpful commenting.
Add bin/switch_maint_mode
Disable maintainer mode for release.
Fix incomplete merge for stub functions in H5Fdhdfs.c
* Update configure for Restores maintainer mode in the autotools (#200).
* Update MANIFEST for switch_maint_mode script.
* Update so numbers for 1.8.22 release.
* Add so numbers changes in Makefile.ins for 1.8.22 release.
* Update pkgconfig settings with version - #218 (#223)
* Add notice of final HDFF5 1.8 release.
Add solaris 64bit alignment issue to "Known Problems".
* Update 1.8 final release notice.
* Update CMake/HDF5Examples version in bin/release
* Fixed typo in an error message. (#227)
* Remove duplicate setting (#239)
* RELEASE.txt cleanup.
* Add macOS Big Sur to tested machines, also missing entries for macOS 10.13 and 10.14.
* )Update version.
* Reverts lock/unlock callback signature to 1.8.21 version (#254)
* Reverts lock/unlock callback signature to 1.8.21 version
This callback is unused in 1.8. The ros3 and hdfs VFDs are the only VFDs
that have the lock callback implemented and that is just as no-op stubs.
These stubs were removed so the callbacks are now NULL pointers, like
the other VFDs in 1.8.
* Trivial whitespace fix
* Update version to 1.8.22-14.
Co-authored-by: Dana Robinson <43805+derobins@users.noreply.github.com>
Co-authored-by: Allen Byrne <50328838+byrnHDF@users.noreply.github.com>
Co-authored-by: bmribler <39579120+bmribler@users.noreply.github.com>
* Update version in H5public.h
* Hdf5 1 8 22 (#269)
* Restores maintainer mode in the autotools (#200)
Maintainer mode should be enabled in development branches.
Also adds helpful commenting.
Add bin/switch_maint_mode
Disable maintainer mode for release.
Fix incomplete merge for stub functions in H5Fdhdfs.c
* Update configure for Restores maintainer mode in the autotools (#200).
* Update MANIFEST for switch_maint_mode script.
* Update so numbers for 1.8.22 release.
* Add so numbers changes in Makefile.ins for 1.8.22 release.
* Update pkgconfig settings with version - #218 (#223)
* Add notice of final HDFF5 1.8 release.
Add solaris 64bit alignment issue to "Known Problems".
* Update 1.8 final release notice.
* Update CMake/HDF5Examples version in bin/release
* Fixed typo in an error message. (#227)
* Remove duplicate setting (#239)
* RELEASE.txt cleanup.
* Add macOS Big Sur to tested machines, also missing entries for macOS 10.13 and 10.14.
* )Update version.
* Reverts lock/unlock callback signature to 1.8.21 version (#254)
* Reverts lock/unlock callback signature to 1.8.21 version
This callback is unused in 1.8. The ros3 and hdfs VFDs are the only VFDs
that have the lock callback implemented and that is just as no-op stubs.
These stubs were removed so the callbacks are now NULL pointers, like
the other VFDs in 1.8.
* Trivial whitespace fix
* Update version to 1.8.22-14.
* Update version in H5public.h
Co-authored-by: Dana Robinson <43805+derobins@users.noreply.github.com>
Co-authored-by: Allen Byrne <50328838+byrnHDF@users.noreply.github.com>
Co-authored-by: bmribler <39579120+bmribler@users.noreply.github.com>
* Set version 1.8.22 for release.
* dd RELEASE.txt entry for HDFFV-10741.
* Hdf5 1 8 22 (#279)
* Restores maintainer mode in the autotools (#200)
Maintainer mode should be enabled in development branches.
Also adds helpful commenting.
Add bin/switch_maint_mode
Disable maintainer mode for release.
Fix incomplete merge for stub functions in H5Fdhdfs.c
* Update configure for Restores maintainer mode in the autotools (#200).
* Update MANIFEST for switch_maint_mode script.
* Update so numbers for 1.8.22 release.
* Add so numbers changes in Makefile.ins for 1.8.22 release.
* Update pkgconfig settings with version - #218 (#223)
* Add notice of final HDFF5 1.8 release.
Add solaris 64bit alignment issue to "Known Problems".
* Update 1.8 final release notice.
* Update CMake/HDF5Examples version in bin/release
* Fixed typo in an error message. (#227)
* Remove duplicate setting (#239)
* RELEASE.txt cleanup.
* Add macOS Big Sur to tested machines, also missing entries for macOS 10.13 and 10.14.
* )Update version.
* Reverts lock/unlock callback signature to 1.8.21 version (#254)
* Reverts lock/unlock callback signature to 1.8.21 version
This callback is unused in 1.8. The ros3 and hdfs VFDs are the only VFDs
that have the lock callback implemented and that is just as no-op stubs.
These stubs were removed so the callbacks are now NULL pointers, like
the other VFDs in 1.8.
* Trivial whitespace fix
* Update version to 1.8.22-14.
* Update version in H5public.h
* Set version 1.8.22 for release.
* dd RELEASE.txt entry for HDFFV-10741.
Co-authored-by: Dana Robinson <43805+derobins@users.noreply.github.com>
Co-authored-by: Allen Byrne <50328838+byrnHDF@users.noreply.github.com>
Co-authored-by: bmribler <39579120+bmribler@users.noreply.github.com>
* Improve performance of multiple calls to H5Sget_select_elem_pointlist (#270) (#277)
* Cache the pointer to the next point to process after the last call to
H5S__get_select_elem_pointlist. This allows the normal process of
iterating over the points in batches to be much more efficient, as the
library does not need to traverse the entirety of the preceding points
every time the funciton is re-entered.
* Update RELEASE.txt for point selection iteration performance fix.
* Hdf5 1 8 22 (#281)
* Restores maintainer mode in the autotools (#200)
Maintainer mode should be enabled in development branches.
Also adds helpful commenting.
Add bin/switch_maint_mode
Disable maintainer mode for release.
Fix incomplete merge for stub functions in H5Fdhdfs.c
* Update configure for Restores maintainer mode in the autotools (#200).
* Update MANIFEST for switch_maint_mode script.
* Update so numbers for 1.8.22 release.
* Add so numbers changes in Makefile.ins for 1.8.22 release.
* Update pkgconfig settings with version - #218 (#223)
* Add notice of final HDFF5 1.8 release.
Add solaris 64bit alignment issue to "Known Problems".
* Update 1.8 final release notice.
* Update CMake/HDF5Examples version in bin/release
* Fixed typo in an error message. (#227)
* Remove duplicate setting (#239)
* RELEASE.txt cleanup.
* Add macOS Big Sur to tested machines, also missing entries for macOS 10.13 and 10.14.
* )Update version.
* Reverts lock/unlock callback signature to 1.8.21 version (#254)
* Reverts lock/unlock callback signature to 1.8.21 version
This callback is unused in 1.8. The ros3 and hdfs VFDs are the only VFDs
that have the lock callback implemented and that is just as no-op stubs.
These stubs were removed so the callbacks are now NULL pointers, like
the other VFDs in 1.8.
* Trivial whitespace fix
* Update version to 1.8.22-14.
* Update version in H5public.h
* Set version 1.8.22 for release.
* dd RELEASE.txt entry for HDFFV-10741.
* Improve performance of multiple calls to H5Sget_select_elem_pointlist (#270) (#277)
* Cache the pointer to the next point to process after the last call to
H5S__get_select_elem_pointlist. This allows the normal process of
iterating over the points in batches to be much more efficient, as the
library does not need to traverse the entirety of the preceding points
every time the funciton is re-entered.
* Update RELEASE.txt for point selection iteration performance fix.
Co-authored-by: Dana Robinson <43805+derobins@users.noreply.github.com>
Co-authored-by: Allen Byrne <50328838+byrnHDF@users.noreply.github.com>
Co-authored-by: bmribler <39579120+bmribler@users.noreply.github.com>
Co-authored-by: Neil Fortner <nfortne2@hdfgroup.org>
* Hdf5 1 8 22 (#284)
* Fixed typo in an error message.
* Updated for HDFFV-11150, HDFFV-10480, and HDFFV-11159
* Update "Support for New Platforms and Compilers" section in RELEASE.txt;
add check_version workaround for binary compatibility to "Known
Problems".
* Add SUSE Linux to tested platforms.
* Update numbers in config/lt_vers.am and run bin/reconfigure for so
numbers.
* Update version in 3 files missed by merge.
Co-authored-by: Allen Byrne <byrn@hdfgroup.org>
Co-authored-by: Vailin Choi <vchoi@hdfgroup.org>
Co-authored-by: vchoi <vchoi@jelly.ad.hdfgroup.org>
Co-authored-by: hdftest <hdftest@hdfgroup.org>
Co-authored-by: Jordan Henderson <jhenderson@hdfgroup.org>
Co-authored-by: Dana Robinson <derobins@hdfgroup.org>
Co-authored-by: Binh-Minh Ribler <bmribler@hdfgroup.org>
Co-authored-by: Allen Byrne <50328838+byrnHDF@users.noreply.github.com>
Co-authored-by: bmribler <39579120+bmribler@users.noreply.github.com>
Co-authored-by: H. Joe Lee <hyoklee@hdfgroup.org>
Co-authored-by: Dana Robinson <43805+derobins@users.noreply.github.com>
Co-authored-by: Neil Fortner <nfortne2@hdfgroup.org>
Diffstat (limited to 'hl/src/H5DS.c')
-rw-r--r-- | hl/src/H5DS.c | 1819 |
1 files changed, 891 insertions, 928 deletions
diff --git a/hl/src/H5DS.c b/hl/src/H5DS.c index 0778d3d..7ade5d9 100644 --- a/hl/src/H5DS.c +++ b/hl/src/H5DS.c @@ -1,15 +1,15 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* 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 * + * 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 COPYING file, which can be found at the root of the source code * - * distribution tree, or in https://support.hdfgroup.org/ftp/HDF5/releases. * + * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * -* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include <assert.h> #include <stdlib.h> @@ -19,156 +19,151 @@ #include "H5IMprivate.h" #include "H5TBprivate.h" - /* Local routines */ static herr_t H5DS_is_reserved(hid_t did); -static hid_t H5DS_get_REFLIST_type(void); +static hid_t H5DS_get_REFLIST_type(void); /*------------------------------------------------------------------------- -* Function: H5DSset_scale -* -* Purpose: The dataset DSID is converted to a Dimension Scale dataset. -* Creates the CLASS attribute, set to the value "DIMENSION_SCALE" -* and an empty REFERENCE_LIST attribute. -* If DIMNAME is specified, then an attribute called NAME is created, -* with the value DIMNAME. -* -* Return: Success: SUCCEED, Failure: FAIL -* -* Programmer: pvn@ncsa.uiuc.edu -* -* Date: January 04, 2005 -* -* Comments: -* -* Modifications: -* -*------------------------------------------------------------------------- -*/ - -herr_t H5DSset_scale(hid_t dsid, - const char *dimname) + * Function: H5DSset_scale + * + * Purpose: The dataset DSID is converted to a Dimension Scale dataset. + * Creates the CLASS attribute, set to the value "DIMENSION_SCALE" + * and an empty REFERENCE_LIST attribute. + * If DIMNAME is specified, then an attribute called NAME is created, + * with the value DIMNAME. + * + * Return: Success: SUCCEED, Failure: FAIL + * + * Programmer: pvn@ncsa.uiuc.edu + * + * Date: January 04, 2005 + * + * Comments: + * + * Modifications: + * + *------------------------------------------------------------------------- + */ + +herr_t +H5DSset_scale(hid_t dsid, const char *dimname) { - int has_dimlist; + int has_dimlist; H5I_type_t it; /*------------------------------------------------------------------------- - * parameter checking - *------------------------------------------------------------------------- - */ + * parameter checking + *------------------------------------------------------------------------- + */ /* get ID type */ if ((it = H5Iget_type(dsid)) < 0) return FAIL; - if (H5I_DATASET!=it) + if (H5I_DATASET != it) return FAIL; /*------------------------------------------------------------------------- - * check if the dataset is a dataset wich has references to dimension scales - *------------------------------------------------------------------------- - */ + * check if the dataset is a dataset wich has references to dimension scales + *------------------------------------------------------------------------- + */ /* try to find the attribute "DIMENSION_LIST" */ - if ((has_dimlist = H5LT_find_attribute(dsid,DIMENSION_LIST)) < 0) + if ((has_dimlist = H5LT_find_attribute(dsid, DIMENSION_LIST)) < 0) return FAIL; if (has_dimlist == 1) return FAIL; /*------------------------------------------------------------------------- - * write the standard attributes for a Dimension Scale dataset - *------------------------------------------------------------------------- - */ + * write the standard attributes for a Dimension Scale dataset + *------------------------------------------------------------------------- + */ - if (H5LT_set_attribute_string(dsid,"CLASS",DIMENSION_SCALE_CLASS) < 0) + if (H5LT_set_attribute_string(dsid, "CLASS", DIMENSION_SCALE_CLASS) < 0) return FAIL; - if (dimname!=NULL) - { - if (H5LT_set_attribute_string(dsid,"NAME",dimname) < 0) + if (dimname != NULL) { + if (H5LT_set_attribute_string(dsid, "NAME", dimname) < 0) return FAIL; } return SUCCEED; } - - /*------------------------------------------------------------------------- -* Function: H5DSattach_scale -* -* Purpose: Define Dimension Scale DSID to be associated with dimension IDX -* of Dataset DID. Entries are created in the DIMENSION_LIST and -* REFERENCE_LIST attributes. -* -* Return: -* Success: SUCCEED -* Failure: FAIL -* -* Fails if: Bad arguments -* If DSID is not a Dimension Scale -* If DID is a Dimension Scale (A Dimension Scale cannot have scales) -* -* Programmer: pvn@ncsa.uiuc.edu -* -* Date: December 20, 2004 -* -* Comments: -* -* Modifications: -* -*------------------------------------------------------------------------- -*/ - -herr_t H5DSattach_scale(hid_t did, - hid_t dsid, - unsigned int idx) + * Function: H5DSattach_scale + * + * Purpose: Define Dimension Scale DSID to be associated with dimension IDX + * of Dataset DID. Entries are created in the DIMENSION_LIST and + * REFERENCE_LIST attributes. + * + * Return: + * Success: SUCCEED + * Failure: FAIL + * + * Fails if: Bad arguments + * If DSID is not a Dimension Scale + * If DID is a Dimension Scale (A Dimension Scale cannot have scales) + * + * Programmer: pvn@ncsa.uiuc.edu + * + * Date: December 20, 2004 + * + * Comments: + * + * Modifications: + * + *------------------------------------------------------------------------- + */ + +herr_t +H5DSattach_scale(hid_t did, hid_t dsid, unsigned int idx) { int has_dimlist; int has_reflist; int is_ds; hssize_t nelmts; hid_t sid; /* space ID */ - hid_t tid = -1; /* attribute type ID */ + hid_t tid = -1; /* attribute type ID */ hid_t ntid = -1; /* attribute native type ID */ - hid_t aid = -1; /* attribute ID */ + hid_t aid = -1; /* attribute ID */ int rank; /* rank of dataset */ hsize_t dims[1]; /* dimension of the "REFERENCE_LIST" array */ ds_list_t dsl; /* attribute data in the DS pointing to the dataset */ - ds_list_t *dsbuf = NULL; /* array of attribute data in the DS pointing to the dataset */ + ds_list_t *dsbuf = NULL; /* array of attribute data in the DS pointing to the dataset */ hobj_ref_t ref_to_ds; /* reference to the DS */ hobj_ref_t ref_j; /* iterator reference */ - hvl_t *buf = NULL; /* VL buffer to store in the attribute */ + hvl_t * buf = NULL; /* VL buffer to store in the attribute */ hid_t dsid_j; /* DS dataset ID in DIMENSION_LIST */ H5O_info_t oi1, oi2; H5I_type_t it1, it2; int i; - size_t len; - int found_ds=0; + size_t len; + int found_ds = 0; htri_t is_scale; /*------------------------------------------------------------------------- - * parameter checking - *------------------------------------------------------------------------- - */ + * parameter checking + *------------------------------------------------------------------------- + */ if ((is_scale = H5DSis_scale(did)) < 0) return FAIL; /* the dataset cannot be a DS dataset */ - if ( is_scale == 1) + if (is_scale == 1) return FAIL; /* get info for the dataset in the parameter list */ - if(H5Oget_info(did, &oi1) < 0) + if (H5Oget_info(did, &oi1) < 0) return FAIL; /* get info for the scale in the parameter list */ - if(H5Oget_info(dsid, &oi2) < 0) + if (H5Oget_info(dsid, &oi2) < 0) return FAIL; /* same object, not valid */ - if(oi1.fileno == oi2.fileno && oi1.addr == oi2.addr) + if (oi1.fileno == oi2.fileno && oi1.addr == oi2.addr) return FAIL; /* get ID type */ @@ -177,51 +172,50 @@ herr_t H5DSattach_scale(hid_t did, if ((it2 = H5Iget_type(dsid)) < 0) return FAIL; - if (H5I_DATASET!=it1 || H5I_DATASET!=it2) + if (H5I_DATASET != it1 || H5I_DATASET != it2) return FAIL; /* the DS dataset cannot have dimension scales */ - if (H5LT_find_attribute(dsid,DIMENSION_LIST)==1) + if (H5LT_find_attribute(dsid, DIMENSION_LIST) == 1) return FAIL; /* check if the dataset is a "reserved" dataset (image, table) */ - if (H5DS_is_reserved(did)==1) + if (H5DS_is_reserved(did) == 1) return FAIL; - /*------------------------------------------------------------------------- - * The dataset may or may not have the associated DS attribute - * 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 - * to the new DS - *------------------------------------------------------------------------- - */ + * The dataset may or may not have the associated DS attribute + * 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 + * to the new DS + *------------------------------------------------------------------------- + */ /* get dataset space */ if ((sid = H5Dget_space(did)) < 0) return FAIL; /* get rank */ - if ((rank=H5Sget_simple_extent_ndims(sid)) < 0) + if ((rank = H5Sget_simple_extent_ndims(sid)) < 0) goto out; /* scalar rank */ - if (rank==0) - rank=1; + if (rank == 0) + rank = 1; /* close dataset space */ if (H5Sclose(sid) < 0) return FAIL; /* parameter range checking */ - if (idx>(unsigned)rank-1) + if (idx > (unsigned)rank - 1) return FAIL; /*------------------------------------------------------------------------- - * two references are created: one to the DS, saved in "DIMENSION_LIST" - * and one to the dataset, saved in "REFERENCE_LIST" - *------------------------------------------------------------------------- - */ + * two references are created: one to the DS, saved in "DIMENSION_LIST" + * and one to the dataset, saved in "REFERENCE_LIST" + *------------------------------------------------------------------------- + */ /* create a reference for the >>DS<< dataset */ if (H5Rcreate(&ref_to_ds, dsid, ".", H5R_OBJECT, (hid_t)-1) < 0) return FAIL; @@ -231,57 +225,56 @@ herr_t H5DSattach_scale(hid_t did, return FAIL; /* try to find the attribute "DIMENSION_LIST" on the >>data<< dataset */ - if ((has_dimlist = H5LT_find_attribute(did,DIMENSION_LIST)) < 0) + if ((has_dimlist = H5LT_find_attribute(did, DIMENSION_LIST)) < 0) return FAIL; /*------------------------------------------------------------------------- - * it does not exist. we create the attribute and its reference data - *------------------------------------------------------------------------- - */ - if (has_dimlist == 0) - { + * it does not exist. we create the attribute and its reference data + *------------------------------------------------------------------------- + */ + if (has_dimlist == 0) { - dims[0] = (hsize_t)rank; + dims[0] = (hsize_t)rank; /* space for the attribute */ - if((sid = H5Screate_simple(1, dims, NULL)) < 0) + if ((sid = H5Screate_simple(1, dims, NULL)) < 0) return FAIL; /* create the type for the attribute "DIMENSION_LIST" */ - if((tid = H5Tvlen_create(H5T_STD_REF_OBJ)) < 0) + if ((tid = H5Tvlen_create(H5T_STD_REF_OBJ)) < 0) goto out; /* create the attribute */ - if((aid = H5Acreate2(did, DIMENSION_LIST, tid, sid, H5P_DEFAULT, H5P_DEFAULT)) < 0) + if ((aid = H5Acreate2(did, DIMENSION_LIST, tid, sid, H5P_DEFAULT, H5P_DEFAULT)) < 0) goto out; /* allocate and initialize the VL */ buf = (hvl_t *)HDmalloc((size_t)rank * sizeof(hvl_t)); - if(buf == NULL) + if (buf == NULL) goto out; - for(i = 0; i < rank; i++) { + for (i = 0; i < rank; i++) { buf[i].len = 0; - buf[i].p = NULL; + buf[i].p = NULL; } /* store the REF information in the index of the dataset that has the DS */ - buf[idx].len = 1; - buf[idx].p = HDmalloc( 1 * sizeof(hobj_ref_t)); + buf[idx].len = 1; + 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 */ - if(H5Awrite(aid, tid, buf) < 0) + if (H5Awrite(aid, tid, buf) < 0) goto out; /* close */ - if(H5Dvlen_reclaim(tid, sid, H5P_DEFAULT, buf) < 0) + if (H5Dvlen_reclaim(tid, sid, H5P_DEFAULT, buf) < 0) goto out; - if(H5Sclose(sid) < 0) + if (H5Sclose(sid) < 0) goto out; - if(H5Tclose(tid) < 0) + if (H5Tclose(tid) < 0) goto out; - if(H5Aclose(aid) < 0) + if (H5Aclose(aid) < 0) goto out; HDfree(buf); @@ -289,212 +282,211 @@ herr_t H5DSattach_scale(hid_t did, } /*------------------------------------------------------------------------- - * the attribute already exists, open it, extend the buffer, - * and insert the new reference - *------------------------------------------------------------------------- - */ - else if(has_dimlist == 1) - { - if((aid = H5Aopen(did, DIMENSION_LIST, H5P_DEFAULT)) < 0) + * the attribute already exists, open it, extend the buffer, + * and insert the new reference + *------------------------------------------------------------------------- + */ + else if (has_dimlist == 1) { + if ((aid = H5Aopen(did, DIMENSION_LIST, H5P_DEFAULT)) < 0) goto out; - if((tid = H5Aget_type(aid)) < 0) + if ((tid = H5Aget_type(aid)) < 0) goto out; - if((sid = H5Aget_space(aid)) < 0) + if ((sid = H5Aget_space(aid)) < 0) goto out; /* allocate and initialize the VL */ buf = (hvl_t *)HDmalloc((size_t)rank * sizeof(hvl_t)); - if(buf == NULL) + if (buf == NULL) goto out; /* read */ - if(H5Aread(aid, tid, buf) < 0) + if (H5Aread(aid, tid, buf) < 0) goto out; /* check to avoid inserting duplicates. it is not FAIL, just do nothing */ /* iterate all the REFs in this dimension IDX */ - for(i = 0; i < (int)buf[idx].len; i++) { + for (i = 0; i < (int)buf[idx].len; i++) { /* get the reference */ ref_j = ((hobj_ref_t *)buf[idx].p)[i]; /* get the scale id for this REF */ - if((dsid_j = H5Rdereference(did,H5R_OBJECT,&ref_j)) < 0) + if ((dsid_j = H5Rdereference(did, H5R_OBJECT, &ref_j)) < 0) goto out; /* get info for DS in the parameter list */ - if(H5Oget_info(dsid, &oi1) < 0) + if (H5Oget_info(dsid, &oi1) < 0) goto out; /* get info for this DS */ - if(H5Oget_info(dsid_j, &oi2) < 0) + if (H5Oget_info(dsid_j, &oi2) < 0) goto out; /* same object, so this DS scale is already in this DIM IDX */ - if(oi1.fileno == oi2.fileno && oi1.addr == oi2.addr) + if (oi1.fileno == oi2.fileno && oi1.addr == oi2.addr) found_ds = 1; /* close the dereferenced dataset */ - if(H5Dclose(dsid_j) < 0) + if (H5Dclose(dsid_j) < 0) goto out; } /* end for */ - if(found_ds == 0) { + if (found_ds == 0) { /* we are adding one more DS to this dimension */ - if(buf[idx].len > 0) { + if (buf[idx].len > 0) { buf[idx].len++; - len = buf[idx].len; - buf[idx].p = HDrealloc(buf[idx].p, len * sizeof(hobj_ref_t)); + len = buf[idx].len; + 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 = HDmalloc(sizeof(hobj_ref_t)); + buf[idx].len = 1; + buf[idx].p = HDmalloc(sizeof(hobj_ref_t)); ((hobj_ref_t *)buf[idx].p)[0] = ref_to_ds; } /* end else */ - } /* end if */ + } /* end if */ /* write the attribute with the new references */ - if(H5Awrite(aid, tid, buf) < 0) + if (H5Awrite(aid, tid, buf) < 0) goto out; /* close */ - if(H5Dvlen_reclaim(tid, sid, H5P_DEFAULT, buf) < 0) + if (H5Dvlen_reclaim(tid, sid, H5P_DEFAULT, buf) < 0) goto out; - if(H5Sclose(sid) < 0) + if (H5Sclose(sid) < 0) goto out; - if(H5Tclose(tid) < 0) + if (H5Tclose(tid) < 0) goto out; - if(H5Aclose(aid) < 0) + if (H5Aclose(aid) < 0) goto out; HDfree(buf); buf = NULL; } /* has_dimlist */ /*------------------------------------------------------------------------- - * save DS info on the >>DS<< dataset - *------------------------------------------------------------------------- - */ + * save DS info on the >>DS<< dataset + *------------------------------------------------------------------------- + */ /* try to find the attribute "REFERENCE_LIST" on the >>DS<< dataset */ - if((has_reflist = H5LT_find_attribute(dsid, REFERENCE_LIST)) < 0) + if ((has_reflist = H5LT_find_attribute(dsid, REFERENCE_LIST)) < 0) goto out; /*------------------------------------------------------------------------- - * it does not exist. we create the attribute and its reference data - *------------------------------------------------------------------------- - */ - if(has_reflist == 0) { + * it does not exist. we create the attribute and its reference data + *------------------------------------------------------------------------- + */ + if (has_reflist == 0) { dims[0] = 1; /* space for the attribute */ - if((sid = H5Screate_simple(1,dims,NULL)) < 0) + if ((sid = H5Screate_simple(1, dims, NULL)) < 0) goto out; /* create the compound datatype for the attribute "REFERENCE_LIST" */ - if((tid = H5Tcreate(H5T_COMPOUND, sizeof(ds_list_t))) < 0) + if ((tid = H5Tcreate(H5T_COMPOUND, sizeof(ds_list_t))) < 0) goto out; /* insert reference field */ - if(H5Tinsert(tid, "dataset", HOFFSET(ds_list_t,ref), H5T_STD_REF_OBJ) < 0) + if (H5Tinsert(tid, "dataset", HOFFSET(ds_list_t, ref), H5T_STD_REF_OBJ) < 0) goto out; /* insert dimension idx of the dataset field */ - if(H5Tinsert(tid, "dimension", HOFFSET(ds_list_t, dim_idx), H5T_NATIVE_INT) < 0) + if (H5Tinsert(tid, "dimension", HOFFSET(ds_list_t, dim_idx), H5T_NATIVE_INT) < 0) goto out; /* create the attribute */ - if((aid = H5Acreate2(dsid, REFERENCE_LIST, tid, sid, H5P_DEFAULT, H5P_DEFAULT)) < 0) + if ((aid = H5Acreate2(dsid, REFERENCE_LIST, tid, sid, H5P_DEFAULT, H5P_DEFAULT)) < 0) goto out; /* store the IDX information */ dsl.dim_idx = idx; /* write the attribute with the reference */ - if(H5Awrite(aid, tid, &dsl) < 0) + if (H5Awrite(aid, tid, &dsl) < 0) goto out; /* close */ - if(H5Sclose(sid) < 0) + if (H5Sclose(sid) < 0) goto out; - if(H5Tclose(tid) < 0) + if (H5Tclose(tid) < 0) goto out; - if(H5Aclose(aid) < 0) + if (H5Aclose(aid) < 0) goto out; } /* end if */ /*------------------------------------------------------------------------- - * the "REFERENCE_LIST" array already exists, open it and extend it - *------------------------------------------------------------------------- - */ - else if(has_reflist == 1) { - if((aid = H5Aopen(dsid, REFERENCE_LIST, H5P_DEFAULT)) < 0) + * the "REFERENCE_LIST" array already exists, open it and extend it + *------------------------------------------------------------------------- + */ + else if (has_reflist == 1) { + if ((aid = H5Aopen(dsid, REFERENCE_LIST, H5P_DEFAULT)) < 0) goto out; - if((tid = H5Aget_type(aid)) < 0) + if ((tid = H5Aget_type(aid)) < 0) goto out; /* get native type to read attribute REFERENCE_LIST */ - if((ntid = H5DS_get_REFLIST_type()) < 0) + if ((ntid = H5DS_get_REFLIST_type()) < 0) goto out; /* get and save the old reference(s) */ - if((sid = H5Aget_space(aid)) < 0) + if ((sid = H5Aget_space(aid)) < 0) goto out; - if((nelmts = H5Sget_simple_extent_npoints(sid)) < 0) + if ((nelmts = H5Sget_simple_extent_npoints(sid)) < 0) goto out; nelmts++; - dsbuf = (ds_list_t*) HDmalloc((size_t)nelmts * sizeof(ds_list_t)); - if(dsbuf == NULL) + dsbuf = (ds_list_t *)HDmalloc((size_t)nelmts * sizeof(ds_list_t)); + if (dsbuf == NULL) goto out; - if(H5Aread(aid, ntid, dsbuf) < 0) + if (H5Aread(aid, ntid, dsbuf) < 0) goto out; /* close */ - if(H5Sclose(sid) < 0) + if (H5Sclose(sid) < 0) goto out; - if(H5Aclose(aid) < 0) + if (H5Aclose(aid) < 0) goto out; /*------------------------------------------------------------------------- - * create a new attribute - *------------------------------------------------------------------------- - */ + * create a new attribute + *------------------------------------------------------------------------- + */ /* the attribute must be deleted, in order to the new one can reflect the changes*/ - if(H5Adelete(dsid, REFERENCE_LIST) < 0) + if (H5Adelete(dsid, REFERENCE_LIST) < 0) goto out; /* store the IDX information (index of the dataset that has the DS) */ - dsl.dim_idx = idx; + dsl.dim_idx = idx; dsbuf[nelmts - 1] = dsl; /* create a new data space for the new references array */ dims[0] = (hsize_t)nelmts; - if((sid = H5Screate_simple(1, dims, NULL)) < 0) + if ((sid = H5Screate_simple(1, dims, NULL)) < 0) goto out; /* create the attribute again with the changes of space */ - if((aid = H5Acreate2(dsid, REFERENCE_LIST, tid, sid, H5P_DEFAULT, H5P_DEFAULT)) < 0) + if ((aid = H5Acreate2(dsid, REFERENCE_LIST, tid, sid, H5P_DEFAULT, H5P_DEFAULT)) < 0) goto out; /* write the attribute with the new references */ - if(H5Awrite(aid, ntid, dsbuf) < 0) + if (H5Awrite(aid, ntid, dsbuf) < 0) goto out; /* close */ - if(H5Sclose(sid) < 0) + if (H5Sclose(sid) < 0) goto out; - if(H5Tclose(tid) < 0) + if (H5Tclose(tid) < 0) goto out; - if(H5Aclose(aid) < 0) + if (H5Aclose(aid) < 0) goto out; if (H5Tclose(ntid) < 0) goto out; @@ -504,15 +496,15 @@ herr_t H5DSattach_scale(hid_t did, } /* has_reflist */ /*------------------------------------------------------------------------- - * write the standard attributes for a Dimension Scale dataset - *------------------------------------------------------------------------- - */ + * write the standard attributes for a Dimension Scale dataset + *------------------------------------------------------------------------- + */ - if((is_ds=H5DSis_scale(dsid)) < 0) + if ((is_ds = H5DSis_scale(dsid)) < 0) return FAIL; - if(is_ds == 0) { - if (H5LT_set_attribute_string(dsid,"CLASS",DIMENSION_SCALE_CLASS) < 0) + if (is_ds == 0) { + if (H5LT_set_attribute_string(dsid, "CLASS", DIMENSION_SCALE_CLASS) < 0) return FAIL; } @@ -520,54 +512,55 @@ herr_t H5DSattach_scale(hid_t did, /* error zone */ out: - if(buf) + if (buf) HDfree(buf); - if(dsbuf) + if (dsbuf) HDfree(dsbuf); - H5E_BEGIN_TRY { + H5E_BEGIN_TRY + { H5Sclose(sid); H5Aclose(aid); H5Tclose(ntid); H5Tclose(tid); - } H5E_END_TRY; + } + H5E_END_TRY; return FAIL; } /*------------------------------------------------------------------------- -* Function: H5DSdetach_scale -* -* Purpose: If possible, deletes association of Dimension Scale DSID with -* dimension IDX of Dataset DID. This deletes the entries in the -* DIMENSION_LIST and REFERENCE_LIST attributes. -* -* Return: -* Success: SUCCEED -* Failure: FAIL -* -* Fails if: Bad arguments -* The dataset DID or DSID do not exist. -* The DSID is not a Dimension Scale -* DSID is not attached to DID. -* Note that a scale may be associated with more than dimension of the same dataset. -* If so, the detach operation only deletes one of the associations, for DID. -* -* Programmer: pvn@ncsa.uiuc.edu -* -* Date: December 20, 2004 -* -* Comments: -* -* Modifications: Function didn't delete DIMENSION_LIST attribute, when -* all dimension scales were detached from a dataset; added. -* 2010/05/13 EIP -* -*------------------------------------------------------------------------- -*/ - -herr_t H5DSdetach_scale(hid_t did, - hid_t dsid, - unsigned int idx) + * Function: H5DSdetach_scale + * + * Purpose: If possible, deletes association of Dimension Scale DSID with + * dimension IDX of Dataset DID. This deletes the entries in the + * DIMENSION_LIST and REFERENCE_LIST attributes. + * + * Return: + * Success: SUCCEED + * Failure: FAIL + * + * Fails if: Bad arguments + * The dataset DID or DSID do not exist. + * The DSID is not a Dimension Scale + * DSID is not attached to DID. + * Note that a scale may be associated with more than dimension of the same dataset. + * If so, the detach operation only deletes one of the associations, for DID. + * + * Programmer: pvn@ncsa.uiuc.edu + * + * Date: December 20, 2004 + * + * Comments: + * + * Modifications: Function didn't delete DIMENSION_LIST attribute, when + * all dimension scales were detached from a dataset; added. + * 2010/05/13 EIP + * + *------------------------------------------------------------------------- + */ + +herr_t +H5DSdetach_scale(hid_t did, hid_t dsid, unsigned int idx) { int has_dimlist; int has_reflist; @@ -575,14 +568,14 @@ herr_t H5DSdetach_scale(hid_t did, hid_t dsid_j; /* DS dataset ID in DIMENSION_LIST */ hid_t did_i; /* dataset ID in REFERENCE_LIST */ hid_t sid; /* space ID */ - hid_t tid = -1; /* attribute type ID */ + hid_t tid = -1; /* attribute type ID */ hid_t ntid = -1; /* attribute native type ID */ - hid_t aid = -1; /* attribute ID */ + hid_t aid = -1; /* attribute ID */ int rank; /* rank of dataset */ - ds_list_t *dsbuf = NULL; /* array of attribute data in the DS pointing to the dataset */ + ds_list_t *dsbuf = NULL; /* array of attribute data in the DS pointing to the dataset */ hsize_t dims[1]; /* dimension of the "REFERENCE_LIST" array */ hobj_ref_t ref; /* reference to the DS */ - hvl_t *buf = NULL; /* VL buffer to store in the attribute */ + hvl_t * buf = NULL; /* VL buffer to store in the attribute */ int i; size_t j; hssize_t ii; @@ -592,41 +585,40 @@ herr_t H5DSdetach_scale(hid_t did, htri_t is_scale; /*------------------------------------------------------------------------- - * parameter checking - *------------------------------------------------------------------------- - */ + * parameter checking + *------------------------------------------------------------------------- + */ /* check for valid types of identifiers */ - if(H5I_DATASET!=H5Iget_type(did) || H5I_DATASET!=H5Iget_type(dsid)) + if (H5I_DATASET != H5Iget_type(did) || H5I_DATASET != H5Iget_type(dsid)) return FAIL; - if((is_scale = H5DSis_scale(did)) < 0) + if ((is_scale = H5DSis_scale(did)) < 0) return FAIL; /* the dataset cannot be a DS dataset */ - if( is_scale == 1) + if (is_scale == 1) return FAIL; /* get info for the dataset in the parameter list */ - if(H5Oget_info(did, &did_oi) < 0) + if (H5Oget_info(did, &did_oi) < 0) return FAIL; /* get info for the scale in the parameter list */ - if(H5Oget_info(dsid, &dsid_oi) < 0) + if (H5Oget_info(dsid, &dsid_oi) < 0) return FAIL; /* same object, not valid */ - if(did_oi.fileno == dsid_oi.fileno && did_oi.addr == dsid_oi.addr) + if (did_oi.fileno == dsid_oi.fileno && did_oi.addr == dsid_oi.addr) return FAIL; - /*------------------------------------------------------------------------- - * Find "DIMENSION_LIST" - *------------------------------------------------------------------------- - */ + * Find "DIMENSION_LIST" + *------------------------------------------------------------------------- + */ /* try to find the attribute "DIMENSION_LIST" on the >>data<< dataset */ - if ((has_dimlist = H5LT_find_attribute(did,DIMENSION_LIST)) < 0) + if ((has_dimlist = H5LT_find_attribute(did, DIMENSION_LIST)) < 0) return FAIL; if (has_dimlist == 0) @@ -637,7 +629,7 @@ herr_t H5DSdetach_scale(hid_t did, return FAIL; /* get rank */ - if ((rank=H5Sget_simple_extent_ndims(sid)) < 0) + if ((rank = H5Sget_simple_extent_ndims(sid)) < 0) goto out; /* close dataset space */ @@ -645,58 +637,56 @@ herr_t H5DSdetach_scale(hid_t did, return FAIL; /* parameter range checking */ - if (idx>(unsigned)rank-1) + if (idx > (unsigned)rank - 1) return FAIL; /*------------------------------------------------------------------------- - * find "REFERENCE_LIST" - *------------------------------------------------------------------------- - */ + * find "REFERENCE_LIST" + *------------------------------------------------------------------------- + */ /* try to find the attribute "REFERENCE_LIST" on the >>DS<< dataset */ - if((has_reflist = H5LT_find_attribute(dsid, REFERENCE_LIST)) < 0) + if ((has_reflist = H5LT_find_attribute(dsid, REFERENCE_LIST)) < 0) return FAIL; - if(has_reflist == 0) + if (has_reflist == 0) return FAIL; /*------------------------------------------------------------------------- - * open "DIMENSION_LIST", and delete the reference - *------------------------------------------------------------------------- - */ + * open "DIMENSION_LIST", and delete the reference + *------------------------------------------------------------------------- + */ - if((aid = H5Aopen(did, DIMENSION_LIST, H5P_DEFAULT)) < 0) + if ((aid = H5Aopen(did, DIMENSION_LIST, H5P_DEFAULT)) < 0) return FAIL; - if((tid = H5Aget_type(aid)) < 0) + if ((tid = H5Aget_type(aid)) < 0) goto out; - if((sid = H5Aget_space(aid)) < 0) + if ((sid = H5Aget_space(aid)) < 0) goto out; /* allocate and initialize the VL */ buf = (hvl_t *)HDmalloc((size_t)rank * sizeof(hvl_t)); - if(buf == NULL) + if (buf == NULL) goto out; /* read */ - if(H5Aread(aid, tid, buf) < 0) + if (H5Aread(aid, tid, buf) < 0) goto out; /* reset */ - if ( buf[idx].len > 0 ) - { - for (j=0; j<buf[idx].len; j++) - { + if (buf[idx].len > 0) { + for (j = 0; j < buf[idx].len; j++) { /* get the reference */ ref = ((hobj_ref_t *)buf[idx].p)[j]; /* get the DS id */ - if ((dsid_j = H5Rdereference(did,H5R_OBJECT,&ref)) < 0) + if ((dsid_j = H5Rdereference(did, H5R_OBJECT, &ref)) < 0) goto out; /* get info for this DS */ - if(H5Oget_info(dsid_j, &tmp_oi) < 0) + if (H5Oget_info(dsid_j, &tmp_oi) < 0) goto out; /* Close the dereferenced dataset */ @@ -704,125 +694,123 @@ herr_t H5DSdetach_scale(hid_t did, goto out; /* same object, reset */ - if(dsid_oi.fileno == tmp_oi.fileno && dsid_oi.addr == tmp_oi.addr) - { - /* If there are more than one reference in the VL element + if (dsid_oi.fileno == tmp_oi.fileno && dsid_oi.addr == tmp_oi.addr) { + /* If there are more than one reference in the VL element and the reference we found is not the last one, copy the last one to replace the found one since the order - of the references doesn't matter according to the spec; - reduce the size of the VL element by 1; - if the length of the element becomes 0, free the pointer + of the references doesn't matter according to the spec; + reduce the size of the VL element by 1; + if the length of the element becomes 0, free the pointer and reset to NULL */ size_t len = buf[idx].len; - if(j < len - 1) - ((hobj_ref_t *)buf[idx].p)[j] = ((hobj_ref_t *)buf[idx].p)[len-1]; + if (j < len - 1) + ((hobj_ref_t *)buf[idx].p)[j] = ((hobj_ref_t *)buf[idx].p)[len - 1]; len = --buf[idx].len; - if(len == 0) { - HDfree(buf[idx].p); + if (len == 0) { + HDfree(buf[idx].p); buf[idx].p = NULL; } - /* Since a reference to a dim. scale can be inserted only once, + /* Since a reference to a dim. scale can be inserted only once, we do not need to continue the search if it is found */ found_ds = 1; break; } } /* j */ - } /* if */ + } /* if */ /* the scale must be present to continue */ - if(found_ds == 0) + if (found_ds == 0) goto out; /* Write the attribute, but check first, if we have any scales left, - because if not, we should delete the attribute according to the spec */ - for(i = 0; i < rank; i++) { - if(buf[i].len > 0) { + because if not, we should delete the attribute according to the spec */ + for (i = 0; i < rank; i++) { + if (buf[i].len > 0) { have_ds = 1; - break; + break; } } - if(have_ds) { - if(H5Awrite(aid, tid, buf) < 0) - goto out; + if (have_ds) { + if (H5Awrite(aid, tid, buf) < 0) + goto out; } else { - if(H5Adelete(did, DIMENSION_LIST) < 0) + if (H5Adelete(did, DIMENSION_LIST) < 0) goto out; } /* close */ - if(H5Dvlen_reclaim(tid, sid, H5P_DEFAULT, buf) < 0) + if (H5Dvlen_reclaim(tid, sid, H5P_DEFAULT, buf) < 0) goto out; - if(H5Sclose(sid) < 0) + if (H5Sclose(sid) < 0) goto out; - if(H5Tclose(tid) < 0) + if (H5Tclose(tid) < 0) goto out; - if(H5Aclose(aid) < 0) + if (H5Aclose(aid) < 0) goto out; HDfree(buf); buf = NULL; - /*------------------------------------------------------------------------- - * the "REFERENCE_LIST" array exists, update - *------------------------------------------------------------------------- - */ + * the "REFERENCE_LIST" array exists, update + *------------------------------------------------------------------------- + */ - if((aid = H5Aopen(dsid, REFERENCE_LIST, H5P_DEFAULT)) < 0) + if ((aid = H5Aopen(dsid, REFERENCE_LIST, H5P_DEFAULT)) < 0) goto out; - if((tid = H5Aget_type(aid)) < 0) + if ((tid = H5Aget_type(aid)) < 0) goto out; /* get native type to read attribute REFERENCE_LIST */ - if((ntid = H5DS_get_REFLIST_type()) < 0) + if ((ntid = H5DS_get_REFLIST_type()) < 0) goto out; /* get and save the old reference(s) */ - if((sid = H5Aget_space(aid)) < 0) + if ((sid = H5Aget_space(aid)) < 0) goto out; - if((nelmts = H5Sget_simple_extent_npoints(sid)) < 0) + if ((nelmts = H5Sget_simple_extent_npoints(sid)) < 0) goto out; - dsbuf = (ds_list_t*) HDmalloc((size_t)nelmts * sizeof(ds_list_t)); - if(dsbuf == NULL) + dsbuf = (ds_list_t *)HDmalloc((size_t)nelmts * sizeof(ds_list_t)); + if (dsbuf == NULL) goto out; - if(H5Aread(aid, ntid, dsbuf) < 0) + if (H5Aread(aid, ntid, dsbuf) < 0) goto out; - for(ii=0; ii<nelmts; ii++) { + for (ii = 0; ii < nelmts; ii++) { /* First check if we have the same dimension index */ - if(idx == dsbuf[ii].dim_idx) { + if (idx == dsbuf[ii].dim_idx) { /* get the reference to the dataset */ ref = dsbuf[ii].ref; /* get the dataset id */ - if ((did_i = H5Rdereference(did,H5R_OBJECT,&ref)) < 0) + if ((did_i = H5Rdereference(did, H5R_OBJECT, &ref)) < 0) goto out; /* get info for this dataset */ - if(H5Oget_info(did_i, &tmp_oi) < 0) + if (H5Oget_info(did_i, &tmp_oi) < 0) goto out; /* close the dereferenced dataset */ - if(H5Dclose(did_i) < 0) + if (H5Dclose(did_i) < 0) goto out; /* same object, reset. we want to detach only for this DIM */ - if(did_oi.fileno == tmp_oi.fileno && did_oi.addr == tmp_oi.addr) { + if (did_oi.fileno == tmp_oi.fileno && did_oi.addr == tmp_oi.addr) { /* copy the last one to replace the one which is found */ - dsbuf[ii] = dsbuf[nelmts-1]; + dsbuf[ii] = dsbuf[nelmts - 1]; nelmts--; - found_dset=1; + found_dset = 1; break; } /* if */ - } /* if we have the same dimension index */ - } /* ii */ + } /* if we have the same dimension index */ + } /* ii */ /* close space and attribute */ if (H5Sclose(sid) < 0) @@ -831,44 +819,43 @@ herr_t H5DSdetach_scale(hid_t did, goto out; /*------------------------------------------------------------------------- - * check if we found the pointed dataset - *------------------------------------------------------------------------- - */ + * check if we found the pointed dataset + *------------------------------------------------------------------------- + */ /* the pointed dataset must exist */ if (found_dset == 0) goto out; /*------------------------------------------------------------------------- - * create a new attribute - *------------------------------------------------------------------------- - */ + * create a new attribute + *------------------------------------------------------------------------- + */ /* the attribute must be deleted, in order to the new one can reflect the changes*/ if (H5Adelete(dsid, REFERENCE_LIST) < 0) goto out; /* don't do anything for an empty array */ - if(nelmts) - { + if (nelmts) { /* create a new data space for the new references array */ - dims[0] = (hsize_t)nelmts; + dims[0] = (hsize_t)nelmts; - if((sid = H5Screate_simple(1, dims, NULL)) < 0) + if ((sid = H5Screate_simple(1, dims, NULL)) < 0) goto out; /* create the attribute again with the changes of space */ - if((aid = H5Acreate2(dsid, REFERENCE_LIST, tid, sid, H5P_DEFAULT, H5P_DEFAULT)) < 0) + if ((aid = H5Acreate2(dsid, REFERENCE_LIST, tid, sid, H5P_DEFAULT, H5P_DEFAULT)) < 0) goto out; /* write the new attribute with the new references */ - if(H5Awrite(aid, ntid, dsbuf) < 0) + if (H5Awrite(aid, ntid, dsbuf) < 0) goto out; /* close space and attribute */ - if(H5Sclose(sid) < 0) + if (H5Sclose(sid) < 0) goto out; - if(H5Aclose(aid) < 0) + if (H5Aclose(aid) < 0) goto out; } /* nelmts */ @@ -885,103 +872,103 @@ herr_t H5DSdetach_scale(hid_t did, /* error zone */ out: - H5E_BEGIN_TRY { + H5E_BEGIN_TRY + { H5Sclose(sid); H5Aclose(aid); H5Tclose(ntid); H5Tclose(tid); - if(dsbuf) { + if (dsbuf) { HDfree(dsbuf); dsbuf = NULL; } - if(buf) { + if (buf) { /* Failure occured before H5Dvlen_reclaim was called; free the pointers allocated when we read data in */ - for(i = 0; i < rank; i++) { - if(buf[i].p) + for (i = 0; i < rank; i++) { + if (buf[i].p) HDfree(buf[i].p); } HDfree(buf); buf = NULL; } - } H5E_END_TRY; + } + H5E_END_TRY; return FAIL; - } /*------------------------------------------------------------------------- -* Function: H5DSis_attached -* -* Purpose: Report if dimension scale DSID is currently attached to -* dimension IDX of dataset DID by checking if DID has a pointer in the REFERENCE_LIST -* attribute and DSID (scale ) has a pointer in the DIMENSION_LIST attribute -* -* Return: -* 1: both the DS and the dataset pointers match -* 0: one of them or both do not match -* FAIL (-1): error -* -* Fails if: Bad arguments -* If DSID is not a Dimension Scale -* If DID is a Dimension Scale (A Dimension Scale cannot have scales) -* -* Programmer: pvn@ncsa.uiuc.edu -* -* Date: February 18, 2005 -* -* Comments: -* -* Modifications: -* -*------------------------------------------------------------------------- -*/ - -htri_t H5DSis_attached(hid_t did, - hid_t dsid, - unsigned int idx) + * Function: H5DSis_attached + * + * Purpose: Report if dimension scale DSID is currently attached to + * dimension IDX of dataset DID by checking if DID has a pointer in the REFERENCE_LIST + * attribute and DSID (scale ) has a pointer in the DIMENSION_LIST attribute + * + * Return: + * 1: both the DS and the dataset pointers match + * 0: one of them or both do not match + * FAIL (-1): error + * + * Fails if: Bad arguments + * If DSID is not a Dimension Scale + * If DID is a Dimension Scale (A Dimension Scale cannot have scales) + * + * Programmer: pvn@ncsa.uiuc.edu + * + * Date: February 18, 2005 + * + * Comments: + * + * Modifications: + * + *------------------------------------------------------------------------- + */ + +htri_t +H5DSis_attached(hid_t did, hid_t dsid, unsigned int idx) { int has_dimlist; int has_reflist; hssize_t nelmts; hid_t sid; /* space ID */ - hid_t tid = -1; /* attribute type ID */ + hid_t tid = -1; /* attribute type ID */ hid_t ntid = -1; /* attribute native type ID */ - hid_t aid = -1; /* attribute ID */ + hid_t aid = -1; /* attribute ID */ int rank; /* rank of dataset */ - ds_list_t *dsbuf = NULL; /* array of attribute data in the DS pointing to the dataset */ + ds_list_t *dsbuf = NULL; /* array of attribute data in the DS pointing to the dataset */ hobj_ref_t ref; /* reference to the DS */ - hvl_t *buf = NULL; /* VL buffer to store in the attribute */ + hvl_t * buf = NULL; /* VL buffer to store in the attribute */ hid_t dsid_j; /* DS dataset ID in DIMENSION_LIST */ hid_t did_i; /* dataset ID in REFERENCE_LIST */ H5O_info_t oi1, oi2, oi3, oi4; H5I_type_t it1, it2; int i; - int found_dset=0, found_ds=0; + int found_dset = 0, found_ds = 0; htri_t is_scale; /*------------------------------------------------------------------------- - * parameter checking - *------------------------------------------------------------------------- - */ + * parameter checking + *------------------------------------------------------------------------- + */ if ((is_scale = H5DSis_scale(did)) < 0) return FAIL; /* the dataset cannot be a DS dataset */ - if ( is_scale == 1) + if (is_scale == 1) return FAIL; /* get info for the dataset in the parameter list */ - if(H5Oget_info(did, &oi1) < 0) + if (H5Oget_info(did, &oi1) < 0) return FAIL; /* get info for the scale in the parameter list */ - if(H5Oget_info(dsid, &oi2) < 0) + if (H5Oget_info(dsid, &oi2) < 0) return FAIL; /* same object, not valid */ - if(oi1.fileno == oi2.fileno && oi1.addr == oi2.addr) + if (oi1.fileno == oi2.fileno && oi1.addr == oi2.addr) return FAIL; /* get ID type */ @@ -990,20 +977,20 @@ htri_t H5DSis_attached(hid_t did, if ((it2 = H5Iget_type(dsid)) < 0) return FAIL; - if (H5I_DATASET!=it1 || H5I_DATASET!=it2) + if (H5I_DATASET != it1 || H5I_DATASET != it2) return FAIL; /*------------------------------------------------------------------------- - * get space - *------------------------------------------------------------------------- - */ + * get space + *------------------------------------------------------------------------- + */ /* get dataset space */ if ((sid = H5Dget_space(did)) < 0) return FAIL; /* get rank */ - if ((rank=H5Sget_simple_extent_ndims(sid)) < 0) + if ((rank = H5Sget_simple_extent_ndims(sid)) < 0) goto out; /* close dataset space */ @@ -1011,69 +998,65 @@ htri_t H5DSis_attached(hid_t did, goto out; /* parameter range checking */ - if(idx > ((unsigned)rank - 1)) + if (idx > ((unsigned)rank - 1)) return FAIL; /* try to find the attribute "DIMENSION_LIST" on the >>data<< dataset */ - if((has_dimlist = H5LT_find_attribute(did, DIMENSION_LIST)) < 0) + if ((has_dimlist = H5LT_find_attribute(did, DIMENSION_LIST)) < 0) return FAIL; /*------------------------------------------------------------------------- - * open "DIMENSION_LIST" - *------------------------------------------------------------------------- - */ + * open "DIMENSION_LIST" + *------------------------------------------------------------------------- + */ - if(has_dimlist == 1) - { - if((aid = H5Aopen(did, DIMENSION_LIST, H5P_DEFAULT)) < 0) + if (has_dimlist == 1) { + if ((aid = H5Aopen(did, DIMENSION_LIST, H5P_DEFAULT)) < 0) goto out; - if((tid = H5Aget_type(aid)) < 0) + if ((tid = H5Aget_type(aid)) < 0) goto out; - if((sid = H5Aget_space(aid)) < 0) + if ((sid = H5Aget_space(aid)) < 0) goto out; /* allocate and initialize the VL */ - buf = (hvl_t*)HDmalloc((size_t)rank * sizeof(hvl_t)); - if(buf == NULL) + buf = (hvl_t *)HDmalloc((size_t)rank * sizeof(hvl_t)); + if (buf == NULL) goto out; /* read */ - if (H5Aread(aid,tid,buf) < 0) + if (H5Aread(aid, tid, buf) < 0) goto out; /* iterate all the REFs in this dimension IDX */ - for (i=0; i<(int)buf[idx].len; i++) - { + for (i = 0; i < (int)buf[idx].len; i++) { /* get the reference */ ref = ((hobj_ref_t *)buf[idx].p)[i]; /* get the scale id for this REF */ - if ((dsid_j = H5Rdereference(did,H5R_OBJECT,&ref)) < 0) + if ((dsid_j = H5Rdereference(did, H5R_OBJECT, &ref)) < 0) goto out; /* get info for DS in the parameter list */ - if(H5Oget_info(dsid, &oi1) < 0) + if (H5Oget_info(dsid, &oi1) < 0) goto out; /* get info for this DS */ - if(H5Oget_info(dsid_j, &oi2) < 0) + if (H5Oget_info(dsid_j, &oi2) < 0) goto out; /* same object */ - if(oi1.fileno == oi2.fileno && oi1.addr == oi2.addr) + if (oi1.fileno == oi2.fileno && oi1.addr == oi2.addr) found_ds = 1; /* close the dereferenced dataset */ if (H5Dclose(dsid_j) < 0) goto out; - } - /* close */ - if (H5Dvlen_reclaim(tid,sid,H5P_DEFAULT,buf) < 0) + if (H5Dvlen_reclaim(tid, sid, H5P_DEFAULT, buf) < 0) goto out; if (H5Sclose(sid) < 0) goto out; @@ -1086,81 +1069,77 @@ htri_t H5DSis_attached(hid_t did, } /* has_dimlist */ /*------------------------------------------------------------------------- - * info on the >>DS<< dataset - *------------------------------------------------------------------------- - */ + * info on the >>DS<< dataset + *------------------------------------------------------------------------- + */ /* try to find the attribute "REFERENCE_LIST" on the >>DS<< dataset */ - if((has_reflist = H5LT_find_attribute(dsid, REFERENCE_LIST)) < 0) + if ((has_reflist = H5LT_find_attribute(dsid, REFERENCE_LIST)) < 0) goto out; /*------------------------------------------------------------------------- - * open "REFERENCE_LIST" - *------------------------------------------------------------------------- - */ + * open "REFERENCE_LIST" + *------------------------------------------------------------------------- + */ - if(has_reflist == 1) - { - if((aid = H5Aopen(dsid, REFERENCE_LIST, H5P_DEFAULT)) < 0) + if (has_reflist == 1) { + if ((aid = H5Aopen(dsid, REFERENCE_LIST, H5P_DEFAULT)) < 0) goto out; - if((tid = H5Aget_type(aid)) < 0) + if ((tid = H5Aget_type(aid)) < 0) goto out; /* get native type to read REFERENCE_LIST attribute */ - if((ntid = H5DS_get_REFLIST_type()) < 0) + if ((ntid = H5DS_get_REFLIST_type()) < 0) goto out; /* get and save the old reference(s) */ - if((sid = H5Aget_space(aid)) < 0) + if ((sid = H5Aget_space(aid)) < 0) goto out; - if((nelmts = H5Sget_simple_extent_npoints(sid)) < 0) + if ((nelmts = H5Sget_simple_extent_npoints(sid)) < 0) goto out; - dsbuf = (ds_list_t*) HDmalloc((size_t)nelmts * sizeof(ds_list_t)); + dsbuf = (ds_list_t *)HDmalloc((size_t)nelmts * sizeof(ds_list_t)); if (dsbuf == NULL) goto out; - if (H5Aread(aid,ntid,dsbuf) < 0) + if (H5Aread(aid, ntid, dsbuf) < 0) goto out; /*------------------------------------------------------------------------- - * iterate - *------------------------------------------------------------------------- - */ + * iterate + *------------------------------------------------------------------------- + */ - for(i=0; i<nelmts; i++) - { + for (i = 0; i < nelmts; i++) { /* get the reference */ ref = dsbuf[i].ref; /* the reference was not deleted */ - if (ref) - { + if (ref) { /* get the dataset id */ - if ((did_i = H5Rdereference(did,H5R_OBJECT,&ref)) < 0) + if ((did_i = H5Rdereference(did, H5R_OBJECT, &ref)) < 0) goto out; /* get info for dataset in the parameter list */ - if(H5Oget_info(did, &oi3) < 0) + if (H5Oget_info(did, &oi3) < 0) goto out; /* get info for this dataset */ - if(H5Oget_info(did_i, &oi4) < 0) + if (H5Oget_info(did_i, &oi4) < 0) goto out; /* same object */ - if(oi3.fileno == oi4.fileno && oi3.addr == oi4.addr && idx==dsbuf[i].dim_idx) - found_dset=1; + if (oi3.fileno == oi4.fileno && oi3.addr == oi4.addr && idx == dsbuf[i].dim_idx) + found_dset = 1; /* close the dereferenced dataset */ if (H5Dclose(did_i) < 0) goto out; } /* if */ - } /* i */ - + } /* i */ /* close */ if (H5Sclose(sid) < 0) @@ -1183,18 +1162,20 @@ htri_t H5DSis_attached(hid_t did, /* error zone */ out: - H5E_BEGIN_TRY { + H5E_BEGIN_TRY + { H5Sclose(sid); H5Aclose(aid); H5Tclose(tid); H5Tclose(ntid); - } H5E_END_TRY; + } + H5E_END_TRY; if (buf) { HDfree(buf); buf = NULL; } - if(dsbuf) { + if (dsbuf) { HDfree(dsbuf); dsbuf = NULL; } @@ -1202,88 +1183,84 @@ out: } /*------------------------------------------------------------------------- -* Function: H5DSiterate_scales -* -* Purpose: H5DSiterate_scales iterates over the scales attached to dimension DIM -* of dataset DID. For each scale in the list, the visitor_data and some -* additional information, specified below, are passed to the visitor function. -* The iteration begins with the IDX object in the group and the next element -* to be processed by the operator is returned in IDX. If IDX is NULL, then the -* iterator starts at zero. -* -* Parameters: -* -* hid_t DID; IN: the dataset -* unsigned int DIM; IN: the dimension of the dataset -* int *DS_IDX; IN/OUT: on input the dimension scale index to start iterating, -* on output the next index to visit. If NULL, start at -* the first position. -* H5DS_iterate_t VISITOR; IN: the visitor function -* void *VISITOR_DATA; IN: arbitrary data to pass to the visitor function. -* -* Iterate over all scales of DIM, calling an application callback -* with the item, key and any operator data. -* -* The operator callback receives a pointer to the item , -* and the pointer to the operator data passed -* in to H5SL_iterate ('op_data'). The return values from an operator are: -* A. Zero causes the iterator to continue, returning zero when all -* nodes of that type have been processed. -* B. Positive causes the iterator to immediately return that positive -* value, indicating short-circuit success. -* C. Negative causes the iterator to immediately return that value, -* indicating failure. -* -* Programmer: pvn@ncsa.uiuc.edu -* -* Date: January 31, 2005 -* -* Comments: -* -* Modifications: -* -*------------------------------------------------------------------------- -*/ - -herr_t H5DSiterate_scales(hid_t did, - unsigned int dim, - int *ds_idx, - H5DS_iterate_t visitor, - void *visitor_data ) + * Function: H5DSiterate_scales + * + * Purpose: H5DSiterate_scales iterates over the scales attached to dimension DIM + * of dataset DID. For each scale in the list, the visitor_data and some + * additional information, specified below, are passed to the visitor function. + * The iteration begins with the IDX object in the group and the next element + * to be processed by the operator is returned in IDX. If IDX is NULL, then the + * iterator starts at zero. + * + * Parameters: + * + * hid_t DID; IN: the dataset + * unsigned int DIM; IN: the dimension of the dataset + * int *DS_IDX; IN/OUT: on input the dimension scale index to start iterating, + * on output the next index to visit. If NULL, start at + * the first position. + * H5DS_iterate_t VISITOR; IN: the visitor function + * void *VISITOR_DATA; IN: arbitrary data to pass to the visitor function. + * + * Iterate over all scales of DIM, calling an application callback + * with the item, key and any operator data. + * + * The operator callback receives a pointer to the item , + * and the pointer to the operator data passed + * in to H5SL_iterate ('op_data'). The return values from an operator are: + * A. Zero causes the iterator to continue, returning zero when all + * nodes of that type have been processed. + * B. Positive causes the iterator to immediately return that positive + * value, indicating short-circuit success. + * C. Negative causes the iterator to immediately return that value, + * indicating failure. + * + * Programmer: pvn@ncsa.uiuc.edu + * + * Date: January 31, 2005 + * + * Comments: + * + * Modifications: + * + *------------------------------------------------------------------------- + */ + +herr_t +H5DSiterate_scales(hid_t did, unsigned int dim, int *ds_idx, H5DS_iterate_t visitor, void *visitor_data) { - hid_t scale_id; - int rank; - hobj_ref_t ref; /* reference to the DS */ - hid_t sid; /* space ID */ - hid_t tid = -1; /* attribute type ID */ - hid_t aid = -1; /* attribute ID */ - hvl_t *buf = NULL; /* VL buffer to store in the attribute */ - H5I_type_t it; /* ID type */ - herr_t ret_value=0; - int j_idx; - int nscales; - int has_dimlist; - int i; + hid_t scale_id; + int rank; + hobj_ref_t ref; /* reference to the DS */ + hid_t sid; /* space ID */ + hid_t tid = -1; /* attribute type ID */ + hid_t aid = -1; /* attribute ID */ + hvl_t * buf = NULL; /* VL buffer to store in the attribute */ + H5I_type_t it; /* ID type */ + herr_t ret_value = 0; + int j_idx; + int nscales; + int has_dimlist; + int i; /*------------------------------------------------------------------------- - * parameter checking - *------------------------------------------------------------------------- - */ + * parameter checking + *------------------------------------------------------------------------- + */ /* get ID type */ if ((it = H5Iget_type(did)) < 0) return FAIL; - if (H5I_DATASET!=it) + if (H5I_DATASET != it) return FAIL; /* get the number of scales assotiated with this DIM */ - if ((nscales = H5DSget_num_scales(did,dim)) < 0) + if ((nscales = H5DSget_num_scales(did, dim)) < 0) return FAIL; /* parameter range checking */ - if (ds_idx!=NULL) - { - if (*ds_idx>=nscales) + if (ds_idx != NULL) { + if (*ds_idx >= nscales) return FAIL; } @@ -1292,70 +1269,67 @@ herr_t H5DSiterate_scales(hid_t did, return FAIL; /* get rank */ - if ((rank=H5Sget_simple_extent_ndims(sid)) < 0) + if ((rank = H5Sget_simple_extent_ndims(sid)) < 0) goto out; /* close dataset space */ - if(H5Sclose(sid) < 0) + if (H5Sclose(sid) < 0) goto out; - if ( dim >= (unsigned)rank ) + if (dim >= (unsigned)rank) return FAIL; /* try to find the attribute "DIMENSION_LIST" on the >>data<< dataset */ - if((has_dimlist = H5LT_find_attribute(did, DIMENSION_LIST)) < 0) + if ((has_dimlist = H5LT_find_attribute(did, DIMENSION_LIST)) < 0) return FAIL; - if(has_dimlist == 0) + if (has_dimlist == 0) return SUCCEED; - else if(has_dimlist == 1) - { - if((aid = H5Aopen(did, DIMENSION_LIST, H5P_DEFAULT)) < 0) + else if (has_dimlist == 1) { + if ((aid = H5Aopen(did, DIMENSION_LIST, H5P_DEFAULT)) < 0) goto out; - if((tid = H5Aget_type(aid)) < 0) + if ((tid = H5Aget_type(aid)) < 0) goto out; - if((sid = H5Aget_space(aid)) < 0) + if ((sid = H5Aget_space(aid)) < 0) goto out; /* allocate and initialize the VL */ - buf = (hvl_t*)HDmalloc((size_t)rank * sizeof(hvl_t)); + buf = (hvl_t *)HDmalloc((size_t)rank * sizeof(hvl_t)); - if(buf == NULL) + if (buf == NULL) goto out; /* read */ - if(H5Aread(aid, tid, buf) < 0) + if (H5Aread(aid, tid, buf) < 0) goto out; - if ( buf[dim].len > 0 ) - { - if (ds_idx!=NULL) + if (buf[dim].len > 0) { + if (ds_idx != NULL) j_idx = *ds_idx; else - j_idx=0; + j_idx = 0; /* iterate */ - for(i=j_idx; i<nscales; i++) - { + for (i = j_idx; i < nscales; i++) { /* get the reference */ - ref = ((hobj_ref_t *)buf[dim].p)[ i ]; + ref = ((hobj_ref_t *)buf[dim].p)[i]; /* disable error reporting, the ID might refer to a deleted dataset */ - H5E_BEGIN_TRY { + H5E_BEGIN_TRY + { /* get the DS id */ - if ((scale_id = H5Rdereference(did,H5R_OBJECT,&ref)) < 0) + if ((scale_id = H5Rdereference(did, H5R_OBJECT, &ref)) < 0) goto out; - } H5E_END_TRY; + } + H5E_END_TRY; /* set the return IDX OUT value at current scale index */ - if (ds_idx!=NULL) - { + if (ds_idx != NULL) { *ds_idx = i; } - if((ret_value=(visitor)(did,dim,scale_id,visitor_data))!=0) - { + if ((ret_value = (visitor)(did, dim, scale_id, visitor_data)) != 0) { /* break */ /* close the DS id */ @@ -1370,10 +1344,10 @@ herr_t H5DSiterate_scales(hid_t did, goto out; } /* i */ - } /* if */ + } /* if */ /* close */ - if (H5Dvlen_reclaim(tid,sid,H5P_DEFAULT,buf) < 0) + if (H5Dvlen_reclaim(tid, sid, H5P_DEFAULT, buf) < 0) goto out; if (H5Sclose(sid) < 0) goto out; @@ -1389,55 +1363,58 @@ herr_t H5DSiterate_scales(hid_t did, return ret_value; out: - H5E_BEGIN_TRY { - if(buf) { - H5Dvlen_reclaim(tid,sid,H5P_DEFAULT,buf); + H5E_BEGIN_TRY + { + if (buf) { + H5Dvlen_reclaim(tid, sid, H5P_DEFAULT, buf); HDfree(buf); } H5Sclose(sid); H5Aclose(aid); H5Tclose(tid); - } H5E_END_TRY; + } + H5E_END_TRY; return FAIL; } /*------------------------------------------------------------------------- -* Function: H5DSset_label -* -* Purpose: Set label for the dimension IDX of dataset DID to the value LABEL -* -* Return: Success: SUCCEED, Failure: FAIL -* -* Programmer: pvn@ncsa.uiuc.edu -* -* Date: January 11, 2005 -* -* Comments: -* -* Modifications: -* -*------------------------------------------------------------------------- -*/ - -herr_t H5DSset_label(hid_t did, unsigned int idx, const char *label) + * Function: H5DSset_label + * + * Purpose: Set label for the dimension IDX of dataset DID to the value LABEL + * + * Return: Success: SUCCEED, Failure: FAIL + * + * Programmer: pvn@ncsa.uiuc.edu + * + * Date: January 11, 2005 + * + * Comments: + * + * Modifications: + * + *------------------------------------------------------------------------- + */ + +herr_t +H5DSset_label(hid_t did, unsigned int idx, const char *label) { - int has_labels; - hid_t sid = -1; /* space ID */ - hid_t tid = -1; /* attribute type ID */ - hid_t aid = -1; /* attribute ID */ - int rank; /* rank of dataset */ - hsize_t dims[1]; /* dimensions of dataset */ - H5I_type_t it; /* ID type */ - unsigned int i; - union { /* union is needed to eliminate compiler warnings about */ - char ** buf; /* discarding the 'const' qualifier in the free */ - char const ** const_buf; /* buf calls */ + int has_labels; + hid_t sid = -1; /* space ID */ + hid_t tid = -1; /* attribute type ID */ + hid_t aid = -1; /* attribute ID */ + int rank; /* rank of dataset */ + hsize_t dims[1]; /* dimensions of dataset */ + H5I_type_t it; /* ID type */ + unsigned int i; + union { /* union is needed to eliminate compiler warnings about */ + char ** buf; /* discarding the 'const' qualifier in the free */ + char const **const_buf; /* buf calls */ } u; /*------------------------------------------------------------------------- - * parameter checking - *------------------------------------------------------------------------- - */ + * parameter checking + *------------------------------------------------------------------------- + */ /* get ID type */ if ((it = H5Iget_type(did)) < 0) return FAIL; @@ -1445,10 +1422,10 @@ herr_t H5DSset_label(hid_t did, unsigned int idx, const char *label) if (H5I_DATASET != it) return FAIL; - if (label == NULL) + if (label == NULL) return FAIL; - /* get dataset space */ + /* get dataset space */ if ((sid = H5Dget_space(did)) < 0) return FAIL; @@ -1460,25 +1437,24 @@ herr_t H5DSset_label(hid_t did, unsigned int idx, const char *label) if (H5Sclose(sid) < 0) goto out; - if ( idx >= (unsigned)rank ) + if (idx >= (unsigned)rank) return FAIL; /*------------------------------------------------------------------------- - * attribute "DIMENSION_LABELS" - *------------------------------------------------------------------------- - */ + * attribute "DIMENSION_LABELS" + *------------------------------------------------------------------------- + */ /* try to find the attribute "DIMENSION_LABELS" on the >>data<< dataset */ if ((has_labels = H5LT_find_attribute(did, DIMENSION_LABELS)) < 0) return FAIL; /*------------------------------------------------------------------------- - * make the attribute and insert label - *------------------------------------------------------------------------- - */ + * make the attribute and insert label + *------------------------------------------------------------------------- + */ - if (has_labels == 0) - { + if (has_labels == 0) { dims[0] = (hsize_t)rank; /* space for the attribute */ @@ -1496,13 +1472,13 @@ herr_t H5DSset_label(hid_t did, unsigned int idx, const char *label) goto out; /* allocate and initialize */ - u.const_buf = (char const **) HDmalloc((size_t) rank * sizeof(char *)); + u.const_buf = (char const **)HDmalloc((size_t)rank * sizeof(char *)); if (u.const_buf == NULL) goto out; - for (i = 0; i < (unsigned int) rank; i++) - u.const_buf[i] = NULL; + for (i = 0; i < (unsigned int)rank; i++) + u.const_buf[i] = NULL; /* store the label information in the required index */ u.const_buf[idx] = label; @@ -1518,21 +1494,19 @@ herr_t H5DSset_label(hid_t did, unsigned int idx, const char *label) goto out; if (H5Aclose(aid) < 0) goto out; - if (u.const_buf) - { + if (u.const_buf) { HDfree(u.const_buf); u.const_buf = NULL; } } /*------------------------------------------------------------------------- - * just insert label - *------------------------------------------------------------------------- - */ + * just insert label + *------------------------------------------------------------------------- + */ + + else { - else - { - if ((aid = H5Aopen(did, DIMENSION_LABELS, H5P_DEFAULT)) < 0) goto out; @@ -1540,8 +1514,8 @@ herr_t H5DSset_label(hid_t did, unsigned int idx, const char *label) goto out; /* allocate and initialize */ - u.buf = (char **) HDmalloc((size_t) rank * sizeof(char *)); - + u.buf = (char **)HDmalloc((size_t)rank * sizeof(char *)); + if (u.buf == NULL) goto out; @@ -1564,8 +1538,7 @@ herr_t H5DSset_label(hid_t did, unsigned int idx, const char *label) u.buf[idx] = NULL; /* free all the ptr's from the H5Aread() */ - for (i = 0; i < (unsigned int) rank; i++) - { + for (i = 0; i < (unsigned int)rank; i++) { if (u.buf[i]) HDfree(u.buf[i]); } @@ -1575,8 +1548,7 @@ herr_t H5DSset_label(hid_t did, unsigned int idx, const char *label) goto out; if (H5Aclose(aid) < 0) goto out; - if (u.buf) - { + if (u.buf) { HDfree(u.buf); u.buf = NULL; } @@ -1587,13 +1559,11 @@ herr_t H5DSset_label(hid_t did, unsigned int idx, const char *label) /* error zone */ out: - if (u.buf) - { - if (u.buf[idx]) /* check if we errored during H5Awrite */ + if (u.buf) { + if (u.buf[idx]) /* check if we errored during H5Awrite */ u.buf[idx] = NULL; /* don't free label */ /* free all the ptr's from the H5Aread() */ - for (i = 0; i < (unsigned int) rank; i++) - { + for (i = 0; i < (unsigned int)rank; i++) { if (u.buf[i]) HDfree(u.buf[i]); } @@ -1604,50 +1574,52 @@ out: H5Sclose(sid); H5Aclose(aid); H5Tclose(tid); - }H5E_END_TRY; + } + H5E_END_TRY; return FAIL; } /*------------------------------------------------------------------------- -* Function: H5DSget_label -* -* Purpose: Read the label LABEL for dimension IDX of dataset DID -* Up to 'size' characters are stored in 'label' followed by a '\0' string -* terminator. If the label is longer than 'size'-1, -* the string terminator is stored in the last position of the buffer to -* properly terminate the string. -* -* Return: 0 if no label found, size of label if found, Failure: FAIL -* -* Programmer: pvn@ncsa.uiuc.edu -* -* Date: January 11, 2005 -* -* Comments: -* -* Modifications: -* JIRA HDFFV-7673: Added a check to see if the label name exists, -* if not then returns zero. July 30, 2011. MSB -* -*------------------------------------------------------------------------- -*/ -ssize_t H5DSget_label(hid_t did, unsigned int idx, char *label, size_t size) + * Function: H5DSget_label + * + * Purpose: Read the label LABEL for dimension IDX of dataset DID + * Up to 'size' characters are stored in 'label' followed by a '\0' string + * terminator. If the label is longer than 'size'-1, + * the string terminator is stored in the last position of the buffer to + * properly terminate the string. + * + * Return: 0 if no label found, size of label if found, Failure: FAIL + * + * Programmer: pvn@ncsa.uiuc.edu + * + * Date: January 11, 2005 + * + * Comments: + * + * Modifications: + * JIRA HDFFV-7673: Added a check to see if the label name exists, + * if not then returns zero. July 30, 2011. MSB + * + *------------------------------------------------------------------------- + */ +ssize_t +H5DSget_label(hid_t did, unsigned int idx, char *label, size_t size) { int has_labels; - hid_t sid = -1; /* space ID */ - hid_t tid = -1; /* attribute type ID */ - hid_t aid = -1; /* attribute ID */ - int rank; /* rank of dataset */ - char **buf = NULL; /* buffer to store in the attribute */ - H5I_type_t it; /* ID type */ + hid_t sid = -1; /* space ID */ + hid_t tid = -1; /* attribute type ID */ + hid_t aid = -1; /* attribute ID */ + int rank; /* rank of dataset */ + char ** buf = NULL; /* buffer to store in the attribute */ + H5I_type_t it; /* ID type */ size_t nbytes = 0; size_t copy_len; int i; /*------------------------------------------------------------------------- - * parameter checking - *------------------------------------------------------------------------- - */ + * parameter checking + *------------------------------------------------------------------------- + */ /* get ID type */ if ((it = H5Iget_type(did)) < 0) return FAIL; @@ -1655,7 +1627,7 @@ ssize_t H5DSget_label(hid_t did, unsigned int idx, char *label, size_t size) if (H5I_DATASET != it) return FAIL; - /* get dataset space */ + /* get dataset space */ if ((sid = H5Dget_space(did)) < 0) return FAIL; @@ -1667,41 +1639,39 @@ ssize_t H5DSget_label(hid_t did, unsigned int idx, char *label, size_t size) if (H5Sclose(sid) < 0) goto out; - if ( idx >= (unsigned)rank ) + if (idx >= (unsigned)rank) return FAIL; /*------------------------------------------------------------------------- - * attribute "DIMENSION_LABELS" - *------------------------------------------------------------------------- - */ + * attribute "DIMENSION_LABELS" + *------------------------------------------------------------------------- + */ /* try to find the attribute "DIMENSION_LABELS" on the >>data<< dataset */ if ((has_labels = H5LT_find_attribute(did, DIMENSION_LABELS)) < 0) return FAIL; /* return 0 and NULL for label if no label found */ - if (has_labels == 0) - { + if (has_labels == 0) { if (label) label[0] = 0; return 0; } /*------------------------------------------------------------------------- - * open the attribute and read label - *------------------------------------------------------------------------- - */ + * open the attribute and read label + *------------------------------------------------------------------------- + */ - assert (has_labels == 1); + assert(has_labels == 1); if ((aid = H5Aopen(did, DIMENSION_LABELS, H5P_DEFAULT)) < 0) goto out; - if ((tid = H5Aget_type(aid)) < 0) goto out; /* allocate and initialize */ - buf = (char **) HDmalloc((size_t) rank * sizeof(char *)); + buf = (char **)HDmalloc((size_t)rank * sizeof(char *)); if (buf == NULL) goto out; @@ -1711,29 +1681,25 @@ ssize_t H5DSget_label(hid_t did, unsigned int idx, char *label, size_t size) goto out; /* do only if the label name exists for the dimension */ - if (buf[idx] != NULL) - { + if (buf[idx] != NULL) { /* get the real string length */ - nbytes = strlen(buf[idx]); + nbytes = HDstrlen(buf[idx]); - /* compute the string length which will fit into the user's buffer */ - copy_len = MIN(size-1, nbytes); + /* compute the string length which will fit into the user's buffer */ + copy_len = MIN(size - 1, nbytes); - /* copy all/some of the name */ - if (label) - { - memcpy(label, buf[idx], copy_len); - - /* terminate the string */ - label[copy_len] = '\0'; - } + /* copy all/some of the name */ + if (label) { + HDmemcpy(label, buf[idx], copy_len); + /* terminate the string */ + label[copy_len] = '\0'; + } } /* free all the ptr's from the H5Aread() */ - for (i = 0; i < rank; i++) - { + for (i = 0; i < rank; i++) { if (buf[i]) - HDfree(buf[i]); + HDfree(buf[i]); } /* close */ @@ -1741,21 +1707,18 @@ ssize_t H5DSget_label(hid_t did, unsigned int idx, char *label, size_t size) goto out; if (H5Aclose(aid) < 0) goto out; - if (buf) - { + if (buf) { HDfree(buf); buf = NULL; } - return (ssize_t) nbytes; + return (ssize_t)nbytes; /* error zone */ out: - if (buf) - { + if (buf) { /* free all the ptr's from the H5Aread() */ - for (i = 0; i < rank; i++) - { + for (i = 0; i < rank; i++) { if (buf[i]) HDfree(buf[i]); } @@ -1766,37 +1729,37 @@ out: H5Sclose(sid); H5Aclose(aid); H5Tclose(tid); - }H5E_END_TRY; + } + H5E_END_TRY; return FAIL; } /*------------------------------------------------------------------------- -* Function: H5DSget_scale_name -* -* Purpose: Read the name of dataset scale DID into buffer NAME -* Up to 'size' characters are stored in 'name' followed by a '\0' string -* terminator. If the name is longer than 'size'-1, -* the string terminator is stored in the last position of the buffer to -* properly terminate the string. -* -* Return: size of name if found, zero if not found, Failure: FAIL -* -* Programmer: pvn@ncsa.uiuc.edu -* -* Date: January 04, 2005 -* -* Comments: -* -* Modifications: -* The size of the name returned should not include the NULL termination -* in its value so as to be consistent with other HDF5 APIs. -* -*------------------------------------------------------------------------- -*/ - -ssize_t H5DSget_scale_name(hid_t did, - char *name, - size_t size) + * Function: H5DSget_scale_name + * + * Purpose: Read the name of dataset scale DID into buffer NAME + * Up to 'size' characters are stored in 'name' followed by a '\0' string + * terminator. If the name is longer than 'size'-1, + * the string terminator is stored in the last position of the buffer to + * properly terminate the string. + * + * Return: size of name if found, zero if not found, Failure: FAIL + * + * Programmer: pvn@ncsa.uiuc.edu + * + * Date: January 04, 2005 + * + * Comments: + * + * Modifications: + * The size of the name returned should not include the NULL termination + * in its value so as to be consistent with other HDF5 APIs. + * + *------------------------------------------------------------------------- + */ + +ssize_t +H5DSget_scale_name(hid_t did, char *name, size_t size) { hid_t aid; /* attribute ID */ hid_t tid = -1; /* attribute type ID */ @@ -1805,26 +1768,26 @@ ssize_t H5DSget_scale_name(hid_t did, size_t nbytes; size_t copy_len; int has_name; - char *buf=NULL; + char * buf = NULL; /*------------------------------------------------------------------------- - * parameter checking - *------------------------------------------------------------------------- - */ + * parameter checking + *------------------------------------------------------------------------- + */ /* get ID type */ if ((it = H5Iget_type(did)) < 0) return FAIL; - if (H5I_DATASET!=it) + if (H5I_DATASET != it) return FAIL; - if ((H5DSis_scale(did))<=0) + if ((H5DSis_scale(did)) <= 0) return FAIL; /*------------------------------------------------------------------------- - * check if the DS has a name - *------------------------------------------------------------------------- - */ + * check if the DS has a name + *------------------------------------------------------------------------- + */ /* try to find the attribute "NAME" on the >>DS<< dataset */ if ((has_name = H5LT_find_attribute(did, "NAME")) < 0) @@ -1834,43 +1797,43 @@ ssize_t H5DSget_scale_name(hid_t did, return 0; /*------------------------------------------------------------------------- - * open the attribute - *------------------------------------------------------------------------- - */ + * open the attribute + *------------------------------------------------------------------------- + */ - if((aid = H5Aopen(did, "NAME", H5P_DEFAULT)) < 0) + if ((aid = H5Aopen(did, "NAME", H5P_DEFAULT)) < 0) return FAIL; /* get space */ - if((sid = H5Aget_space(aid)) < 0) + if ((sid = H5Aget_space(aid)) < 0) goto out; /* get type */ - if((tid = H5Aget_type(aid)) < 0) + if ((tid = H5Aget_type(aid)) < 0) goto out; /* get the size */ - if((nbytes = H5Tget_size(tid)) == 0) + if ((nbytes = H5Tget_size(tid)) == 0) goto out; /* allocate a temporary buffer */ - buf = (char*)HDmalloc(nbytes * sizeof(char)); + buf = (char *)HDmalloc(nbytes * sizeof(char)); if (buf == NULL) goto out; /* read */ - if (H5Aread(aid,tid,buf) < 0) + if (H5Aread(aid, tid, buf) < 0) goto out; /* compute the string length which will fit into the user's buffer */ - copy_len = MIN(size-1, nbytes); + copy_len = MIN(size - 1, nbytes); /* copy all/some of the name */ if (name) { - memcpy(name, buf, copy_len); + HDmemcpy(name, buf, copy_len); /* terminate the string */ - name[copy_len]='\0'; + name[copy_len] = '\0'; } /* close */ @@ -1883,225 +1846,226 @@ ssize_t H5DSget_scale_name(hid_t did, if (buf) HDfree(buf); - return (ssize_t) MAX(0,nbytes-1); + return (ssize_t)(nbytes - 1); /* error zone */ out: - H5E_BEGIN_TRY { + H5E_BEGIN_TRY + { H5Aclose(aid); H5Tclose(tid); H5Sclose(sid); - } H5E_END_TRY; + } + H5E_END_TRY; if (buf) HDfree(buf); return FAIL; } /*------------------------------------------------------------------------- -* Function: H5DSis_scale -* -* Purpose: check if the dataset DID is a dimension scale -* -* Return: 1, is, 0, not, FAIL, error -* -* Programmer: pvn@ncsa.uiuc.edu -* -* Date: January 04, 2005 -* -* Comments: -* -* Modifications: -* -*------------------------------------------------------------------------- -*/ - -htri_t H5DSis_scale(hid_t did) + * Function: H5DSis_scale + * + * Purpose: check if the dataset DID is a dimension scale + * + * Return: 1, is, 0, not, FAIL, error + * + * Programmer: pvn@ncsa.uiuc.edu + * + * Date: January 04, 2005 + * + * Comments: + * + * Modifications: + * + *------------------------------------------------------------------------- + */ + +htri_t +H5DSis_scale(hid_t did) { - hid_t tid = -1; /* attribute type ID */ - hid_t aid = -1; /* attribute ID */ - herr_t has_class; /* has the "CLASS" attribute */ - htri_t is_ds; /* boolean return value */ + hid_t tid = -1; /* attribute type 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; /* Name of attribute */ + char * buf; /* Name of attribute */ hsize_t storage_size; /* Size of storage for attribute */ /*------------------------------------------------------------------------- - * parameter checking - *------------------------------------------------------------------------- - */ + * parameter checking + *------------------------------------------------------------------------- + */ /* get ID type */ if ((it = H5Iget_type(did)) < 0) return FAIL; - if(H5I_DATASET != it) + if (H5I_DATASET != it) return FAIL; /* try to find the attribute "CLASS" on the dataset */ - if((has_class = H5LT_find_attribute(did, "CLASS")) < 0) + if ((has_class = H5LT_find_attribute(did, "CLASS")) < 0) return FAIL; - if(has_class == 0) + if (has_class == 0) is_ds = 0; - else - { - if((aid = H5Aopen(did, "CLASS", H5P_DEFAULT)) < 0) + else { + if ((aid = H5Aopen(did, "CLASS", H5P_DEFAULT)) < 0) goto out; - if((tid = H5Aget_type(aid)) < 0) + 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 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; + /* 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; + /* 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; + 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; + /* Read the attribute */ + if (H5Aread(aid, tid, buf) < 0) + goto out; - /* compare strings */ - if(HDstrncmp(buf, DIMENSION_SCALE_CLASS, MIN(HDstrlen(DIMENSION_SCALE_CLASS),HDstrlen(buf)))==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); + HDfree(buf); - if(H5Tclose(tid) < 0) + if (H5Tclose(tid) < 0) goto out; if (H5Aclose(aid) < 0) goto out; - - } return is_ds; /* error zone */ out: - H5E_BEGIN_TRY { + H5E_BEGIN_TRY + { H5Aclose(aid); H5Tclose(tid); - } H5E_END_TRY; + } + H5E_END_TRY; return FAIL; - } /*------------------------------------------------------------------------- -* Function: H5DSget_num_scales -* -* Purpose: get the number of scales linked to the IDX dimension of dataset DID -* -* Return: -* Success: number of scales -* Failure: FAIL -* -* Programmer: pvn@ncsa.uiuc.edu -* -* Date: January 13, 2005 -* -* Comments: -* -* Modifications: -* -*------------------------------------------------------------------------- -*/ - -int H5DSget_num_scales(hid_t did, - unsigned int idx) + * Function: H5DSget_num_scales + * + * Purpose: get the number of scales linked to the IDX dimension of dataset DID + * + * Return: + * Success: number of scales + * Failure: FAIL + * + * Programmer: pvn@ncsa.uiuc.edu + * + * Date: January 13, 2005 + * + * Comments: + * + * Modifications: + * + *------------------------------------------------------------------------- + */ + +int +H5DSget_num_scales(hid_t did, unsigned int idx) { int has_dimlist; - hid_t sid; /* space ID */ - hid_t tid = -1; /* attribute type ID */ - hid_t aid = -1; /* attribute ID */ - int rank; /* rank of dataset */ - hvl_t *buf = NULL; /* VL buffer to store in the attribute */ - H5I_type_t it; /* ID type */ + hid_t sid; /* space ID */ + hid_t tid = -1; /* attribute type ID */ + hid_t aid = -1; /* attribute ID */ + int rank; /* rank of dataset */ + hvl_t * buf = NULL; /* VL buffer to store in the attribute */ + H5I_type_t it; /* ID type */ int nscales; /*------------------------------------------------------------------------- - * parameter checking - *------------------------------------------------------------------------- - */ + * parameter checking + *------------------------------------------------------------------------- + */ /* get ID type */ - if((it = H5Iget_type(did)) < 0) + if ((it = H5Iget_type(did)) < 0) return FAIL; - if(H5I_DATASET != it) + if (H5I_DATASET != it) return FAIL; /*------------------------------------------------------------------------- - * the attribute "DIMENSION_LIST" on the >>data<< dataset must exist - *------------------------------------------------------------------------- - */ + * the attribute "DIMENSION_LIST" on the >>data<< dataset must exist + *------------------------------------------------------------------------- + */ /* get dataset space */ - if((sid = H5Dget_space(did)) < 0) + if ((sid = H5Dget_space(did)) < 0) return FAIL; /* get rank */ - if((rank = H5Sget_simple_extent_ndims(sid)) < 0) + if ((rank = H5Sget_simple_extent_ndims(sid)) < 0) goto out; /* close dataset space */ - if(H5Sclose(sid) < 0) + if (H5Sclose(sid) < 0) goto out; /* dimemsion index IDX range checking */ - if(idx >= (unsigned int )rank) + if (idx >= (unsigned int)rank) return FAIL; /* try to find the attribute "DIMENSION_LIST" on the >>data<< dataset */ - if((has_dimlist = H5LT_find_attribute(did, DIMENSION_LIST)) < 0) + if ((has_dimlist = H5LT_find_attribute(did, DIMENSION_LIST)) < 0) return FAIL; /* it does not exist */ - if(has_dimlist == 0) + if (has_dimlist == 0) return 0; /*------------------------------------------------------------------------- - * the attribute exists, open it - *------------------------------------------------------------------------- - */ + * the attribute exists, open it + *------------------------------------------------------------------------- + */ else { - if((aid = H5Aopen(did, DIMENSION_LIST, H5P_DEFAULT)) < 0) + if ((aid = H5Aopen(did, DIMENSION_LIST, H5P_DEFAULT)) < 0) goto out; - if((tid = H5Aget_type(aid)) < 0) + if ((tid = H5Aget_type(aid)) < 0) goto out; - if((sid = H5Aget_space(aid)) < 0) + if ((sid = H5Aget_space(aid)) < 0) goto out; /* allocate and initialize the VL */ buf = (hvl_t *)HDmalloc((size_t)rank * sizeof(hvl_t)); - if(buf == NULL) + if (buf == NULL) goto out; /* read */ - if(H5Aread(aid, tid, buf) < 0) + if (H5Aread(aid, tid, buf) < 0) goto out; nscales = (int)buf[idx].len; /* close */ - if(H5Dvlen_reclaim(tid, sid, H5P_DEFAULT, buf) < 0) + if (H5Dvlen_reclaim(tid, sid, H5P_DEFAULT, buf) < 0) goto out; - if(H5Sclose(sid) < 0) + if (H5Sclose(sid) < 0) goto out; - if(H5Tclose(tid) < 0) + if (H5Tclose(tid) < 0) goto out; - if(H5Aclose(aid) < 0) + if (H5Aclose(aid) < 0) goto out; HDfree(buf); buf = NULL; @@ -2111,84 +2075,85 @@ int H5DSget_num_scales(hid_t did, /* error zone */ out: - H5E_BEGIN_TRY { + H5E_BEGIN_TRY + { H5Sclose(sid); H5Aclose(aid); H5Tclose(tid); - } H5E_END_TRY; + } + H5E_END_TRY; - if(buf) + if (buf) HDfree(buf); return FAIL; } /*------------------------------------------------------------------------- -* Function: H5DS_is_reserved -* -* Purpose: Verify that a dataset's CLASS is either an image, palette or table -* -* Return: true, false, fail -* -* Programmer: pvn@ncsa.uiuc.edu -* -* Date: March 19, 2005 -* -* Comments: -* -* Modifications: -* -*------------------------------------------------------------------------- -*/ - -static -herr_t H5DS_is_reserved(hid_t did) + * Function: H5DS_is_reserved + * + * Purpose: Verify that a dataset's CLASS is either an image, palette or table + * + * Return: true, false, fail + * + * Programmer: pvn@ncsa.uiuc.edu + * + * Date: March 19, 2005 + * + * Comments: + * + * Modifications: + * + *------------------------------------------------------------------------- + */ + +static herr_t +H5DS_is_reserved(hid_t did) { - int has_class; - hid_t tid = -1; - hid_t aid = -1; - char *buf; /* Name of attribute */ + int has_class; + hid_t tid = -1; + hid_t aid = -1; + char * buf; /* Name of attribute */ hsize_t storage_size; /* Size of storage for attribute */ - herr_t ret; + herr_t ret; /* try to find the attribute "CLASS" on the dataset */ - if((has_class = H5LT_find_attribute(did, "CLASS")) < 0) + if ((has_class = H5LT_find_attribute(did, "CLASS")) < 0) return -1; - if(has_class == 0) + if (has_class == 0) return 0; - assert(has_class == 1); - if((aid = H5Aopen(did, "CLASS", H5P_DEFAULT)) < 0) + assert(has_class == 1); + if ((aid = H5Aopen(did, "CLASS", H5P_DEFAULT)) < 0) goto out; - if((tid = H5Aget_type(aid)) < 0) + if ((tid = H5Aget_type(aid)) < 0) goto out; /* check to make sure attribute is a string */ - if(H5T_STRING != H5Tget_class(tid)) - goto out; + 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; + 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; + 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; + 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; - + if (H5Aread(aid, tid, buf) < 0) + goto out; - 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 ) + 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; @@ -2201,7 +2166,6 @@ herr_t H5DS_is_reserved(hid_t did) if (H5Aclose(aid) < 0) goto out; - return ret; /* error zone */ @@ -2210,52 +2174,51 @@ out: { H5Tclose(tid); H5Aclose(aid); - } H5E_END_TRY; + } + H5E_END_TRY; return FAIL; } /*------------------------------------------------------------------------- -* Function: H5DS_get_REFLIST_type -* -* Purpose: This is a helper function to return a native type for -* the REFERENCE_LIST attribute. -* -* Return: Type identifier on success and negative on failure -* -* Programmer: epourmal@hdfgroup.org -* -* Date: May 22, 2010 -* -* Comments: -* -* Modifications: -* -*------------------------------------------------------------------------- -*/ - -static -hid_t H5DS_get_REFLIST_type(void) + * Function: H5DS_get_REFLIST_type + * + * Purpose: This is a helper function to return a native type for + * the REFERENCE_LIST attribute. + * + * Return: Type identifier on success and negative on failure + * + * Programmer: epourmal@hdfgroup.org + * + * Date: May 22, 2010 + * + * Comments: + * + * Modifications: + * + *------------------------------------------------------------------------- + */ + +static hid_t +H5DS_get_REFLIST_type(void) { - hid_t ntid_t = -1; - + hid_t ntid_t = -1; + /* Build native type that corresponds to compound datatype used to store ds_list_t structure in the REFERENCE_LIST attribute */ - if((ntid_t = H5Tcreate(H5T_COMPOUND, sizeof(ds_list_t))) < 0) + if ((ntid_t = H5Tcreate(H5T_COMPOUND, sizeof(ds_list_t))) < 0) goto out; - if(H5Tinsert(ntid_t, "dataset", HOFFSET(ds_list_t,ref), H5T_STD_REF_OBJ) < 0) + if (H5Tinsert(ntid_t, "dataset", HOFFSET(ds_list_t, ref), H5T_STD_REF_OBJ) < 0) goto out; - if(H5Tinsert(ntid_t, "dimension", HOFFSET(ds_list_t, dim_idx), H5T_NATIVE_INT) < 0) + if (H5Tinsert(ntid_t, "dimension", HOFFSET(ds_list_t, dim_idx), H5T_NATIVE_INT) < 0) goto out; return ntid_t; out: - H5E_BEGIN_TRY { - H5Tclose(ntid_t); - } H5E_END_TRY; + H5E_BEGIN_TRY { H5Tclose(ntid_t); } + H5E_END_TRY; return FAIL; -} - +} |