summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRobb Matzke <matzke@llnl.gov>1998-08-27 16:48:50 (GMT)
committerRobb Matzke <matzke@llnl.gov>1998-08-27 16:48:50 (GMT)
commiteb5e01d37ca2570afc50756c9ed6a0be214502ec (patch)
tree08281269dc5b2eeef48286fb991bd6a05f71f6a3
parent11f1b67c878b17abc225d09fb2a2019f338f92b2 (diff)
downloadhdf5-eb5e01d37ca2570afc50756c9ed6a0be214502ec.zip
hdf5-eb5e01d37ca2570afc50756c9ed6a0be214502ec.tar.gz
hdf5-eb5e01d37ca2570afc50756c9ed6a0be214502ec.tar.bz2
[svn-r620] Changes since 19980825
---------------------- ./MANIFEST ./src/H5R.c [NEW] ./src/H5Rprivate.h [NEW] ./src/H5Rpublic.h [NEW] ./src/Makefile.in ./src/hdf5.h ./test/ragged.c [NEW] Preliminary support for 2d ragged arrays for Mark Miller and Jim Reus. Not fully implemented yet. The test is not actually part of `make test' because we still have some memory problems. ./src/H5E.c ./src/H5Epublic.h Added H5E_RAGGED as a major error number. ./bin/release Checks the MANIFEST file against `svf ls' on systems that have it. ./bin/trace Fixed a bug that caused arguments of type `void *x[]' to not be handled. ./src/H5.c Removed unused variables and changed a couple types to fix compiler warnings. Added tracing support for ragged array object ID's and arrays of pointers. ./src/H5D.c H5Dcreate() will complain if either of the property lists are invalid (instead of using the default). ./src/H5D.c ./src/H5Dprivate.h Split H5Dget_space() into an API and internal function so it can be called from the new ragged array layer. ./src/H5Fistore.c Fixed warnings about unsigned vs. signed comparisons. ./src/H5Flow.c Fixed a warning about a variable being shadowed in the MPI-IO stuff. ./src/H5Iprivate.h ./src/H5Ipublic.h Added the H5_RAGGED atom group. ./src/H5Shyper.c Fixed some freeing-free-memory errors that resulted when certain arrays were freed but the pointers were left in the data structures. I simply set the pointers to null after they were freed. ./src/H5Sprivate.h ./src/H5Sselect.c Split the H5Sselect_hyperslab() function into an API and a private function so it could be called from the ragged array layer. Added H5S_SEL_ERROR and H5S_SEL_N to the switch statements to get rid or compiler warnings. ./src/H5Tconv.c Removed a misleading comment. ./test/bittests.c Fixed a warning about a printf(). ./test/cmpd_dset.c Fixed warnings about unused variables because of test #11 being commented out. ./bin/trace Shortened the right margin for the output to allow room for the `);' at the end of the TRACE() macros.
-rw-r--r--MANIFEST4
-rwxr-xr-xbin/release11
-rwxr-xr-xbin/snapshot1
-rwxr-xr-xbin/trace6
-rw-r--r--src/.distdep824
-rw-r--r--src/H5.c24
-rw-r--r--src/H5A.c24
-rw-r--r--src/H5D.c69
-rw-r--r--src/H5Distore.c10
-rw-r--r--src/H5Dprivate.h1
-rw-r--r--src/H5E.c13
-rw-r--r--src/H5Epublic.h3
-rw-r--r--src/H5F.c14
-rw-r--r--src/H5Fistore.c10
-rw-r--r--src/H5Flow.c14
-rw-r--r--src/H5G.c28
-rw-r--r--src/H5Iprivate.h5
-rw-r--r--src/H5Ipublic.h1
-rw-r--r--src/H5MF.c2
-rw-r--r--src/H5P.c94
-rw-r--r--src/H5R.c1075
-rw-r--r--src/H5Rprivate.h27
-rw-r--r--src/H5Rpublic.h28
-rw-r--r--src/H5S.c26
-rw-r--r--src/H5Shyper.c14
-rw-r--r--src/H5Sprivate.h5
-rw-r--r--src/H5Sselect.c239
-rw-r--r--src/H5T.c94
-rw-r--r--src/H5TB.c8
-rw-r--r--src/H5Tconv.c3
-rw-r--r--src/H5Z.c2
-rw-r--r--src/H5private.h3
-rw-r--r--src/Makefile.in8
-rw-r--r--src/hdf5.h1
-rw-r--r--test/.distdep160
-rw-r--r--test/bittests.c2
-rw-r--r--test/cmpd_dset.c500
-rw-r--r--test/ragged.c249
-rw-r--r--tools/h5import.c12
-rw-r--r--tools/h5tools.c20
40 files changed, 2662 insertions, 972 deletions
diff --git a/MANIFEST b/MANIFEST
index 298591a..82339aa 100644
--- a/MANIFEST
+++ b/MANIFEST
@@ -223,6 +223,9 @@
./src/H5P.c
./src/H5Pprivate.h
./src/H5Ppublic.h
+./src/H5R.c
+./src/H5Rprivate.h
+./src/H5Rpublic.h
./src/H5S.c
./src/H5Sall.c
./src/H5Shyper.c
@@ -266,6 +269,7 @@
./test/istore.c
./test/links.c
./test/mtime.c
+./test/ragged.c
./test/shtype.c
./test/testhdf5.c
./test/testhdf5.h
diff --git a/bin/release b/bin/release
index 8c1e5aa..3b975d3 100755
--- a/bin/release
+++ b/bin/release
@@ -73,6 +73,17 @@ for cvs in `find . -type d -name CVS -print`; do
fi
done
done
+for file in ./Changes `svf ls`; do
+ if (grep $file MANIFEST >/dev/null); then
+ :
+ elif [ $file = ./Changes ]; then
+ :
+ else
+ echo "+ $file"
+ fail=yes
+ fi
+done
+
if [ "X$fail" = "Xyes" ]; then
cat 1>&2 <<EOF
The MANIFEST is out of date. Files marked with a minus sign (-) no
diff --git a/bin/snapshot b/bin/snapshot
index 0b0edd4..74a724b 100755
--- a/bin/snapshot
+++ b/bin/snapshot
@@ -41,6 +41,7 @@ cvs -Q co -d ${COMPARE}/current hdf5 || exit 1
snapshot=yes
if [ -d ${COMPARE}/previous ]; then
if (diff -c ${COMPARE}/previous/MANIFEST ${COMPARE}/current/MANIFEST); then
+ snapshot=no
for src in `cat ${COMPARE}/current/MANIFEST`; do
if (diff -I H5_VERS_RELEASE -I " released on " \
${COMPARE}/previous/$src ${COMPARE}/current/$src); then
diff --git a/bin/trace b/bin/trace
index 4dab596..28734d4 100755
--- a/bin/trace
+++ b/bin/trace
@@ -93,10 +93,10 @@ sub argstring ($$$) {
$atype =~ s/\s+$//;
if ($atype =~ /(.*)\[(.*)\]$/) {
($array, $atype) = ($2, $1);
+ $atype =~ s/\s+$//;
}
$fq_atype = $atype . ('*' x $ptr);
-
if ($ptr>0 && exists $TypeString{$fq_atype}) {
$ptr = 0;
$tstr = $TypeString{$fq_atype};
@@ -172,7 +172,7 @@ sub rewrite_func ($$$$$) {
$trace .= join("", @arg_str) . "\"";
my $len = 4 + length $trace;
for (@arg_name) {
- if ($len + length >= 78) {
+ if ($len + length >= 77) {
$trace .= ",\n $_";
$len = 13 + length;
} else {
@@ -203,7 +203,7 @@ sub rewrite_func ($$$$$) {
error:
- return "\n$type\n$name ($args)\n$body";
+ return "\n$type\n$name($args)\n$body";
}
##############################################################################
diff --git a/src/.distdep b/src/.distdep
index 9f9d5a9..adc5f19 100644
--- a/src/.distdep
+++ b/src/.distdep
@@ -1,172 +1,3 @@
-H5.o: \
- H5.c \
- H5private.h \
- H5public.h \
- H5config.h \
- H5ACprivate.h \
- H5ACpublic.h \
- H5Fprivate.h \
- H5Fpublic.h \
- H5Ipublic.h \
- H5Dpublic.h \
- H5Bprivate.h \
- H5Bpublic.h \
- H5Eprivate.h \
- H5Epublic.h \
- H5Iprivate.h \
- H5MMprivate.h \
- H5MMpublic.h \
- H5Pprivate.h \
- H5Ppublic.h \
- H5Zpublic.h \
- H5Sprivate.h \
- H5Spublic.h \
- H5Gprivate.h \
- H5Gpublic.h \
- H5Oprivate.h \
- H5Opublic.h \
- H5HGprivate.h \
- H5HGpublic.h \
- H5Tprivate.h \
- H5Tpublic.h
-H5A.o: \
- H5A.c \
- H5private.h \
- H5public.h \
- H5config.h \
- H5Iprivate.h \
- H5Ipublic.h \
- H5Bprivate.h \
- H5Bpublic.h \
- H5Fprivate.h \
- H5Fpublic.h \
- H5Dpublic.h \
- H5Dprivate.h \
- H5Gprivate.h \
- H5Gpublic.h \
- H5Oprivate.h \
- H5Opublic.h \
- H5HGprivate.h \
- H5HGpublic.h \
- H5Tprivate.h \
- H5Tpublic.h \
- H5Sprivate.h \
- H5Spublic.h \
- H5Zprivate.h \
- H5Zpublic.h \
- H5Eprivate.h \
- H5Epublic.h \
- H5MMprivate.h \
- H5MMpublic.h \
- H5Pprivate.h \
- H5Ppublic.h \
- H5Apkg.h \
- H5Aprivate.h
-H5AC.o: \
- H5AC.c \
- H5private.h \
- H5public.h \
- H5config.h \
- H5ACprivate.h \
- H5ACpublic.h \
- H5Fprivate.h \
- H5Fpublic.h \
- H5Ipublic.h \
- H5Dpublic.h \
- H5Eprivate.h \
- H5Epublic.h
-H5B.o: \
- H5B.c \
- H5private.h \
- H5public.h \
- H5config.h \
- H5ACprivate.h \
- H5ACpublic.h \
- H5Fprivate.h \
- H5Fpublic.h \
- H5Ipublic.h \
- H5Dpublic.h \
- H5Bprivate.h \
- H5Bpublic.h \
- H5Eprivate.h \
- H5Epublic.h \
- H5MFprivate.h \
- H5MFpublic.h \
- H5MMprivate.h
-H5D.o: \
- H5D.c \
- H5private.h \
- H5public.h \
- H5config.h \
- H5Iprivate.h \
- H5Ipublic.h \
- H5ACprivate.h \
- H5ACpublic.h \
- H5Fprivate.h \
- H5Fpublic.h \
- H5Dpublic.h \
- H5Dprivate.h \
- H5Gprivate.h \
- H5Gpublic.h \
- H5Bprivate.h \
- H5Bpublic.h \
- H5Oprivate.h \
- H5Opublic.h \
- H5HGprivate.h \
- H5HGpublic.h \
- H5Tprivate.h \
- H5Tpublic.h \
- H5Sprivate.h \
- H5Spublic.h \
- H5Zprivate.h \
- H5Zpublic.h \
- H5Eprivate.h \
- H5Epublic.h \
- H5HLprivate.h \
- H5HLpublic.h \
- H5MFprivate.h \
- H5MFpublic.h
-H5E.o: \
- H5E.c \
- H5private.h \
- H5public.h \
- H5config.h \
- H5Iprivate.h \
- H5Ipublic.h \
- H5Eprivate.h
-H5F.o: \
- H5F.c \
- H5private.h \
- H5public.h \
- H5config.h \
- H5Aprivate.h \
- H5Apublic.h \
- H5Ipublic.h \
- H5Gprivate.h \
- H5Gpublic.h \
- H5Bprivate.h \
- H5Bpublic.h \
- H5Fprivate.h \
- H5Fpublic.h \
- H5Dpublic.h \
- H5Dprivate.h \
- H5Oprivate.h \
- H5Opublic.h \
- H5HGprivate.h \
- H5HGpublic.h \
- H5Tprivate.h \
- H5Tpublic.h \
- H5Sprivate.h \
- H5Spublic.h \
- H5Zprivate.h \
- H5Zpublic.h \
- H5Iprivate.h \
- H5ACprivate.h \
- H5ACpublic.h \
- H5Eprivate.h \
- H5Epublic.h \
- H5MMprivate.h \
- H5MMpublic.h
H5Farray.o: \
H5Farray.c \
H5private.h \
@@ -203,55 +34,6 @@ H5Fcore.o: \
H5Eprivate.h \
H5Epublic.h \
H5Ipublic.h
-H5Ffamily.o: \
- H5Ffamily.c \
- H5private.h \
- H5public.h \
- H5config.h \
- H5Eprivate.h \
- H5Epublic.h \
- H5Ipublic.h
-H5Fistore.o: \
- H5Fistore.c \
- H5private.h \
- H5public.h \
- H5config.h \
- H5Dprivate.h \
- H5Dpublic.h \
- H5Ipublic.h \
- H5Fprivate.h \
- H5Fpublic.h \
- H5Gprivate.h \
- H5Gpublic.h \
- H5Bprivate.h \
- H5Bpublic.h \
- H5Oprivate.h \
- H5Opublic.h \
- H5HGprivate.h \
- H5HGpublic.h \
- H5Tprivate.h \
- H5Tpublic.h \
- H5Sprivate.h \
- H5Spublic.h \
- H5Zprivate.h \
- H5Zpublic.h \
- H5Eprivate.h \
- H5Epublic.h \
- H5MFprivate.h \
- H5MFpublic.h
-H5Flow.o: \
- H5Flow.c \
- H5private.h \
- H5public.h \
- H5config.h \
- H5Eprivate.h \
- H5Epublic.h \
- H5Ipublic.h \
- H5Fprivate.h \
- H5Fpublic.h \
- H5Dpublic.h \
- H5MMprivate.h \
- H5MMpublic.h
H5Fmpio.o: \
H5Fmpio.c \
H5private.h \
@@ -319,39 +101,6 @@ H5Fstdio.o: \
H5Dpublic.h \
H5MMprivate.h \
H5MMpublic.h
-H5G.o: \
- H5G.c \
- H5private.h \
- H5public.h \
- H5config.h \
- H5Bprivate.h \
- H5Bpublic.h \
- H5Fprivate.h \
- H5Fpublic.h \
- H5Ipublic.h \
- H5Dpublic.h \
- H5Dprivate.h \
- H5Gprivate.h \
- H5Gpublic.h \
- H5Oprivate.h \
- H5Opublic.h \
- H5HGprivate.h \
- H5HGpublic.h \
- H5Tprivate.h \
- H5Tpublic.h \
- H5Sprivate.h \
- H5Spublic.h \
- H5Zprivate.h \
- H5Zpublic.h \
- H5Eprivate.h \
- H5Epublic.h \
- H5Gpkg.h \
- H5ACprivate.h \
- H5ACpublic.h \
- H5HLprivate.h \
- H5HLpublic.h \
- H5Iprivate.h \
- H5MMprivate.h
H5Gent.o: \
H5Gent.c \
H5private.h \
@@ -450,24 +199,6 @@ H5HG.o: \
H5MFprivate.h \
H5MFpublic.h \
H5MMprivate.h
-H5HL.o: \
- H5HL.c \
- H5private.h \
- H5public.h \
- H5config.h \
- H5ACprivate.h \
- H5ACpublic.h \
- H5Fprivate.h \
- H5Fpublic.h \
- H5Ipublic.h \
- H5Dpublic.h \
- H5Eprivate.h \
- H5Epublic.h \
- H5HLprivate.h \
- H5HLpublic.h \
- H5MFprivate.h \
- H5MFpublic.h \
- H5MMprivate.h
H5I.o: \
H5I.c \
H5private.h \
@@ -476,14 +207,6 @@ H5I.o: \
H5Iprivate.h \
H5Ipublic.h \
H5Eprivate.h
-H5MF.o: \
- H5MF.c \
- H5private.h \
- H5public.h \
- H5config.h \
- H5Eprivate.h \
- H5Epublic.h \
- H5Ipublic.h
H5MM.o: \
H5MM.c \
H5private.h \
@@ -492,34 +215,6 @@ H5MM.o: \
H5Eprivate.h \
H5Epublic.h \
H5Ipublic.h
-H5O.o: \
- H5O.c \
- H5private.h \
- H5public.h \
- H5config.h \
- H5ACprivate.h \
- H5ACpublic.h \
- H5Fprivate.h \
- H5Fpublic.h \
- H5Ipublic.h \
- H5Dpublic.h \
- H5Eprivate.h \
- H5Epublic.h \
- H5MFprivate.h \
- H5MFpublic.h \
- H5MMprivate.h \
- H5MMpublic.h \
- H5Oprivate.h \
- H5Opublic.h \
- H5Gprivate.h \
- H5Gpublic.h \
- H5Bprivate.h \
- H5Bpublic.h \
- H5HGprivate.h \
- H5HGpublic.h \
- H5Tprivate.h \
- H5Tpublic.h \
- H5Sprivate.h
H5Oattr.o: \
H5Oattr.c \
H5private.h \
@@ -668,8 +363,8 @@ H5Olayout.o: \
H5Sprivate.h \
H5Spublic.h \
H5Zprivate.h
-H5Omtime.o: \
- H5Omtime.c \
+H5Oname.o: \
+ H5Oname.c \
H5private.h \
H5public.h \
H5config.h \
@@ -691,8 +386,49 @@ H5Omtime.o: \
H5HGpublic.h \
H5Tprivate.h \
H5Tpublic.h
-H5Oname.o: \
- H5Oname.c \
+H5Onull.o: \
+ H5Onull.c \
+ H5private.h \
+ H5public.h \
+ H5config.h \
+ H5Oprivate.h \
+ H5Opublic.h \
+ H5Fprivate.h \
+ H5Fpublic.h \
+ H5Ipublic.h \
+ H5Dpublic.h \
+ H5Gprivate.h \
+ H5Gpublic.h \
+ H5Bprivate.h \
+ H5Bpublic.h \
+ H5HGprivate.h \
+ H5HGpublic.h \
+ H5Tprivate.h
+H5Osdspace.o: \
+ H5Osdspace.c \
+ H5private.h \
+ H5public.h \
+ H5config.h \
+ H5Eprivate.h \
+ H5Epublic.h \
+ H5Ipublic.h \
+ H5Gprivate.h \
+ H5Gpublic.h \
+ H5Bprivate.h \
+ H5Bpublic.h \
+ H5Fprivate.h \
+ H5Fpublic.h \
+ H5Dpublic.h \
+ H5MMprivate.h \
+ H5MMpublic.h \
+ H5Oprivate.h \
+ H5Opublic.h \
+ H5HGprivate.h \
+ H5HGpublic.h \
+ H5Tprivate.h \
+ H5Tpublic.h
+H5Oshared.o: \
+ H5Oshared.c \
H5private.h \
H5public.h \
H5config.h \
@@ -714,49 +450,198 @@ H5Oname.o: \
H5HGpublic.h \
H5Tprivate.h \
H5Tpublic.h
-H5Onull.o: \
- H5Onull.c \
+H5Ostab.o: \
+ H5Ostab.c \
H5private.h \
H5public.h \
H5config.h \
- H5Oprivate.h \
- H5Opublic.h \
+ H5Eprivate.h \
+ H5Epublic.h \
+ H5Ipublic.h \
+ H5Gprivate.h \
+ H5Gpublic.h \
+ H5Bprivate.h \
+ H5Bpublic.h \
H5Fprivate.h \
H5Fpublic.h \
- H5Ipublic.h \
H5Dpublic.h \
+ H5MMprivate.h \
+ H5MMpublic.h \
+ H5Oprivate.h \
+ H5Opublic.h \
+ H5HGprivate.h \
+ H5HGpublic.h \
+ H5Tprivate.h \
+ H5Tpublic.h
+H5Sall.o: \
+ H5Sall.c \
+ H5private.h \
+ H5public.h \
+ H5config.h \
+ H5Eprivate.h \
+ H5Epublic.h \
+ H5Ipublic.h \
+ H5Sprivate.h \
+ H5Spublic.h \
H5Gprivate.h \
H5Gpublic.h \
H5Bprivate.h \
H5Bpublic.h \
+ H5Fprivate.h \
+ H5Fpublic.h \
+ H5Dpublic.h \
+ H5Oprivate.h \
+ H5Opublic.h \
+ H5HGprivate.h \
+ H5HGpublic.h \
+ H5Tprivate.h \
+ H5Tpublic.h
+H5Tbit.o: \
+ H5Tbit.c \
+ H5private.h \
+ H5public.h \
+ H5config.h \
+ H5Eprivate.h \
+ H5Epublic.h \
+ H5Ipublic.h \
+ H5Iprivate.h \
+ H5Tpkg.h \
+ H5HGprivate.h \
+ H5HGpublic.h \
+ H5Fprivate.h \
+ H5Fpublic.h \
+ H5Dpublic.h \
+ H5Tprivate.h \
+ H5Tpublic.h \
+ H5Gprivate.h
+H5Tinit.o: \
+ H5Tinit.c \
+ H5private.h \
+ H5public.h \
+ H5config.h \
+ H5Iprivate.h \
+ H5Ipublic.h \
+ H5Eprivate.h \
+ H5Epublic.h \
+ H5MMprivate.h \
+ H5MMpublic.h \
+ H5Tpkg.h \
H5HGprivate.h \
H5HGpublic.h \
+ H5Fprivate.h \
+ H5Fpublic.h \
+ H5Dpublic.h \
H5Tprivate.h
-H5Osdspace.o: \
- H5Osdspace.c \
+H5V.o: \
+ H5V.c \
H5private.h \
H5public.h \
H5config.h \
H5Eprivate.h \
H5Epublic.h \
H5Ipublic.h \
+ H5Oprivate.h \
+ H5Opublic.h \
+ H5Fprivate.h \
+ H5Fpublic.h \
+ H5Dpublic.h \
H5Gprivate.h \
H5Gpublic.h \
H5Bprivate.h \
H5Bpublic.h \
+ H5HGprivate.h \
+ H5HGpublic.h \
+ H5Tprivate.h \
+ H5Tpublic.h \
+ H5Sprivate.h \
+ H5Spublic.h
+H5AC.o: \
+ H5AC.c \
+ H5private.h \
+ H5public.h \
+ H5config.h \
+ H5ACprivate.h \
+ H5ACpublic.h \
H5Fprivate.h \
H5Fpublic.h \
+ H5Ipublic.h \
H5Dpublic.h \
+ H5Eprivate.h \
+ H5Epublic.h
+H5B.o: \
+ H5B.c \
+ H5private.h \
+ H5public.h \
+ H5config.h \
+ H5ACprivate.h \
+ H5ACpublic.h \
+ H5Fprivate.h \
+ H5Fpublic.h \
+ H5Ipublic.h \
+ H5Dpublic.h \
+ H5Bprivate.h \
+ H5Bpublic.h \
+ H5Eprivate.h \
+ H5Epublic.h \
+ H5MFprivate.h \
+ H5MFpublic.h \
+ H5MMprivate.h
+H5Ffamily.o: \
+ H5Ffamily.c \
+ H5private.h \
+ H5public.h \
+ H5config.h \
+ H5Eprivate.h \
+ H5Epublic.h \
+ H5Ipublic.h
+H5HL.o: \
+ H5HL.c \
+ H5private.h \
+ H5public.h \
+ H5config.h \
+ H5ACprivate.h \
+ H5ACpublic.h \
+ H5Fprivate.h \
+ H5Fpublic.h \
+ H5Ipublic.h \
+ H5Dpublic.h \
+ H5Eprivate.h \
+ H5Epublic.h \
+ H5HLprivate.h \
+ H5HLpublic.h \
+ H5MFprivate.h \
+ H5MFpublic.h \
+ H5MMprivate.h
+H5O.o: \
+ H5O.c \
+ H5private.h \
+ H5public.h \
+ H5config.h \
+ H5ACprivate.h \
+ H5ACpublic.h \
+ H5Fprivate.h \
+ H5Fpublic.h \
+ H5Ipublic.h \
+ H5Dpublic.h \
+ H5Eprivate.h \
+ H5Epublic.h \
+ H5MFprivate.h \
+ H5MFpublic.h \
H5MMprivate.h \
H5MMpublic.h \
H5Oprivate.h \
H5Opublic.h \
+ H5Gprivate.h \
+ H5Gpublic.h \
+ H5Bprivate.h \
+ H5Bpublic.h \
H5HGprivate.h \
H5HGpublic.h \
H5Tprivate.h \
- H5Tpublic.h
-H5Oshared.o: \
- H5Oshared.c \
+ H5Tpublic.h \
+ H5Sprivate.h
+H5Omtime.o: \
+ H5Omtime.c \
H5private.h \
H5public.h \
H5config.h \
@@ -778,31 +663,67 @@ H5Oshared.o: \
H5HGpublic.h \
H5Tprivate.h \
H5Tpublic.h
-H5Ostab.o: \
- H5Ostab.c \
+H5Fistore.o: \
+ H5Fistore.c \
H5private.h \
H5public.h \
H5config.h \
- H5Eprivate.h \
- H5Epublic.h \
+ H5Dprivate.h \
+ H5Dpublic.h \
H5Ipublic.h \
+ H5Fprivate.h \
+ H5Fpublic.h \
H5Gprivate.h \
H5Gpublic.h \
H5Bprivate.h \
H5Bpublic.h \
+ H5Oprivate.h \
+ H5Opublic.h \
+ H5HGprivate.h \
+ H5HGpublic.h \
+ H5Tprivate.h \
+ H5Tpublic.h \
+ H5Sprivate.h \
+ H5Spublic.h \
+ H5Zprivate.h \
+ H5Zpublic.h \
+ H5Eprivate.h \
+ H5Epublic.h \
+ H5MFprivate.h \
+ H5MFpublic.h
+H5.o: \
+ H5.c \
+ H5private.h \
+ H5public.h \
+ H5config.h \
+ H5ACprivate.h \
+ H5ACpublic.h \
H5Fprivate.h \
H5Fpublic.h \
+ H5Ipublic.h \
H5Dpublic.h \
+ H5Bprivate.h \
+ H5Bpublic.h \
+ H5Eprivate.h \
+ H5Epublic.h \
+ H5Iprivate.h \
H5MMprivate.h \
H5MMpublic.h \
+ H5Pprivate.h \
+ H5Ppublic.h \
+ H5Zpublic.h \
+ H5Sprivate.h \
+ H5Spublic.h \
+ H5Gprivate.h \
+ H5Gpublic.h \
H5Oprivate.h \
H5Opublic.h \
H5HGprivate.h \
H5HGpublic.h \
H5Tprivate.h \
H5Tpublic.h
-H5P.o: \
- H5P.c \
+H5A.o: \
+ H5A.c \
H5private.h \
H5public.h \
H5config.h \
@@ -828,53 +749,219 @@ H5P.o: \
H5Zpublic.h \
H5Eprivate.h \
H5Epublic.h \
- H5MMprivate.h
-H5S.o: \
- H5S.c \
+ H5MMprivate.h \
+ H5MMpublic.h \
+ H5Pprivate.h \
+ H5Ppublic.h \
+ H5Apkg.h \
+ H5Aprivate.h
+H5D.o: \
+ H5D.c \
H5private.h \
H5public.h \
H5config.h \
H5Iprivate.h \
H5Ipublic.h \
+ H5ACprivate.h \
+ H5ACpublic.h \
+ H5Fprivate.h \
+ H5Fpublic.h \
+ H5Dpublic.h \
+ H5Dprivate.h \
+ H5Gprivate.h \
+ H5Gpublic.h \
+ H5Bprivate.h \
+ H5Bpublic.h \
+ H5Oprivate.h \
+ H5Opublic.h \
+ H5HGprivate.h \
+ H5HGpublic.h \
+ H5Tprivate.h \
+ H5Tpublic.h \
+ H5Sprivate.h \
+ H5Spublic.h \
+ H5Zprivate.h \
+ H5Zpublic.h \
H5Eprivate.h \
H5Epublic.h \
- H5MMprivate.h \
- H5MMpublic.h \
+ H5HLprivate.h \
+ H5HLpublic.h \
+ H5MFprivate.h \
+ H5MFpublic.h
+H5E.o: \
+ H5E.c \
+ H5private.h \
+ H5public.h \
+ H5config.h \
+ H5Iprivate.h \
+ H5Ipublic.h \
+ H5Eprivate.h
+H5F.o: \
+ H5F.c \
+ H5private.h \
+ H5public.h \
+ H5config.h \
+ H5Aprivate.h \
+ H5Apublic.h \
+ H5Ipublic.h \
+ H5Gprivate.h \
+ H5Gpublic.h \
+ H5Bprivate.h \
+ H5Bpublic.h \
+ H5Fprivate.h \
+ H5Fpublic.h \
+ H5Dpublic.h \
+ H5Dprivate.h \
H5Oprivate.h \
H5Opublic.h \
+ H5HGprivate.h \
+ H5HGpublic.h \
+ H5Tprivate.h \
+ H5Tpublic.h \
+ H5Sprivate.h \
+ H5Spublic.h \
+ H5Zprivate.h \
+ H5Zpublic.h \
+ H5Iprivate.h \
+ H5ACprivate.h \
+ H5ACpublic.h \
+ H5Eprivate.h \
+ H5Epublic.h \
+ H5MMprivate.h \
+ H5MMpublic.h
+H5Flow.o: \
+ H5Flow.c \
+ H5private.h \
+ H5public.h \
+ H5config.h \
+ H5Eprivate.h \
+ H5Epublic.h \
+ H5Ipublic.h \
H5Fprivate.h \
H5Fpublic.h \
H5Dpublic.h \
- H5Gprivate.h \
- H5Gpublic.h \
+ H5MMprivate.h \
+ H5MMpublic.h
+H5G.o: \
+ H5G.c \
+ H5private.h \
+ H5public.h \
+ H5config.h \
H5Bprivate.h \
H5Bpublic.h \
+ H5Fprivate.h \
+ H5Fpublic.h \
+ H5Ipublic.h \
+ H5Dpublic.h \
+ H5Dprivate.h \
+ H5Gprivate.h \
+ H5Gpublic.h \
+ H5Oprivate.h \
+ H5Opublic.h \
H5HGprivate.h \
H5HGpublic.h \
- H5Tprivate.h
-H5Sall.o: \
- H5Sall.c \
+ H5Tprivate.h \
+ H5Tpublic.h \
+ H5Sprivate.h \
+ H5Spublic.h \
+ H5Zprivate.h \
+ H5Zpublic.h \
+ H5Eprivate.h \
+ H5Epublic.h \
+ H5Gpkg.h \
+ H5ACprivate.h \
+ H5ACpublic.h \
+ H5HLprivate.h \
+ H5HLpublic.h \
+ H5Iprivate.h \
+ H5MMprivate.h
+H5MF.o: \
+ H5MF.c \
H5private.h \
H5public.h \
H5config.h \
H5Eprivate.h \
H5Epublic.h \
+ H5Ipublic.h
+H5P.o: \
+ H5P.c \
+ H5private.h \
+ H5public.h \
+ H5config.h \
+ H5Iprivate.h \
H5Ipublic.h \
+ H5Bprivate.h \
+ H5Bpublic.h \
+ H5Fprivate.h \
+ H5Fpublic.h \
+ H5Dpublic.h \
+ H5Dprivate.h \
+ H5Gprivate.h \
+ H5Gpublic.h \
+ H5Oprivate.h \
+ H5Opublic.h \
+ H5HGprivate.h \
+ H5HGpublic.h \
+ H5Tprivate.h \
+ H5Tpublic.h \
H5Sprivate.h \
H5Spublic.h \
+ H5Zprivate.h \
+ H5Zpublic.h \
+ H5Eprivate.h \
+ H5Epublic.h \
+ H5MMprivate.h
+H5R.o: \
+ H5R.c \
+ H5Rprivate.h \
+ H5Rpublic.h \
+ H5Ipublic.h \
+ H5public.h \
+ H5config.h \
+ H5Dprivate.h \
+ H5Dpublic.h \
+ H5private.h \
+ H5Fprivate.h \
+ H5Fpublic.h \
H5Gprivate.h \
H5Gpublic.h \
H5Bprivate.h \
H5Bpublic.h \
- H5Fprivate.h \
- H5Fpublic.h \
- H5Dpublic.h \
H5Oprivate.h \
H5Opublic.h \
H5HGprivate.h \
H5HGpublic.h \
H5Tprivate.h \
- H5Tpublic.h
+ H5Tpublic.h \
+ H5Sprivate.h \
+ H5Spublic.h \
+ H5Zprivate.h \
+ H5Zpublic.h \
+ H5Eprivate.h \
+ H5Epublic.h
+H5S.o: \
+ H5S.c \
+ H5private.h \
+ H5public.h \
+ H5config.h \
+ H5Iprivate.h \
+ H5Ipublic.h \
+ H5Eprivate.h \
+ H5Epublic.h \
+ H5MMprivate.h \
+ H5MMpublic.h \
+ H5Oprivate.h \
+ H5Opublic.h \
+ H5Fprivate.h \
+ H5Fpublic.h \
+ H5Dpublic.h \
+ H5Gprivate.h \
+ H5Gpublic.h \
+ H5Bprivate.h \
+ H5Bpublic.h \
+ H5HGprivate.h \
+ H5HGpublic.h \
+ H5Tprivate.h
H5Shyper.o: \
H5Shyper.c \
H5private.h \
@@ -1000,24 +1087,6 @@ H5T.o: \
H5Eprivate.h \
H5Epublic.h \
H5MMprivate.h
-H5Tbit.o: \
- H5Tbit.c \
- H5private.h \
- H5public.h \
- H5config.h \
- H5Eprivate.h \
- H5Epublic.h \
- H5Ipublic.h \
- H5Iprivate.h \
- H5Tpkg.h \
- H5HGprivate.h \
- H5HGpublic.h \
- H5Fprivate.h \
- H5Fpublic.h \
- H5Dpublic.h \
- H5Tprivate.h \
- H5Tpublic.h \
- H5Gprivate.h
H5Tconv.o: \
H5Tconv.c \
H5Iprivate.h \
@@ -1041,24 +1110,6 @@ H5Tconv.o: \
H5Gpublic.h \
H5Bprivate.h \
H5Bpublic.h
-H5Tinit.o: \
- H5Tinit.c \
- H5private.h \
- H5public.h \
- H5config.h \
- H5Iprivate.h \
- H5Ipublic.h \
- H5Eprivate.h \
- H5Epublic.h \
- H5MMprivate.h \
- H5MMpublic.h \
- H5Tpkg.h \
- H5HGprivate.h \
- H5HGpublic.h \
- H5Fprivate.h \
- H5Fpublic.h \
- H5Dpublic.h \
- H5Tprivate.h
H5TB.o: \
H5TB.c \
H5private.h \
@@ -1067,29 +1118,6 @@ H5TB.o: \
H5Iprivate.h \
H5Ipublic.h \
H5Eprivate.h
-H5V.o: \
- H5V.c \
- H5private.h \
- H5public.h \
- H5config.h \
- H5Eprivate.h \
- H5Epublic.h \
- H5Ipublic.h \
- H5Oprivate.h \
- H5Opublic.h \
- H5Fprivate.h \
- H5Fpublic.h \
- H5Dpublic.h \
- H5Gprivate.h \
- H5Gpublic.h \
- H5Bprivate.h \
- H5Bpublic.h \
- H5HGprivate.h \
- H5HGpublic.h \
- H5Tprivate.h \
- H5Tpublic.h \
- H5Sprivate.h \
- H5Spublic.h
H5Z.o: \
H5Z.c \
H5private.h \
diff --git a/src/H5.c b/src/H5.c
index 465cbb2..0db7f28 100644
--- a/src/H5.c
+++ b/src/H5.c
@@ -92,8 +92,6 @@ DESCRIPTION
herr_t
H5_init_library(void)
{
- const char *s = NULL;
-
FUNC_ENTER_INIT(H5_init_library, NULL, FAIL);
/*
@@ -349,7 +347,8 @@ H5_debug_mask(const char *s)
{
FILE *stream = stderr;
char pkg_name[32], *rest;
- int i, clear;
+ size_t i;
+ int clear;
while (s && *s) {
if (isalpha(*s) || '-'==*s || '+'==*s) {
@@ -1685,6 +1684,12 @@ H5_trace (hbool_t returning, const char *func, const char *type, ...)
fprintf(out, " (tbuf");
}
break;
+ case H5_RAGGED:
+ fprintf(out, "%ld", (long)obj);
+ if (strcmp(argname, "array")) {
+ fprintf(out, " (array)");
+ }
+ break;
default:
fprintf(out, "%ld", (long)obj);
fprintf (out, " (unknown class)");
@@ -2120,6 +2125,19 @@ H5_trace (hbool_t returning, const char *func, const char *type, ...)
if (ptr) {
if (vp) {
fprintf (out, "0x%lx", (unsigned long)vp);
+ if (asize_idx>=0 && asize[asize_idx]>=0) {
+ void **p = (void**)vp;
+ fprintf(out, " {");
+ for (i=0; i<asize[asize_idx]; i++) {
+ if (p[i]) {
+ fprintf(out, "%s0x%lx", i?", ":"",
+ (unsigned long)(p[i]));
+ } else {
+ fprintf(out, "%sNULL", i?", ":"");
+ }
+ }
+ fprintf(out, "}");
+ }
} else {
fprintf(out, "NULL");
}
diff --git a/src/H5A.c b/src/H5A.c
index 960f988..5142bae 100644
--- a/src/H5A.c
+++ b/src/H5A.c
@@ -150,7 +150,7 @@ H5A_term_interface(void)
*
--------------------------------------------------------------------------*/
hid_t
-H5Acreate (hid_t loc_id, const char *name, hid_t type_id, hid_t space_id,
+H5Acreate(hid_t loc_id, const char *name, hid_t type_id, hid_t space_id,
hid_t plist_id)
{
void *obj = NULL;
@@ -397,7 +397,7 @@ H5A_get_index(H5G_entry_t *ent, const char *name)
* The LOC_ID can also be a named (committed) data type.
--------------------------------------------------------------------------*/
hid_t
-H5Aopen_name (hid_t loc_id, const char *name)
+H5Aopen_name(hid_t loc_id, const char *name)
{
H5G_entry_t *ent = NULL; /*Symtab entry of object to attribute*/
void *obj = NULL;
@@ -474,7 +474,7 @@ H5Aopen_name (hid_t loc_id, const char *name)
*
--------------------------------------------------------------------------*/
hid_t
-H5Aopen_idx (hid_t loc_id, unsigned idx)
+H5Aopen_idx(hid_t loc_id, unsigned idx)
{
H5G_entry_t *ent = NULL; /*Symtab entry of object to attribute */
void *obj = NULL;
@@ -595,7 +595,7 @@ done:
This function writes a complete attribute to disk.
--------------------------------------------------------------------------*/
herr_t
-H5Awrite (hid_t attr_id, hid_t type_id, void *buf)
+H5Awrite(hid_t attr_id, hid_t type_id, void *buf)
{
H5A_t *attr = NULL;
const H5T_t *mem_type = NULL;
@@ -766,7 +766,7 @@ done:
This function reads a complete attribute from disk.
--------------------------------------------------------------------------*/
herr_t
-H5Aread (hid_t attr_id, hid_t type_id, void *buf)
+H5Aread(hid_t attr_id, hid_t type_id, void *buf)
{
H5A_t *attr = NULL;
const H5T_t *mem_type = NULL;
@@ -921,7 +921,7 @@ done:
or resource leaks will develop.
--------------------------------------------------------------------------*/
hid_t
-H5Aget_space (hid_t attr_id)
+H5Aget_space(hid_t attr_id)
{
H5A_t *attr = NULL;
H5S_t *dst = NULL;
@@ -978,7 +978,7 @@ H5Aget_space (hid_t attr_id)
* then the data type is closed.
--------------------------------------------------------------------------*/
hid_t
-H5Aget_type (hid_t attr_id)
+H5Aget_type(hid_t attr_id)
{
H5A_t *attr = NULL;
H5T_t *dst = NULL;
@@ -1043,7 +1043,7 @@ H5Aget_type (hid_t attr_id)
properly terminate the string.
--------------------------------------------------------------------------*/
size_t
-H5Aget_name (hid_t attr_id, size_t buf_size, char *buf)
+H5Aget_name(hid_t attr_id, size_t buf_size, char *buf)
{
H5A_t *attr = NULL;
size_t copy_len=0;
@@ -1099,7 +1099,7 @@ H5Aget_name (hid_t attr_id, size_t buf_size, char *buf)
* The LOC_ID can also be a named (committed) data type.
--------------------------------------------------------------------------*/
int
-H5Anum_attrs (hid_t loc_id)
+H5Anum_attrs(hid_t loc_id)
{
H5G_entry_t *ent = NULL; /*symtab ent of object to attribute */
void *obj = NULL;
@@ -1184,7 +1184,7 @@ H5Anum_attrs (hid_t loc_id)
*
--------------------------------------------------------------------------*/
int
-H5Aiterate (hid_t loc_id, unsigned *attr_num, H5A_operator_t op, void *op_data)
+H5Aiterate(hid_t loc_id, unsigned *attr_num, H5A_operator_t op, void *op_data)
{
H5G_entry_t *ent = NULL; /*symtab ent of object to attribute */
void *obj = NULL;
@@ -1272,7 +1272,7 @@ H5Aiterate (hid_t loc_id, unsigned *attr_num, H5A_operator_t op, void *op_data)
*
--------------------------------------------------------------------------*/
herr_t
-H5Adelete (hid_t loc_id, const char *name)
+H5Adelete(hid_t loc_id, const char *name)
{
H5A_t found_attr;
H5G_entry_t *ent = NULL; /*symtab ent of object to attribute */
@@ -1356,7 +1356,7 @@ H5Adelete (hid_t loc_id, const char *name)
attribute ID will result in undefined behavior.
--------------------------------------------------------------------------*/
herr_t
-H5Aclose (hid_t attr_id)
+H5Aclose(hid_t attr_id)
{
FUNC_ENTER(H5Aclose, FAIL);
H5TRACE1("e","i",attr_id);
diff --git a/src/H5D.c b/src/H5D.c
index c1f5eca..d9d0b78 100644
--- a/src/H5D.c
+++ b/src/H5D.c
@@ -178,7 +178,7 @@ H5D_term_interface(void)
*-------------------------------------------------------------------------
*/
hid_t
-H5Dcreate (hid_t loc_id, const char *name, hid_t type_id, hid_t space_id,
+H5Dcreate(hid_t loc_id, const char *name, hid_t type_id, hid_t space_id,
hid_t plist_id)
{
H5G_t *loc = NULL;
@@ -206,14 +206,12 @@ H5Dcreate (hid_t loc_id, const char *name, hid_t type_id, hid_t space_id,
NULL == (space = H5I_object(space_id))) {
HRETURN_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a data space");
}
- if (plist_id >= 0) {
- if (H5P_DATASET_CREATE != H5P_get_class(plist_id) ||
- NULL == (create_parms = H5I_object(plist_id))) {
- HRETURN_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL,
- "not a dataset creation property list");
- }
- } else {
+ if (H5P_DEFAULT==plist_id) {
create_parms = &H5D_create_dflt;
+ } else if (H5P_DATASET_CREATE != H5P_get_class(plist_id) ||
+ NULL == (create_parms = H5I_object(plist_id))) {
+ HRETURN_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL,
+ "not a dataset creation property list");
}
/* build and open the new dataset */
@@ -222,7 +220,7 @@ H5Dcreate (hid_t loc_id, const char *name, hid_t type_id, hid_t space_id,
HRETURN_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL,
"unable to create dataset");
}
- /* Register the new datatype and get an ID for it */
+ /* Register the new dataset to get an ID for it */
if ((ret_value = H5I_register(H5_DATASET, new_dset)) < 0) {
H5D_close(new_dset);
HRETURN_ERROR(H5E_DATASET, H5E_CANTREGISTER, FAIL,
@@ -253,7 +251,7 @@ H5Dcreate (hid_t loc_id, const char *name, hid_t type_id, hid_t space_id,
*-------------------------------------------------------------------------
*/
hid_t
-H5Dopen (hid_t loc_id, const char *name)
+H5Dopen(hid_t loc_id, const char *name)
{
H5G_t *loc = NULL; /*location holding the dataset */
H5D_t *dataset = NULL; /*the dataset */
@@ -307,7 +305,7 @@ H5Dopen (hid_t loc_id, const char *name)
*-------------------------------------------------------------------------
*/
herr_t
-H5Dclose (hid_t dset_id)
+H5Dclose(hid_t dset_id)
{
H5D_t *dset = NULL; /* dataset object to release */
@@ -351,7 +349,7 @@ H5Dclose (hid_t dset_id)
*-------------------------------------------------------------------------
*/
hid_t
-H5Dget_space (hid_t dset_id)
+H5Dget_space(hid_t dset_id)
{
H5D_t *dset = NULL;
H5S_t *space = NULL;
@@ -367,9 +365,9 @@ H5Dget_space (hid_t dset_id)
}
/* Read the data space message and return a data space object */
- if (NULL==(space=H5S_read (&(dset->ent)))) {
+ if (NULL==(space=H5D_get_space (dset))) {
HRETURN_ERROR (H5E_DATASET, H5E_CANTINIT, FAIL,
- "unable to load space info from dataset header");
+ "unable to get data space");
}
/* Create an atom */
@@ -384,6 +382,39 @@ H5Dget_space (hid_t dset_id)
/*-------------------------------------------------------------------------
+ * Function: H5D_get_space
+ *
+ * Purpose: Returns the data space associated with the dataset.
+ *
+ * Return: Success: Ptr to a copy of the data space.
+ *
+ * Failure: NULL
+ *
+ * Programmer: Robb Matzke
+ * Tuesday, August 25, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+H5S_t *
+H5D_get_space(H5D_t *dset)
+{
+ H5S_t *space = NULL;
+
+ FUNC_ENTER(H5D_get_space, NULL);
+ assert(dset);
+
+ if (NULL==(space=H5S_read(&(dset->ent)))) {
+ HRETURN_ERROR(H5E_DATASET, H5E_CANTINIT, NULL,
+ "unable to load space info from dataset header");
+ }
+
+ FUNC_LEAVE(space);
+}
+
+
+/*-------------------------------------------------------------------------
* Function: H5Dget_type
*
* Purpose: Returns a copy of the file data type for a dataset.
@@ -407,7 +438,7 @@ H5Dget_space (hid_t dset_id)
*-------------------------------------------------------------------------
*/
hid_t
-H5Dget_type (hid_t dset_id)
+H5Dget_type(hid_t dset_id)
{
H5D_t *dset = NULL;
@@ -464,7 +495,7 @@ H5Dget_type (hid_t dset_id)
*-------------------------------------------------------------------------
*/
hid_t
-H5Dget_create_plist (hid_t dset_id)
+H5Dget_create_plist(hid_t dset_id)
{
H5D_t *dset = NULL;
H5D_create_t *copied_parms = NULL;
@@ -540,7 +571,7 @@ H5Dget_create_plist (hid_t dset_id)
*-------------------------------------------------------------------------
*/
herr_t
-H5Dread (hid_t dset_id, hid_t mem_type_id, hid_t mem_space_id,
+H5Dread(hid_t dset_id, hid_t mem_type_id, hid_t mem_space_id,
hid_t file_space_id, hid_t plist_id, void *buf/*out*/)
{
H5D_t *dset = NULL;
@@ -641,7 +672,7 @@ H5Dread (hid_t dset_id, hid_t mem_type_id, hid_t mem_space_id,
*-------------------------------------------------------------------------
*/
herr_t
-H5Dwrite (hid_t dset_id, hid_t mem_type_id, hid_t mem_space_id,
+H5Dwrite(hid_t dset_id, hid_t mem_type_id, hid_t mem_space_id,
hid_t file_space_id, hid_t plist_id, const void *buf)
{
H5D_t *dset = NULL;
@@ -723,7 +754,7 @@ H5Dwrite (hid_t dset_id, hid_t mem_type_id, hid_t mem_space_id,
*-------------------------------------------------------------------------
*/
herr_t
-H5Dextend (hid_t dset_id, const hsize_t *size)
+H5Dextend(hid_t dset_id, const hsize_t *size)
{
H5D_t *dset = NULL;
diff --git a/src/H5Distore.c b/src/H5Distore.c
index e94e627..6f758a8 100644
--- a/src/H5Distore.c
+++ b/src/H5Distore.c
@@ -508,7 +508,8 @@ H5F_istore_found(H5F_t __unused__ *f, const haddr_t *addr,
/* Is this *really* the requested chunk? */
for (i=0; i<udata->mesg.ndims; i++) {
- if (udata->key.offset[i]>=lt_key->offset[i]+udata->mesg.dim[i]) {
+ if (udata->key.offset[i] >=
+ lt_key->offset[i]+(hssize_t)(udata->mesg.dim[i])) {
HRETURN(FAIL);
}
}
@@ -1961,8 +1962,11 @@ H5F_istore_allocate (H5F_t *f, const H5O_layout_t *layout,
/* Increment indices */
for (i=layout->ndims-1, carry=1; i>=0 && carry; --i) {
chunk_offset[i] += layout->dim[i];
- if (chunk_offset[i] >= space_dim[i]) chunk_offset[i] = 0;
- else carry = 0;
+ if (chunk_offset[i] >= (hssize_t)(space_dim[i])) {
+ chunk_offset[i] = 0;
+ } else {
+ carry = 0;
+ }
}
if (carry) break;
}
diff --git a/src/H5Dprivate.h b/src/H5Dprivate.h
index b5f2d26..4462e80 100644
--- a/src/H5Dprivate.h
+++ b/src/H5Dprivate.h
@@ -77,5 +77,6 @@ hid_t H5D_find_name (hid_t file_id, H5I_group_t UNUSED, const char *name);
herr_t H5D_extend (H5D_t *dataset, const hsize_t *size);
H5G_entry_t *H5D_entof (H5D_t *dataset);
H5T_t *H5D_typeof (H5D_t *dset);
+H5S_t *H5D_get_space(H5D_t *dset);
#endif
diff --git a/src/H5E.c b/src/H5E.c
index 87de26c..54317f5 100644
--- a/src/H5E.c
+++ b/src/H5E.c
@@ -57,6 +57,7 @@ static const H5E_major_mesg_t H5E_major_mesg_g[] = {
{H5E_ATTR, "Attribute layer"},
{H5E_PLINE, "Data filters layer"},
{H5E_EFL, "External file list"},
+ {H5E_RAGGED, "Ragged array layer"},
};
static const H5E_minor_mesg_t H5E_minor_mesg_g[] = {
@@ -157,7 +158,7 @@ void *H5E_auto_data_g = stderr;
*-------------------------------------------------------------------------
*/
herr_t
-H5Eset_auto (H5E_auto_t func, void *client_data)
+H5Eset_auto(H5E_auto_t func, void *client_data)
{
FUNC_ENTER (H5Eset_auto, FAIL);
H5TRACE2("e","xx",func,client_data);
@@ -188,7 +189,7 @@ H5Eset_auto (H5E_auto_t func, void *client_data)
*-------------------------------------------------------------------------
*/
herr_t
-H5Eget_auto (H5E_auto_t *func, void **client_data)
+H5Eget_auto(H5E_auto_t *func, void **client_data)
{
FUNC_ENTER (H5Eget_auto, FAIL);
H5TRACE2("e","*x*x",func,client_data);
@@ -219,7 +220,7 @@ H5Eget_auto (H5E_auto_t *func, void **client_data)
*-------------------------------------------------------------------------
*/
herr_t
-H5Eclear (void)
+H5Eclear(void)
{
FUNC_ENTER (H5Eclear, FAIL);
H5TRACE0("e","");
@@ -248,7 +249,7 @@ H5Eclear (void)
*-------------------------------------------------------------------------
*/
herr_t
-H5Eprint (FILE *stream)
+H5Eprint(FILE *stream)
{
H5E_t *estack = H5E_get_my_stack ();
hbool_t H5E_clearable_g = FALSE; /*override global*/
@@ -286,7 +287,7 @@ H5Eprint (FILE *stream)
*-------------------------------------------------------------------------
*/
herr_t
-H5Ewalk (H5E_direction_t direction, H5E_walk_t func, void *client_data)
+H5Ewalk(H5E_direction_t direction, H5E_walk_t func, void *client_data)
{
hbool_t H5E_clearable_g = FALSE; /*override global*/
herr_t status = FAIL;
@@ -334,7 +335,7 @@ H5Ewalk (H5E_direction_t direction, H5E_walk_t func, void *client_data)
*-------------------------------------------------------------------------
*/
herr_t
-H5Ewalk_cb (int n, H5E_error_t *err_desc, void *client_data)
+H5Ewalk_cb(int n, H5E_error_t *err_desc, void *client_data)
{
FILE *stream = (FILE *)client_data;
const char *maj_str = NULL;
diff --git a/src/H5Epublic.h b/src/H5Epublic.h
index 64f0ff4..43db4b3 100644
--- a/src/H5Epublic.h
+++ b/src/H5Epublic.h
@@ -73,7 +73,8 @@ typedef enum H5E_major_t {
H5E_TEMPLATE, /*Property lists */
H5E_ATTR, /*Attribute */
H5E_PLINE, /*Data filters */
- H5E_EFL /*External file list */
+ H5E_EFL, /*External file list */
+ H5E_RAGGED /*Ragged arrays */
} H5E_major_t;
/* Declare an enumerated type which holds all the valid minor HDF error codes */
diff --git a/src/H5F.c b/src/H5F.c
index fe04b9d..f6492b1 100644
--- a/src/H5F.c
+++ b/src/H5F.c
@@ -260,7 +260,7 @@ H5F_encode_length_unusual(const H5F_t *f, uint8 **p, uint8 *l)
*-------------------------------------------------------------------------
*/
hid_t
-H5Fget_create_template (hid_t file_id)
+H5Fget_create_template(hid_t file_id)
{
H5F_t *file = NULL;
hid_t ret_value = FAIL;
@@ -311,7 +311,7 @@ H5Fget_create_template (hid_t file_id)
*-------------------------------------------------------------------------
*/
hid_t
-H5Fget_access_template (hid_t file_id)
+H5Fget_access_template(hid_t file_id)
{
H5F_t *f = NULL;
H5F_access_t *tmpl = NULL;
@@ -444,7 +444,7 @@ H5F_locate_signature(H5F_low_t *f_handle, const H5F_access_t *access_parms,
This function determines if a file is an HDF5 format file.
--------------------------------------------------------------------------*/
hbool_t
-H5Fis_hdf5 (const char *filename)
+H5Fis_hdf5(const char *filename)
{
H5F_low_t *f_handle = NULL; /* file handle */
haddr_t addr; /* Address of file signature & header */
@@ -1135,7 +1135,7 @@ H5F_open(const char *name, uintn flags,
*-------------------------------------------------------------------------
*/
hid_t
-H5Fcreate (const char *filename, unsigned flags, hid_t create_id,
+H5Fcreate(const char *filename, unsigned flags, hid_t create_id,
hid_t access_id)
{
@@ -1249,7 +1249,7 @@ H5Fcreate (const char *filename, unsigned flags, hid_t create_id,
*-------------------------------------------------------------------------
*/
hid_t
-H5Fopen (const char *filename, unsigned flags, hid_t access_id)
+H5Fopen(const char *filename, unsigned flags, hid_t access_id)
{
H5F_t *new_file = NULL; /* file struct for new file */
const H5F_access_t *access_parms; /* pointer to the file access
@@ -1317,7 +1317,7 @@ H5Fopen (const char *filename, unsigned flags, hid_t access_id)
*-------------------------------------------------------------------------
*/
herr_t
-H5Fflush (hid_t object_id)
+H5Fflush(hid_t object_id)
{
H5F_t *f = NULL;
H5G_t *grp = NULL;
@@ -1612,7 +1612,7 @@ H5F_close(H5F_t *f)
changed.
--------------------------------------------------------------------------*/
herr_t
-H5Fclose (hid_t file_id)
+H5Fclose(hid_t file_id)
{
herr_t ret_value = SUCCEED;
diff --git a/src/H5Fistore.c b/src/H5Fistore.c
index e94e627..6f758a8 100644
--- a/src/H5Fistore.c
+++ b/src/H5Fistore.c
@@ -508,7 +508,8 @@ H5F_istore_found(H5F_t __unused__ *f, const haddr_t *addr,
/* Is this *really* the requested chunk? */
for (i=0; i<udata->mesg.ndims; i++) {
- if (udata->key.offset[i]>=lt_key->offset[i]+udata->mesg.dim[i]) {
+ if (udata->key.offset[i] >=
+ lt_key->offset[i]+(hssize_t)(udata->mesg.dim[i])) {
HRETURN(FAIL);
}
}
@@ -1961,8 +1962,11 @@ H5F_istore_allocate (H5F_t *f, const H5O_layout_t *layout,
/* Increment indices */
for (i=layout->ndims-1, carry=1; i>=0 && carry; --i) {
chunk_offset[i] += layout->dim[i];
- if (chunk_offset[i] >= space_dim[i]) chunk_offset[i] = 0;
- else carry = 0;
+ if (chunk_offset[i] >= (hssize_t)(space_dim[i])) {
+ chunk_offset[i] = 0;
+ } else {
+ carry = 0;
+ }
}
if (carry) break;
}
diff --git a/src/H5Flow.c b/src/H5Flow.c
index 7fd81a9..eec5714 100644
--- a/src/H5Flow.c
+++ b/src/H5Flow.c
@@ -282,7 +282,7 @@ H5F_low_write(H5F_low_t *lf, const H5F_access_t *access_parms,
haddr_t tmp_addr;
#ifdef HAVE_PARALLEL
- int use_types;
+ int use_types=0;
#endif
FUNC_ENTER(H5F_low_write, FAIL);
@@ -293,8 +293,8 @@ H5F_low_write(H5F_low_t *lf, const H5F_access_t *access_parms,
/* check for writing past the end of file marker */
#ifdef HAVE_PARALLEL
- if (H5F_LOW_MPIO==access_parms->driver
- && access_parms->u.mpio.use_types) {
+ if (H5F_LOW_MPIO==access_parms->driver &&
+ access_parms->u.mpio.use_types) {
/* In the case of fancy use of MPI datatypes, the addr and size
* parameters have a very peculiar interpretation.
* It is logically possible, but quite complex, to calculate
@@ -335,11 +335,11 @@ H5F_low_write(H5F_low_t *lf, const H5F_access_t *access_parms,
if (H5F_LOW_MPIO==access_parms->driver && use_types) {
/* set logical eof to current physical eof
* (ephemeral though it may be...) */
- MPI_Offset size;
- if (MPI_SUCCESS != MPI_File_get_size(lf->u.mpio.f,&size)) {
- HRETURN_ERROR(H5E_IO, H5E_MPI, NULL, "couldn't get file size" );
+ MPI_Offset mpi_offset_size;
+ if (MPI_SUCCESS != MPI_File_get_size(lf->u.mpio.f,&mpi_offset_size)) {
+ HRETURN_ERROR(H5E_IO, H5E_MPI, FAIL, "couldn't get file size" );
}
- lf->eof.offset = size;
+ lf->eof.offset = mpi_offset_size;
}
#endif
diff --git a/src/H5G.c b/src/H5G.c
index 77bf223..62cbd42 100644
--- a/src/H5G.c
+++ b/src/H5G.c
@@ -125,7 +125,7 @@ static void H5G_term_interface(void);
*-------------------------------------------------------------------------
*/
hid_t
-H5Gcreate (hid_t loc_id, const char *name, size_t size_hint)
+H5Gcreate(hid_t loc_id, const char *name, size_t size_hint)
{
H5G_t *loc = NULL;
H5G_t *grp = NULL;
@@ -175,7 +175,7 @@ H5Gcreate (hid_t loc_id, const char *name, size_t size_hint)
*-------------------------------------------------------------------------
*/
hid_t
-H5Gopen (hid_t loc_id, const char *name)
+H5Gopen(hid_t loc_id, const char *name)
{
hid_t ret_value = FAIL;
H5G_t *grp = NULL;
@@ -224,7 +224,7 @@ H5Gopen (hid_t loc_id, const char *name)
*-------------------------------------------------------------------------
*/
herr_t
-H5Gclose (hid_t group_id)
+H5Gclose(hid_t group_id)
{
FUNC_ENTER(H5Gclose, FAIL);
H5TRACE1("e","i",group_id);
@@ -275,7 +275,7 @@ H5Gclose (hid_t group_id)
*-------------------------------------------------------------------------
*/
herr_t
-H5Gset (hid_t loc_id, const char *name)
+H5Gset(hid_t loc_id, const char *name)
{
H5G_t *grp = NULL;
H5G_t *loc = NULL;
@@ -336,7 +336,7 @@ H5Gset (hid_t loc_id, const char *name)
*-------------------------------------------------------------------------
*/
herr_t
-H5Gpush (hid_t loc_id, const char *name)
+H5Gpush(hid_t loc_id, const char *name)
{
H5G_t *grp = NULL;
H5G_t *loc = NULL;
@@ -401,7 +401,7 @@ H5Gpush (hid_t loc_id, const char *name)
*-------------------------------------------------------------------------
*/
herr_t
-H5Gpop (hid_t loc_id)
+H5Gpop(hid_t loc_id)
{
H5G_t *loc = NULL;
@@ -449,7 +449,7 @@ H5Gpop (hid_t loc_id)
*-------------------------------------------------------------------------
*/
herr_t
-H5Giterate (hid_t loc_id, const char *name, int *idx,
+H5Giterate(hid_t loc_id, const char *name, int *idx,
H5G_iterate_t op, void *op_data)
{
int _idx = 0;
@@ -521,7 +521,7 @@ H5Giterate (hid_t loc_id, const char *name, int *idx,
*-------------------------------------------------------------------------
*/
herr_t
-H5Gmove (hid_t __unused__ loc_id, const char __unused__ *src,
+H5Gmove(hid_t __unused__ loc_id, const char __unused__ *src,
const char __unused__ *dst)
{
FUNC_ENTER (H5Gmove, FAIL);
@@ -563,7 +563,7 @@ H5Gmove (hid_t __unused__ loc_id, const char __unused__ *src,
*-------------------------------------------------------------------------
*/
herr_t
-H5Glink (hid_t loc_id, H5G_link_t type, const char *cur_name,
+H5Glink(hid_t loc_id, H5G_link_t type, const char *cur_name,
const char *new_name)
{
H5G_t *loc = NULL;
@@ -616,7 +616,7 @@ H5Glink (hid_t loc_id, H5G_link_t type, const char *cur_name,
*-------------------------------------------------------------------------
*/
herr_t
-H5Gunlink (hid_t __unused__ loc_id, const char __unused__ *name)
+H5Gunlink(hid_t __unused__ loc_id, const char __unused__ *name)
{
FUNC_ENTER (H5Gunlink, FAIL);
H5TRACE2("e","is",loc_id,name);
@@ -648,7 +648,7 @@ H5Gunlink (hid_t __unused__ loc_id, const char __unused__ *name)
*-------------------------------------------------------------------------
*/
herr_t
-H5Gstat (hid_t loc_id, const char *name, hbool_t follow_link,
+H5Gstat(hid_t loc_id, const char *name, hbool_t follow_link,
H5G_stat_t *statbuf/*out*/)
{
H5G_t *loc = NULL;
@@ -692,7 +692,7 @@ H5Gstat (hid_t loc_id, const char *name, hbool_t follow_link,
*-------------------------------------------------------------------------
*/
herr_t
-H5Gget_linkval (hid_t loc_id, const char *name, size_t size, char *buf/*out*/)
+H5Gget_linkval(hid_t loc_id, const char *name, size_t size, char *buf/*out*/)
{
H5G_t *loc = NULL;
@@ -737,7 +737,7 @@ H5Gget_linkval (hid_t loc_id, const char *name, size_t size, char *buf/*out*/)
*-------------------------------------------------------------------------
*/
herr_t
-H5Gset_comment (hid_t loc_id, const char *name, const char *comment)
+H5Gset_comment(hid_t loc_id, const char *name, const char *comment)
{
H5G_t *loc = NULL;
@@ -784,7 +784,7 @@ H5Gset_comment (hid_t loc_id, const char *name, const char *comment)
*-------------------------------------------------------------------------
*/
int
-H5Gget_comment (hid_t loc_id, const char *name, size_t bufsize, char *buf)
+H5Gget_comment(hid_t loc_id, const char *name, size_t bufsize, char *buf)
{
H5G_t *loc = NULL;
intn retval = FAIL;
diff --git a/src/H5Iprivate.h b/src/H5Iprivate.h
index 81c53d2..0cc0286 100644
--- a/src/H5Iprivate.h
+++ b/src/H5Iprivate.h
@@ -67,8 +67,9 @@
#define H5I_DATASETID_HASHSIZE 64
#define H5I_OID_HASHSIZE 64
#define H5I_GROUPID_HASHSIZE 64
-#define H5I_ATTRID_HASHSIZE 64
-#define H5I_TEMPBUFID_HASHSIZE 64
+#define H5I_ATTRID_HASHSIZE 64
+#define H5I_TEMPBUFID_HASHSIZE 64
+#define H5I_RAGGED_HASHSIZE 64
/* Atom information structure used */
typedef struct H5I_id_info_t {
diff --git a/src/H5Ipublic.h b/src/H5Ipublic.h
index e673734..d678fc8 100644
--- a/src/H5Ipublic.h
+++ b/src/H5Ipublic.h
@@ -44,6 +44,7 @@ typedef enum {
H5_DATASET, /*group ID for Dataset objects */
H5_ATTR, /*group ID for Attribute objects */
H5_TEMPBUF, /*group ID for Temporary buffer objects */
+ H5_RAGGED, /*group ID for Ragged array objects */
MAXGROUP /*highest group in group_t (Invalid as true group)*/
} H5I_group_t;
diff --git a/src/H5MF.c b/src/H5MF.c
index b469f4b..0176929 100644
--- a/src/H5MF.c
+++ b/src/H5MF.c
@@ -58,7 +58,7 @@ herr_t
H5MF_alloc(H5F_t *f, intn op, hsize_t size, haddr_t *addr/*out*/)
{
haddr_t tmp_addr;
- intn i, found, status;
+ intn i, found, status=-1;
hsize_t n;
H5MF_free_t blk;
hsize_t thresh = f->shared->access_parms->threshold;
diff --git a/src/H5P.c b/src/H5P.c
index 63e5844..9f33cda 100644
--- a/src/H5P.c
+++ b/src/H5P.c
@@ -146,7 +146,7 @@ H5P_term_interface(void)
* lists.
--------------------------------------------------------------------------*/
hid_t
-H5Pcreate (H5P_class_t type)
+H5Pcreate(H5P_class_t type)
{
hid_t ret_value = FAIL;
void *plist = NULL;
@@ -254,7 +254,7 @@ H5P_create(H5P_class_t type, void *plist)
This function releases access to a property list object
--------------------------------------------------------------------------*/
herr_t
-H5Pclose (hid_t plist_id)
+H5Pclose(hid_t plist_id)
{
H5P_class_t type;
void *plist = NULL;
@@ -382,7 +382,7 @@ H5P_close (H5P_class_t type, void *plist)
*-------------------------------------------------------------------------
*/
H5P_class_t
-H5Pget_class (hid_t plist_id)
+H5Pget_class(hid_t plist_id)
{
H5I_group_t group;
H5P_class_t ret_value = H5P_NO_CLASS;
@@ -467,7 +467,7 @@ H5P_get_class(hid_t plist_id)
*-------------------------------------------------------------------------
*/
herr_t
-H5Pget_version (hid_t plist_id, int *boot/*out*/, int *freelist/*out*/,
+H5Pget_version(hid_t plist_id, int *boot/*out*/, int *freelist/*out*/,
int *stab/*out*/, int *shhdr/*out*/)
{
H5F_create_t *plist = NULL;
@@ -508,7 +508,7 @@ H5Pget_version (hid_t plist_id, int *boot/*out*/, int *freelist/*out*/,
*-------------------------------------------------------------------------
*/
herr_t
-H5Pset_userblock (hid_t plist_id, hsize_t size)
+H5Pset_userblock(hid_t plist_id, hsize_t size)
{
uintn i;
H5F_create_t *plist = NULL;
@@ -554,7 +554,7 @@ H5Pset_userblock (hid_t plist_id, hsize_t size)
*-------------------------------------------------------------------------
*/
herr_t
-H5Pget_userblock (hid_t plist_id, hsize_t *size)
+H5Pget_userblock(hid_t plist_id, hsize_t *size)
{
H5F_create_t *plist = NULL;
@@ -603,7 +603,7 @@ H5Pget_userblock (hid_t plist_id, hsize_t *size)
*-------------------------------------------------------------------------
*/
herr_t
-H5Pset_alignment (hid_t fapl_id, hsize_t threshold, hsize_t alignment)
+H5Pset_alignment(hid_t fapl_id, hsize_t threshold, hsize_t alignment)
{
H5F_access_t *fapl = NULL;
@@ -648,7 +648,7 @@ H5Pset_alignment (hid_t fapl_id, hsize_t threshold, hsize_t alignment)
*-------------------------------------------------------------------------
*/
herr_t
-H5Pget_alignment (hid_t fapl_id, hsize_t *threshold/*out*/,
+H5Pget_alignment(hid_t fapl_id, hsize_t *threshold/*out*/,
hsize_t *alignment/*out*/)
{
H5F_access_t *fapl = NULL;
@@ -690,7 +690,7 @@ H5Pget_alignment (hid_t fapl_id, hsize_t *threshold/*out*/,
*-------------------------------------------------------------------------
*/
herr_t
-H5Pset_sizes (hid_t plist_id, size_t sizeof_addr, size_t sizeof_size)
+H5Pset_sizes(hid_t plist_id, size_t sizeof_addr, size_t sizeof_size)
{
H5F_create_t *plist = NULL;
@@ -745,7 +745,7 @@ H5Pset_sizes (hid_t plist_id, size_t sizeof_addr, size_t sizeof_size)
*-------------------------------------------------------------------------
*/
herr_t
-H5Pget_sizes (hid_t plist_id,
+H5Pget_sizes(hid_t plist_id,
size_t *sizeof_addr /*out */ , size_t *sizeof_size /*out */ )
{
H5F_create_t *plist = NULL;
@@ -798,7 +798,7 @@ H5Pget_sizes (hid_t plist_id,
*-------------------------------------------------------------------------
*/
herr_t
-H5Pset_sym_k (hid_t plist_id, int ik, int lk)
+H5Pset_sym_k(hid_t plist_id, int ik, int lk)
{
H5F_create_t *plist = NULL;
@@ -841,7 +841,7 @@ H5Pset_sym_k (hid_t plist_id, int ik, int lk)
*-------------------------------------------------------------------------
*/
herr_t
-H5Pget_sym_k (hid_t plist_id, int *ik /*out */ , int *lk /*out */ )
+H5Pget_sym_k(hid_t plist_id, int *ik /*out */ , int *lk /*out */ )
{
H5F_create_t *plist = NULL;
@@ -882,7 +882,7 @@ H5Pget_sym_k (hid_t plist_id, int *ik /*out */ , int *lk /*out */ )
*-------------------------------------------------------------------------
*/
herr_t
-H5Pset_istore_k (hid_t plist_id, int ik)
+H5Pset_istore_k(hid_t plist_id, int ik)
{
H5F_create_t *plist = NULL;
@@ -924,7 +924,7 @@ H5Pset_istore_k (hid_t plist_id, int ik)
*-------------------------------------------------------------------------
*/
herr_t
-H5Pget_istore_k (hid_t plist_id, int *ik /*out */ )
+H5Pget_istore_k(hid_t plist_id, int *ik /*out */ )
{
H5F_create_t *plist = NULL;
@@ -961,7 +961,7 @@ H5Pget_istore_k (hid_t plist_id, int *ik /*out */ )
*-------------------------------------------------------------------------
*/
herr_t
-H5Pset_layout (hid_t plist_id, H5D_layout_t layout)
+H5Pset_layout(hid_t plist_id, H5D_layout_t layout)
{
H5D_create_t *plist = NULL;
@@ -1001,7 +1001,7 @@ H5Pset_layout (hid_t plist_id, H5D_layout_t layout)
*-------------------------------------------------------------------------
*/
H5D_layout_t
-H5Pget_layout (hid_t plist_id)
+H5Pget_layout(hid_t plist_id)
{
H5D_create_t *plist = NULL;
@@ -1039,7 +1039,7 @@ H5Pget_layout (hid_t plist_id)
*-------------------------------------------------------------------------
*/
herr_t
-H5Pset_chunk (hid_t plist_id, int ndims, const hsize_t dim[/*ndims*/])
+H5Pset_chunk(hid_t plist_id, int ndims, const hsize_t dim[/*ndims*/])
{
int i;
H5D_create_t *plist = NULL;
@@ -1102,7 +1102,7 @@ H5Pset_chunk (hid_t plist_id, int ndims, const hsize_t dim[/*ndims*/])
*-------------------------------------------------------------------------
*/
int
-H5Pget_chunk (hid_t plist_id, int max_ndims, hsize_t dim[]/*out*/)
+H5Pget_chunk(hid_t plist_id, int max_ndims, hsize_t dim[]/*out*/)
{
int i;
H5D_create_t *plist = NULL;
@@ -1156,7 +1156,7 @@ H5Pget_chunk (hid_t plist_id, int max_ndims, hsize_t dim[]/*out*/)
*-------------------------------------------------------------------------
*/
herr_t
-H5Pset_external (hid_t plist_id, const char *name, off_t offset, hsize_t size)
+H5Pset_external(hid_t plist_id, const char *name, off_t offset, hsize_t size)
{
int idx;
size_t total, tmp;
@@ -1238,7 +1238,7 @@ H5Pset_external (hid_t plist_id, const char *name, off_t offset, hsize_t size)
*-------------------------------------------------------------------------
*/
int
-H5Pget_external_count (hid_t plist_id)
+H5Pget_external_count(hid_t plist_id)
{
H5D_create_t *plist = NULL;
@@ -1286,7 +1286,7 @@ H5Pget_external_count (hid_t plist_id)
*-------------------------------------------------------------------------
*/
herr_t
-H5Pget_external (hid_t plist_id, int idx, size_t name_size, char *name/*out*/,
+H5Pget_external(hid_t plist_id, int idx, size_t name_size, char *name/*out*/,
off_t *offset/*out*/, hsize_t *size/*out*/)
{
H5D_create_t *plist = NULL;
@@ -1334,7 +1334,7 @@ H5Pget_external (hid_t plist_id, int idx, size_t name_size, char *name/*out*/,
*-------------------------------------------------------------------------
*/
H5F_driver_t
-H5Pget_driver (hid_t plist_id)
+H5Pget_driver(hid_t plist_id)
{
H5F_access_t *plist = NULL;
@@ -1371,7 +1371,7 @@ H5Pget_driver (hid_t plist_id)
*-------------------------------------------------------------------------
*/
herr_t
-H5Pset_stdio (hid_t plist_id)
+H5Pset_stdio(hid_t plist_id)
{
H5F_access_t *plist = NULL;
@@ -1412,7 +1412,7 @@ H5Pset_stdio (hid_t plist_id)
*-------------------------------------------------------------------------
*/
herr_t
-H5Pget_stdio (hid_t plist_id)
+H5Pget_stdio(hid_t plist_id)
{
H5F_access_t *plist = NULL;
@@ -1453,7 +1453,7 @@ H5Pget_stdio (hid_t plist_id)
*-------------------------------------------------------------------------
*/
herr_t
-H5Pset_sec2 (hid_t plist_id)
+H5Pset_sec2(hid_t plist_id)
{
H5F_access_t *plist = NULL;
@@ -1494,7 +1494,7 @@ H5Pset_sec2 (hid_t plist_id)
*-------------------------------------------------------------------------
*/
herr_t
-H5Pget_sec2 (hid_t plist_id)
+H5Pget_sec2(hid_t plist_id)
{
H5F_access_t *plist = NULL;
@@ -1539,7 +1539,7 @@ H5Pget_sec2 (hid_t plist_id)
*-------------------------------------------------------------------------
*/
herr_t
-H5Pset_core (hid_t plist_id, size_t increment)
+H5Pset_core(hid_t plist_id, size_t increment)
{
H5F_access_t *plist = NULL;
@@ -1587,7 +1587,7 @@ H5Pset_core (hid_t plist_id, size_t increment)
*-------------------------------------------------------------------------
*/
herr_t
-H5Pget_core (hid_t plist_id, size_t *increment/*out*/)
+H5Pget_core(hid_t plist_id, size_t *increment/*out*/)
{
H5F_access_t *plist = NULL;
@@ -1632,7 +1632,7 @@ H5Pget_core (hid_t plist_id, size_t *increment/*out*/)
*-------------------------------------------------------------------------
*/
herr_t
-H5Pset_split (hid_t plist_id, const char *meta_ext, hid_t meta_plist_id,
+H5Pset_split(hid_t plist_id, const char *meta_ext, hid_t meta_plist_id,
const char *raw_ext, hid_t raw_plist_id)
{
H5F_access_t *plist = NULL;
@@ -1701,7 +1701,7 @@ H5Pset_split (hid_t plist_id, const char *meta_ext, hid_t meta_plist_id,
*-------------------------------------------------------------------------
*/
herr_t
-H5Pget_split (hid_t plist_id, size_t meta_ext_size, char *meta_ext/*out*/,
+H5Pget_split(hid_t plist_id, size_t meta_ext_size, char *meta_ext/*out*/,
hid_t *meta_properties/*out*/, size_t raw_ext_size,
char *raw_ext/*out*/, hid_t *raw_properties/*out*/)
{
@@ -1781,7 +1781,7 @@ H5Pget_split (hid_t plist_id, size_t meta_ext_size, char *meta_ext/*out*/,
*-------------------------------------------------------------------------
*/
herr_t
-H5Pset_family (hid_t plist_id, hsize_t memb_size, hid_t memb_plist_id)
+H5Pset_family(hid_t plist_id, hsize_t memb_size, hid_t memb_plist_id)
{
H5F_access_t *plist = NULL;
@@ -1840,7 +1840,7 @@ H5Pset_family (hid_t plist_id, hsize_t memb_size, hid_t memb_plist_id)
*-------------------------------------------------------------------------
*/
herr_t
-H5Pget_family (hid_t plist_id, hsize_t *memb_size/*out*/,
+H5Pget_family(hid_t plist_id, hsize_t *memb_size/*out*/,
hid_t *memb_plist_id/*out*/)
{
H5F_access_t *plist = NULL;
@@ -1899,7 +1899,7 @@ H5Pget_family (hid_t plist_id, hsize_t *memb_size/*out*/,
*-------------------------------------------------------------------------
*/
herr_t
-H5Pset_cache (hid_t plist_id, int mdc_nelmts, size_t rdcc_nbytes,
+H5Pset_cache(hid_t plist_id, int mdc_nelmts, size_t rdcc_nbytes,
double rdcc_w0)
{
H5F_access_t *fapl = NULL;
@@ -1953,7 +1953,7 @@ H5Pset_cache (hid_t plist_id, int mdc_nelmts, size_t rdcc_nbytes,
*-------------------------------------------------------------------------
*/
herr_t
-H5Pget_cache (hid_t plist_id, int *mdc_nelmts, size_t *rdcc_nbytes,
+H5Pget_cache(hid_t plist_id, int *mdc_nelmts, size_t *rdcc_nbytes,
double *rdcc_w0)
{
H5F_access_t *fapl = NULL;
@@ -2007,7 +2007,7 @@ H5Pget_cache (hid_t plist_id, int *mdc_nelmts, size_t *rdcc_nbytes,
*-------------------------------------------------------------------------
*/
herr_t
-H5Pset_buffer (hid_t plist_id, size_t size, void *tconv, void *bkg)
+H5Pset_buffer(hid_t plist_id, size_t size, void *tconv, void *bkg)
{
H5D_xfer_t *plist = NULL;
@@ -2051,7 +2051,7 @@ H5Pset_buffer (hid_t plist_id, size_t size, void *tconv, void *bkg)
*-------------------------------------------------------------------------
*/
size_t
-H5Pget_buffer (hid_t plist_id, void **tconv/*out*/, void **bkg/*out*/)
+H5Pget_buffer(hid_t plist_id, void **tconv/*out*/, void **bkg/*out*/)
{
H5D_xfer_t *plist = NULL;
@@ -2094,7 +2094,7 @@ H5Pget_buffer (hid_t plist_id, void **tconv/*out*/, void **bkg/*out*/)
*-------------------------------------------------------------------------
*/
herr_t
-H5Pset_preserve (hid_t plist_id, hbool_t status)
+H5Pset_preserve(hid_t plist_id, hbool_t status)
{
H5D_xfer_t *plist = NULL;
@@ -2132,7 +2132,7 @@ H5Pset_preserve (hid_t plist_id, hbool_t status)
*-------------------------------------------------------------------------
*/
int
-H5Pget_preserve (hid_t plist_id)
+H5Pget_preserve(hid_t plist_id)
{
H5D_xfer_t *plist = NULL;
@@ -2189,7 +2189,7 @@ H5Pget_preserve (hid_t plist_id)
*-------------------------------------------------------------------------
*/
herr_t
-H5Pset_filter (hid_t plist_id, H5Z_filter_t filter, unsigned int flags,
+H5Pset_filter(hid_t plist_id, H5Z_filter_t filter, unsigned int flags,
size_t cd_nelmts, const unsigned int cd_values[/*cd_nelmts*/])
{
H5D_create_t *plist = NULL;
@@ -2255,7 +2255,7 @@ H5Pset_filter (hid_t plist_id, H5Z_filter_t filter, unsigned int flags,
*-------------------------------------------------------------------------
*/
int
-H5Pget_nfilters (hid_t plist_id)
+H5Pget_nfilters(hid_t plist_id)
{
H5D_create_t *plist = NULL;
@@ -2302,7 +2302,7 @@ H5Pget_nfilters (hid_t plist_id)
*-------------------------------------------------------------------------
*/
H5Z_filter_t
-H5Pget_filter (hid_t plist_id, int idx, unsigned int *flags/*out*/,
+H5Pget_filter(hid_t plist_id, int idx, unsigned int *flags/*out*/,
size_t *cd_nelmts/*in_out*/, unsigned cd_values[]/*out*/,
size_t namelen, char name[]/*out*/)
{
@@ -2395,7 +2395,7 @@ H5Pget_filter (hid_t plist_id, int idx, unsigned int *flags/*out*/,
*-------------------------------------------------------------------------
*/
herr_t
-H5Pset_deflate (hid_t plist_id, unsigned level)
+H5Pset_deflate(hid_t plist_id, unsigned level)
{
H5D_create_t *plist = NULL;
@@ -2482,7 +2482,7 @@ H5Pset_deflate (hid_t plist_id, unsigned level)
*-------------------------------------------------------------------------
*/
herr_t
-H5Pset_mpi (hid_t plist_id, MPI_Comm comm, MPI_Info info)
+H5Pset_mpi(hid_t plist_id, MPI_Comm comm, MPI_Info info)
{
H5F_access_t *plist = NULL;
@@ -2537,7 +2537,7 @@ H5Pset_mpi (hid_t plist_id, MPI_Comm comm, MPI_Info info)
*-------------------------------------------------------------------------
*/
herr_t
-H5Pget_mpi (hid_t plist_id, MPI_Comm *comm, MPI_Info *info)
+H5Pget_mpi(hid_t plist_id, MPI_Comm *comm, MPI_Info *info)
{
H5F_access_t *plist = NULL;
@@ -2600,7 +2600,7 @@ H5Pget_mpi (hid_t plist_id, MPI_Comm *comm, MPI_Info *info)
*-------------------------------------------------------------------------
*/
herr_t
-H5Pset_xfer (hid_t plist_id, H5D_transfer_t data_xfer_mode)
+H5Pset_xfer(hid_t plist_id, H5D_transfer_t data_xfer_mode)
{
H5D_xfer_t *plist = NULL;
@@ -2650,7 +2650,7 @@ H5Pset_xfer (hid_t plist_id, H5D_transfer_t data_xfer_mode)
*-------------------------------------------------------------------------
*/
herr_t
-H5Pget_xfer (hid_t plist_id, H5D_transfer_t *data_xfer_mode)
+H5Pget_xfer(hid_t plist_id, H5D_transfer_t *data_xfer_mode)
{
H5D_xfer_t *plist = NULL;
@@ -2695,7 +2695,7 @@ H5Pget_xfer (hid_t plist_id, H5D_transfer_t *data_xfer_mode)
* parameter settings.
--------------------------------------------------------------------------*/
hid_t
-H5Pcopy (hid_t plist_id)
+H5Pcopy(hid_t plist_id)
{
const void *plist = NULL;
void *new_plist = NULL;
diff --git a/src/H5R.c b/src/H5R.c
new file mode 100644
index 0000000..02c4e25
--- /dev/null
+++ b/src/H5R.c
@@ -0,0 +1,1075 @@
+/*
+ * Copyright © 1998 NCSA
+ * All rights reserved.
+ *
+ * Programmer: Robb Matzke <matzke@llnl.gov>
+ * Tuesday, August 25, 1998
+ *
+ * Purpose: A ragged array package layered on top of other HDF5 objects.
+ * This was originally implemented on the HDF5 API but has been
+ * moved under the API so it meshes better with other objects,
+ * is somewhat faster, and has better debugging support.
+ *
+ * Note: This file implementes a two dimensional array where each row
+ * of the array is a different length (a.k.a., ragged array). It
+ * is intended for applications where the distribution of row
+ * lengths is such that most rows near an average length with
+ * only a few rows that are significantly shorter or longer. The
+ * raw data is split among two datasets `raw' and `over': the
+ * `raw' dataset is a 2d chunked dataset whose width is large
+ * enough to hold most of the rows and the `over' dataset is a
+ * heap that stores the end of rows that overflow the first
+ * dataset. A third dataset called `meta' contains one record
+ * for each row and describes what elements (if any) overflow
+ * the `raw' dataset and where they are stored in the `over'
+ * dataset. All three datasets are contained in a single group
+ * whose name is the name of the ragged array.
+ */
+#include <H5Rprivate.h>
+
+#include <H5private.h>
+#include <H5Eprivate.h>
+#include <H5Iprivate.h>
+#include <H5MMprivate.h>
+#include <H5Pprivate.h>
+
+typedef struct H5R_meta_t {
+ hsize_t nelmts; /*num elements in row */
+ hssize_t offset; /*offset into overflow array */
+ hsize_t nover; /*allocated size in overflow array */
+} H5R_meta_t;
+
+struct H5R_t {
+ H5D_t *meta; /*ragged meta data array */
+ H5D_t *raw; /*fixed-width raw data */
+ H5D_t *over; /*overflow data */
+};
+
+#define PABLO_MASK H5R_mask
+static hbool_t interface_initialize_g = FALSE;
+#define INTERFACE_INIT H5R_init_interface
+static herr_t H5R_init_interface(void);
+static void H5R_term_interface(void);
+static H5T_t *H5R_meta_type_g = NULL;
+
+static herr_t H5R_fix_overflow(H5R_t *ra, H5T_t *type, H5R_meta_t *meta,
+ hsize_t nelmts, void *buf);
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5R_init_interface
+ *
+ * Purpose: Initialize the interface.
+ *
+ * Return: Success: SUCCEED
+ *
+ * Failure: FAIL
+ *
+ * Programmer: Robb Matzke
+ * Tuesday, August 25, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5R_init_interface(void)
+{
+ herr_t ret_value = SUCCEED;
+ H5T_t *type = NULL;
+
+ FUNC_ENTER(H5R_init_interface, FAIL);
+
+ /* The atom group */
+ if ((ret_value=H5I_init_group(H5_RAGGED, H5I_RAGGED_HASHSIZE, 0,
+ (herr_t(*)(void*))H5R_close))>=0) {
+ ret_value = H5_add_exit(H5R_term_interface);
+ }
+
+ /* The meta dataset type */
+ if (NULL==(type=H5T_create(H5T_COMPOUND, sizeof(H5R_meta_t))) ||
+ H5T_insert(type, "nelmts", HOFFSET(H5R_meta_t, nelmts),
+ 0, NULL, NULL, H5I_object(H5T_NATIVE_HSIZE_g))<0 ||
+ H5T_insert(type, "offset", HOFFSET(H5R_meta_t, offset),
+ 0, NULL, NULL, H5I_object(H5T_NATIVE_HSSIZE_g))<0 ||
+ H5T_insert(type, "nover", HOFFSET(H5R_meta_t, nover),
+ 0, NULL, NULL, H5I_object(H5T_NATIVE_HSIZE_g))) {
+ HRETURN_ERROR(H5E_RAGGED, H5E_CANTINIT, FAIL,
+ "unable to define ragged array meta type");
+ }
+ H5R_meta_type_g = type;
+
+ FUNC_LEAVE(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5R_term_interface
+ *
+ * Purpose: Terminate the ragged array interface.
+ *
+ * Return: void
+ *
+ * Programmer: Robb Matzke
+ * Tuesday, August 25, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void
+H5R_term_interface(void)
+{
+ H5I_destroy_group(H5_RAGGED);
+ H5T_close(H5R_meta_type_g);
+ H5R_meta_type_g = NULL;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5Rcreate
+ *
+ * Purpose: Create a new ragged array with the specified name. A ragged
+ * array is implemented as a group containing three datasets.
+ * The dataset `raw' is a fixed width dataset which will hold
+ * the majority of the data. The dataset `over' is a one
+ * dimensional heap which will hold the end of rows which are
+ * too long to fit in `raw'. Finally, the `meta' dataset
+ * contains information about the `over' array. All elements of
+ * the ragged array are stored with the same data type.
+ *
+ * The property list PLIST_ID should contain information about
+ * chunking. The chunk width will determine the width of the
+ * `raw' dataset while the chunk length should be such that the
+ * total chunk size is reasonably large (I/O will be performed
+ * in units of chunks). If the PLIST_ID doesn't have a chunk
+ * size defined (e.g., H5P_DEFAULT) then this function will fail.
+ *
+ * Return: Success: A ragged array ID.
+ *
+ * Failure: FAIL
+ *
+ * Programmer: Robb Matzke
+ * Tuesday, August 25, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+hid_t
+H5Rcreate(hid_t loc_id, const char *name, hid_t type_id, hid_t plist_id)
+{
+ H5R_t *ra=NULL;
+ H5G_t *loc=NULL;
+ H5T_t *type=NULL;
+ const H5D_create_t *plist=NULL;
+ hid_t ret_value=FAIL;
+
+ FUNC_ENTER(H5Rcreate, FAIL);
+ H5TRACE4("i","isii",loc_id,name,type_id,plist_id);
+
+ /* Check args */
+ if (NULL==(loc=H5G_loc(loc_id))) {
+ HRETURN_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a location");
+ }
+ if (!name || !*name) {
+ HRETURN_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no name given");
+ }
+ if (H5_DATATYPE!=H5I_group(type_id) ||
+ NULL==(type=H5I_object(type_id))) {
+ HRETURN_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a data type");
+ }
+ if (H5P_DEFAULT==plist_id) {
+ plist = &H5D_create_dflt;
+ } else if (H5P_DATASET_CREATE!=H5P_get_class(plist_id) ||
+ NULL==(plist=H5I_object(plist_id))) {
+ HRETURN_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL,
+ "not a dataset creation property list");
+ }
+ if (H5D_CHUNKED!=plist->layout) {
+ HRETURN_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL,
+ "property list must define a chunked storage layout");
+ }
+ if (2!=plist->layout) {
+ HRETURN_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL,
+ "chunked storage is not two dimensional");
+ }
+
+ /* Do the real work */
+ if (NULL==(ra=H5R_create(loc, name, type, plist))) {
+ HRETURN_ERROR(H5E_RAGGED, H5E_CANTINIT, FAIL,
+ "unable to create ragged array");
+ }
+
+ /* Register the new dataset to get an ID for it */
+ if ((ret_value=H5I_register(H5_RAGGED, ra))<0) {
+ H5R_close(ra);
+ HRETURN_ERROR(H5E_RAGGED, H5E_CANTREGISTER, FAIL,
+ "unable to register ragged array");
+ }
+
+ FUNC_LEAVE(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5R_create
+ *
+ * Purpose: Create a new ragged array implemented as a group.
+ *
+ * Return: Success: Pointer to the new ragged array.
+ *
+ * Failure: NULL
+ *
+ * Programmer: Robb Matzke
+ * Tuesday, August 25, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+H5R_t *
+H5R_create(H5G_t *loc, const char *name, H5T_t *type, const H5D_create_t *dcpl)
+{
+ H5R_t *ra = NULL;
+ H5G_t *grp = NULL;
+ H5S_t *space = NULL;
+ hsize_t cur_dims[2];
+ hsize_t max_dims[2];
+ H5R_t *ret_value=NULL;
+ H5D_create_t d1_dcpl;
+
+ FUNC_ENTER(H5R_create, NULL);
+
+ /* Check args */
+ assert(loc);
+ assert(name && *name);
+ assert(type);
+ assert(dcpl);
+ assert(H5D_CHUNKED==dcpl->layout);
+
+ /* Create the data struct */
+ if (NULL==(ra=H5MM_calloc(sizeof(H5R_t)))) {
+ HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL,
+ "memory allocation failed for ragged array struct");
+ }
+
+ /* Create the group to contain the arrays */
+ if (NULL==(grp=H5G_create(loc, name, 0))) {
+ HGOTO_ERROR(H5E_RAGGED, H5E_CANTINIT, NULL,
+ "unable to create container group");
+ }
+
+ /* The raw data array */
+ cur_dims[0] = 0;
+ max_dims[0] = H5S_UNLIMITED;
+ cur_dims[1] = max_dims[1] = dcpl->chunk_size[1];
+ if (NULL==(space=H5S_create(H5S_SIMPLE)) ||
+ H5S_set_extent_simple(space, 2, cur_dims, max_dims)<0) {
+ HGOTO_ERROR(H5E_RAGGED, H5E_CANTINIT, NULL,
+ "unable to define raw dataset extents");
+ }
+ if (NULL==(ra->raw=H5D_create(grp, "raw", type, space, dcpl))) {
+ HGOTO_ERROR(H5E_RAGGED, H5E_CANTINIT, NULL,
+ "unable to create raw dataset");
+ }
+ if (H5S_close(space)<0) {
+ space = NULL;
+ HGOTO_ERROR(H5E_RAGGED, H5E_CANTINIT, NULL,
+ "unable to close raw dataset extents");
+ }
+ space = NULL;
+
+ /* The overflow data array */
+ cur_dims[0] = 0;
+ max_dims[0] = H5S_UNLIMITED;
+ if (NULL==(space=H5S_create(H5S_SIMPLE)) ||
+ H5S_set_extent_simple(space, 1, cur_dims, max_dims)<0) {
+ HGOTO_ERROR(H5E_RAGGED, H5E_CANTINIT, NULL,
+ "unable to define overflow dataset extents");
+ }
+ d1_dcpl = *dcpl;
+ d1_dcpl.chunk_ndims = 1;
+ d1_dcpl.chunk_size[0] = dcpl->chunk_size[0]*dcpl->chunk_size[1];
+ if (NULL==(ra->over=H5D_create(grp, "over", type, space, &d1_dcpl))) {
+ HGOTO_ERROR(H5E_RAGGED, H5E_CANTINIT, NULL,
+ "unable to create overflow dataset");
+ }
+ if (H5S_close(space)<0) {
+ space = NULL;
+ HGOTO_ERROR(H5E_RAGGED, H5E_CANTINIT, NULL,
+ "unable to close overflow dataset extents");
+ }
+ space = NULL;
+
+ /* The meta data array */
+ cur_dims[0] = 0;
+ max_dims[0] = H5S_UNLIMITED;
+ if (NULL==(space=H5S_create(H5S_SIMPLE)) ||
+ H5S_set_extent_simple(space, 1, cur_dims, max_dims)<0) {
+ HGOTO_ERROR(H5E_RAGGED, H5E_CANTINIT, NULL,
+ "unable to define meta dataset extents");
+ }
+ d1_dcpl.chunk_size[0] = MAX(1,
+ (dcpl->chunk_size[0]*dcpl->chunk_size[1]*
+ H5T_get_size(type))/
+ H5T_get_size(H5R_meta_type_g));
+ if (NULL==(ra->meta=H5D_create(grp, "meta", H5R_meta_type_g, space,
+ &d1_dcpl))) {
+ HGOTO_ERROR(H5E_RAGGED, H5E_CANTINIT, NULL,
+ "unable to create meta dataset");
+ }
+ if (H5S_close(space)<0) {
+ space = NULL;
+ HGOTO_ERROR(H5E_RAGGED, H5E_CANTINIT, NULL,
+ "unable to close meta dataset extents");
+ }
+ space = NULL;
+
+ /* Close the group -- we no longer need it */
+ if (H5G_close(grp)<0) {
+ grp = NULL;
+ HGOTO_ERROR(H5E_RAGGED, H5E_CANTINIT, NULL,
+ "unable to close ragged array group");
+ }
+ grp = NULL;
+ ret_value = ra;
+
+ done:
+ if (!ret_value) {
+ if (grp) H5G_close(grp);
+ if (space) H5S_close(space);
+ if (ra) {
+ if (ra->raw) H5D_close(ra->raw);
+ if (ra->over) H5D_close(ra->over);
+ if (ra->meta) H5D_close(ra->meta);
+ H5MM_xfree(ra);
+ }
+ }
+ FUNC_LEAVE(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5Ropen
+ *
+ * Purpose: Opens an existing ragged array. The name of the array should
+ * be the same that was used when the array was created; that is,
+ * the name of the group which implements the array.
+ *
+ * Return: Success: An array ID
+ *
+ * Failure: FAIL
+ *
+ * Programmer: Robb Matzke
+ * Tuesday, August 25, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+hid_t
+H5Ropen(hid_t loc_id, const char *name)
+{
+ H5G_t *loc=NULL;
+ H5R_t *ra=NULL;
+ hid_t ret_value=FAIL;
+
+ FUNC_ENTER(H5Ropen, FAIL);
+ H5TRACE2("i","is",loc_id,name);
+
+ /* Check args */
+ if (NULL==(loc=H5G_loc(loc_id))) {
+ HRETURN_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a location");
+ }
+ if (!name || !*name) {
+ HRETURN_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no name given");
+ }
+
+ /* The real work */
+ if (NULL==(ra=H5R_open(loc, name))) {
+ HRETURN_ERROR(H5E_RAGGED, H5E_CANTOPENOBJ, FAIL,
+ "unable to open ragged array");
+ }
+
+ /* Turn it into an atom */
+ if ((ret_value=H5I_register(H5_RAGGED, ra))<0) {
+ H5R_close(ra);
+ HRETURN_ERROR(H5E_RAGGED, H5E_CANTREGISTER, FAIL,
+ "unable to register ragged array");
+ }
+
+ FUNC_LEAVE(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5R_open
+ *
+ * Purpose: Open a ragged array. The name of the array is the same as
+ * the group that implements the array.
+ *
+ * Return: Success: Ptr to a new ragged array object.
+ *
+ * Failure: NULL
+ *
+ * Programmer: Robb Matzke
+ * Tuesday, August 25, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+H5R_t *
+H5R_open(H5G_t *loc, const char *name)
+{
+ H5R_t *ra = NULL;
+ H5R_t *ret_value = NULL;
+ H5G_t *grp=NULL;
+
+ FUNC_ENTER(H5R_open, NULL);
+
+ /* Check arguments */
+ assert(loc);
+ assert(name && *name);
+
+ /* Create the struct */
+ if (NULL==(ra=H5MM_calloc(sizeof(H5R_t)))) {
+ HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL,
+ "memory allocation failed for ragged array struct");
+ }
+
+ /* Open the containing group */
+ if (NULL==(grp=H5G_open(loc, name))) {
+ HGOTO_ERROR(H5E_RAGGED, H5E_CANTOPENOBJ, NULL,
+ "unable to open container group");
+ }
+
+ /* Open the datasets */
+ if (NULL==(ra->raw=H5D_open(grp, "raw")) ||
+ NULL==(ra->over=H5D_open(grp, "over")) ||
+ NULL==(ra->meta=H5D_open(grp, "meta"))) {
+ HGOTO_ERROR(H5E_RAGGED, H5E_CANTOPENOBJ, NULL,
+ "unable to open one or more component datasets");
+ }
+
+ /* Close group */
+ if (H5G_close(grp)<0) {
+ grp = NULL;
+ HGOTO_ERROR(H5E_RAGGED, H5E_CANTINIT, NULL,
+ "unable to close container group");
+ }
+ grp = NULL;
+ ret_value = ra;
+
+ done:
+ if (!ret_value) {
+ if (grp) H5G_close(grp);
+ if (ra) {
+ if (ra->raw) H5D_close(ra->raw);
+ if (ra->over) H5D_close(ra->over);
+ if (ra->meta) H5D_close(ra->meta);
+ H5MM_xfree(ra);
+ }
+ }
+ FUNC_LEAVE(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5Rclose
+ *
+ * Purpose: Close a ragged array.
+ *
+ * Return: Success: SUCCEED
+ *
+ * Failure: FAIL
+ *
+ * Programmer: Robb Matzke
+ * Tuesday, August 25, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Rclose(hid_t array_id)
+{
+ H5R_t *ra=NULL;
+
+ FUNC_ENTER(H5Rclose, FAIL);
+ H5TRACE1("e","i",array_id);
+
+ /* Check args */
+ if (H5_RAGGED!=H5I_group(array_id) ||
+ NULL==(ra=H5I_object(array_id))) {
+ HRETURN_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a ragged array");
+ }
+
+ /*
+ * Decrement the counter on the array. It will be freed if the count
+ * reaches zero.
+ */
+ if (H5I_dec_ref(array_id) < 0) {
+ HRETURN_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to free");
+ }
+
+ FUNC_LEAVE(SUCCEED);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5R_close
+ *
+ * Purpose: Close a ragged array
+ *
+ * Return: Success: SUCCEED
+ *
+ * Failure: FAIL
+ *
+ * Programmer: Robb Matzke
+ * Tuesday, August 25, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5R_close(H5R_t *ra)
+{
+ FUNC_ENTER(H5R_close, FAIL);
+
+ assert(ra);
+ if ((ra->raw && H5D_close(ra->raw)<0) ||
+ (ra->over && H5D_close(ra->over)<0) ||
+ (ra->meta && H5D_close(ra->meta)<0)) {
+ HRETURN_ERROR(H5E_RAGGED, H5E_CANTINIT, FAIL,
+ "unable to close one or more component datasets");
+ }
+ HDmemset(ra, 0, sizeof(H5R_t));
+ H5MM_xfree(ra);
+
+ FUNC_LEAVE(SUCCEED);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5Rwrite
+ *
+ * Purpose: Write a contiguous set of rows to a ragged array beginning at
+ * row number START_ROW and continuing for NROWS rows. Each row
+ * of the ragged array contains SIZE[] elements of type TYPE_ID
+ * and each row is stored in a buffer pointed to by BUF[].
+ *
+ * Return: Success: SUCCEED
+ *
+ * Failure: FAIL
+ *
+ * Programmer: Robb Matzke
+ * Tuesday, August 25, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Rwrite(hid_t array_id, hssize_t start_row, hsize_t nrows,
+ hid_t type_id, hsize_t size[/*nrows*/], void *buf[/*nrows*/])
+{
+ H5R_t *ra=NULL;
+ H5T_t *type=NULL;
+ hsize_t i;
+
+ FUNC_ENTER(H5Rwrite, FAIL);
+ H5TRACE6("e","iHshi*[a2]h*[a2]x",array_id,start_row,nrows,type_id,size,
+ buf);
+
+ /* Check args */
+ if (H5_RAGGED!=H5I_group(array_id) ||
+ NULL==(ra=H5I_object(array_id))) {
+ HRETURN_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a ragged array");
+ }
+ if (H5_DATATYPE!=H5I_group(type_id) ||
+ NULL==(type=H5I_object(type_id))) {
+ HRETURN_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a data type");
+ }
+ if (nrows>0 && !size) {
+ HRETURN_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no size array");
+ }
+ if (nrows>0 && !buf) {
+ HRETURN_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no output buffer array");
+ }
+ for (i=0; i<nrows; i++) {
+ if (size[i]>0 && !buf[i]) {
+ HRETURN_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL,
+ "one or more buffer points are null");
+ }
+ }
+
+ /* Do the work */
+ if (H5R_write(ra, start_row, nrows, type, size, buf)<0) {
+ HRETURN_ERROR(H5E_RAGGED, H5E_WRITEERROR, FAIL,
+ "unable to write to ragged array");
+ }
+
+ FUNC_LEAVE(SUCCEED);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5R_write
+ *
+ * Purpose: Write a contiguous set of rows to a ragged array beginning at
+ * row number START_ROW and continuing for NROWS rows. Each row
+ * of the ragged array contains SIZE[] elements of type TYPE_ID
+ * and each row is stored in a buffer pointed to by BUF[].
+ *
+ * Return: Success: SUCCEED
+ *
+ * Failure: FAIL
+ *
+ * Programmer: Robb Matzke
+ * Tuesday, August 25, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5R_write(H5R_t *ra, hssize_t start_row, hsize_t nrows, H5T_t *type,
+ hsize_t size[], void *buf[])
+{
+ herr_t ret_value=FAIL;
+ H5R_meta_t *meta = NULL;
+ H5S_t *mf_space=NULL; /*meta file data space */
+ H5S_t *mm_space=NULL; /*meta memory data space */
+ H5S_t *rf_space=NULL; /*raw data file space */
+ H5S_t *rm_space=NULL; /*raw data memory space */
+ hsize_t meta_cur_size; /*current meta data nelmts */
+ hsize_t meta_read_size; /*amount to read */
+ hsize_t raw_cur_size[2]; /*raw data current size */
+ hssize_t hs_offset[2]; /*hyperslab offset */
+ hsize_t hs_size[2]; /*hyperslab size */
+ uint8 *raw_buf=NULL; /*raw buffer */
+ size_t type_size; /*size of the TYPE argument */
+ hsize_t i;
+
+ FUNC_ENTER(H5R_write, FAIL);
+
+ /* Check args */
+ assert(ra);
+ assert(type);
+ assert(0==nrows || size);
+ assert(0==nrows || buf);
+ if (0==nrows) HRETURN(SUCCEED);
+ type_size = H5T_get_size(type);
+
+ /* Get the meta data */
+ if (NULL==(mf_space=H5D_get_space(ra->meta)) ||
+ H5S_extent_dims(mf_space, &meta_cur_size, NULL)<0) {
+ HGOTO_ERROR(H5E_RAGGED, H5E_CANTINIT, FAIL,
+ "unable to get current meta data extents");
+ }
+ if ((hsize_t)start_row>=meta_cur_size) {
+ meta_read_size = 0;
+ } else {
+ meta_read_size = MIN(nrows, meta_cur_size-(hsize_t)start_row);
+ }
+ if (NULL==(mm_space=H5S_create(H5S_SIMPLE)) ||
+ H5S_set_extent_simple(mm_space, 1, &meta_read_size, NULL)<0 ||
+ H5S_select_hyperslab(mf_space, H5S_SELECT_SET, &start_row, NULL,
+ &meta_read_size, NULL)<0) {
+ HGOTO_ERROR(H5E_RAGGED, H5E_CANTINIT, FAIL,
+ "unable to set meta data selection");
+ }
+ if (NULL==(meta=H5MM_malloc(nrows*sizeof(H5R_meta_t)))) {
+ HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL,
+ "memory allocation failed for meta data");
+ }
+ if (H5D_read(ra->meta, H5R_meta_type_g, mm_space, mf_space,
+ &H5D_xfer_dflt, meta)<0) {
+ HGOTO_ERROR(H5E_RAGGED, H5E_READERROR, FAIL,
+ "unable to read meta data");
+ }
+ HDmemset(meta+meta_read_size, 0,
+ (nrows-meta_read_size)*sizeof(H5R_meta_t));
+
+ /* Write the part of the data that will fit in the raw dataset */
+ if (NULL==(rf_space=H5D_get_space(ra->raw)) ||
+ H5S_extent_dims(rf_space, raw_cur_size, NULL)<0) {
+ HGOTO_ERROR(H5E_RAGGED, H5E_CANTINIT, FAIL,
+ "unable to determine current raw data extents");
+ }
+ if (NULL==(raw_buf=H5MM_malloc(nrows*raw_cur_size[1]*type_size))) {
+ HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL,
+ "unable to allocate buffer for raw data");
+ }
+ for (i=0; i<nrows; i++) {
+ size_t nbytes = MIN(size[i], raw_cur_size[1])*type_size;
+ HDmemcpy(raw_buf+i*raw_cur_size[1]*type_size, buf[i], nbytes);
+ HDmemset(raw_buf+i*raw_cur_size[1]*type_size+nbytes, 0,
+ raw_cur_size[1]*type_size-nbytes);
+ }
+ if ((hsize_t)start_row+nrows>raw_cur_size[0]) {
+ raw_cur_size[0] = (hsize_t)start_row + nrows;
+ if (H5D_extend(ra->raw, raw_cur_size)<0) {
+ HGOTO_ERROR(H5E_RAGGED, H5E_CANTINIT, FAIL,
+ "unable to extend raw dataset");
+ }
+ }
+ hs_offset[0] = start_row;
+ hs_offset[1] = 0;
+ hs_size[0] = nrows;
+ hs_size[1] = raw_cur_size[1];
+ if (NULL==(rm_space=H5S_create(H5S_SIMPLE)) ||
+ H5S_set_extent_simple(rm_space, 2, hs_size, NULL)<0 ||
+ H5S_select_hyperslab(rf_space, H5S_SELECT_SET,
+ hs_offset, NULL, hs_size, NULL)<0) {
+ HGOTO_ERROR(H5E_RAGGED, H5E_CANTINIT, FAIL,
+ "unable to set meta data selection");
+ }
+ if (H5D_write(ra->raw, type, rm_space, rf_space, &H5D_xfer_dflt,
+ raw_buf)<0) {
+ HGOTO_ERROR(H5E_RAGGED, H5E_WRITEERROR, FAIL,
+ "unable to write raw data");
+ }
+
+ /* Update the meta data */
+ for (i=0; i<nrows; i++) {
+ if (size[i]>raw_cur_size[1]) {
+ H5R_fix_overflow(ra, type, meta+i, size[i]-raw_cur_size[1],
+ (uint8*)(buf[i])+raw_cur_size[1]);
+ }
+ meta[i].nelmts = size[i];
+ }
+
+ /* Extend and write the new meta data */
+ if ((hsize_t)start_row+nrows>meta_cur_size) {
+ meta_cur_size = (hsize_t)start_row+nrows;
+ if (H5D_extend(ra->meta, &meta_cur_size)<0) {
+ HGOTO_ERROR(H5E_RAGGED, H5E_CANTINIT, FAIL,
+ "unable to extend meta dataset");
+ }
+ }
+ if (H5S_set_extent_simple(mm_space, 1, &nrows, NULL)<0 ||
+ H5S_select_hyperslab(mf_space, H5S_SELECT_SET, &start_row, NULL,
+ &nrows, NULL)<0) {
+ HGOTO_ERROR(H5E_RAGGED, H5E_CANTINIT, FAIL,
+ "unable to set meta data selection");
+ }
+ if (H5D_write(ra->meta, H5R_meta_type_g, mm_space, mf_space,
+ &H5D_xfer_dflt, meta)<0) {
+ HGOTO_ERROR(H5E_RAGGED, H5E_WRITEERROR, FAIL,
+ "unable to write meta data");
+ }
+
+ ret_value = SUCCEED;
+ done:
+ H5MM_xfree(meta);
+ H5MM_xfree(raw_buf);
+ if (mm_space) H5S_close(mm_space);
+ if (mf_space) H5S_close(mf_space);
+ if (rm_space) H5S_close(rm_space);
+ if (rf_space) H5S_close(rf_space);
+
+ FUNC_LEAVE(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5R_fix_overflow
+ *
+ * Purpose: Updates the overflow information for a row. This is where
+ * the heap management comes into play. The NELMTS is the
+ * number of elements that overflow into the heap and BUF is a
+ * pointer to those elements. The first part of the row has
+ * already been written to the raw dataset.
+ *
+ * Return: Success: SUCCEED
+ *
+ * Failure: FAIL
+ *
+ * Programmer: Robb Matzke
+ * Wednesday, August 26, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5R_fix_overflow(H5R_t *ra, H5T_t *type, H5R_meta_t *meta, hsize_t nelmts,
+ void *buf)
+{
+ H5S_t *of_space=NULL; /*overflow file space */
+ H5S_t *om_space=NULL; /*overflow memory space */
+ hsize_t cur_size; /*num elmts in overflow dataset */
+ herr_t ret_value=FAIL; /*return value */
+
+ FUNC_ENTER(H5R_fix_overflow, FAIL);
+
+ assert(ra);
+ assert(meta);
+ assert(buf);
+
+ if (nelmts==meta->nover) {
+ /* The space is already allocated -- do nothing */
+
+ } else if (nelmts<meta->nover) {
+ /* Too much space is allocated -- free the extra */
+#ifndef LATER
+ /*
+ * For now we don't worry about reclaiming space. But we remember
+ * the original amount allocated to allow the row to grow again up to
+ * that amount.
+ */
+#endif
+
+ } else if (meta->nover>0) {
+ /* Space is allocated but we need more */
+#ifndef LATER
+ /*
+ * For now we'll just reallocate space at the end of the overflow
+ * dataset, but eventually we'll want to move the smallest of the
+ * current overflow, the previous overflow, or the following overflow
+ * region to the end of the file and be careful to reclaim space.
+ */
+ if (NULL==(of_space=H5D_get_space(ra->over)) ||
+ H5S_extent_dims(of_space, &cur_size, NULL)<0) {
+ HGOTO_ERROR(H5E_RAGGED, H5E_CANTINIT, FAIL,
+ "unable to get overflow dataset extents");
+ }
+ meta->offset = (hssize_t)cur_size;
+ meta->nover = nelmts;
+ cur_size += nelmts;
+ if (H5D_extend(ra->over, &cur_size)<0) {
+ HGOTO_ERROR(H5E_RAGGED, H5E_CANTINIT, FAIL,
+ "unable to extend overflow dataset");
+ }
+#endif
+
+ } else {
+ /* No space is allocated */
+ assert(nelmts>0);
+ if (NULL==(of_space=H5D_get_space(ra->over)) ||
+ H5S_extent_dims(of_space, &cur_size, NULL)<0) {
+ HGOTO_ERROR(H5E_RAGGED, H5E_CANTINIT, FAIL,
+ "unable to get overflow dataset extents");
+ }
+ meta->offset = (hssize_t)cur_size;
+ meta->nover = nelmts;
+ cur_size += nelmts;
+ if (H5D_extend(ra->over, &cur_size)<0) {
+ HGOTO_ERROR(H5E_RAGGED, H5E_CANTINIT, FAIL,
+ "unable to extend overflow dataset");
+ }
+ }
+
+ /* Write the data */
+ if (nelmts>0) {
+ if (!of_space && NULL==(of_space=H5D_get_space(ra->over))) {
+ HGOTO_ERROR(H5E_RAGGED, H5E_CANTINIT, FAIL,
+ "unable to get overflow dataset extents");
+ }
+ if (NULL==(om_space=H5S_create(H5S_SIMPLE)) ||
+ H5S_set_extent_simple(om_space, 1, &nelmts, NULL)<0 ||
+ H5S_select_hyperslab(of_space, H5S_SELECT_SET, &(meta->offset),
+ NULL, &nelmts, NULL)<0) {
+ HGOTO_ERROR(H5E_RAGGED, H5E_CANTINIT, FAIL,
+ "unable to set overflow selection");
+ }
+ if (H5D_write(ra->over, type, om_space, of_space, &H5D_xfer_dflt,
+ buf)<0) {
+ HGOTO_ERROR(H5E_RAGGED, H5E_WRITEERROR, FAIL,
+ "unable to write to overflow dataset");
+ }
+ }
+
+ ret_value = SUCCEED;
+
+ done:
+ if (of_space) H5S_close(of_space);
+ if (om_space) H5S_close(om_space);
+ if (ret_value<0) {
+ meta->offset = 0;
+ meta->nover = 0;
+ }
+ FUNC_LEAVE(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5Rread
+ *
+ * Purpose: Reads the contents of one or more rows of a ragged array
+ * pointed to by ARRAY_ID. The rows to read begin at row
+ * START_ROW and continue for NROWS rows with all raw data
+ * converted to type TYPE_ID.
+ *
+ * The caller must allocate the SIZE[] and BUF[] arrays but
+ * memory for the data can be allocated by either the caller or
+ * the library. In the former case the caller should initialize
+ * the BUF[] array with pointers to valid memory and the SIZE[]
+ * array with the lengths of the buffers. In the latter case
+ * the caller should initialize BUF[] with null pointers (the
+ * input value of SIZE[] is irrelevant in this case) and the
+ * library will allocate memory for each row by calling malloc().
+ *
+ * Return: Success: SUCCEED. The values of the SIZE[] array will
+ * be the true length of each row. If a row is
+ * longer than the caller-allocated length then
+ * SIZE[] will contain the true length of the
+ * row although not all elements of that row
+ * will be stored in the buffer.
+ *
+ * Failure: FAIL. The BUF[] array will contain it's
+ * original pointers (null or otherwise)
+ * although the caller-supplied buffers may have
+ * been modified. The SIZE[] array may also be
+ * modified.
+ *
+ * Programmer: Robb Matzke
+ * Tuesday, August 25, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Rread(hid_t array_id, hssize_t start_row, hsize_t nrows,
+ hid_t type_id, hsize_t size[/*nrows*/], void *buf[/*nrows*/])
+{
+ H5R_t *ra=NULL;
+ H5T_t *type=NULL;
+
+ FUNC_ENTER(H5Rread, FAIL);
+ H5TRACE6("e","iHshi*[a2]h*[a2]x",array_id,start_row,nrows,type_id,size,
+ buf);
+
+ /* Check args */
+ if (H5_RAGGED!=H5I_group(array_id) ||
+ NULL==(ra=H5I_object(array_id))) {
+ HRETURN_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a ragged array");
+ }
+ if (H5_DATATYPE!=H5I_group(type_id) ||
+ NULL==(type=H5I_object(type_id))) {
+ HRETURN_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a data type");
+ }
+ if (nrows>0 && !size) {
+ HRETURN_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no size array");
+ }
+ if (nrows>0 && !buf) {
+ HRETURN_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no output buffer array");
+ }
+
+ /* Do the work */
+ if (H5R_read(ra, start_row, nrows, type, size, buf)<0) {
+ HRETURN_ERROR(H5E_RAGGED, H5E_READERROR, FAIL,
+ "unable to read ragged array");
+ }
+
+ FUNC_LEAVE(SUCCEED);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5R_read
+ *
+ * Purpose: Reads (part of) a ragged array. See H5Rread() for details.
+ *
+ * Return: Success: SUCCEED
+ *
+ * Failure: FAIL
+ *
+ * Programmer: Robb Matzke
+ * Wednesday, August 26, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5R_read(H5R_t *ra, hssize_t start_row, hsize_t nrows, H5T_t *type,
+ hsize_t size[], void *buf[])
+{
+ herr_t ret_value=FAIL;
+ H5R_meta_t *meta = NULL;
+ H5S_t *mf_space=NULL; /*meta file data space */
+ H5S_t *mm_space=NULL; /*meta memory data space */
+ H5S_t *rf_space=NULL; /*raw data file space */
+ H5S_t *rm_space=NULL; /*raw data memory space */
+ hsize_t meta_cur_size; /*current meta data nelmts */
+ hsize_t meta_read_size; /*amount of meta data to read */
+ hsize_t raw_cur_size[2]; /*raw data current size */
+ hsize_t raw_read_size; /*amount of raw data to read */
+ hssize_t hs_offset[2]; /*hyperslab offset */
+ hsize_t hs_size[2]; /*hyperslab size */
+ uint8 *raw_buf=NULL; /*raw buffer */
+ size_t type_size; /*size of the TYPE argument */
+ hsize_t i;
+
+ FUNC_ENTER(H5R_read, FAIL);
+
+ /* Check args */
+ assert(ra);
+ assert(type);
+ assert(0==nrows || size);
+ assert(0==nrows || buf);
+ if (0==nrows) HRETURN(SUCCEED);
+ type_size = H5T_get_size(type);
+
+ /* Read from the raw dataset */
+ if (NULL==(rf_space=H5D_get_space(ra->raw)) ||
+ H5S_extent_dims(rf_space, raw_cur_size, NULL)<0) {
+ HGOTO_ERROR(H5E_RAGGED, H5E_CANTINIT, FAIL,
+ "unable to determine current raw data extents");
+ }
+ if ((hsize_t)start_row>=raw_cur_size[0]) {
+ raw_read_size = 0;
+ } else {
+ raw_read_size = MIN(nrows, raw_cur_size[0]-(hsize_t)start_row);
+ }
+
+
+
+
+
+
+
+ /* Get the meta data */
+ if (NULL==(meta=H5MM_malloc(nrows*sizeof(H5R_meta_t)))) {
+ HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL,
+ "memory allocation failed for meta data");
+ }
+ if (NULL==(mf_space=H5D_get_space(ra->meta)) ||
+ H5S_extent_dims(mf_space, &meta_cur_size, NULL)<0) {
+ HGOTO_ERROR(H5E_RAGGED, H5E_CANTINIT, FAIL,
+ "unable to get current meta data extents");
+ }
+ if ((hsize_t)start_row>=meta_cur_size) {
+ meta_read_size = 0;
+ } else {
+ meta_read_size = MIN(nrows, meta_cur_size-(hsize_t)start_row);
+ }
+ if (NULL==(mm_space=H5S_create(H5S_SIMPLE)) ||
+ H5S_set_extent_simple(mm_space, 1, &meta_read_size, NULL)<0 ||
+ H5S_select_hyperslab(mf_space, H5S_SELECT_SET, &start_row, NULL,
+ &meta_read_size, NULL)<0) {
+ HGOTO_ERROR(H5E_RAGGED, H5E_CANTINIT, FAIL,
+ "unable to set meta data selection");
+ }
+ if (H5D_read(ra->meta, H5R_meta_type_g, mm_space, mf_space,
+ &H5D_xfer_dflt, meta)<0) {
+ HGOTO_ERROR(H5E_RAGGED, H5E_READERROR, FAIL,
+ "unable to read meta data");
+ }
+ HDmemset(meta+meta_read_size, 0,
+ (nrows-meta_read_size)*sizeof(H5R_meta_t));
+
+
+ HGOTO_ERROR(H5E_RAGGED, H5E_UNSUPPORTED, FAIL,
+ "not implemented yet");
+
+ done:
+ FUNC_LEAVE(ret_value);
+}
+
diff --git a/src/H5Rprivate.h b/src/H5Rprivate.h
new file mode 100644
index 0000000..c4b8471
--- /dev/null
+++ b/src/H5Rprivate.h
@@ -0,0 +1,27 @@
+/*
+ * Copyright © 1998 NCSA
+ * All rights reserved.
+ *
+ * Programmer: Robb Matzke <matzke@llnl.gov>
+ * Tuesday, August 25, 1998
+ */
+#ifndef _H5Rprivate_H
+#define _H5Rprivate_H
+#include <H5Rpublic.h>
+
+#include <H5Dprivate.h>
+#include <H5Gprivate.h>
+#include <H5Tprivate.h>
+
+typedef struct H5R_t H5R_t;
+
+herr_t H5R_close(H5R_t *ra);
+H5R_t *H5R_create(H5G_t *loc, const char *name, H5T_t *type,
+ const H5D_create_t *dcpl);
+H5R_t *H5R_open(H5G_t *loc, const char *name);
+herr_t H5R_write(H5R_t *ra, hssize_t start_row, hsize_t nrows, H5T_t *type,
+ hsize_t size[], void *buf[]);
+herr_t H5R_read(H5R_t *ra, hssize_t start_row, hsize_t nrows, H5T_t *type,
+ hsize_t size[], void *buf[]);
+
+#endif
diff --git a/src/H5Rpublic.h b/src/H5Rpublic.h
new file mode 100644
index 0000000..bcdcee7
--- /dev/null
+++ b/src/H5Rpublic.h
@@ -0,0 +1,28 @@
+/*
+ * Copyright © 1998 NCSA
+ * All rights reserved.
+ *
+ * Programmer: Robb Matzke <matzke@llnl.gov>
+ * Tuesday, August 25, 1998
+ */
+#ifndef _H5Rpublic_H
+#define _H5Rpublic_H
+
+#include <H5Ipublic.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+hid_t H5Rcreate(hid_t loc_id, const char *name, hid_t type_id, hid_t plist_id);
+hid_t H5Ropen(hid_t loc_id, const char *name);
+herr_t H5Rclose(hid_t array_id);
+herr_t H5Rwrite(hid_t array_id, hssize_t start_row, hsize_t nrows,
+ hid_t type_id, hsize_t size[], void *buf[]);
+herr_t H5Rread(hid_t array_id, hssize_t start_row, hsize_t nrows,
+ hid_t type_id, hsize_t size[], void *buf[]);
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/src/H5S.c b/src/H5S.c
index 48bde7c..7ff39bb 100644
--- a/src/H5S.c
+++ b/src/H5S.c
@@ -292,7 +292,7 @@ done:
REVISION LOG
--------------------------------------------------------------------------*/
hid_t
-H5Screate (H5S_class_t type)
+H5Screate(H5S_class_t type)
{
H5S_t *new_ds=NULL;
hid_t ret_value = FAIL;
@@ -426,7 +426,7 @@ H5S_close(H5S_t *ds)
*-------------------------------------------------------------------------
*/
herr_t
-H5Sclose (hid_t space_id)
+H5Sclose(hid_t space_id)
{
FUNC_ENTER(H5Sclose, FAIL);
H5TRACE1("e","i",space_id);
@@ -492,7 +492,7 @@ H5S_release_simple(H5S_simple_t *simple)
*-------------------------------------------------------------------------
*/
hid_t
-H5Scopy (hid_t space_id)
+H5Scopy(hid_t space_id)
{
H5S_t *src = NULL;
H5S_t *dst = NULL;
@@ -535,7 +535,7 @@ H5Scopy (hid_t space_id)
*-------------------------------------------------------------------------
*/
herr_t
-H5Sextent_copy (hid_t dst_id,hid_t src_id)
+H5Sextent_copy(hid_t dst_id,hid_t src_id)
{
H5S_t *src = NULL;
H5S_t *dst = NULL;
@@ -730,7 +730,7 @@ H5S_extent_npoints(const H5S_t *ds)
*-------------------------------------------------------------------------
*/
hsize_t
-H5Sextent_npoints (hid_t space_id)
+H5Sextent_npoints(hid_t space_id)
{
H5S_t *ds = NULL;
hsize_t ret_value = 0;
@@ -832,7 +832,7 @@ H5S_get_npoints_max(const H5S_t *ds)
*-------------------------------------------------------------------------
*/
int
-H5Sextent_ndims (hid_t space_id)
+H5Sextent_ndims(hid_t space_id)
{
H5S_t *ds = NULL;
intn ret_value = 0;
@@ -922,7 +922,7 @@ H5S_extent_ndims(const H5S_t *ds)
*-------------------------------------------------------------------------
*/
int
-H5Sextent_dims (hid_t space_id, hsize_t dims[]/*out*/,
+H5Sextent_dims(hid_t space_id, hsize_t dims[]/*out*/,
hsize_t maxdims[]/*out*/)
{
H5S_t *ds = NULL;
@@ -1215,7 +1215,7 @@ H5S_is_simple(const H5S_t *sdim)
has orthogonal, evenly spaced dimensions.
--------------------------------------------------------------------------*/
hbool_t
-H5Sis_simple (hid_t space_id)
+H5Sis_simple(hid_t space_id)
{
H5S_t *space = NULL; /* dataspace to modify */
hbool_t ret_value = FAIL;
@@ -1262,7 +1262,7 @@ H5Sis_simple (hid_t space_id)
dimension in the array (the slowest) may be unlimited in size.
--------------------------------------------------------------------------*/
herr_t
-H5Sset_extent_simple (hid_t space_id, int rank, const hsize_t dims[/*rank*/],
+H5Sset_extent_simple(hid_t space_id, int rank, const hsize_t dims[/*rank*/],
const hsize_t max[/*rank*/])
{
H5S_t *space = NULL; /* dataspace to modify */
@@ -1578,7 +1578,7 @@ H5S_extend (H5S_t *space, const hsize_t *size)
*-------------------------------------------------------------------------
*/
hid_t
-H5Screate_simple (int rank, const hsize_t dims[/*rank*/],
+H5Screate_simple(int rank, const hsize_t dims[/*rank*/],
const hsize_t maxdims[/*rank*/])
{
hid_t ret_value = FAIL;
@@ -1646,7 +1646,7 @@ H5Screate_simple (int rank, const hsize_t dims[/*rank*/],
*-------------------------------------------------------------------------
*/
H5S_class_t
-H5Sextent_class (hid_t sid)
+H5Sextent_class(hid_t sid)
{
H5S_class_t ret_value = H5S_NO_CLASS;
H5S_t *space = NULL;
@@ -1680,7 +1680,7 @@ H5Sextent_class (hid_t sid)
extent information stored for the dataspace.
--------------------------------------------------------------------------*/
herr_t
-H5Sset_extent_none (hid_t space_id)
+H5Sset_extent_none(hid_t space_id)
{
H5S_t *space = NULL; /* dataspace to modify */
@@ -1718,7 +1718,7 @@ H5Sset_extent_none (hid_t space_id)
dataspace without requiring it to be re-defined.
--------------------------------------------------------------------------*/
herr_t
-H5Soffset_simple (hid_t space_id, const hssize_t *offset)
+H5Soffset_simple(hid_t space_id, const hssize_t *offset)
{
H5S_t *space = NULL; /* dataspace to modify */
diff --git a/src/H5Shyper.c b/src/H5Shyper.c
index d9a0e4a..cd0138c 100644
--- a/src/H5Shyper.c
+++ b/src/H5Shyper.c
@@ -1698,6 +1698,11 @@ done:
COMMENTS, BUGS, ASSUMPTIONS
EXAMPLES
REVISION LOG
+ * Robb Matzke, 1998-08-25
+ * The fields which are freed are set to NULL to prevent them from being
+ * freed again later. This fixes some allocation problems where
+ * changing the hyperslab selection of one data space causes a core dump
+ * when closing some other data space.
--------------------------------------------------------------------------*/
herr_t
H5S_hyper_release (H5S_t *space)
@@ -1718,21 +1723,26 @@ H5S_hyper_release (H5S_t *space)
/* Release the per-dimension selection info */
H5MM_xfree(space->select.sel_info.hyper.diminfo);
+ space->select.sel_info.hyper.diminfo = NULL;
/* Release hi and lo boundary information */
for(i=0; i<space->extent.u.simple.rank; i++) {
H5MM_xfree(space->select.sel_info.hyper.hyper_lst->lo_bounds[i]);
+ space->select.sel_info.hyper.hyper_lst->lo_bounds[i] = NULL;
H5MM_xfree(space->select.sel_info.hyper.hyper_lst->hi_bounds[i]);
+ space->select.sel_info.hyper.hyper_lst->hi_bounds[i] = NULL;
} /* end for */
H5MM_xfree(space->select.sel_info.hyper.hyper_lst->lo_bounds);
+ space->select.sel_info.hyper.hyper_lst->lo_bounds = NULL;
H5MM_xfree(space->select.sel_info.hyper.hyper_lst->hi_bounds);
+ space->select.sel_info.hyper.hyper_lst->hi_bounds = NULL;
/* Release list of selected regions */
curr=space->select.sel_info.hyper.hyper_lst->head;
while(curr!=NULL) {
next=curr->next;
- H5MM_xfree(curr->start);
- H5MM_xfree(curr->end);
+ curr->start = H5MM_xfree(curr->start);
+ curr->end = H5MM_xfree(curr->end);
H5MM_xfree(curr);
curr=next;
} /* end while */
diff --git a/src/H5Sprivate.h b/src/H5Sprivate.h
index 1e2ca6f..24dd4f6 100644
--- a/src/H5Sprivate.h
+++ b/src/H5Sprivate.h
@@ -285,6 +285,11 @@ intn H5S_cmp (const H5S_t *ds1, const H5S_t *ds2);
hbool_t H5S_is_simple (const H5S_t *sdim);
uintn H5S_nelem (const H5S_t *space);
H5S_conv_t *H5S_find (const H5S_t *mem_space, const H5S_t *file_space);
+herr_t H5S_select_hyperslab (H5S_t *space, H5S_seloper_t op,
+ const hssize_t start[],
+ const hsize_t _stride[],
+ const hsize_t count[],
+ const hsize_t _block[]);
intn H5S_get_hyperslab (const H5S_t *ds, hssize_t offset[]/*out*/,
hsize_t size[]/*out*/, hsize_t stride[]/*out*/);
herr_t H5S_release_simple(H5S_simple_t *simple);
diff --git a/src/H5Sselect.c b/src/H5Sselect.c
index 1426f59..f790021 100644
--- a/src/H5Sselect.c
+++ b/src/H5Sselect.c
@@ -182,22 +182,25 @@ H5S_select_release (H5S_t *space)
assert (space);
switch(space->select.type) {
- case H5S_SEL_POINTS: /* Sequence of points selected */
- ret_value=H5S_point_release(space);
- break;
+ case H5S_SEL_POINTS: /* Sequence of points selected */
+ ret_value=H5S_point_release(space);
+ break;
- case H5S_SEL_HYPERSLABS: /* Hyperslab selection defined */
- ret_value=H5S_hyper_release(space);
- break;
+ case H5S_SEL_HYPERSLABS: /* Hyperslab selection defined */
+ ret_value=H5S_hyper_release(space);
+ break;
- case H5S_SEL_ALL: /* Entire extent selected */
- ret_value=H5S_all_release(space);
- break;
+ case H5S_SEL_ALL: /* Entire extent selected */
+ ret_value=H5S_all_release(space);
+ break;
- case H5S_SEL_NONE: /* Nothing selected */
- default:
- break;
- } /* end switch() */
+ case H5S_SEL_NONE: /* Nothing selected */
+ break;
+
+ case H5S_SEL_ERROR:
+ case H5S_SEL_N:
+ break;
+ }
/* Reset type of selection to "all" */
space->select.type=H5S_SEL_ALL;
@@ -233,22 +236,13 @@ H5S_select_release (H5S_t *space)
REVISION LOG
--------------------------------------------------------------------------*/
herr_t
-H5Sselect_hyperslab (hid_t space_id, H5S_seloper_t op,
+H5Sselect_hyperslab(hid_t space_id, H5S_seloper_t op,
const hssize_t start[/*space_id*/],
const hsize_t _stride[/*space_id*/],
const hsize_t count[/*space_id*/],
const hsize_t _block[/*space_id*/])
{
H5S_t *space = NULL; /* Dataspace to modify selection of */
- hsize_t *stride, /* Stride array */
- *block=NULL; /* Block size array */
- hssize_t slab[H5O_LAYOUT_NDIMS]; /* Location of the block to add for strided selections */
- size_t slice[H5O_LAYOUT_NDIMS]; /* Size of preceding dimension's slice */
- uintn acc; /* Accumulator for building slices */
- uintn contig; /* whether selection is contiguous or not */
- int i,j; /* Counters */
- H5S_hyper_dim_t *diminfo; /* per-dimension info for the selection */
- herr_t ret_value=FAIL; /* return value */
FUNC_ENTER (H5Sselect_hyperslab, FAIL);
H5TRACE6("e","iSs*[a0]Hs*[a0]h*[a0]h*[a0]h",space_id,op,start,_stride,
@@ -261,41 +255,103 @@ H5Sselect_hyperslab (hid_t space_id, H5S_seloper_t op,
}
if(start==NULL || count==NULL) {
HRETURN_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "hyperslab not specified");
- } /* end if */
+ }
if(op!=H5S_SELECT_SET) {
HRETURN_ERROR(H5E_ARGS, H5E_UNSUPPORTED, FAIL,
"operations other than H5S_SELECT_SET not supported currently");
- } /* end if */
+ }
+
+ if (H5S_select_hyperslab(space, op, start, _stride, count, _block)<0) {
+ HRETURN_ERROR(H5E_DATASPACE, H5E_CANTINIT, FAIL,
+ "unable to set hyperslab selection");
+ }
+ FUNC_LEAVE (SUCCEED);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5S_select_hyperslab
+ *
+ * Purpose: Internal version of H5Sselect_hyperslab().
+ *
+ * Return: Success: SUCCEED
+ *
+ * Failure: FAIL
+ *
+ * Programmer: Robb Matzke (split from HSselect_hyperslab()).
+ * Tuesday, August 25, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5S_select_hyperslab (H5S_t *space, H5S_seloper_t op,
+ const hssize_t start[/*space_id*/],
+ const hsize_t stride[/*space_id*/],
+ const hsize_t count[/*space_id*/],
+ const hsize_t block[/*space_id*/])
+{
+
+ hsize_t *_stride=NULL; /* Stride array */
+ hsize_t *_block=NULL; /* Block size array */
+ hssize_t slab[H5O_LAYOUT_NDIMS]; /* Location of the block to add for strided selections */
+ size_t slice[H5O_LAYOUT_NDIMS]; /* Size of preceding dimension's slice */
+ uintn acc; /* Accumulator for building slices */
+ uintn contig; /* whether selection is contiguous or not */
+ int i,j; /* Counters */
+ H5S_hyper_dim_t *diminfo; /* per-dimension info for the selection */
+ herr_t ret_value=FAIL; /* return value */
+
+ FUNC_ENTER (H5S_select_hyperslab, FAIL);
+
+ /* Check args */
+ assert(space);
+ assert(start);
+ assert(count);
+ assert(H5S_SELECT_SET==op);
+
/* Fill in the correct stride values */
- if(_stride==NULL) {
+ if(stride==NULL) {
hssize_t fill=1;
- if((stride = H5MM_malloc(sizeof(hssize_t)*space->extent.u.simple.rank))==NULL)
+ if((_stride = H5MM_malloc(sizeof(hssize_t)*space->extent.u.simple.rank))==NULL)
HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL,
"can't allocate stride vector");
- H5V_array_fill(stride,&fill,sizeof(hssize_t),space->extent.u.simple.rank);
- } else {
- stride=(hsize_t *)_stride;
- } /* end else */
+ H5V_array_fill(_stride,&fill,sizeof(hssize_t),space->extent.u.simple.rank);
+ stride = _stride;
+ }
/* Fill in the correct block values */
- if(_block==NULL) {
+ if(block==NULL) {
hssize_t fill=1;
- if((block = H5MM_malloc(sizeof(hssize_t)*space->extent.u.simple.rank))==NULL)
+ if((_block = H5MM_malloc(sizeof(hssize_t)*space->extent.u.simple.rank))==NULL)
HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL,
"can't allocate block vector");
- H5V_array_fill(block,&fill,sizeof(hssize_t),space->extent.u.simple.rank);
- } else {
- block=(hsize_t *)_block;
- } /* end else */
+ H5V_array_fill(_block,&fill,sizeof(hssize_t),space->extent.u.simple.rank);
+ block = _block;
+ }
+
+ /* Copy all the per-dimension selection info into the space descriptor */
+ if((diminfo = H5MM_malloc(sizeof(H5S_hyper_dim_t)*space->extent.u.simple.rank))==NULL) {
+ HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL,
+ "can't allocate per-dimension vector");
+ } /* end if */
+ for(i=0; i<space->extent.u.simple.rank; i++) {
+ diminfo[i].start = start[i];
+ diminfo[i].stride = stride[i];
+ diminfo[i].count = count[i];
+ diminfo[i].block = block[i];
+ } /* end for */
+ space->select.sel_info.hyper.diminfo = diminfo;
/*
* Check for overlapping blocks (remove when real block-merging algorithm
* is in place).
*/
- if(op==H5S_SELECT_SET && _block!=NULL) {
+ if(op==H5S_SELECT_SET && block!=NULL) {
for(i=0; i<space->extent.u.simple.rank; i++) {
if(stride[i]<block[i]) {
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL,
@@ -410,13 +466,11 @@ H5Sselect_hyperslab (hid_t space_id, H5S_seloper_t op,
#endif /* QAK */
done:
- if(_stride==NULL && stride!=NULL)
- H5MM_xfree(stride);
- if(_block==NULL && block!=NULL)
- H5MM_xfree(block);
-
+ H5MM_xfree(_stride);
+ H5MM_xfree(_block);
FUNC_LEAVE (ret_value);
-} /* H5Sselect_hyperslab() */
+}
+
/*--------------------------------------------------------------------------
NAME
@@ -616,7 +670,7 @@ done:
REVISION LOG
--------------------------------------------------------------------------*/
hsize_t
-H5Sselect_npoints (hid_t spaceid)
+H5Sselect_npoints(hid_t spaceid)
{
H5S_t *space = NULL; /* Dataspace to modify selection of */
hsize_t ret_value=0; /* return value */
@@ -662,23 +716,26 @@ H5S_select_npoints (const H5S_t *space)
assert(space);
switch(space->select.type) {
- case H5S_SEL_POINTS: /* Sequence of points selected */
- ret_value=H5S_point_npoints(space);
- break;
+ case H5S_SEL_POINTS: /* Sequence of points selected */
+ ret_value=H5S_point_npoints(space);
+ break;
- case H5S_SEL_HYPERSLABS: /* Hyperslab selection defined */
- ret_value=H5S_hyper_npoints(space);
- break;
+ case H5S_SEL_HYPERSLABS: /* Hyperslab selection defined */
+ ret_value=H5S_hyper_npoints(space);
+ break;
- case H5S_SEL_ALL: /* Entire extent selected */
- ret_value=H5S_all_npoints(space);
- break;
+ case H5S_SEL_ALL: /* Entire extent selected */
+ ret_value=H5S_all_npoints(space);
+ break;
- case H5S_SEL_NONE: /* Nothing selected */
- default:
- ret_value=0;
- break;
- } /* end switch */
+ case H5S_SEL_NONE: /* Nothing selected */
+ ret_value=0;
+ break;
+
+ case H5S_SEL_ERROR:
+ case H5S_SEL_N:
+ break;
+ }
FUNC_LEAVE (ret_value);
} /* H5Sselect_npoints() */
@@ -712,20 +769,23 @@ H5S_sel_iter_release (const H5S_t *space, H5S_sel_iter_t *sel_iter)
assert (sel_iter);
switch(space->select.type) {
- case H5S_SEL_POINTS: /* Sequence of points selected */
- case H5S_SEL_ALL: /* Entire extent selected */
- /* no action needed */
- ret_value=SUCCEED;
- break;
-
- case H5S_SEL_HYPERSLABS: /* Hyperslab selection defined */
- ret_value=H5S_hyper_sel_iter_release(sel_iter);
- break;
-
- case H5S_SEL_NONE: /* Nothing selected */
- default:
- break;
- } /* end switch() */
+ case H5S_SEL_POINTS: /* Sequence of points selected */
+ case H5S_SEL_ALL: /* Entire extent selected */
+ /* no action needed */
+ ret_value=SUCCEED;
+ break;
+
+ case H5S_SEL_HYPERSLABS: /* Hyperslab selection defined */
+ ret_value=H5S_hyper_sel_iter_release(sel_iter);
+ break;
+
+ case H5S_SEL_NONE: /* Nothing selected */
+ break;
+
+ case H5S_SEL_ERROR:
+ case H5S_SEL_N:
+ break;
+ }
FUNC_LEAVE (ret_value);
} /* H5S_sel_iter_release() */
@@ -751,7 +811,7 @@ H5S_sel_iter_release (const H5S_t *space, H5S_sel_iter_t *sel_iter)
REVISION LOG
--------------------------------------------------------------------------*/
hbool_t
-H5Sselect_valid (hid_t spaceid)
+H5Sselect_valid(hid_t spaceid)
{
H5S_t *space = NULL; /* Dataspace to modify selection of */
hbool_t ret_value=FAIL; /* return value */
@@ -800,20 +860,23 @@ H5S_select_valid (const H5S_t *space)
assert(space);
switch(space->select.type) {
- case H5S_SEL_POINTS: /* Sequence of points selected */
- ret_value=H5S_point_select_valid(space);
- break;
-
- case H5S_SEL_HYPERSLABS: /* Hyperslab selection defined */
- ret_value=H5S_hyper_select_valid(space);
- break;
-
- case H5S_SEL_ALL: /* Entire extent selected */
- case H5S_SEL_NONE: /* Nothing selected */
- default:
- ret_value=TRUE;
- break;
- } /* end switch */
+ case H5S_SEL_POINTS: /* Sequence of points selected */
+ ret_value=H5S_point_select_valid(space);
+ break;
+
+ case H5S_SEL_HYPERSLABS: /* Hyperslab selection defined */
+ ret_value=H5S_hyper_select_valid(space);
+ break;
+
+ case H5S_SEL_ALL: /* Entire extent selected */
+ case H5S_SEL_NONE: /* Nothing selected */
+ ret_value=TRUE;
+ break;
+
+ case H5S_SEL_ERROR:
+ case H5S_SEL_N:
+ break;
+ }
FUNC_LEAVE (ret_value);
} /* H5S_select_valid() */
diff --git a/src/H5T.c b/src/H5T.c
index 8b324bc..86e73a0 100644
--- a/src/H5T.c
+++ b/src/H5T.c
@@ -846,7 +846,7 @@ H5T_term_interface(void)
*-------------------------------------------------------------------------
*/
hid_t
-H5Tcreate (H5T_class_t type, size_t size)
+H5Tcreate(H5T_class_t type, size_t size)
{
H5T_t *dt = NULL;
hid_t ret_value = FAIL;
@@ -891,7 +891,7 @@ H5Tcreate (H5T_class_t type, size_t size)
*-------------------------------------------------------------------------
*/
hid_t
-H5Topen (hid_t loc_id, const char *name)
+H5Topen(hid_t loc_id, const char *name)
{
H5G_t *loc = NULL;
H5T_t *type = NULL;
@@ -943,7 +943,7 @@ H5Topen (hid_t loc_id, const char *name)
*-------------------------------------------------------------------------
*/
herr_t
-H5Tcommit (hid_t loc_id, const char *name, hid_t type_id)
+H5Tcommit(hid_t loc_id, const char *name, hid_t type_id)
{
H5G_t *loc = NULL;
H5T_t *type = NULL;
@@ -990,7 +990,7 @@ H5Tcommit (hid_t loc_id, const char *name, hid_t type_id)
*-------------------------------------------------------------------------
*/
hbool_t
-H5Tcommitted (hid_t type_id)
+H5Tcommitted(hid_t type_id)
{
H5T_t *type = NULL;
@@ -1032,7 +1032,7 @@ H5Tcommitted (hid_t type_id)
*-------------------------------------------------------------------------
*/
hid_t
-H5Tcopy (hid_t type_id)
+H5Tcopy(hid_t type_id)
{
H5T_t *dt = NULL;
H5T_t *new_dt = NULL;
@@ -1099,7 +1099,7 @@ H5Tcopy (hid_t type_id)
*-------------------------------------------------------------------------
*/
herr_t
-H5Tclose (hid_t type_id)
+H5Tclose(hid_t type_id)
{
H5T_t *dt = NULL;
@@ -1143,7 +1143,7 @@ H5Tclose (hid_t type_id)
*-------------------------------------------------------------------------
*/
hbool_t
-H5Tequal (hid_t type1_id, hid_t type2_id)
+H5Tequal(hid_t type1_id, hid_t type2_id)
{
const H5T_t *dt1 = NULL;
const H5T_t *dt2 = NULL;
@@ -1192,7 +1192,7 @@ H5Tequal (hid_t type1_id, hid_t type2_id)
*-------------------------------------------------------------------------
*/
herr_t
-H5Tlock (hid_t type_id)
+H5Tlock(hid_t type_id)
{
H5T_t *dt = NULL;
@@ -1235,7 +1235,7 @@ H5Tlock (hid_t type_id)
*-------------------------------------------------------------------------
*/
H5T_class_t
-H5Tget_class (hid_t type_id)
+H5Tget_class(hid_t type_id)
{
H5T_t *dt = NULL;
@@ -1271,7 +1271,7 @@ H5Tget_class (hid_t type_id)
*-------------------------------------------------------------------------
*/
size_t
-H5Tget_size (hid_t type_id)
+H5Tget_size(hid_t type_id)
{
H5T_t *dt = NULL;
size_t size;
@@ -1321,7 +1321,7 @@ H5Tget_size (hid_t type_id)
*-------------------------------------------------------------------------
*/
herr_t
-H5Tset_size (hid_t type_id, size_t size)
+H5Tset_size(hid_t type_id, size_t size)
{
H5T_t *dt = NULL;
size_t prec, offset;
@@ -1419,7 +1419,7 @@ H5Tset_size (hid_t type_id, size_t size)
*-------------------------------------------------------------------------
*/
H5T_order_t
-H5Tget_order (hid_t type_id)
+H5Tget_order(hid_t type_id)
{
H5T_t *dt = NULL;
H5T_order_t order;
@@ -1459,7 +1459,7 @@ H5Tget_order (hid_t type_id)
*-------------------------------------------------------------------------
*/
herr_t
-H5Tset_order (hid_t type_id, H5T_order_t order)
+H5Tset_order(hid_t type_id, H5T_order_t order)
{
H5T_t *dt = NULL;
@@ -1506,7 +1506,7 @@ H5Tset_order (hid_t type_id, H5T_order_t order)
*-------------------------------------------------------------------------
*/
size_t
-H5Tget_precision (hid_t type_id)
+H5Tget_precision(hid_t type_id)
{
H5T_t *dt = NULL;
size_t prec;
@@ -1558,7 +1558,7 @@ H5Tget_precision (hid_t type_id)
*-------------------------------------------------------------------------
*/
herr_t
-H5Tset_precision (hid_t type_id, size_t prec)
+H5Tset_precision(hid_t type_id, size_t prec)
{
H5T_t *dt = NULL;
size_t offset, size;
@@ -1662,7 +1662,7 @@ H5Tset_precision (hid_t type_id, size_t prec)
*-------------------------------------------------------------------------
*/
size_t
-H5Tget_offset (hid_t type_id)
+H5Tget_offset(hid_t type_id)
{
H5T_t *dt = NULL;
size_t offset;
@@ -1724,7 +1724,7 @@ H5Tget_offset (hid_t type_id)
*-------------------------------------------------------------------------
*/
herr_t
-H5Tset_offset (hid_t type_id, size_t offset)
+H5Tset_offset(hid_t type_id, size_t offset)
{
H5T_t *dt = NULL;
@@ -1776,7 +1776,7 @@ H5Tset_offset (hid_t type_id, size_t offset)
*-------------------------------------------------------------------------
*/
herr_t
-H5Tget_pad (hid_t type_id, H5T_pad_t *lsb/*out*/, H5T_pad_t *msb/*out*/)
+H5Tget_pad(hid_t type_id, H5T_pad_t *lsb/*out*/, H5T_pad_t *msb/*out*/)
{
H5T_t *dt = NULL;
@@ -1815,7 +1815,7 @@ H5Tget_pad (hid_t type_id, H5T_pad_t *lsb/*out*/, H5T_pad_t *msb/*out*/)
*-------------------------------------------------------------------------
*/
herr_t
-H5Tset_pad (hid_t type_id, H5T_pad_t lsb, H5T_pad_t msb)
+H5Tset_pad(hid_t type_id, H5T_pad_t lsb, H5T_pad_t msb)
{
H5T_t *dt = NULL;
@@ -1860,7 +1860,7 @@ H5Tset_pad (hid_t type_id, H5T_pad_t lsb, H5T_pad_t msb)
*-------------------------------------------------------------------------
*/
H5T_sign_t
-H5Tget_sign (hid_t type_id)
+H5Tget_sign(hid_t type_id)
{
H5T_t *dt = NULL;
H5T_sign_t sign;
@@ -1900,7 +1900,7 @@ H5Tget_sign (hid_t type_id)
*-------------------------------------------------------------------------
*/
herr_t
-H5Tset_sign (hid_t type_id, H5T_sign_t sign)
+H5Tset_sign(hid_t type_id, H5T_sign_t sign)
{
H5T_t *dt = NULL;
@@ -1949,7 +1949,7 @@ H5Tset_sign (hid_t type_id, H5T_sign_t sign)
*-------------------------------------------------------------------------
*/
herr_t
-H5Tget_fields (hid_t type_id, size_t *spos/*out*/,
+H5Tget_fields(hid_t type_id, size_t *spos/*out*/,
size_t *epos/*out*/, size_t *esize/*out*/,
size_t *mpos/*out*/, size_t *msize/*out*/)
{
@@ -2000,7 +2000,7 @@ H5Tget_fields (hid_t type_id, size_t *spos/*out*/,
*-------------------------------------------------------------------------
*/
herr_t
-H5Tset_fields (hid_t type_id, size_t spos, size_t epos, size_t esize,
+H5Tset_fields(hid_t type_id, size_t spos, size_t epos, size_t esize,
size_t mpos, size_t msize)
{
H5T_t *dt = NULL;
@@ -2074,7 +2074,7 @@ H5Tset_fields (hid_t type_id, size_t spos, size_t epos, size_t esize,
*-------------------------------------------------------------------------
*/
size_t
-H5Tget_ebias (hid_t type_id)
+H5Tget_ebias(hid_t type_id)
{
H5T_t *dt = NULL;
size_t ebias;
@@ -2114,7 +2114,7 @@ H5Tget_ebias (hid_t type_id)
*-------------------------------------------------------------------------
*/
herr_t
-H5Tset_ebias (hid_t type_id, size_t ebias)
+H5Tset_ebias(hid_t type_id, size_t ebias)
{
H5T_t *dt = NULL;
@@ -2157,7 +2157,7 @@ H5Tset_ebias (hid_t type_id, size_t ebias)
*-------------------------------------------------------------------------
*/
H5T_norm_t
-H5Tget_norm (hid_t type_id)
+H5Tget_norm(hid_t type_id)
{
H5T_t *dt = NULL;
H5T_norm_t norm;
@@ -2198,7 +2198,7 @@ H5Tget_norm (hid_t type_id)
*-------------------------------------------------------------------------
*/
herr_t
-H5Tset_norm (hid_t type_id, H5T_norm_t norm)
+H5Tset_norm(hid_t type_id, H5T_norm_t norm)
{
H5T_t *dt = NULL;
@@ -2245,7 +2245,7 @@ H5Tset_norm (hid_t type_id, H5T_norm_t norm)
*-------------------------------------------------------------------------
*/
H5T_pad_t
-H5Tget_inpad (hid_t type_id)
+H5Tget_inpad(hid_t type_id)
{
H5T_t *dt = NULL;
H5T_pad_t pad;
@@ -2288,7 +2288,7 @@ H5Tget_inpad (hid_t type_id)
*-------------------------------------------------------------------------
*/
herr_t
-H5Tset_inpad (hid_t type_id, H5T_pad_t pad)
+H5Tset_inpad(hid_t type_id, H5T_pad_t pad)
{
H5T_t *dt = NULL;
@@ -2335,7 +2335,7 @@ H5Tset_inpad (hid_t type_id, H5T_pad_t pad)
*-------------------------------------------------------------------------
*/
H5T_cset_t
-H5Tget_cset (hid_t type_id)
+H5Tget_cset(hid_t type_id)
{
H5T_t *dt = NULL;
H5T_cset_t cset;
@@ -2377,7 +2377,7 @@ H5Tget_cset (hid_t type_id)
*-------------------------------------------------------------------------
*/
herr_t
-H5Tset_cset (hid_t type_id, H5T_cset_t cset)
+H5Tset_cset(hid_t type_id, H5T_cset_t cset)
{
H5T_t *dt = NULL;
@@ -2424,7 +2424,7 @@ H5Tset_cset (hid_t type_id, H5T_cset_t cset)
*-------------------------------------------------------------------------
*/
H5T_str_t
-H5Tget_strpad (hid_t type_id)
+H5Tget_strpad(hid_t type_id)
{
H5T_t *dt = NULL;
H5T_str_t strpad;
@@ -2477,7 +2477,7 @@ H5Tget_strpad (hid_t type_id)
*-------------------------------------------------------------------------
*/
herr_t
-H5Tset_strpad (hid_t type_id, H5T_str_t strpad)
+H5Tset_strpad(hid_t type_id, H5T_str_t strpad)
{
H5T_t *dt = NULL;
@@ -2523,7 +2523,7 @@ H5Tset_strpad (hid_t type_id, H5T_str_t strpad)
*-------------------------------------------------------------------------
*/
int
-H5Tget_nmembers (hid_t type_id)
+H5Tget_nmembers(hid_t type_id)
{
H5T_t *dt = NULL;
@@ -2607,7 +2607,7 @@ H5Tget_member_name(hid_t type_id, int membno)
*-------------------------------------------------------------------------
*/
size_t
-H5Tget_member_offset (hid_t type_id, int membno)
+H5Tget_member_offset(hid_t type_id, int membno)
{
H5T_t *dt = NULL;
size_t offset = 0;
@@ -2652,7 +2652,7 @@ H5Tget_member_offset (hid_t type_id, int membno)
*-------------------------------------------------------------------------
*/
int
-H5Tget_member_dims (hid_t type_id, int membno,
+H5Tget_member_dims(hid_t type_id, int membno,
size_t dims[]/*out*/, int perm[]/*out*/)
{
H5T_t *dt = NULL;
@@ -2707,7 +2707,7 @@ H5Tget_member_dims (hid_t type_id, int membno,
*-------------------------------------------------------------------------
*/
hid_t
-H5Tget_member_type (hid_t type_id, int membno)
+H5Tget_member_type(hid_t type_id, int membno)
{
H5T_t *dt = NULL, *memb_dt = NULL;
hid_t memb_type_id;
@@ -2770,7 +2770,7 @@ H5Tget_member_type (hid_t type_id, int membno)
*-------------------------------------------------------------------------
*/
herr_t
-H5Tinsert (hid_t parent_id, const char *name, size_t offset, hid_t member_id)
+H5Tinsert(hid_t parent_id, const char *name, size_t offset, hid_t member_id)
{
H5T_t *parent = NULL; /*the compound parent data type */
H5T_t *member = NULL; /*the atomic member type */
@@ -2828,7 +2828,7 @@ H5Tinsert (hid_t parent_id, const char *name, size_t offset, hid_t member_id)
*-------------------------------------------------------------------------
*/
herr_t
-H5Tinsert_array (hid_t parent_id, const char *name, size_t offset,
+H5Tinsert_array(hid_t parent_id, const char *name, size_t offset,
int ndims, const size_t dim[/*ndims*/], const int *perm,
hid_t member_id)
{
@@ -2896,7 +2896,7 @@ H5Tinsert_array (hid_t parent_id, const char *name, size_t offset,
*-------------------------------------------------------------------------
*/
herr_t
-H5Tpack (hid_t type_id)
+H5Tpack(hid_t type_id)
{
H5T_t *dt = NULL;
@@ -2949,7 +2949,7 @@ H5Tpack (hid_t type_id)
*-------------------------------------------------------------------------
*/
herr_t
-H5Tregister_hard (const char *name, hid_t src_id, hid_t dst_id,
+H5Tregister_hard(const char *name, hid_t src_id, hid_t dst_id,
H5T_conv_t func)
{
H5T_t *src = NULL;
@@ -3013,7 +3013,7 @@ H5Tregister_hard (const char *name, hid_t src_id, hid_t dst_id,
*-------------------------------------------------------------------------
*/
herr_t
-H5Tregister_soft (const char *name, H5T_class_t src_cls, H5T_class_t dst_cls,
+H5Tregister_soft(const char *name, H5T_class_t src_cls, H5T_class_t dst_cls,
H5T_conv_t func)
{
intn i;
@@ -3140,7 +3140,7 @@ H5Tregister_soft (const char *name, H5T_class_t src_cls, H5T_class_t dst_cls,
*-------------------------------------------------------------------------
*/
herr_t
-H5Tunregister (H5T_conv_t func)
+H5Tunregister(H5T_conv_t func)
{
intn i, j;
H5T_path_t *path = NULL;
@@ -3262,7 +3262,7 @@ H5Tunregister (H5T_conv_t func)
*-------------------------------------------------------------------------
*/
H5T_conv_t
-H5Tfind (hid_t src_id, hid_t dst_id, H5T_cdata_t **pcdata)
+H5Tfind(hid_t src_id, hid_t dst_id, H5T_cdata_t **pcdata)
{
H5T_conv_t ret_value = NULL;
H5T_t *src = NULL, *dst = NULL;
@@ -3318,7 +3318,7 @@ H5Tfind (hid_t src_id, hid_t dst_id, H5T_cdata_t **pcdata)
*-------------------------------------------------------------------------
*/
herr_t
-H5Tconvert (hid_t src_id, hid_t dst_id, size_t nelmts, void *buf,
+H5Tconvert(hid_t src_id, hid_t dst_id, size_t nelmts, void *buf,
void *background)
{
H5T_cdata_t *cdata = NULL; /*conversion data */
@@ -3383,7 +3383,7 @@ H5Tconvert (hid_t src_id, hid_t dst_id, size_t nelmts, void *buf,
*-------------------------------------------------------------------------
*/
H5T_overflow_t
-H5Tget_overflow (void)
+H5Tget_overflow(void)
{
FUNC_ENTER(H5Tget_overflow, NULL);
H5TRACE0("x","");
@@ -3418,7 +3418,7 @@ H5Tget_overflow (void)
*-------------------------------------------------------------------------
*/
herr_t
-H5Tset_overflow (H5T_overflow_t func)
+H5Tset_overflow(H5T_overflow_t func)
{
FUNC_ENTER(H5Tset_overflow, FAIL);
H5TRACE1("e","x",func);
diff --git a/src/H5TB.c b/src/H5TB.c
index 3a3e628..d625bfc 100644
--- a/src/H5TB.c
+++ b/src/H5TB.c
@@ -169,7 +169,7 @@ herr_t H5TB_close(H5TB_t *tb)
REVISION LOG
--------------------------------------------------------------------------*/
hid_t
-H5TBget_buf (hsize_t size, hbool_t resize)
+H5TBget_buf(hsize_t size, hbool_t resize)
{
hid_t ret_value = FAIL;
H5TB_t *curr=H5TB_list_head, /* pointer to current temp. buffer */
@@ -335,7 +335,7 @@ done:
REVISION LOG
--------------------------------------------------------------------------*/
herr_t
-H5TBresize_ptr (hid_t tbuf_id, hsize_t size)
+H5TBresize_ptr(hid_t tbuf_id, hsize_t size)
{
herr_t ret_value = FAIL;
H5TB_t *tbuf, /* Pointer to temporary buffer */
@@ -430,7 +430,7 @@ done:
REVISION LOG
--------------------------------------------------------------------------*/
herr_t
-H5TBgarbage_coll (void)
+H5TBgarbage_coll(void)
{
herr_t ret_value = FAIL;
H5TB_t *curr,*next; /* Current temp. buffer node */
@@ -494,7 +494,7 @@ done:
REVISION LOG
--------------------------------------------------------------------------*/
herr_t
-H5TBrelease_buf (hid_t tbuf_id)
+H5TBrelease_buf(hid_t tbuf_id)
{
herr_t ret_value = FAIL;
H5TB_t *tbuf; /* Pointer to temporary buffer */
diff --git a/src/H5Tconv.c b/src/H5Tconv.c
index ce0df3e..a8dcbf3 100644
--- a/src/H5Tconv.c
+++ b/src/H5Tconv.c
@@ -64,7 +64,6 @@ H5T_conv_noop(hid_t __unused__ src_id, hid_t __unused__ dst_id,
break;
case H5T_CONV_FREE:
- /* Nothing to free */
cdata->stats = H5MM_xfree (cdata->stats);
break;
@@ -1345,7 +1344,7 @@ H5T_conv_s_s (hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts,
intn direction; /*direction of traversal */
size_t elmtno; /*element number */
size_t olap; /*num overlapping elements */
- size_t nchars; /*number of characters copied */
+ size_t nchars=0; /*number of characters copied */
uint8 *s, *sp, *d, *dp; /*src and dst traversal pointers*/
uint8 *dbuf=NULL; /*temp buf for overlap convers. */
herr_t ret_value=FAIL; /*return value */
diff --git a/src/H5Z.c b/src/H5Z.c
index f7a410d..349e978 100644
--- a/src/H5Z.c
+++ b/src/H5Z.c
@@ -160,7 +160,7 @@ H5Z_term_interface (void)
*-------------------------------------------------------------------------
*/
herr_t
-H5Zregister (H5Z_filter_t id, const char *comment, H5Z_func_t func)
+H5Zregister(H5Z_filter_t id, const char *comment, H5Z_func_t func)
{
FUNC_ENTER (H5Zregister, FAIL);
H5TRACE3("e","Zfsx",id,comment,func);
diff --git a/src/H5private.h b/src/H5private.h
index e0147e5..99da0dd 100644
--- a/src/H5private.h
+++ b/src/H5private.h
@@ -86,6 +86,9 @@
# define MAX4(a,b,c,d) MAX(MAX(a,b),MAX(c,d))
#endif
+/* limit the middle value to be within a range (inclusive) */
+#define RANGE(LO,X,HI) MAX(LO,MIN(X,HI))
+
/* absolute value */
#ifndef ABS
# define ABS(a) (((a)>=0) ? (a) : -(a))
diff --git a/src/Makefile.in b/src/Makefile.in
index 213cdc6..158b452 100644
--- a/src/Makefile.in
+++ b/src/Makefile.in
@@ -19,7 +19,7 @@ LIB_SRC=H5.c H5A.c H5AC.c H5B.c H5D.c H5E.c H5F.c H5Farray.c H5Fcore.c \
H5Fstdio.c H5G.c H5Gent.c H5Gnode.c H5Gstab.c H5HG.c H5HL.c H5I.c H5MF.c \
H5MM.c H5O.c H5Oattr.c H5Ocomp.c H5Ocont.c H5Odtype.c H5Oefl.c \
H5Olayout.c H5Omtime.c H5Oname.c H5Onull.c H5Osdspace.c H5Oshared.c \
- H5Ostab.c H5P.c H5S.c H5Sall.c H5Shyper.c H5Smpio.c H5Spoint.c \
+ H5Ostab.c H5P.c H5R.c H5S.c H5Sall.c H5Shyper.c H5Smpio.c H5Spoint.c \
H5Sselect.c H5T.c H5Tbit.c H5Tconv.c H5Tinit.c H5TB.c H5V.c H5Z.c
LIB_OBJ=$(LIB_SRC:.c=.o)
@@ -31,14 +31,14 @@ MOSTLYCLEAN=H5detect.o H5detect H5Tinit.o H5Tinit.c
PUB_HDR=H5public.h H5Apublic.h H5ACpublic.h H5Bpublic.h H5Dpublic.h \
H5Epublic.h H5Fpublic.h H5Gpublic.h H5HGpublic.h H5HLpublic.h \
H5Ipublic.h H5MFpublic.h H5MMpublic.h H5Opublic.h H5Ppublic.h \
- H5Spublic.h H5Tpublic.h H5Zpublic.h H5config.h hdf5.h
+ H5Rpublic.h H5Spublic.h H5Tpublic.h H5Zpublic.h H5config.h hdf5.h
# Other header files (not to be installed)...
PRIVATE_HDR=H5private.h H5Aprivate.h H5Apkg.h H5ACprivate.h H5Bprivate.h \
H5Dprivate.h H5Eprivate.h H5Fprivate.h H5Gprivate.h H5Gpkg.h \
H5HGprivate.h H5HLprivate.h H5Iprivate.h H5MFprivate.h H5MMprivate.h \
- H5Oprivate.h H5Pprivate.h H5Sprivate.h H5Tprivate.h H5TBprivate.h \
- H5Tpkg.h H5Vprivate.h H5Zprivate.h
+ H5Oprivate.h H5Pprivate.h H5Rprivate.h H5Sprivate.h H5Tprivate.h \
+ H5TBprivate.h H5Tpkg.h H5Vprivate.h H5Zprivate.h
# Number format detection
H5Tinit.c: H5detect
diff --git a/src/hdf5.h b/src/hdf5.h
index de1c727..204d67d 100644
--- a/src/hdf5.h
+++ b/src/hdf5.h
@@ -33,6 +33,7 @@
#include <H5MMpublic.h> /* Core memory management */
#include <H5Opublic.h> /* Object headers */
#include <H5Ppublic.h> /* Property lists */
+#include <H5Rpublic.h> /* Ragged arrays */
#include <H5Spublic.h> /* Dataspaces */
#include <H5Tpublic.h> /* Datatypes */
#include <H5Zpublic.h> /* Data filters */
diff --git a/test/.distdep b/test/.distdep
index 2b28ca4..9eb0b5b 100644
--- a/test/.distdep
+++ b/test/.distdep
@@ -178,40 +178,6 @@ th5s.o: \
../src/H5Tpublic.h \
../src/H5Zprivate.h \
../src/H5Zpublic.h
-dtypes.o: \
- dtypes.c \
- ../src/hdf5.h \
- ../src/H5public.h \
- ../src/H5config.h \
- ../src/H5Ipublic.h \
- ../src/H5Apublic.h \
- ../src/H5ACpublic.h \
- ../src/H5Bpublic.h \
- ../src/H5Dpublic.h \
- ../src/H5Epublic.h \
- ../src/H5Fpublic.h \
- ../src/H5Gpublic.h \
- ../src/H5HGpublic.h \
- ../src/H5HLpublic.h \
- ../src/H5MFpublic.h \
- ../src/H5MMpublic.h \
- ../src/H5Opublic.h \
- ../src/H5Ppublic.h \
- ../src/H5Zpublic.h \
- ../src/H5Spublic.h \
- ../src/H5Tpublic.h \
- ../src/H5Tpkg.h \
- ../src/H5HGprivate.h \
- ../src/H5Fprivate.h \
- ../src/H5private.h \
- ../src/H5Tprivate.h
-hyperslab.o: \
- hyperslab.c \
- ../src/H5private.h \
- ../src/H5public.h \
- ../src/H5config.h \
- ../src/H5MMprivate.h \
- ../src/H5MMpublic.h
istore.o: \
istore.c \
../src/H5private.h \
@@ -240,8 +206,8 @@ istore.o: \
../src/H5Sprivate.h \
../src/H5Spublic.h \
../src/H5Zprivate.h
-dsets.o: \
- dsets.c \
+external.o: \
+ external.c \
../src/hdf5.h \
../src/H5public.h \
../src/H5config.h \
@@ -262,8 +228,27 @@ dsets.o: \
../src/H5Zpublic.h \
../src/H5Spublic.h \
../src/H5Tpublic.h
-cmpd_dset.o: \
- cmpd_dset.c \
+gheap.o: \
+ gheap.c \
+ ../src/H5private.h \
+ ../src/H5public.h \
+ ../src/H5config.h \
+ ../src/H5Eprivate.h \
+ ../src/H5Epublic.h \
+ ../src/H5Ipublic.h \
+ ../src/H5Fprivate.h \
+ ../src/H5Fpublic.h \
+ ../src/H5Dpublic.h \
+ ../src/H5Gprivate.h \
+ ../src/H5Gpublic.h \
+ ../src/H5Bprivate.h \
+ ../src/H5Bpublic.h \
+ ../src/H5HGprivate.h \
+ ../src/H5HGpublic.h \
+ ../src/H5Pprivate.h \
+ ../src/H5Ppublic.h
+shtype.o: \
+ shtype.c \
../src/hdf5.h \
../src/H5public.h \
../src/H5config.h \
@@ -283,8 +268,8 @@ cmpd_dset.o: \
../src/H5Ppublic.h \
../src/H5Zpublic.h \
../src/H5Spublic.h
-extend.o: \
- extend.c \
+big.o: \
+ big.c \
../src/hdf5.h \
../src/H5public.h \
../src/H5config.h \
@@ -303,9 +288,11 @@ extend.o: \
../src/H5Opublic.h \
../src/H5Ppublic.h \
../src/H5Zpublic.h \
- ../src/H5Spublic.h
-external.o: \
- external.c \
+ ../src/H5Spublic.h \
+ ../src/H5Tpublic.h \
+ ../src/H5private.h
+chunk.o: \
+ chunk.c \
../src/hdf5.h \
../src/H5public.h \
../src/H5config.h \
@@ -348,27 +335,15 @@ iopipe.o: \
../src/H5Zpublic.h \
../src/H5Spublic.h \
../src/H5Tpublic.h
-gheap.o: \
- gheap.c \
+hyperslab.o: \
+ hyperslab.c \
../src/H5private.h \
../src/H5public.h \
../src/H5config.h \
- ../src/H5Eprivate.h \
- ../src/H5Epublic.h \
- ../src/H5Ipublic.h \
- ../src/H5Fprivate.h \
- ../src/H5Fpublic.h \
- ../src/H5Dpublic.h \
- ../src/H5Gprivate.h \
- ../src/H5Gpublic.h \
- ../src/H5Bprivate.h \
- ../src/H5Bpublic.h \
- ../src/H5HGprivate.h \
- ../src/H5HGpublic.h \
- ../src/H5Pprivate.h \
- ../src/H5Ppublic.h
-shtype.o: \
- shtype.c \
+ ../src/H5MMprivate.h \
+ ../src/H5MMpublic.h
+extend.o: \
+ extend.c \
../src/hdf5.h \
../src/H5public.h \
../src/H5config.h \
@@ -388,8 +363,8 @@ shtype.o: \
../src/H5Ppublic.h \
../src/H5Zpublic.h \
../src/H5Spublic.h
-big.o: \
- big.c \
+mtime.o: \
+ mtime.c \
../src/hdf5.h \
../src/H5public.h \
../src/H5config.h \
@@ -433,8 +408,8 @@ links.o: \
../src/H5Zpublic.h \
../src/H5Spublic.h \
../src/H5Tpublic.h
-chunk.o: \
- chunk.c \
+dtypes.o: \
+ dtypes.c \
../src/hdf5.h \
../src/H5public.h \
../src/H5config.h \
@@ -454,25 +429,36 @@ chunk.o: \
../src/H5Ppublic.h \
../src/H5Zpublic.h \
../src/H5Spublic.h \
- ../src/H5Tpublic.h
-bittests.o: \
- bittests.c \
+ ../src/H5Tpublic.h \
../src/H5Tpkg.h \
../src/H5HGprivate.h \
- ../src/H5HGpublic.h \
+ ../src/H5Fprivate.h \
+ ../src/H5private.h \
+ ../src/H5Tprivate.h
+dsets.o: \
+ dsets.c \
+ ../src/hdf5.h \
../src/H5public.h \
../src/H5config.h \
- ../src/H5Fprivate.h \
- ../src/H5Fpublic.h \
../src/H5Ipublic.h \
- ../src/H5private.h \
+ ../src/H5Apublic.h \
+ ../src/H5ACpublic.h \
+ ../src/H5Bpublic.h \
../src/H5Dpublic.h \
- ../src/H5Tprivate.h \
- ../src/H5Tpublic.h \
- ../src/H5Gprivate.h \
- ../src/H5Gpublic.h
-mtime.o: \
- mtime.c \
+ ../src/H5Epublic.h \
+ ../src/H5Fpublic.h \
+ ../src/H5Gpublic.h \
+ ../src/H5HGpublic.h \
+ ../src/H5HLpublic.h \
+ ../src/H5MFpublic.h \
+ ../src/H5MMpublic.h \
+ ../src/H5Opublic.h \
+ ../src/H5Ppublic.h \
+ ../src/H5Zpublic.h \
+ ../src/H5Spublic.h \
+ ../src/H5Tpublic.h
+cmpd_dset.o: \
+ cmpd_dset.c \
../src/hdf5.h \
../src/H5public.h \
../src/H5config.h \
@@ -491,6 +477,22 @@ mtime.o: \
../src/H5Opublic.h \
../src/H5Ppublic.h \
../src/H5Zpublic.h \
+ ../src/H5Rpublic.h \
../src/H5Spublic.h \
+ ../src/H5Tpublic.h
+bittests.o: \
+ bittests.c \
+ ../src/H5Tpkg.h \
+ ../src/H5HGprivate.h \
+ ../src/H5HGpublic.h \
+ ../src/H5public.h \
+ ../src/H5config.h \
+ ../src/H5Fprivate.h \
+ ../src/H5Fpublic.h \
+ ../src/H5Ipublic.h \
+ ../src/H5private.h \
+ ../src/H5Dpublic.h \
+ ../src/H5Tprivate.h \
../src/H5Tpublic.h \
- ../src/H5private.h
+ ../src/H5Gprivate.h \
+ ../src/H5Gpublic.h
diff --git a/test/bittests.c b/test/bittests.c
index 520bace..e0e47b5 100644
--- a/test/bittests.c
+++ b/test/bittests.c
@@ -521,7 +521,7 @@ main (void)
nerrors += test_copy ()<0?1:0;
if (nerrors) {
- printf("***** %lu FAILURE%s! *****\n",
+ printf("***** %u FAILURE%s! *****\n",
nerrors, 1==nerrors?"":"S");
exit(1);
}
diff --git a/test/cmpd_dset.c b/test/cmpd_dset.c
index 60219d0..5cfcb29 100644
--- a/test/cmpd_dset.c
+++ b/test/cmpd_dset.c
@@ -12,6 +12,15 @@
#include <stdlib.h>
#include <string.h>
+#include <H5config.h>
+#ifndef HAVE_ATTRIBUTE
+# undef __attribute__
+# define __attribute__(X) /*void*/
+# define __unused__ /*void*/
+#else
+# define __unused__ __attribute__((unused))
+#endif
+
#define TEST_FILE_NAME "cmpd_dset.h5"
/* The first dataset */
@@ -88,6 +97,31 @@ cleanup(void)
/*-------------------------------------------------------------------------
+ * Function: display_error_cb
+ *
+ * Purpose: Displays the error stack after printing "*FAILED*".
+ *
+ * Return: Success: 0
+ *
+ * Failure: -1
+ *
+ * Programmer: Robb Matzke
+ * Wednesday, March 4, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+display_error_cb (void __unused__ *client_data)
+{
+ puts ("*FAILED*");
+ H5Eprint (stdout);
+ return 0;
+}
+
+
+/*-------------------------------------------------------------------------
* Function: main
*
* Purpose: Creates a simple dataset of a compound type and then reads
@@ -143,40 +177,39 @@ main (void)
/* Tenth dataset */
/* Eleventh dataset */
+#if 0
s4_t *s11 = NULL;
+ int ndims;
+#endif
/* Other variables */
unsigned int i, j;
- int ndims;
hid_t file, dataset, space, PRESERVE;
- herr_t status;
static hsize_t dim[] = {NX, NY};
hssize_t f_offset[2]; /*offset of hyperslab in file */
hsize_t h_size[2]; /*size of hyperslab */
size_t memb_size[1] = {4};
+ /* Set up error handling */
+ H5Eset_auto(display_error_cb, NULL);
+
/* Create the file */
- file = H5Fcreate (TEST_FILE_NAME, H5F_ACC_TRUNC|H5F_ACC_DEBUG,
- H5P_DEFAULT, H5P_DEFAULT);
- assert (file>=0);
+ if ((file = H5Fcreate (TEST_FILE_NAME, H5F_ACC_TRUNC|H5F_ACC_DEBUG,
+ H5P_DEFAULT, H5P_DEFAULT))<0) goto error;
/* Create the data space */
- space = H5Screate_simple (2, dim, NULL);
- assert (space>=0);
+ if ((space = H5Screate_simple (2, dim, NULL))<0) goto error;
/* Create xfer properties to preserve initialized data */
- PRESERVE = H5Pcreate (H5P_DATASET_XFER);
- assert (PRESERVE>=0);
- status = H5Pset_preserve (PRESERVE, 1);
- assert (status>=0);
+ if ((PRESERVE = H5Pcreate (H5P_DATASET_XFER))<0) goto error;
+ if (H5Pset_preserve (PRESERVE, 1)<0) goto error;
/*
*######################################################################
* STEP 1: Save the original dataset natively.
*/
- printf ("\
-STEP 1: Initialize dataset `s1' and store it on disk in native order.\n");
- fflush (stdout);
+ printf("%-70s", "Testing basic compound write");
+ fflush(stdout);
/* Initialize the dataset */
for (i=0; i<NX*NY; i++) {
@@ -191,22 +224,26 @@ STEP 1: Initialize dataset `s1' and store it on disk in native order.\n");
}
/* Create the memory data type */
- s1_tid = H5Tcreate (H5T_COMPOUND, sizeof(s1_t));
- H5Tinsert (s1_tid, "a", HOFFSET(s1_t,a), H5T_NATIVE_INT);
- H5Tinsert (s1_tid, "b", HOFFSET(s1_t,b), H5T_NATIVE_INT);
- H5Tinsert_array (s1_tid, "c", HOFFSET(s1_t,c), 1, memb_size, NULL,
- H5T_NATIVE_INT);
- H5Tinsert (s1_tid, "d", HOFFSET(s1_t,d), H5T_NATIVE_INT);
- H5Tinsert (s1_tid, "e", HOFFSET(s1_t,e), H5T_NATIVE_INT);
- assert (s1_tid>=0);
+ if ((s1_tid = H5Tcreate (H5T_COMPOUND, sizeof(s1_t)))<0) goto error;
+ if (H5Tinsert (s1_tid, "a", HOFFSET(s1_t,a), H5T_NATIVE_INT)<0 ||
+ H5Tinsert (s1_tid, "b", HOFFSET(s1_t,b), H5T_NATIVE_INT)<0 ||
+ H5Tinsert_array (s1_tid, "c", HOFFSET(s1_t,c), 1, memb_size, NULL,
+ H5T_NATIVE_INT)<0 ||
+ H5Tinsert (s1_tid, "d", HOFFSET(s1_t,d), H5T_NATIVE_INT)<0 ||
+ H5Tinsert (s1_tid, "e", HOFFSET(s1_t,e), H5T_NATIVE_INT)<0) {
+ goto error;
+ }
/* Create the dataset */
- dataset = H5Dcreate (file, "s1", s1_tid, space, H5P_DEFAULT);
- assert (dataset>=0);
+ if ((dataset = H5Dcreate (file, "s1", s1_tid, space, H5P_DEFAULT))<0) {
+ goto error;
+ }
/* Write the data */
- status = H5Dwrite (dataset, s1_tid, H5S_ALL, H5S_ALL, H5P_DEFAULT, s1);
- assert (status>=0);
+ if (H5Dwrite (dataset, s1_tid, H5S_ALL, H5S_ALL, H5P_DEFAULT, s1)<0) {
+ goto error;
+ }
+ puts(" PASSED");
/*
*######################################################################
@@ -214,37 +251,41 @@ STEP 1: Initialize dataset `s1' and store it on disk in native order.\n");
* it's the same as the first just to test things better, but
* in fact, we could have used s1_tid.
*/
- printf ("\
-STEP 2: Read the dataset from disk into a new memory buffer which has the\n\
- same data type and space. This will be the typical case.\n");
- fflush (stdout);
+ printf("%-70s", "Testing basic compound read");
+ fflush(stdout);
-
/* Create a data type for s2 */
- s2_tid = H5Tcreate (H5T_COMPOUND, sizeof(s2_t));
- H5Tinsert (s2_tid, "a", HOFFSET(s2_t,a), H5T_NATIVE_INT);
- H5Tinsert (s2_tid, "b", HOFFSET(s2_t,b), H5T_NATIVE_INT);
- H5Tinsert_array (s2_tid, "c", HOFFSET(s2_t,c), 1, memb_size, NULL,
- H5T_NATIVE_INT);
- H5Tinsert (s2_tid, "d", HOFFSET(s2_t,d), H5T_NATIVE_INT);
- H5Tinsert (s2_tid, "e", HOFFSET(s2_t,e), H5T_NATIVE_INT);
- assert (s2_tid>=0);
+ if ((s2_tid = H5Tcreate (H5T_COMPOUND, sizeof(s2_t)))<0) goto error;
+ if (H5Tinsert (s2_tid, "a", HOFFSET(s2_t,a), H5T_NATIVE_INT)<0 ||
+ H5Tinsert (s2_tid, "b", HOFFSET(s2_t,b), H5T_NATIVE_INT)<0 ||
+ H5Tinsert_array (s2_tid, "c", HOFFSET(s2_t,c), 1, memb_size, NULL,
+ H5T_NATIVE_INT)<0 ||
+ H5Tinsert (s2_tid, "d", HOFFSET(s2_t,d), H5T_NATIVE_INT)<0 ||
+ H5Tinsert (s2_tid, "e", HOFFSET(s2_t,e), H5T_NATIVE_INT)<0) {
+ goto error;
+ }
/* Read the data */
- status = H5Dread (dataset, s2_tid, H5S_ALL, H5S_ALL, H5P_DEFAULT, s2);
- assert (status>=0);
+ if (H5Dread (dataset, s2_tid, H5S_ALL, H5S_ALL, H5P_DEFAULT, s2)<0) {
+ goto error;
+ }
/* Compare s2 with s1. They should be the same */
for (i=0; i<NX*NY; i++) {
- assert (s1[i].a==s2[i].a);
- assert (s1[i].b==s2[i].b);
- assert (s1[i].c[0]==s2[i].c[0]);
- assert (s1[i].c[1]==s2[i].c[1]);
- assert (s1[i].c[2]==s2[i].c[2]);
- assert (s1[i].c[3]==s2[i].c[3]);
- assert (s1[i].d==s2[i].d);
- assert (s1[i].e==s2[i].e);
+ if (s1[i].a!=s2[i].a ||
+ s1[i].b!=s2[i].b ||
+ s1[i].c[0]!=s2[i].c[0] ||
+ s1[i].c[1]!=s2[i].c[1] ||
+ s1[i].c[2]!=s2[i].c[2] ||
+ s1[i].c[3]!=s2[i].c[3] ||
+ s1[i].d!=s2[i].d ||
+ s1[i].e!=s2[i].e) {
+ puts("*FAILED*");
+ puts(" Incorrect values read from the file");
+ goto error;
+ }
}
+ puts(" PASSED");
/*
*######################################################################
@@ -252,69 +293,78 @@ STEP 2: Read the dataset from disk into a new memory buffer which has the\n\
* has the same data space but the data type is different: the
* data type is a struct whose members are in the opposite order.
*/
- printf ("\
-STEP 3: Read the dataset again with members in a different order.\n");
+ printf("%-70s", "Testing reversal of struct members");
fflush (stdout);
/* Create a data type for s3 */
- s3_tid = H5Tcreate (H5T_COMPOUND, sizeof(s3_t));
- H5Tinsert (s3_tid, "a", HOFFSET(s3_t,a), H5T_NATIVE_INT);
- H5Tinsert (s3_tid, "b", HOFFSET(s3_t,b), H5T_NATIVE_INT);
- H5Tinsert_array (s3_tid, "c", HOFFSET(s3_t,c), 1, memb_size, NULL,
- H5T_NATIVE_INT);
- H5Tinsert (s3_tid, "d", HOFFSET(s3_t,d), H5T_NATIVE_INT);
- H5Tinsert (s3_tid, "e", HOFFSET(s3_t,e), H5T_NATIVE_INT);
- assert (s3_tid>=0);
+ if ((s3_tid = H5Tcreate (H5T_COMPOUND, sizeof(s3_t)))<0) goto error;
+ if (H5Tinsert (s3_tid, "a", HOFFSET(s3_t,a), H5T_NATIVE_INT)<0 ||
+ H5Tinsert (s3_tid, "b", HOFFSET(s3_t,b), H5T_NATIVE_INT)<0 ||
+ H5Tinsert_array (s3_tid, "c", HOFFSET(s3_t,c), 1, memb_size, NULL,
+ H5T_NATIVE_INT)<0 ||
+ H5Tinsert (s3_tid, "d", HOFFSET(s3_t,d), H5T_NATIVE_INT)<0 ||
+ H5Tinsert (s3_tid, "e", HOFFSET(s3_t,e), H5T_NATIVE_INT)<0) {
+ goto error;
+ }
/* Read the data */
- status = H5Dread (dataset, s3_tid, H5S_ALL, H5S_ALL, H5P_DEFAULT, s3);
- assert (status>=0);
+ if (H5Dread (dataset, s3_tid, H5S_ALL, H5S_ALL, H5P_DEFAULT, s3)<0) {
+ goto error;
+ }
/* Compare s3 with s1. They should be the same */
for (i=0; i<NX*NY; i++) {
- assert (s1[i].a==s3[i].a);
- assert (s1[i].b==s3[i].b);
- assert (s1[i].c[0]==s3[i].c[0]);
- assert (s1[i].c[1]==s3[i].c[1]);
- assert (s1[i].c[2]==s3[i].c[2]);
- assert (s1[i].c[3]==s3[i].c[3]);
- assert (s1[i].d==s3[i].d);
- assert (s1[i].e==s3[i].e);
+ if (s1[i].a!=s3[i].a ||
+ s1[i].b!=s3[i].b ||
+ s1[i].c[0]!=s3[i].c[0] ||
+ s1[i].c[1]!=s3[i].c[1] ||
+ s1[i].c[2]!=s3[i].c[2] ||
+ s1[i].c[3]!=s3[i].c[3] ||
+ s1[i].d!=s3[i].d ||
+ s1[i].e!=s3[i].e) {
+ puts("*FAILED*");
+ puts(" Incorrect values read from the file");
+ goto error;
+ }
}
+ puts(" PASSED");
/*
*######################################################################
* STEP 4: Read a subset of the members. Of the <a,b,c,d,e> members
* stored on disk we'll read <b,d>.
*/
- printf ("\
-STEP 4: Read a subset of the members.\n");
+ printf("%-70s", "Testing subset struct read");
fflush (stdout);
/* Create a datatype for s4 */
- s4_tid = H5Tcreate (H5T_COMPOUND, sizeof(s4_t));
- H5Tinsert (s4_tid, "b", HOFFSET(s4_t,b), H5T_NATIVE_INT);
- H5Tinsert (s4_tid, "d", HOFFSET(s4_t,d), H5T_NATIVE_INT);
- assert (s4_tid>=0);
+ if ((s4_tid = H5Tcreate (H5T_COMPOUND, sizeof(s4_t)))<0) goto error;
+ if (H5Tinsert (s4_tid, "b", HOFFSET(s4_t,b), H5T_NATIVE_INT)<0) goto error;
+ if (H5Tinsert (s4_tid, "d", HOFFSET(s4_t,d), H5T_NATIVE_INT)<0) goto error;
/* Read the data */
- status = H5Dread (dataset, s4_tid, H5S_ALL, H5S_ALL, H5P_DEFAULT, s4);
- assert (status>=0);
+ if (H5Dread (dataset, s4_tid, H5S_ALL, H5S_ALL, H5P_DEFAULT, s4)<0) {
+ goto error;
+ }
/* Compare s4 with s1 */
for (i=0; i<NX*NY; i++) {
- assert (s1[i].b==s4[i].b);
- assert (s1[i].d==s4[i].d);
+ if (s1[i].b!=s4[i].b ||
+ s1[i].d!=s4[i].d) {
+ puts("*FAILED*");
+ puts(" Incorrect values read from the file");
+ goto error;
+ }
}
+ puts(" PASSED");
/*
*######################################################################
* STEP 5: Read all the members into a struct which has other members
* which have already been initialized.
*/
- printf ("\
-STEP 5: Read members into a superset which is partially initialized.\n");
- fflush (stdout);
+ printf("%-70s", "Testing partially initialized superset read");
+ fflush(stdout);
/* Initialize some members */
for (i=0; i<NX*NY; i++) {
@@ -325,38 +375,49 @@ STEP 5: Read members into a superset which is partially initialized.\n");
}
/* Create a data type for s5 */
- s5_tid = H5Tcreate (H5T_COMPOUND, sizeof(s5_t));
- H5Tinsert (s5_tid, "a", HOFFSET(s5_t,a), H5T_NATIVE_INT);
- H5Tinsert (s5_tid, "b", HOFFSET(s5_t,b), H5T_NATIVE_INT);
- H5Tinsert_array (s5_tid, "c", HOFFSET(s5_t,c), 1, memb_size, NULL,
- H5T_NATIVE_INT);
- H5Tinsert (s5_tid, "d", HOFFSET(s5_t,d), H5T_NATIVE_INT);
- H5Tinsert (s5_tid, "e", HOFFSET(s5_t,e), H5T_NATIVE_INT);
- assert (s5_tid>=0);
+ if ((s5_tid = H5Tcreate (H5T_COMPOUND, sizeof(s5_t)))<0) goto error;
+ if (H5Tinsert (s5_tid, "a", HOFFSET(s5_t,a), H5T_NATIVE_INT)<0 ||
+ H5Tinsert (s5_tid, "b", HOFFSET(s5_t,b), H5T_NATIVE_INT)<0 ||
+ H5Tinsert_array (s5_tid, "c", HOFFSET(s5_t,c), 1, memb_size, NULL,
+ H5T_NATIVE_INT)<0 ||
+ H5Tinsert (s5_tid, "d", HOFFSET(s5_t,d), H5T_NATIVE_INT)<0 ||
+ H5Tinsert (s5_tid, "e", HOFFSET(s5_t,e), H5T_NATIVE_INT)) {
+ goto error;
+ }
/* Read the data */
- status = H5Dread (dataset, s5_tid, H5S_ALL, H5S_ALL, PRESERVE, s5);
- assert (status>=0);
+ if (H5Dread (dataset, s5_tid, H5S_ALL, H5S_ALL, PRESERVE, s5)<0) {
+ goto error;
+ }
/* Check that the data was read properly */
for (i=0; i<NX*NY; i++) {
- assert (s1[i].a==s5[i].a);
- assert (s1[i].b==s5[i].b);
- assert (s1[i].c[0]==s5[i].c[0]);
- assert (s1[i].c[1]==s5[i].c[1]);
- assert (s1[i].c[2]==s5[i].c[2]);
- assert (s1[i].c[3]==s5[i].c[3]);
- assert (s1[i].d==s5[i].d);
- assert (s1[i].e==s5[i].e);
+ if (s1[i].a!=s5[i].a ||
+ s1[i].b!=s5[i].b ||
+ s1[i].c[0]!=s5[i].c[0] ||
+ s1[i].c[1]!=s5[i].c[1] ||
+ s1[i].c[2]!=s5[i].c[2] ||
+ s1[i].c[3]!=s5[i].c[3] ||
+ s1[i].d!=s5[i].d ||
+ s1[i].e!=s5[i].e) {
+ puts("*FAILED*");
+ puts(" Incorrect values read from the file");
+ goto error;
+ }
}
/* Check that no previous values were clobbered */
for (i=0; i<NX*NY; i++) {
- assert (s5[i].pre == 1000+4*i);
- assert (s5[i].mid1 == 1001+4*i);
- assert (s5[i].mid2 == 1002+4*i);
- assert (s5[i].post == 1003+4*i);
+ if (s5[i].pre != 1000+4*i ||
+ s5[i].mid1 != 1001+4*i ||
+ s5[i].mid2 != 1002+4*i ||
+ s5[i].post != 1003+4*i) {
+ puts("*FAILED*");
+ puts(" Memory values were clobbered");
+ goto error;
+ }
}
+ puts(" PASSED");
/*
*######################################################################
@@ -364,9 +425,7 @@ STEP 5: Read members into a superset which is partially initialized.\n");
* fields unchanged. This tests member alignment and background
* buffers.
*/
- printf ("\
-STEP 6: Update fields `b' and `d' on the file, leaving the other fields\n\
- unchanged.\n");
+ printf("%-70s", "Testing partially initialized superset write");
fflush (stdout);
/* Initialize `s4' with new values */
@@ -376,24 +435,31 @@ STEP 6: Update fields `b' and `d' on the file, leaving the other fields\n\
}
/* Write the data to file */
- status = H5Dwrite (dataset, s4_tid, H5S_ALL, H5S_ALL, PRESERVE, s4);
- assert (status>=0);
-
+ if (H5Dwrite (dataset, s4_tid, H5S_ALL, H5S_ALL, PRESERVE, s4)<0) {
+ goto error;
+ }
+
/* Read the data back */
- status = H5Dread (dataset, s1_tid, H5S_ALL, H5S_ALL, H5P_DEFAULT, s1);
- assert (status>=0);
+ if (H5Dread (dataset, s1_tid, H5S_ALL, H5S_ALL, H5P_DEFAULT, s1)<0) {
+ goto error;
+ }
/* Compare */
for (i=0; i<NX*NY; i++) {
- assert (s1[i].a == 8*i+0);
- assert (s1[i].b == 8*i+1);
- assert (s1[i].c[0] == 8*i+2);
- assert (s1[i].c[1] == 8*i+3);
- assert (s1[i].c[2] == 8*i+4);
- assert (s1[i].c[3] == 8*i+5);
- assert (s1[i].d == 8*i+6);
- assert (s1[i].e == 8*i+7);
+ if (s1[i].a != 8*i+0 ||
+ s1[i].b != 8*i+1 ||
+ s1[i].c[0] != 8*i+2 ||
+ s1[i].c[1] != 8*i+3 ||
+ s1[i].c[2] != 8*i+4 ||
+ s1[i].c[3] != 8*i+5 ||
+ s1[i].d != 8*i+6 ||
+ s1[i].e != 8*i+7) {
+ puts("*FAILED*");
+ puts(" File values were clobbered");
+ goto error;
+ }
}
+ puts(" PASSED");
/*
*######################################################################
@@ -401,29 +467,33 @@ STEP 6: Update fields `b' and `d' on the file, leaving the other fields\n\
* though these data spaces are equal it tests a different part of the
* library.
*/
- printf ("\
-STEP 7: Reading original dataset with explicit data space.\n");
+ printf("%-70s", "Testing explicit data space");
fflush (stdout);
/* Create the data space */
- s7_sid = H5Screate_simple (2, dim, NULL);
- assert (s7_sid>=0);
+ if ((s7_sid = H5Screate_simple (2, dim, NULL))<0) goto error;
/* Read the dataset */
- status = H5Dread (dataset, s2_tid, s7_sid, H5S_ALL, H5P_DEFAULT, s2);
- assert (status>=0);
+ if (H5Dread (dataset, s2_tid, s7_sid, H5S_ALL, H5P_DEFAULT, s2)<0) {
+ goto error;
+ }
/* Compare */
for (i=0; i<NX*NY; i++) {
- assert (s2[i].a == s1[i].a);
- assert (s2[i].b == s1[i].b);
- assert (s2[i].c[0] == s1[i].c[0]);
- assert (s2[i].c[1] == s1[i].c[1]);
- assert (s2[i].c[2] == s1[i].c[2]);
- assert (s2[i].c[3] == s1[i].c[3]);
- assert (s2[i].d == s1[i].d);
- assert (s2[i].e == s1[i].e);
+ if (s2[i].a != s1[i].a ||
+ s2[i].b != s1[i].b ||
+ s2[i].c[0] != s1[i].c[0] ||
+ s2[i].c[1] != s1[i].c[1] ||
+ s2[i].c[2] != s1[i].c[2] ||
+ s2[i].c[3] != s1[i].c[3] ||
+ s2[i].d != s1[i].d ||
+ s2[i].e != s1[i].e) {
+ puts("*FAILED*");
+ puts(" Incorrect values read from file");
+ goto error;
+ }
}
+ puts(" PASSED");
/*
@@ -431,30 +501,27 @@ STEP 7: Reading original dataset with explicit data space.\n");
* STEP 8. Read a hyperslab of the file into a complete array in memory.
* The hyperslab is the middle third of the array.
*/
- printf ("\
-STEP 8: Read middle third hyperslab into memory array.\n");
+ printf("%-70s", "Testing hyperslab partial read to array");
fflush (stdout);
/* Create the file data space */
- s8_f_sid = H5Dget_space (dataset);
- assert (s8_f_sid>=0);
+ if ((s8_f_sid = H5Dget_space (dataset))<0) goto error;
f_offset[0] = NX/3;
f_offset[1] = NY/3;
h_size[0] = 2*NX/3 - f_offset[0];
h_size[1] = 2*NY/3 - f_offset[1];
- status = H5Sselect_hyperslab (s8_f_sid, H5S_SELECT_SET, f_offset, NULL,
- h_size, NULL);
- assert (status>=0);
+ if (H5Sselect_hyperslab (s8_f_sid, H5S_SELECT_SET, f_offset, NULL,
+ h_size, NULL)<0) goto error;
/* Create memory data space */
- s8_m_sid = H5Screate_simple (2, h_size, NULL);
- assert (s8_m_sid>=0);
+ if ((s8_m_sid = H5Screate_simple (2, h_size, NULL))<0) goto error;
/* Read the dataset */
s8 = calloc ((size_t)(h_size[0]*h_size[1]), sizeof(s1_t));
assert (s8);
- status = H5Dread (dataset, s1_tid, s8_m_sid, s8_f_sid, H5P_DEFAULT, s8);
- assert (status>=0);
+ if (H5Dread (dataset, s1_tid, s8_m_sid, s8_f_sid, H5P_DEFAULT, s8)<0) {
+ goto error;
+ }
/* Compare */
for (i=0; i<h_size[0]; i++) {
@@ -462,19 +529,24 @@ STEP 8: Read middle third hyperslab into memory array.\n");
s1_t *ps1 = s1 + (f_offset[0]+i)*NY + f_offset[1] + j;
s1_t *ps8 = s8 + i*h_size[1] + j;
- assert (ps8->a == ps1->a);
- assert (ps8->b == ps1->b);
- assert (ps8->c[0] == ps1->c[0]);
- assert (ps8->c[1] == ps1->c[1]);
- assert (ps8->c[2] == ps1->c[2]);
- assert (ps8->c[3] == ps1->c[3]);
- assert (ps8->d == ps1->d);
- assert (ps8->e == ps1->e);
+ if (ps8->a != ps1->a ||
+ ps8->b != ps1->b ||
+ ps8->c[0] != ps1->c[0] ||
+ ps8->c[1] != ps1->c[1] ||
+ ps8->c[2] != ps1->c[2] ||
+ ps8->c[3] != ps1->c[3] ||
+ ps8->d != ps1->d ||
+ ps8->e != ps1->e) {
+ puts("*FAILED*");
+ puts(" Incorrect values read from file");
+ goto error;
+ }
}
}
free (s8);
s8 = NULL;
+ puts(" PASSED");
/*
@@ -482,8 +554,7 @@ STEP 8: Read middle third hyperslab into memory array.\n");
* STEP 9. Read a hyperslab of the file into a hyperslab of memory. The
* part of memory not read is already initialized and must not change.
*/
- printf ("\
-STEP 9: Read middle third of hyperslab into middle third of memory array.\n");
+ printf("%-70s", "Testing hyperslab partial read to another hyperslab");
fflush (stdout);
/* Initialize */
@@ -493,8 +564,9 @@ STEP 9: Read middle third of hyperslab into middle third of memory array.\n");
}
/* Read the hyperslab */
- status = H5Dread (dataset, s2_tid, s8_f_sid, s8_f_sid, H5P_DEFAULT, s2);
- assert (status>=0);
+ if (H5Dread (dataset, s2_tid, s8_f_sid, s8_f_sid, H5P_DEFAULT, s2)<0) {
+ goto error;
+ }
/* Compare */
for (i=0; i<NX; i++) {
@@ -505,35 +577,42 @@ STEP 9: Read middle third of hyperslab into middle third of memory array.\n");
(hsize_t)i<f_offset[0]+h_size[0] &&
(hssize_t)j>=f_offset[1] &&
(hsize_t)j<f_offset[1]+h_size[1]) {
- assert (ps2->a == ps1->a);
- assert (ps2->b == ps1->b);
- assert (ps2->c[0] == ps1->c[0]);
- assert (ps2->c[1] == ps1->c[1]);
- assert (ps2->c[2] == ps1->c[2]);
- assert (ps2->c[3] == ps1->c[3]);
- assert (ps2->d == ps1->d);
- assert (ps2->e == ps1->e);
+ if (ps2->a != ps1->a ||
+ ps2->b != ps1->b ||
+ ps2->c[0] != ps1->c[0] ||
+ ps2->c[1] != ps1->c[1] ||
+ ps2->c[2] != ps1->c[2] ||
+ ps2->c[3] != ps1->c[3] ||
+ ps2->d != ps1->d ||
+ ps2->e != ps1->e) {
+ puts("*FAILED*");
+ puts(" Memory values clobbered");
+ goto error;
+ }
} else {
- assert (ps2->a == (unsigned)(-1));
- assert (ps2->b == (unsigned)(-1));
- assert (ps2->c[0] == (unsigned)(-1));
- assert (ps2->c[1] == (unsigned)(-1));
- assert (ps2->c[2] == (unsigned)(-1));
- assert (ps2->c[3] == (unsigned)(-1));
- assert (ps2->d == (unsigned)(-1));
- assert (ps2->e == (unsigned)(-1));
+ if (ps2->a != (unsigned)(-1) ||
+ ps2->b != (unsigned)(-1) ||
+ ps2->c[0] != (unsigned)(-1) ||
+ ps2->c[1] != (unsigned)(-1) ||
+ ps2->c[2] != (unsigned)(-1) ||
+ ps2->c[3] != (unsigned)(-1) ||
+ ps2->d != (unsigned)(-1) ||
+ ps2->e != (unsigned)(-1)) {
+ puts("*FAILED*");
+ puts(" Incorrect values read from file");
+ goto error;
+ }
}
}
}
+ puts(" PASSED");
/*
*######################################################################
* STEP 10. Same as step 9 except the memory array contains some members
* which are already initialized, like step 5.
*/
- printf ("\
-STEP 10: Read middle third of hyperslab into middle third of memory array\n\
- where some of the struct members are already initialized.\n");
+ printf("%-70s", "Testing hyperslab to hyperslab part initialized read");
fflush (stdout);
/* Initialize */
@@ -544,8 +623,9 @@ STEP 10: Read middle third of hyperslab into middle third of memory array\n\
}
/* Read the hyperslab */
- status = H5Dread (dataset, s5_tid, s8_f_sid, s8_f_sid, PRESERVE, s5);
- assert (status>=0);
+ if (H5Dread (dataset, s5_tid, s8_f_sid, s8_f_sid, PRESERVE, s5)<0) {
+ goto error;
+ }
/* Compare */
for (i=0; i<NX; i++) {
@@ -556,34 +636,43 @@ STEP 10: Read middle third of hyperslab into middle third of memory array\n\
(hsize_t)i<f_offset[0]+h_size[0] &&
(hssize_t)j>=f_offset[1] &&
(hsize_t)j<f_offset[1]+h_size[1]) {
- assert (ps5->pre == (unsigned)(-1));
- assert (ps5->a == ps1->a);
- assert (ps5->b == ps1->b);
- assert (ps5->mid1 == (unsigned)(-1));
- assert (ps5->c[0] == ps1->c[0]);
- assert (ps5->c[1] == ps1->c[1]);
- assert (ps5->c[2] == ps1->c[2]);
- assert (ps5->c[3] == ps1->c[3]);
- assert (ps5->mid2 == (unsigned)(-1));
- assert (ps5->d == ps1->d);
- assert (ps5->e == ps1->e);
- assert (ps5->post == (unsigned)(-1));
+ if (ps5->pre != (unsigned)(-1) ||
+ ps5->a != ps1->a ||
+ ps5->b != ps1->b ||
+ ps5->mid1 != (unsigned)(-1) ||
+ ps5->c[0] != ps1->c[0] ||
+ ps5->c[1] != ps1->c[1] ||
+ ps5->c[2] != ps1->c[2] ||
+ ps5->c[3] != ps1->c[3] ||
+ ps5->mid2 != (unsigned)(-1) ||
+ ps5->d != ps1->d ||
+ ps5->e != ps1->e ||
+ ps5->post != (unsigned)(-1)) {
+ puts("*FAILED*");
+ puts(" Memory values clobbered");
+ goto error;
+ }
} else {
- assert (ps5->pre == (unsigned)(-1));
- assert (ps5->a == (unsigned)(-1));
- assert (ps5->b == (unsigned)(-1));
- assert (ps5->mid1 == (unsigned)(-1));
- assert (ps5->c[0] == (unsigned)(-1));
- assert (ps5->c[1] == (unsigned)(-1));
- assert (ps5->c[2] == (unsigned)(-1));
- assert (ps5->c[3] == (unsigned)(-1));
- assert (ps5->mid2 == (unsigned)(-1));
- assert (ps5->d == (unsigned)(-1));
- assert (ps5->e == (unsigned)(-1));
- assert (ps5->post == (unsigned)(-1));
+ if (ps5->pre != (unsigned)(-1) ||
+ ps5->a != (unsigned)(-1) ||
+ ps5->b != (unsigned)(-1) ||
+ ps5->mid1 != (unsigned)(-1) ||
+ ps5->c[0] != (unsigned)(-1) ||
+ ps5->c[1] != (unsigned)(-1) ||
+ ps5->c[2] != (unsigned)(-1) ||
+ ps5->c[3] != (unsigned)(-1) ||
+ ps5->mid2 != (unsigned)(-1) ||
+ ps5->d != (unsigned)(-1) ||
+ ps5->e != (unsigned)(-1) ||
+ ps5->post != (unsigned)(-1)) {
+ puts("*FAILED*");
+ puts(" Incorrect values read from file");
+ goto error;
+ }
}
}
}
+ puts(" PASSED");
/*
*######################################################################
@@ -656,5 +745,12 @@ STEP 11: Write an array back to the middle third of the dataset to\n\
H5Fclose (file);
cleanup();
+ puts("All compound dataset tests passed.");
return 0;
+
+error:
+ cleanup();
+ puts("Remaining tests have been skipped.");
+ puts("*** DATASET TESTS FAILED ***");
+ return 1;
}
diff --git a/test/ragged.c b/test/ragged.c
new file mode 100644
index 0000000..43e3ca4
--- /dev/null
+++ b/test/ragged.c
@@ -0,0 +1,249 @@
+/*
+ * Copyright © 1998 Spizella Software
+ * All rights reserved.
+ *
+ * Programmer: Robb Matzke <robb@arborea.spizella.com>
+ * Tuesday, August 25, 1998
+ */
+#include <assert.h>
+#include <hdf5.h>
+#include <signal.h>
+#include <stdlib.h>
+
+#include <H5private.h> /*for performance monitoring*/
+
+
+#define NOTIFY_INTERVAL 2 /*seconds*/
+#define TIME_LIMIT 60 /*seconds*/
+#define CH_SIZE 8192*8 /*approx chunk size in bytes*/
+
+typedef struct {
+ double percent;
+ size_t lo, hi;
+ size_t nhits;
+} quant_t;
+
+#if 1
+/* Typical VBT sizes */
+static quant_t quant_g[] = {
+ {10.00, 1, 5},
+ {89.00, 6, 20},
+ { 0.90, 21, 100},
+ { 0.09, 101, 1000},
+ { 0.01, 1001, 10000},
+};
+#elif 0
+/* Sizes for testing */
+static quant_t quant_g[] = {
+ {10.0, 1, 5},
+ {80.0, 6, 15},
+ {10.0, 16, 20},
+};
+#elif 0
+/* Larger I/O */
+static quant_t quant_g[] = {
+ {10.0, 1, 1000},
+ {80.0, 1001, 5000},
+ {10.0, 5001, 10000},
+};
+#else
+/* All same size */
+static quant_t quant_g[] = {
+ {100.0, 1000, 1000}
+};
+#endif
+
+static volatile sig_atomic_t alarm_g = 0;
+static volatile sig_atomic_t abort_g = 0;
+
+
+/*-------------------------------------------------------------------------
+ * Function: catch_alarm
+ *
+ * Purpose: Increments the global `alarm_g' and resets the alarm for
+ * another few seconds.
+ *
+ * Return: void
+ *
+ * Programmer: Robb Matzke
+ * Wednesday, August 26, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void
+catch_alarm(int signum)
+{
+ static int ncalls=0;
+
+ ncalls++;
+ if (0==ncalls % NOTIFY_INTERVAL) {
+ alarm_g++;
+ }
+ if (ncalls>=TIME_LIMIT) {
+ abort_g=1;
+ }
+ alarm(1);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: rand_nelmts
+ *
+ * Purpose: Returns a the length of a 1-d array according to the
+ * probabilities described above.
+ *
+ * Return: Success: Number of elements
+ *
+ * Failure: never fails
+ *
+ * Programmer: Robb Matzke
+ * Thursday, August 20, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static size_t
+rand_nelmts(void)
+{
+ double p = (rand() % 1000000)/1000000.0;
+ double total = 0.0;
+ size_t size, i;
+
+ for (i=0; i<NELMTS(quant_g); i++) {
+ total += quant_g[i].percent/100.0;
+ if (p<total) {
+ size = rand()%(1+(quant_g[i].hi-quant_g[i].lo)) + quant_g[i].lo;
+ quant_g[i].nhits++;
+ break;
+ }
+ }
+ assert(i<NELMTS(quant_g));
+ return size;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: main
+ *
+ * Purpose:
+ *
+ * Return: Success:
+ *
+ * Failure:
+ *
+ * Programmer: Robb Matzke
+ * Friday, August 21, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+int
+main(void)
+{
+ hid_t file, dcpl, ra;
+ int *dd, max_nelmts=3000000, total_nelmts=0;
+ int i, rows_at_once=100;
+ hssize_t row; /*current row number */
+ hsize_t max_width = quant_g[NELMTS(quant_g)-1].hi;
+ hsize_t ch_size[2]; /*chunk size */
+ hsize_t interval_nelmts; /*elmts/interval timer */
+ hsize_t *size=NULL; /*size of each row */
+ void **buf=NULL; /*buffer for each row */
+ struct sigaction act; /*alarm signal handler */
+ H5_timer_t timer, timer_total; /*performance timers */
+ char s[64]; /*tempory string buffer */
+
+ /* Get a SIGALRM every few seconds */
+ act.sa_handler = catch_alarm;
+ sigemptyset(&(act.sa_mask));
+ act.sa_flags = 0;
+ sigaction(SIGALRM, &act, NULL);
+ alarm(1);
+
+ /* Create the file and ragged array */
+ if ((file=H5Fcreate("ragged.h5", H5F_ACC_TRUNC, H5P_DEFAULT,
+ H5P_DEFAULT))<0) goto error;
+ if ((dcpl=H5Pcreate(H5P_DATASET_CREATE))<0) goto error;
+ ch_size[1] = 20;
+ ch_size[0] = MAX(1, CH_SIZE/(ch_size[1]*sizeof(int))); /*length*/
+ printf("Chunk size is %lu by %lu\n",
+ (unsigned long)(ch_size[0]), (unsigned long)(ch_size[1]));
+ if (H5Pset_chunk(dcpl, 2, ch_size)<0) goto error;
+ if ((ra=H5Rcreate(file, "ra", H5T_NATIVE_INT, dcpl))<0) goto error;
+ if (H5Pclose(dcpl)<0) goto error;
+
+ /* Create the ragged array row in memory */
+ if (NULL==(dd = malloc(max_width*sizeof(int)))) goto error;
+ for (i=0; i<max_width; i++) dd[i] = i+1;
+ size = malloc(rows_at_once*sizeof(*size));
+ buf = malloc(rows_at_once*sizeof(*buf));
+
+ /*
+ * Describe a few rows then add them to the ragged array. Print a status
+ * report every once in a while too.
+ */
+ printf("Aggregated to %d row%s\n", rows_at_once, 1==rows_at_once?"":"s");
+ printf(" %8s %8s %8s %10s\n",
+ "Row", "Nelmts", "Complete", "Bandwidth");
+ printf(" -------- -------- -------- ----------\n");
+ H5_timer_reset(&timer_total);
+ H5_timer_begin(&timer);
+ interval_nelmts = 0;
+ for (row=0; total_nelmts<max_nelmts && !abort_g; row+=i) {
+ for (i=0; i<rows_at_once && total_nelmts<max_nelmts; i++) {
+ size[i] = rand_nelmts();
+ total_nelmts += size[i];
+ buf[i] = dd;
+ interval_nelmts += size[i];
+ }
+ if (H5Rwrite(ra, row, i, H5T_NATIVE_INT, size, buf)<0) goto error;
+ if (0==row || alarm_g) {
+ alarm_g = 0;
+ H5_timer_end(&timer_total, &timer);
+ H5_bandwidth(s, (double)interval_nelmts*sizeof(int), timer.etime);
+ printf(" %8lu %8lu %7.3f%% %10s%s\n",
+ (unsigned long)(row+i), (unsigned long)total_nelmts,
+ 100.0*total_nelmts/max_nelmts, s, abort_g?" (aborting)":"");
+ interval_nelmts = 0;
+ H5_timer_begin(&timer);
+ }
+ }
+
+ /* Conclusions */
+ if (!abort_g) {
+ H5_timer_end(&timer_total, &timer);
+ H5_bandwidth(s, (double)interval_nelmts*sizeof(int), timer.etime);
+ printf(" %8lu %8lu %7.3f%% %10s\n",
+ (unsigned long)row, (unsigned long)total_nelmts,
+ 100.0*total_nelmts/max_nelmts, s);
+ }
+ printf(" -------- -------- -------- ----------\n");
+ H5_bandwidth(s, (double)total_nelmts*sizeof(int), timer_total.etime);
+ printf(" %27s%10s\n\n", "", s);
+
+
+ printf(" %9s %8s %8s\n", "Length", "Requsted", "Actual");
+ printf(" --------------- -------- --------\n");
+ for (i=0; i<NELMTS(quant_g); i++) {
+ printf(" [%6lu,%6lu] %7.3f%% %7.3f%%\n",
+ (unsigned long)(quant_g[i].lo), (unsigned long)(quant_g[i].hi),
+ quant_g[i].percent,
+ 100.0*(double)(quant_g[i].nhits)/(double)row);
+ }
+ printf(" --------------- -------- --------\n");
+
+ /* Cleanup */
+ if (H5Rclose(ra)<0) goto error;
+ if (H5Fclose(file)<0) goto error;
+ free(dd);
+ free(size);
+ free(buf);
+ return 0;
+
+ error:
+ return -1;
+}
diff --git a/tools/h5import.c b/tools/h5import.c
index de1af53..dd88ba6 100644
--- a/tools/h5import.c
+++ b/tools/h5import.c
@@ -56,7 +56,7 @@ usage (const char *argv0)
int
main (int argc, char *argv[])
{
- hid_t file, space, dset;
+ hid_t file, space=-1, dset=-1;
const char *output_name, *dset_name;
int argno, fd=-1;
hsize_t size[1];
@@ -108,8 +108,14 @@ main (int argc, char *argv[])
if (fd>=0) close (fd);
fd = -1;
H5E_BEGIN_TRY {
- H5Sclose (space);
- H5Dclose (dset);
+ if (space>=0) {
+ H5Sclose (space);
+ space = -1;
+ }
+ if (dset>=0) {
+ H5Dclose (dset);
+ dset = -1;
+ }
} H5E_END_TRY;
}
diff --git a/tools/h5tools.c b/tools/h5tools.c
index bfb46a3..f6b7c24 100644
--- a/tools/h5tools.c
+++ b/tools/h5tools.c
@@ -157,6 +157,26 @@ h5dump_sprint(char *s/*out*/, const h5dump_t *info, hid_t type, void *vp)
sprintf(temp, "%ld", *((long*)vp));
} else if (H5Tequal(type, H5T_NATIVE_ULONG)) {
sprintf(temp, "%lu", *((unsigned long*)vp));
+ } else if (H5Tequal(type, H5T_NATIVE_HSSIZE)) {
+ if (sizeof(hssize_t)==sizeof(long)) {
+ sprintf(temp, "%ld", *((long*)vp));
+ } else {
+ char fmt[8];
+ strcpy(fmt, "%");
+ strcat(fmt, PRINTF_LL_WIDTH);
+ strcat(fmt, "d");
+ sprintf(temp, fmt, *((long long*)vp));
+ }
+ } else if (H5Tequal(type, H5T_NATIVE_HSIZE)) {
+ if (sizeof(hsize_t)==sizeof(long)) {
+ sprintf(temp, "%lu", *((unsigned long*)vp));
+ } else {
+ char fmt[8];
+ strcpy(fmt, "%");
+ strcat(fmt, PRINTF_LL_WIDTH);
+ strcat(fmt, "u");
+ sprintf(temp, fmt, *((unsigned long long*)vp));
+ }
} else if (H5T_COMPOUND==H5Tget_class(type)) {
nmembs = H5Tget_nmembers(type);
strcpy(temp, OPT(info->cmpd_pre, "{"));