summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xbin/iostats88
-rwxr-xr-xbin/trace2
-rw-r--r--config/conclude.in2
-rw-r--r--config/depend.in2
-rw-r--r--config/gnu-flags8
-rwxr-xr-xconfigure12
-rw-r--r--configure.in8
-rw-r--r--src/.distdep112
-rw-r--r--src/H5D.c61
-rw-r--r--src/H5Distore.c60
-rw-r--r--src/H5Dpublic.h1
-rw-r--r--src/H5F.c2
-rw-r--r--src/H5Fistore.c60
-rw-r--r--src/H5Fprivate.h23
-rw-r--r--src/H5S.c36
-rw-r--r--src/H5Sprivate.h6
-rw-r--r--src/H5Tconv.c25
-rw-r--r--test/.distdep66
-rw-r--r--test/dtypes.c54
-rw-r--r--tools/h5ls.c26
20 files changed, 491 insertions, 163 deletions
diff --git a/bin/iostats b/bin/iostats
index d55d550..0e96e29 100755
--- a/bin/iostats
+++ b/bin/iostats
@@ -3,51 +3,81 @@
# Usage: pipe the output of Linux's `strace' program into the stdin of
# this command, and the output of this command into gnuplot.
+my ($fast,$npasses);
+if ($ARGV[0] =~ /^--?fast$/) {
+ $fast = 1;
+ shift;
+}
+
my $filename = shift || "tstab2.h5";
my $total = 0;
my %What; # What{pos}{nbytes}{r|w} = naccesses
+my($total_writes, $total_bytes_out, $total_reads, $total_bytes_in);
while (<>) {
- if (!defined $fd) {
- if (/^open\("(.*?)".*=\s+(\d+)/ && $1 eq $filename) {
- $fd = $2;
- $pos = 0;
- }
- } elsif (/^close\((\d+)/ && $1==$fd) {
- $fd = undef;
- } elsif (/^lseek\((\d+), -?\d+,.*= (\d+)/ &&
- $1==$fd && $2>=0) {
- $pos = $2;
- } elsif (/^lseek\((\d+),/ && $1==$fd) {
- die $_;
- } elsif (/^write\((\d+), ".*?"(\.\.\.)?, \d+\)\s*= (\d+)/ &&
- $1==$fd && $3>=0) {
- my $nbytes = $3;
+ if (!defined $fd) {
+ if (/^open\("(.*?)".*=\s+(\d+)/ && $1 eq $filename) {
+ $fd = $2;
+ $pos = 0;
+ }
+ } elsif (/^close\((\d+)/ && $1==$fd) {
+ $fd = undef;
+ } elsif (!$fast &&
+ /^lseek\((\d+), -?\d+,.*= (\d+)/ &&
+ $1==$fd && $2>=0) {
+ $pos = $2;
+ } elsif (!$fast && /^lseek\((\d+),/ && $1==$fd) {
+ die $_;
+ } elsif (/^write\((\d+), ".*?"(\.\.\.)?, \d+\)\s*= (\d+)/ &&
+ $1==$fd && $3>=0) {
+ my $nbytes = $3;
+ if ($fast) {
+ $total_writes++;
+ $total_bytes_out += $nbytes;
+ } else {
$What{$pos}{$nbytes}{w}++;
printf "%d %d\n", $total, $pos;
$pos += $nbytes;
$total += $nbytes;
- } elsif (/^write\((\d+),/ && $1==$fd) {
- die $_;
- } elsif (/^read\((\d+), ".*?"(\.\.\.)?, \d+\)\s*= (\d+)/ &&
- $1==$fd && $3>=0) {
- my $nbytes = $3;
+ }
+ } elsif (/^write\((\d+),/ && $1==$fd) {
+ die $_;
+ } elsif (/^read\((\d+), ".*?"(\.\.\.)?, \d+\)\s*= (\d+)/ &&
+ $1==$fd && $3>=0) {
+ my $nbytes = $3;
+ if ($fast) {
+ $total_reads++;
+ $total_bytes_in += $nbytes;
+ } else {
$What{$pos}{$nbytes}{r}++;
printf "%d %d\n", $total, $pos;
$pos += $nbytes;
$total += $nbytes;
- } elsif (/^read\((\d+),/ && $1==$fd) {
- die $_;
- }
+ }
+ } elsif (/^read\((\d+),/ && $1==$fd) {
+ die $_;
+ }
}
-print "="x36, "\n";
+if (!$fast) {
+ print "="x36, "\n";
printf "%8s %8s %8s %8s\n","Position","NBytes","NReads","NWrites";
-for $pos (sort {$a<=>$b} keys %What) {
- for $nbytes (sort {$a<=>$b} keys %{$What{$pos}}) {
- printf "%8d %8d %8d %8d\n", $pos, $nbytes,
- $What{$pos}{$nbytes}{r},
- $What{$pos}{$nbytes}{w};
+ for $pos (sort {$a<=>$b} keys %What) {
+ for $nbytes (sort {$a<=>$b} keys %{$What{$pos}}) {
+ printf("%8d %8d %8d %8d\n", $pos, $nbytes,
+ $What{$pos}{$nbytes}{r},
+ $What{$pos}{$nbytes}{w});
+ $total_writes += $What{$pos}{$nbytes}{w};
+ $total_reads += $What{$pos}{$nbytes}{r};
+ $total_bytes_out += $What{$pos}{$nbytes}{w} * $nbytes;
+ $total_bytes_in += $What{$pos}{$nbytes}{r} * $nbytes;
+ }
}
}
+
+print "="x36, "\n";
+printf("Write: %8d calls, %10d total bytes, %10g average bytes\n",
+ $total_writes, $total_bytes_out, $total_bytes_out/$total_writes);
+printf("Read: %8d calls, %10d total bytes, %10g average bytes\n",
+ $total_reads, $total_bytes_in, $total_bytes_in/$total_reads);
diff --git a/bin/trace b/bin/trace
index dfc14c2..aa4f3ca 100755
--- a/bin/trace
+++ b/bin/trace
@@ -92,7 +92,7 @@ sub argstring ($$$) {
# Normalize the data type by removing redundant white space,
# certain type qualifiers, and indirection.
$atype =~ s/^\bconst\b//;
- $atype =~ s/\b__unused__\b//g;
+ $atype =~ s/\bUNUSED\b//g;
$atype =~ s/\s+/ /g;
$ptr = length $1 if $atype =~ s/(\*+)//;
$atype =~ s/^\s+//;
diff --git a/config/conclude.in b/config/conclude.in
index 63bd512..00c8172 100644
--- a/config/conclude.in
+++ b/config/conclude.in
@@ -146,3 +146,5 @@ maintainer-clean: distclean
@DEPEND1@
@DEPEND2@
+@DEPEND3@
+@DEPEND4@
diff --git a/config/depend.in b/config/depend.in
index 7c61f4f..a02ad20 100644
--- a/config/depend.in
+++ b/config/depend.in
@@ -38,7 +38,7 @@ dep depend: .distdep
$(CC) -M -MG $(CPPFLAGS) $$dep |sed 's/\.o/.lo/' >>$@; \
fi; \
done;
- -perl -p $(top_srcdir)/bin/distdep .depend >.distdep
+ -perl -p $(top_srcdir)/bin/distdep .depend >$(srcdir)/.distdep
-include .depend
diff --git a/config/gnu-flags b/config/gnu-flags
index 46a38f4..71de5e3 100644
--- a/config/gnu-flags
+++ b/config/gnu-flags
@@ -44,14 +44,14 @@ EOF
v2=`echo $cc_version |cut -f2 -d.`
v3=`echo $cc_version |cut -f3 -d.`
v=`expr $v2 '*' 1000 + $v3`
- if test $v -lt 91060; then
+ if test $v -le 91066; then
cat <<EOF
**
** This compiler may have problems allocating registers for long
** long data types when optimizations are enabled. There may be
- ** other code generation problems as well. Please upgrade to at
- ** least pgcc-2.91.60 (egcs-1.1.1) before reporting bugs to the
- ** HDF5 team.
+ ** other code generation problems as well. We know of no version
+ ** of pgcc which is capable of compiling HDF5 in production mode.
+ ** Please use gcc-2.8 or egcs-1.1.1 before reporting bugs.
**
EOF
sleep 5
diff --git a/configure b/configure
index d71bd89..6d7d80a 100755
--- a/configure
+++ b/configure
@@ -4768,9 +4768,13 @@ fi
if test "X$GCC" = "Xyes" && test "X$GMAKE" = "Xyes"; then
DEPEND1=config/depend
DEPEND2=/dev/null
+ DEPEND3=/dev/null
+ DEPEND4=/dev/null
else
- DEPEND1=src/.distdep
- DEPEND2=test/.distdep
+ DEPEND1=$srcdir/src/.distdep
+ DEPEND2=$srcdir/test/.distdep
+ DEPEND3=$srcdir/testpar/.distdep
+ DEPEND4=$srcdirtools/.distdep
fi
if test "X$GMAKE" = "Xyes"; then
@@ -4961,6 +4965,10 @@ s%@CONCLUDE@%%g
s%@DEPEND1@%%g
/@DEPEND2@/r $DEPEND2
s%@DEPEND2@%%g
+/@DEPEND3@/r $DEPEND3
+s%@DEPEND3@%%g
+/@DEPEND4@/r $DEPEND4
+s%@DEPEND4@%%g
s%@SETX@%$SETX%g
s%@ROOT@%$ROOT%g
diff --git a/configure.in b/configure.in
index 0505781..ebfda0b 100644
--- a/configure.in
+++ b/configure.in
@@ -710,9 +710,13 @@ AC_SUBST_FILE(CONCLUDE) CONCLUDE=config/conclude
if test "X$GCC" = "Xyes" && test "X$GMAKE" = "Xyes"; then
AC_SUBST_FILE(DEPEND1) DEPEND1=config/depend
AC_SUBST_FILE(DEPEND2) DEPEND2=/dev/null
+ AC_SUBST_FILE(DEPEND3) DEPEND3=/dev/null
+ AC_SUBST_FILE(DEPEND4) DEPEND4=/dev/null
else
- AC_SUBST_FILE(DEPEND1) DEPEND1=src/.distdep
- AC_SUBST_FILE(DEPEND2) DEPEND2=test/.distdep
+ AC_SUBST_FILE(DEPEND1) DEPEND1=$srcdir/src/.distdep
+ AC_SUBST_FILE(DEPEND2) DEPEND2=$srcdir/test/.distdep
+ AC_SUBST_FILE(DEPEND3) DEPEND3=$srcdir/testpar/.distdep
+ AC_SUBST_FILE(DEPEND4) DEPEND4=$srcdirtools/.distdep
fi
dnl We don't need to say when we're entering directories if we're using
diff --git a/src/.distdep b/src/.distdep
index e02947b..02eaf65 100644
--- a/src/.distdep
+++ b/src/.distdep
@@ -1,4 +1,4 @@
-H5.o: \
+H5.lo: \
H5.c \
H5private.h \
H5public.h \
@@ -27,7 +27,7 @@ H5.o: \
H5Gpublic.h \
H5Oprivate.h \
H5Opublic.h
-H5A.o: \
+H5A.lo: \
H5A.c \
H5private.h \
H5public.h \
@@ -61,7 +61,7 @@ H5A.o: \
H5Ppublic.h \
H5Apkg.h \
H5Aprivate.h
-H5AC.o: \
+H5AC.lo: \
H5AC.c \
H5private.h \
H5public.h \
@@ -75,7 +75,7 @@ H5AC.o: \
H5Dpublic.h \
H5Eprivate.h \
H5Epublic.h
-H5B.o: \
+H5B.lo: \
H5B.c \
H5private.h \
H5public.h \
@@ -94,7 +94,7 @@ H5B.o: \
H5MFprivate.h \
H5MFpublic.h \
H5MMprivate.h
-H5D.o: \
+H5D.lo: \
H5D.c \
H5private.h \
H5public.h \
@@ -133,7 +133,7 @@ H5D.o: \
H5Pprivate.h \
H5Ppublic.h \
H5TBprivate.h
-H5E.o: \
+H5E.lo: \
H5E.c \
H5private.h \
H5public.h \
@@ -142,7 +142,7 @@ H5E.o: \
H5Iprivate.h \
H5Ipublic.h \
H5Eprivate.h
-H5F.o: \
+H5F.lo: \
H5F.c \
H5private.h \
H5public.h \
@@ -176,7 +176,7 @@ H5F.o: \
H5Epublic.h \
H5MMprivate.h \
H5MMpublic.h
-H5Farray.o: \
+H5Farray.lo: \
H5Farray.c \
H5private.h \
H5public.h \
@@ -205,7 +205,7 @@ H5Farray.o: \
H5Epublic.h \
H5MFprivate.h \
H5MFpublic.h
-H5Fcore.o: \
+H5Fcore.lo: \
H5Fcore.c \
H5private.h \
H5public.h \
@@ -214,7 +214,7 @@ H5Fcore.o: \
H5Eprivate.h \
H5Epublic.h \
H5Ipublic.h
-H5Ffamily.o: \
+H5Ffamily.lo: \
H5Ffamily.c \
H5private.h \
H5public.h \
@@ -223,7 +223,7 @@ H5Ffamily.o: \
H5Eprivate.h \
H5Epublic.h \
H5Ipublic.h
-H5Fistore.o: \
+H5Fistore.lo: \
H5Fistore.c \
H5private.h \
H5public.h \
@@ -252,7 +252,7 @@ H5Fistore.o: \
H5Epublic.h \
H5MFprivate.h \
H5MFpublic.h
-H5Flow.o: \
+H5Flow.lo: \
H5Flow.c \
H5private.h \
H5public.h \
@@ -261,7 +261,7 @@ H5Flow.o: \
H5Eprivate.h \
H5Epublic.h \
H5Ipublic.h
-H5Fmpio.o: \
+H5Fmpio.lo: \
H5Fmpio.c \
H5private.h \
H5public.h \
@@ -285,7 +285,7 @@ H5Fmpio.o: \
H5Tprivate.h \
H5Tpublic.h \
H5Sprivate.h
-H5Fsec2.o: \
+H5Fsec2.lo: \
H5Fsec2.c \
H5private.h \
H5public.h \
@@ -294,7 +294,7 @@ H5Fsec2.o: \
H5Eprivate.h \
H5Epublic.h \
H5Ipublic.h
-H5Fsplit.o: \
+H5Fsplit.lo: \
H5Fsplit.c \
H5private.h \
H5public.h \
@@ -308,7 +308,7 @@ H5Fsplit.o: \
H5Dpublic.h \
H5MFprivate.h \
H5MFpublic.h
-H5Fstdio.o: \
+H5Fstdio.lo: \
H5Fstdio.c \
H5private.h \
H5public.h \
@@ -317,7 +317,7 @@ H5Fstdio.o: \
H5Eprivate.h \
H5Epublic.h \
H5Ipublic.h
-H5G.o: \
+H5G.lo: \
H5G.c \
H5private.h \
H5public.h \
@@ -351,7 +351,7 @@ H5G.o: \
H5ACpublic.h \
H5HLprivate.h \
H5HLpublic.h
-H5Gent.o: \
+H5Gent.lo: \
H5Gent.c \
H5private.h \
H5public.h \
@@ -370,7 +370,7 @@ H5Gent.o: \
H5Gpublic.h \
H5Bprivate.h \
H5Bpublic.h
-H5Gnode.o: \
+H5Gnode.lo: \
H5Gnode.c \
H5private.h \
H5public.h \
@@ -404,7 +404,7 @@ H5Gnode.o: \
H5Sprivate.h \
H5Spublic.h \
H5Zprivate.h
-H5Gstab.o: \
+H5Gstab.lo: \
H5Gstab.c \
H5private.h \
H5public.h \
@@ -434,7 +434,7 @@ H5Gstab.o: \
H5Tprivate.h \
H5Tpublic.h \
H5Sprivate.h
-H5HG.o: \
+H5HG.lo: \
H5HG.c \
H5private.h \
H5public.h \
@@ -453,7 +453,7 @@ H5HG.o: \
H5MFprivate.h \
H5MFpublic.h \
H5MMprivate.h
-H5HL.o: \
+H5HL.lo: \
H5HL.c \
H5private.h \
H5public.h \
@@ -472,7 +472,7 @@ H5HL.o: \
H5MFprivate.h \
H5MFpublic.h \
H5MMprivate.h
-H5I.o: \
+H5I.lo: \
H5I.c \
H5private.h \
H5public.h \
@@ -481,7 +481,7 @@ H5I.o: \
H5Iprivate.h \
H5Ipublic.h \
H5Eprivate.h
-H5MF.o: \
+H5MF.lo: \
H5MF.c \
H5private.h \
H5public.h \
@@ -490,7 +490,7 @@ H5MF.o: \
H5Eprivate.h \
H5Epublic.h \
H5Ipublic.h
-H5MM.o: \
+H5MM.lo: \
H5MM.c \
H5private.h \
H5public.h \
@@ -499,7 +499,7 @@ H5MM.o: \
H5Eprivate.h \
H5Epublic.h \
H5Ipublic.h
-H5O.o: \
+H5O.lo: \
H5O.c \
H5private.h \
H5public.h \
@@ -528,7 +528,7 @@ H5O.o: \
H5HGpublic.h \
H5Tprivate.h \
H5Tpublic.h
-H5Oattr.o: \
+H5Oattr.lo: \
H5Oattr.c \
H5private.h \
H5public.h \
@@ -557,7 +557,7 @@ H5Oattr.o: \
H5Zprivate.h \
H5Zpublic.h \
H5Apkg.h
-H5Ocomp.o: \
+H5Ocomp.lo: \
H5Ocomp.c \
H5private.h \
H5public.h \
@@ -581,7 +581,7 @@ H5Ocomp.o: \
H5HGpublic.h \
H5Tprivate.h \
H5Tpublic.h
-H5Ocont.o: \
+H5Ocont.lo: \
H5Ocont.c \
H5private.h \
H5public.h \
@@ -605,7 +605,7 @@ H5Ocont.o: \
H5HGpublic.h \
H5Tprivate.h \
H5Tpublic.h
-H5Odtype.o: \
+H5Odtype.lo: \
H5Odtype.c \
H5private.h \
H5public.h \
@@ -634,7 +634,7 @@ H5Odtype.o: \
H5Zprivate.h \
H5Zpublic.h \
H5Tpkg.h
-H5Oefl.o: \
+H5Oefl.lo: \
H5Oefl.c \
H5private.h \
H5public.h \
@@ -663,7 +663,7 @@ H5Oefl.o: \
H5Sprivate.h \
H5Spublic.h \
H5Zprivate.h
-H5Ofill.o: \
+H5Ofill.lo: \
H5Ofill.c \
H5private.h \
H5public.h \
@@ -687,7 +687,7 @@ H5Ofill.o: \
H5HGprivate.h \
H5HGpublic.h \
H5Tprivate.h
-H5Olayout.o: \
+H5Olayout.lo: \
H5Olayout.c \
H5private.h \
H5public.h \
@@ -711,7 +711,7 @@ H5Olayout.o: \
H5Sprivate.h \
H5Spublic.h \
H5Zprivate.h
-H5Omtime.o: \
+H5Omtime.lo: \
H5Omtime.c \
H5private.h \
H5public.h \
@@ -735,7 +735,7 @@ H5Omtime.o: \
H5HGpublic.h \
H5Tprivate.h \
H5Tpublic.h
-H5Oname.o: \
+H5Oname.lo: \
H5Oname.c \
H5private.h \
H5public.h \
@@ -759,7 +759,7 @@ H5Oname.o: \
H5HGpublic.h \
H5Tprivate.h \
H5Tpublic.h
-H5Onull.o: \
+H5Onull.lo: \
H5Onull.c \
H5private.h \
H5public.h \
@@ -778,7 +778,7 @@ H5Onull.o: \
H5HGprivate.h \
H5HGpublic.h \
H5Tprivate.h
-H5Osdspace.o: \
+H5Osdspace.lo: \
H5Osdspace.c \
H5private.h \
H5public.h \
@@ -802,7 +802,7 @@ H5Osdspace.o: \
H5HGpublic.h \
H5Tprivate.h \
H5Tpublic.h
-H5Oshared.o: \
+H5Oshared.lo: \
H5Oshared.c \
H5private.h \
H5public.h \
@@ -826,7 +826,7 @@ H5Oshared.o: \
H5HGpublic.h \
H5Tprivate.h \
H5Tpublic.h
-H5Ostab.o: \
+H5Ostab.lo: \
H5Ostab.c \
H5private.h \
H5public.h \
@@ -850,7 +850,7 @@ H5Ostab.o: \
H5HGpublic.h \
H5Tprivate.h \
H5Tpublic.h
-H5P.o: \
+H5P.lo: \
H5P.c \
H5private.h \
H5public.h \
@@ -879,7 +879,7 @@ H5P.o: \
H5Eprivate.h \
H5Epublic.h \
H5MMprivate.h
-H5R.o: \
+H5R.lo: \
H5R.c \
H5private.h \
H5public.h \
@@ -908,7 +908,7 @@ H5R.o: \
H5Eprivate.h \
H5Epublic.h \
H5MMprivate.h
-H5RA.o: \
+H5RA.lo: \
H5RA.c \
H5RAprivate.h \
H5RApublic.h \
@@ -937,7 +937,7 @@ H5RA.o: \
H5Zpublic.h \
H5Eprivate.h \
H5Epublic.h
-H5S.o: \
+H5S.lo: \
H5S.c \
H5private.h \
H5public.h \
@@ -961,7 +961,7 @@ H5S.o: \
H5HGprivate.h \
H5HGpublic.h \
H5Tprivate.h
-H5Sall.o: \
+H5Sall.lo: \
H5Sall.c \
H5private.h \
H5public.h \
@@ -985,7 +985,7 @@ H5Sall.o: \
H5HGpublic.h \
H5Tprivate.h \
H5Tpublic.h
-H5Shyper.o: \
+H5Shyper.lo: \
H5Shyper.c \
H5private.h \
H5public.h \
@@ -1014,7 +1014,7 @@ H5Shyper.o: \
H5Vprivate.h \
H5MMprivate.h \
H5MMpublic.h
-H5Smpio.o: \
+H5Smpio.lo: \
H5Smpio.c \
H5private.h \
H5public.h \
@@ -1038,7 +1038,7 @@ H5Smpio.o: \
H5HGpublic.h \
H5Tprivate.h \
H5Tpublic.h
-H5Snone.o: \
+H5Snone.lo: \
H5Snone.c \
H5private.h \
H5public.h \
@@ -1062,7 +1062,7 @@ H5Snone.o: \
H5HGpublic.h \
H5Tprivate.h \
H5Tpublic.h
-H5Spoint.o: \
+H5Spoint.lo: \
H5Spoint.c \
H5private.h \
H5public.h \
@@ -1091,7 +1091,7 @@ H5Spoint.o: \
H5Zprivate.h \
H5Zpublic.h \
H5Vprivate.h
-H5Sselect.o: \
+H5Sselect.lo: \
H5Sselect.c \
H5private.h \
H5public.h \
@@ -1120,7 +1120,7 @@ H5Sselect.o: \
H5Tpublic.h \
H5Zprivate.h \
H5Zpublic.h
-H5T.o: \
+H5T.lo: \
H5T.c \
H5private.h \
H5public.h \
@@ -1149,7 +1149,7 @@ H5T.o: \
H5Eprivate.h \
H5Epublic.h \
H5MMprivate.h
-H5Tbit.o: \
+H5Tbit.lo: \
H5Tbit.c \
H5private.h \
H5public.h \
@@ -1168,7 +1168,7 @@ H5Tbit.o: \
H5Rprivate.h \
H5Rpublic.h \
H5Tprivate.h
-H5Tconv.o: \
+H5Tconv.lo: \
H5Tconv.c \
H5Iprivate.h \
H5Ipublic.h \
@@ -1189,7 +1189,7 @@ H5Tconv.o: \
H5Rprivate.h \
H5Rpublic.h \
H5Tprivate.h
-H5Tinit.o: \
+H5Tinit.lo: \
H5Tinit.c \
H5private.h \
H5public.h \
@@ -1213,7 +1213,7 @@ H5Tinit.o: \
H5Tpublic.h \
H5Gprivate.h \
H5Gpublic.h
-H5TB.o: \
+H5TB.lo: \
H5TB.c \
H5private.h \
H5public.h \
@@ -1222,7 +1222,7 @@ H5TB.o: \
H5Iprivate.h \
H5Ipublic.h \
H5Eprivate.h
-H5V.o: \
+H5V.lo: \
H5V.c \
H5private.h \
H5public.h \
@@ -1246,7 +1246,7 @@ H5V.o: \
H5Tpublic.h \
H5Sprivate.h \
H5Spublic.h
-H5Z.o: \
+H5Z.lo: \
H5Z.c \
H5private.h \
H5public.h \
diff --git a/src/H5D.c b/src/H5D.c
index 7a4a148..43c1fdb 100644
--- a/src/H5D.c
+++ b/src/H5D.c
@@ -1545,6 +1545,9 @@ H5D_read(H5D_t *dataset, const H5T_t *mem_type, const H5S_t *mem_space,
* application's buffer. This saves at least one mem-to-mem copy.
*/
if (H5T_IS_NOOP(tpath) && sconv->read) {
+#ifdef H5S_DEBUG
+ H5_timer_begin(&timer);
+#endif
status = (sconv->read)(dataset->ent.file, &(dataset->layout),
&(dataset->create_parms->pline),
&(dataset->create_parms->efl),
@@ -1561,6 +1564,12 @@ H5D_read(H5D_t *dataset, const H5T_t *mem_type, const H5S_t *mem_space,
* fall through and xfer the data in the more roundabout way */
} else {
/* direct xfer accomplished successfully */
+#ifdef H5S_DEBUG
+ H5_timer_end(&(sconv->stats[1].read_timer), &timer);
+ sconv->stats[1].read_nbytes += nelmts *
+ H5T_get_size(dataset->type);
+ sconv->stats[1].read_ncalls++;
+#endif
goto succeed;
}
#ifdef H5D_DEBUG
@@ -1920,6 +1929,9 @@ H5D_write(H5D_t *dataset, const H5T_t *mem_type, const H5S_t *mem_space,
* application buffer to file.
*/
if (H5T_IS_NOOP(tpath) && sconv->write) {
+#ifdef H5S_DEBUG
+ H5_timer_begin(&timer);
+#endif
status = (sconv->write)(dataset->ent.file, &(dataset->layout),
&(dataset->create_parms->pline),
&(dataset->create_parms->efl),
@@ -1936,6 +1948,11 @@ H5D_write(H5D_t *dataset, const H5T_t *mem_type, const H5S_t *mem_space,
* fall through and xfer the data in the more roundabout way */
} else {
/* direct xfer accomplished successfully */
+#ifdef H5S_DEBUG
+ H5_timer_end(&(sconv->stats[0].write_timer), &timer);
+ sconv->stats[0].write_nbytes += nelmts * H5T_get_size(mem_type);
+ sconv->stats[0].write_ncalls++;
+#endif
goto succeed;
}
#ifdef H5D_DEBUG
@@ -2515,3 +2532,47 @@ H5D_get_storage_size(H5D_t *dset)
FUNC_LEAVE(size);
}
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5Ddebug
+ *
+ * Purpose: Prints various information about a dataset. This function is
+ * not to be documented in the API at this time.
+ *
+ * Return: Success: Non-negative
+ *
+ * Failure: Negative
+ *
+ * Programmer: Robb Matzke
+ * Wednesday, April 28, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Ddebug(hid_t dset_id, unsigned UNUSED flags)
+{
+ H5D_t *dset=NULL;
+
+ FUNC_ENTER(H5Ddebug, FAIL);
+ H5TRACE2("e","iIu",dset_id,flags);
+
+ /* Check args */
+ if (H5I_DATASET!=H5I_get_type(dset_id) ||
+ NULL==(dset=H5I_object(dset_id))) {
+ HRETURN_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a dataset");
+ }
+
+ /* Print B-tree information */
+ if (H5D_CHUNKED==dset->layout.type) {
+ H5F_istore_dump_btree(dset->ent.file, stdout, dset->layout.ndims,
+ &(dset->layout.addr));
+ } else if (H5D_CONTIGUOUS==dset->layout.type) {
+ HDfprintf(stdout, " %-10s %a\n", "Address:",
+ &(dset->layout.addr));
+ }
+
+ FUNC_LEAVE(SUCCEED);
+}
diff --git a/src/H5Distore.c b/src/H5Distore.c
index 904caf8..3fdfd0b 100644
--- a/src/H5Distore.c
+++ b/src/H5Distore.c
@@ -147,6 +147,7 @@ typedef struct H5F_istore_ud1_t {
haddr_t addr; /*file address of chunk */
H5O_layout_t mesg; /*layout message */
hsize_t total_storage; /*output from iterator */
+ FILE *stream; /*debug output stream */
} H5F_istore_ud1_t;
/* inherits B-tree like properties from H5B */
@@ -724,7 +725,9 @@ H5F_istore_insert(H5F_t *f, const haddr_t *addr, void *_lt_key,
/*-------------------------------------------------------------------------
* Function: H5F_istore_iterate
*
- * Purpose: Simply counts the number of chunks for a dataset.
+ * Purpose: Simply counts the number of chunks for a dataset. If the
+ * UDATA.STREAM member is non-null then debugging information is
+ * written to that stream.
*
* Return: Success: Non-negative
*
@@ -744,8 +747,27 @@ H5F_istore_iterate (H5F_t UNUSED *f, void *_lt_key,
{
H5F_istore_ud1_t *bt_udata = (H5F_istore_ud1_t *)_udata;
H5F_istore_key_t *lt_key = (H5F_istore_key_t *)_lt_key;
+ int i;
FUNC_ENTER(H5F_istore_iterate, FAIL);
+
+ if (bt_udata->stream) {
+ if (0==bt_udata->total_storage) {
+ fprintf(bt_udata->stream, " Address:\n");
+ fprintf(bt_udata->stream,
+ " Flags Bytes Address Logical Offset\n");
+ fprintf(bt_udata->stream,
+ " ========== ======== ========== "
+ "==============================\n");
+ }
+ HDfprintf(bt_udata->stream, " 0x%08x %8Zu %10a [",
+ lt_key->filter_mask, lt_key->nbytes, addr);
+ for (i=0; i<bt_udata->mesg.ndims; i++) {
+ HDfprintf(bt_udata->stream, "%s%Hd", i?", ":"", lt_key->offset[i]);
+ }
+ fputs("]\n", bt_udata->stream);
+ }
+
bt_udata->total_storage += lt_key->nbytes;
FUNC_LEAVE(SUCCEED);
}
@@ -1952,8 +1974,8 @@ H5F_istore_allocated(H5F_t *f, int ndims, haddr_t *addr)
H5F_istore_ud1_t udata;
FUNC_ENTER(H5F_istore_nchunks, 0);
+ HDmemset(&udata, 0, sizeof udata);
udata.mesg.ndims = ndims;
- udata.total_storage = 0;
if (H5B_iterate(f, H5B_ISTORE, addr, &udata)<0) {
HRETURN_ERROR(H5E_IO, H5E_INTERNAL, 0,
"unable to iterate over chunk B-tree");
@@ -1963,6 +1985,40 @@ H5F_istore_allocated(H5F_t *f, int ndims, haddr_t *addr)
/*-------------------------------------------------------------------------
+ * Function: H5F_istore_dump_btree
+ *
+ * Purpose: Prints information about the storage B-tree to the specified
+ * stream.
+ *
+ * Return: Success: Non-negative
+ *
+ * Failure: negative
+ *
+ * Programmer: Robb Matzke
+ * Wednesday, April 28, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5F_istore_dump_btree(H5F_t *f, FILE *stream, int ndims, haddr_t *addr)
+{
+ H5F_istore_ud1_t udata;
+
+ FUNC_ENTER(H5F_istore_dump_btree, FAIL);
+ HDmemset(&udata, 0, sizeof udata);
+ udata.mesg.ndims = ndims;
+ udata.stream = stream;
+ if (H5B_iterate(f, H5B_ISTORE, addr, &udata)<0) {
+ HRETURN_ERROR(H5E_IO, H5E_INTERNAL, 0,
+ "unable to iterate over chunk B-tree");
+ }
+ FUNC_LEAVE(SUCCEED);
+}
+
+
+/*-------------------------------------------------------------------------
* Function: H5F_istore_stats
*
* Purpose: Print raw data cache statistics to the debug stream. If
diff --git a/src/H5Dpublic.h b/src/H5Dpublic.h
index 6130715..89caad6 100644
--- a/src/H5Dpublic.h
+++ b/src/H5Dpublic.h
@@ -56,6 +56,7 @@ __DLL__ herr_t H5Dread (hid_t dset_id, hid_t mem_type_id, hid_t mem_space_id,
__DLL__ herr_t 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);
__DLL__ herr_t H5Dextend (hid_t dset_id, const hsize_t *size);
+__DLL__ herr_t H5Ddebug(hid_t dset_id, unsigned int flags);
#ifdef __cplusplus
}
diff --git a/src/H5F.c b/src/H5F.c
index 17cf4cb..7c19921 100644
--- a/src/H5F.c
+++ b/src/H5F.c
@@ -509,11 +509,9 @@ H5F_compare_files(void * _obj, const void * _key)
FUNC_ENTER(H5F_compare_files, FALSE);
#if WIN32
-
ret_value = (obj->shared->key.dev == key->dev &&
obj->shared->key.fileindexhi == key->fileindexhi &&
obj->shared->key.fileindexlo == key->fileindexlo);
-
#else
ret_value = (obj->shared->key.dev == key->dev &&
obj->shared->key.ino == key->ino);
diff --git a/src/H5Fistore.c b/src/H5Fistore.c
index 904caf8..3fdfd0b 100644
--- a/src/H5Fistore.c
+++ b/src/H5Fistore.c
@@ -147,6 +147,7 @@ typedef struct H5F_istore_ud1_t {
haddr_t addr; /*file address of chunk */
H5O_layout_t mesg; /*layout message */
hsize_t total_storage; /*output from iterator */
+ FILE *stream; /*debug output stream */
} H5F_istore_ud1_t;
/* inherits B-tree like properties from H5B */
@@ -724,7 +725,9 @@ H5F_istore_insert(H5F_t *f, const haddr_t *addr, void *_lt_key,
/*-------------------------------------------------------------------------
* Function: H5F_istore_iterate
*
- * Purpose: Simply counts the number of chunks for a dataset.
+ * Purpose: Simply counts the number of chunks for a dataset. If the
+ * UDATA.STREAM member is non-null then debugging information is
+ * written to that stream.
*
* Return: Success: Non-negative
*
@@ -744,8 +747,27 @@ H5F_istore_iterate (H5F_t UNUSED *f, void *_lt_key,
{
H5F_istore_ud1_t *bt_udata = (H5F_istore_ud1_t *)_udata;
H5F_istore_key_t *lt_key = (H5F_istore_key_t *)_lt_key;
+ int i;
FUNC_ENTER(H5F_istore_iterate, FAIL);
+
+ if (bt_udata->stream) {
+ if (0==bt_udata->total_storage) {
+ fprintf(bt_udata->stream, " Address:\n");
+ fprintf(bt_udata->stream,
+ " Flags Bytes Address Logical Offset\n");
+ fprintf(bt_udata->stream,
+ " ========== ======== ========== "
+ "==============================\n");
+ }
+ HDfprintf(bt_udata->stream, " 0x%08x %8Zu %10a [",
+ lt_key->filter_mask, lt_key->nbytes, addr);
+ for (i=0; i<bt_udata->mesg.ndims; i++) {
+ HDfprintf(bt_udata->stream, "%s%Hd", i?", ":"", lt_key->offset[i]);
+ }
+ fputs("]\n", bt_udata->stream);
+ }
+
bt_udata->total_storage += lt_key->nbytes;
FUNC_LEAVE(SUCCEED);
}
@@ -1952,8 +1974,8 @@ H5F_istore_allocated(H5F_t *f, int ndims, haddr_t *addr)
H5F_istore_ud1_t udata;
FUNC_ENTER(H5F_istore_nchunks, 0);
+ HDmemset(&udata, 0, sizeof udata);
udata.mesg.ndims = ndims;
- udata.total_storage = 0;
if (H5B_iterate(f, H5B_ISTORE, addr, &udata)<0) {
HRETURN_ERROR(H5E_IO, H5E_INTERNAL, 0,
"unable to iterate over chunk B-tree");
@@ -1963,6 +1985,40 @@ H5F_istore_allocated(H5F_t *f, int ndims, haddr_t *addr)
/*-------------------------------------------------------------------------
+ * Function: H5F_istore_dump_btree
+ *
+ * Purpose: Prints information about the storage B-tree to the specified
+ * stream.
+ *
+ * Return: Success: Non-negative
+ *
+ * Failure: negative
+ *
+ * Programmer: Robb Matzke
+ * Wednesday, April 28, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5F_istore_dump_btree(H5F_t *f, FILE *stream, int ndims, haddr_t *addr)
+{
+ H5F_istore_ud1_t udata;
+
+ FUNC_ENTER(H5F_istore_dump_btree, FAIL);
+ HDmemset(&udata, 0, sizeof udata);
+ udata.mesg.ndims = ndims;
+ udata.stream = stream;
+ if (H5B_iterate(f, H5B_ISTORE, addr, &udata)<0) {
+ HRETURN_ERROR(H5E_IO, H5E_INTERNAL, 0,
+ "unable to iterate over chunk B-tree");
+ }
+ FUNC_LEAVE(SUCCEED);
+}
+
+
+/*-------------------------------------------------------------------------
* Function: H5F_istore_stats
*
* Purpose: Print raw data cache statistics to the debug stream. If
diff --git a/src/H5Fprivate.h b/src/H5Fprivate.h
index 93f3f64..ad9d86f 100644
--- a/src/H5Fprivate.h
+++ b/src/H5Fprivate.h
@@ -303,16 +303,17 @@ typedef struct H5F_search_t {
dev_t dev; /* Device number containing file */
ino_t ino; /* Unique file number on device */
#if WIN32
-/*
- Specifies the low-order word of a unique identifier associated with the file.
- This identifier and the volume serial number uniquely identify a file. This number
- may change when the system is restarted or when the file is opened. After a process
- opens a file, the identifier is constant until the file is closed. An application can
- use this identifier and the volume serial number to determine whether two handles refer
- to the same file.
-*/
- int fileindexlo;
- int fileindexhi;
+ /*
+ * Specifies the low-order word of a unique identifier associated with the
+ * file. This identifier and the volume serial number uniquely identify a
+ * file. This number may change when the system is restarted or when the
+ * file is opened. After a process opens a file, the identifier is
+ * constant until the file is closed. An application can use this
+ * identifier and the volume serial number to determine whether two
+ * handles refer to the same file.
+ */
+ int fileindexlo;
+ int fileindexhi;
#endif
} H5F_search_t;
@@ -658,6 +659,8 @@ __DLL__ herr_t H5F_istore_allocate (H5F_t *f,
const double split_ratios[],
const struct H5O_pline_t *pline,
const struct H5O_fill_t *fill);
+__DLL__ herr_t H5F_istore_dump_btree(H5F_t *f, FILE *stream, int ndims,
+ haddr_t *addr);
/* Functions that operate on contiguous storage wrt boot block */
__DLL__ herr_t H5F_block_read(H5F_t *f, const haddr_t *addr, hsize_t size,
diff --git a/src/H5S.c b/src/H5S.c
index b2874ce06..bf4e9cd 100644
--- a/src/H5S.c
+++ b/src/H5S.c
@@ -134,7 +134,9 @@ H5S_term_interface(void)
for (j=0; j<2; j++) {
if (0==path->stats[j].gath_ncalls &&
0==path->stats[j].scat_ncalls &&
- 0==path->stats[j].bkg_ncalls) {
+ 0==path->stats[j].bkg_ncalls &&
+ 0==path->stats[j].read_ncalls &&
+ 0==path->stats[j].write_ncalls) {
continue;
}
if (0==nprints++) {
@@ -202,6 +204,38 @@ H5S_term_interface(void)
path->stats[j].bkg_timer.etime,
buf);
}
+
+ /* Read */
+ if (path->stats[j].read_ncalls) {
+ H5_bandwidth(buf,
+ (double)(path->stats[j].read_nbytes),
+ path->stats[j].read_timer.etime);
+ HDfprintf(H5DEBUG(S),
+ " %16s %10Hu %10Hu %8.2f %8.2f %8.2f "
+ "%10s\n", "read",
+ path->stats[j].read_nbytes,
+ path->stats[j].read_ncalls,
+ path->stats[j].read_timer.utime,
+ path->stats[j].read_timer.stime,
+ path->stats[j].read_timer.etime,
+ buf);
+ }
+
+ /* Write */
+ if (path->stats[j].write_ncalls) {
+ H5_bandwidth(buf,
+ (double)(path->stats[j].write_nbytes),
+ path->stats[j].write_timer.etime);
+ HDfprintf(H5DEBUG(S),
+ " %16s %10Hu %10Hu %8.2f %8.2f %8.2f "
+ "%10s\n", "write",
+ path->stats[j].write_nbytes,
+ path->stats[j].write_ncalls,
+ path->stats[j].write_timer.utime,
+ path->stats[j].write_timer.stime,
+ path->stats[j].write_timer.etime,
+ buf);
+ }
}
}
}
diff --git a/src/H5Sprivate.h b/src/H5Sprivate.h
index b01d9dc..0a652e2 100644
--- a/src/H5Sprivate.h
+++ b/src/H5Sprivate.h
@@ -278,6 +278,12 @@ typedef struct H5S_conv_t {
H5_timer_t bkg_timer; /*time for background */
hsize_t bkg_nbytes; /*background throughput */
hsize_t bkg_ncalls; /*number of calls */
+ H5_timer_t read_timer; /*time for read calls */
+ hsize_t read_nbytes; /*total bytes read */
+ hsize_t read_ncalls; /*number of calls */
+ H5_timer_t write_timer; /*time for write calls */
+ hsize_t write_nbytes; /*total bytes written */
+ hsize_t write_ncalls; /*number of calls */
} stats[2]; /* 0=output, 1=input */
#endif
} H5S_conv_t;
diff --git a/src/H5Tconv.c b/src/H5Tconv.c
index d1f8c6a..7aad1e1 100644
--- a/src/H5Tconv.c
+++ b/src/H5Tconv.c
@@ -1259,16 +1259,19 @@ H5T_conv_i_i (hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
direction = 1;
olap = nelmts;
} else if (src->size>=dst->size) {
+ double olap_d = HDceil((double)(dst->size)/
+ (double)(src->size-dst->size));
+
+ olap = (size_t)olap_d;
sp = dp = (uint8_t*)buf;
direction = 1;
- olap = (size_t)(HDceil((double)(src->size)/
- (double)(src->size-dst->size))-1);
} else {
+ double olap_d = HDceil((double)(src->size)/
+ (double)(dst->size-src->size));
+ olap = (size_t)olap_d;
sp = (uint8_t*)buf + (nelmts-1) * src->size;
dp = (uint8_t*)buf + (nelmts-1) * dst->size;
direction = -1;
- olap = (size_t)(HDceil((double)(dst->size)/
- (double)(dst->size-src->size))-1);
}
/* The conversion loop */
@@ -1283,7 +1286,7 @@ H5T_conv_i_i (hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
d = elmtno<olap ? dbuf : dp;
} else {
s = sp;
- d = elmtno >= nelmts-olap ? dbuf : dp;
+ d = elmtno+olap >= nelmts ? dbuf : dp;
}
#ifndef NDEBUG
/* I don't quite trust the overlap calculations yet --rpm */
@@ -1636,16 +1639,18 @@ H5T_conv_f_f (hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
direction = 1;
olap = nelmts;
} else if (src_p->size>=dst_p->size) {
+ double olap_d = HDceil((double)(dst_p->size)/
+ (double)(src_p->size-dst_p->size));
+ olap = (size_t)olap_d;
sp = dp = (uint8_t*)buf;
direction = 1;
- olap = (size_t)(HDceil((double)(src_p->size)/
- (double)(src_p->size-dst_p->size))-1);
} else {
+ double olap_d = HDceil((double)(src_p->size)/
+ (double)(dst_p->size-src_p->size));
+ olap = (size_t)olap_d;
sp = (uint8_t*)buf + (nelmts-1) * src_p->size;
dp = (uint8_t*)buf + (nelmts-1) * dst_p->size;
direction = -1;
- olap = (size_t)(HDceil((double)(dst_p->size)/
- (double)(dst_p->size-src_p->size))-1);
}
/* The conversion loop */
@@ -1659,7 +1664,7 @@ H5T_conv_f_f (hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
d = elmtno<olap ? dbuf : dp;
} else {
s = sp;
- d = elmtno >= nelmts-olap ? dbuf : dp;
+ d = elmtno+olap >= nelmts ? dbuf : dp;
}
#ifndef NDEBUG
/* I don't quite trust the overlap calculations yet --rpm */
diff --git a/test/.distdep b/test/.distdep
index 8e28539..b3c51d3 100644
--- a/test/.distdep
+++ b/test/.distdep
@@ -1,4 +1,4 @@
-h5test.o: \
+h5test.lo: \
h5test.c \
h5test.h \
../src/hdf5.h \
@@ -30,7 +30,7 @@ h5test.o: \
../src/H5Fprivate.h \
../src/H5Rprivate.h \
../src/H5Tprivate.h
-big.o: \
+big.lo: \
big.c \
h5test.h \
../src/hdf5.h \
@@ -62,7 +62,7 @@ big.o: \
../src/H5Fprivate.h \
../src/H5Rprivate.h \
../src/H5Tprivate.h
-bittests.o: \
+bittests.lo: \
bittests.c \
h5test.h \
../src/hdf5.h \
@@ -94,7 +94,7 @@ bittests.o: \
../src/H5Fprivate.h \
../src/H5Rprivate.h \
../src/H5Tprivate.h
-chunk.o: \
+chunk.lo: \
chunk.c \
../src/hdf5.h \
../src/H5public.h \
@@ -119,7 +119,7 @@ chunk.o: \
../src/H5RApublic.h \
../src/H5Spublic.h \
../src/H5Tpublic.h
-cmpd_dset.o: \
+cmpd_dset.lo: \
cmpd_dset.c \
h5test.h \
../src/hdf5.h \
@@ -151,7 +151,7 @@ cmpd_dset.o: \
../src/H5Fprivate.h \
../src/H5Rprivate.h \
../src/H5Tprivate.h
-dsets.o: \
+dsets.lo: \
dsets.c \
h5test.h \
../src/hdf5.h \
@@ -183,7 +183,7 @@ dsets.o: \
../src/H5Fprivate.h \
../src/H5Rprivate.h \
../src/H5Tprivate.h
-dtypes.o: \
+dtypes.lo: \
dtypes.c \
h5test.h \
../src/hdf5.h \
@@ -215,7 +215,7 @@ dtypes.o: \
../src/H5Fprivate.h \
../src/H5Rprivate.h \
../src/H5Tprivate.h
-extend.o: \
+extend.lo: \
extend.c \
h5test.h \
../src/hdf5.h \
@@ -247,7 +247,7 @@ extend.o: \
../src/H5Fprivate.h \
../src/H5Rprivate.h \
../src/H5Tprivate.h
-external.o: \
+external.lo: \
external.c \
h5test.h \
../src/hdf5.h \
@@ -279,7 +279,7 @@ external.o: \
../src/H5Fprivate.h \
../src/H5Rprivate.h \
../src/H5Tprivate.h
-fillval.o: \
+fillval.lo: \
fillval.c \
h5test.h \
../src/hdf5.h \
@@ -311,7 +311,7 @@ fillval.o: \
../src/H5Fprivate.h \
../src/H5Rprivate.h \
../src/H5Tprivate.h
-flush1.o: \
+flush1.lo: \
flush1.c \
h5test.h \
../src/hdf5.h \
@@ -343,7 +343,7 @@ flush1.o: \
../src/H5Fprivate.h \
../src/H5Rprivate.h \
../src/H5Tprivate.h
-flush2.o: \
+flush2.lo: \
flush2.c \
h5test.h \
../src/hdf5.h \
@@ -375,7 +375,7 @@ flush2.o: \
../src/H5Fprivate.h \
../src/H5Rprivate.h \
../src/H5Tprivate.h
-gheap.o: \
+gheap.lo: \
gheap.c \
h5test.h \
../src/hdf5.h \
@@ -410,7 +410,7 @@ gheap.o: \
../src/H5Gprivate.h \
../src/H5Bprivate.h \
../src/H5Eprivate.h
-hyperslab.o: \
+hyperslab.lo: \
hyperslab.c \
../src/H5private.h \
../src/H5public.h \
@@ -418,7 +418,7 @@ hyperslab.o: \
../src/H5api_adpt.h \
../src/H5MMprivate.h \
../src/H5MMpublic.h
-iopipe.o: \
+iopipe.lo: \
iopipe.c \
../src/hdf5.h \
../src/H5public.h \
@@ -443,7 +443,7 @@ iopipe.o: \
../src/H5RApublic.h \
../src/H5Spublic.h \
../src/H5Tpublic.h
-istore.o: \
+istore.lo: \
istore.c \
h5test.h \
../src/hdf5.h \
@@ -484,7 +484,7 @@ istore.o: \
../src/H5Iprivate.h \
../src/H5Pprivate.h \
../src/H5MMprivate.h
-lheap.o: \
+lheap.lo: \
lheap.c \
h5test.h \
../src/hdf5.h \
@@ -519,7 +519,7 @@ lheap.o: \
../src/H5Gprivate.h \
../src/H5Bprivate.h \
../src/H5HLprivate.h
-links.o: \
+links.lo: \
links.c \
h5test.h \
../src/hdf5.h \
@@ -551,7 +551,7 @@ links.o: \
../src/H5Fprivate.h \
../src/H5Rprivate.h \
../src/H5Tprivate.h
-mount.o: \
+mount.lo: \
mount.c \
h5test.h \
../src/hdf5.h \
@@ -583,7 +583,7 @@ mount.o: \
../src/H5Fprivate.h \
../src/H5Rprivate.h \
../src/H5Tprivate.h
-mtime.o: \
+mtime.lo: \
mtime.c \
h5test.h \
../src/hdf5.h \
@@ -615,7 +615,7 @@ mtime.o: \
../src/H5Fprivate.h \
../src/H5Rprivate.h \
../src/H5Tprivate.h
-ohdr.o: \
+ohdr.lo: \
ohdr.c \
h5test.h \
../src/hdf5.h \
@@ -653,7 +653,7 @@ ohdr.o: \
../src/H5Oprivate.h \
../src/H5Sprivate.h \
../src/H5Zprivate.h
-overhead.o: \
+overhead.lo: \
overhead.c \
../src/hdf5.h \
../src/H5public.h \
@@ -678,7 +678,7 @@ overhead.o: \
../src/H5RApublic.h \
../src/H5Spublic.h \
../src/H5Tpublic.h
-ragged.o: \
+ragged.lo: \
ragged.c \
../src/hdf5.h \
../src/H5public.h \
@@ -704,7 +704,7 @@ ragged.o: \
../src/H5Spublic.h \
../src/H5Tpublic.h \
../src/H5private.h
-stab.o: \
+stab.lo: \
stab.c \
h5test.h \
../src/hdf5.h \
@@ -739,7 +739,7 @@ stab.o: \
../src/H5Gprivate.h \
../src/H5Bprivate.h \
../src/H5Gpkg.h
-tattr.o: \
+tattr.lo: \
tattr.c \
testhdf5.h \
../src/H5private.h \
@@ -766,7 +766,7 @@ tattr.o: \
../src/H5Rpublic.h \
../src/H5RApublic.h \
../src/H5Spublic.h
-testhdf5.o: \
+testhdf5.lo: \
testhdf5.c \
testhdf5.h \
../src/H5private.h \
@@ -775,7 +775,7 @@ testhdf5.o: \
../src/H5api_adpt.h \
../src/H5Eprivate.h \
../src/H5Epublic.h
-tfile.o: \
+tfile.lo: \
tfile.c \
testhdf5.h \
../src/H5private.h \
@@ -790,7 +790,7 @@ tfile.o: \
../src/H5Fprivate.h \
../src/H5Fpublic.h \
../src/H5Dpublic.h
-th5s.o: \
+th5s.lo: \
th5s.c \
testhdf5.h \
../src/H5private.h \
@@ -817,7 +817,7 @@ th5s.o: \
../src/H5Tpublic.h \
../src/H5Zprivate.h \
../src/H5Zpublic.h
-tmeta.o: \
+tmeta.lo: \
tmeta.c \
testhdf5.h \
../src/H5private.h \
@@ -829,7 +829,7 @@ tmeta.o: \
../src/H5Ipublic.h \
../src/H5Fprivate.h \
../src/H5Fpublic.h
-trefer.o: \
+trefer.lo: \
trefer.c \
testhdf5.h \
../src/H5private.h \
@@ -856,7 +856,7 @@ trefer.o: \
../src/H5Rpublic.h \
../src/H5RApublic.h \
../src/H5Spublic.h
-tselect.o: \
+tselect.lo: \
tselect.c \
testhdf5.h \
../src/H5private.h \
@@ -883,7 +883,7 @@ tselect.o: \
../src/H5Rpublic.h \
../src/H5RApublic.h \
../src/H5Spublic.h
-unlink.o: \
+unlink.lo: \
unlink.c \
h5test.h \
../src/hdf5.h \
@@ -915,7 +915,7 @@ unlink.o: \
../src/H5Fprivate.h \
../src/H5Rprivate.h \
../src/H5Tprivate.h
-enum.o: \
+enum.lo: \
enum.c \
h5test.h \
../src/hdf5.h \
diff --git a/test/dtypes.c b/test/dtypes.c
index 0e164c7..1565888 100644
--- a/test/dtypes.c
+++ b/test/dtypes.c
@@ -2265,6 +2265,59 @@ test_conv_int_1(const char *name, hid_t src, hid_t dst)
/*-------------------------------------------------------------------------
+ * Function: test_conv_int_2
+ *
+ * Purpose: Tests overlap calculates in H5T_conv_i_i(), which should be
+ * the same as for H5T_conv_f_f() and H5T_conv_s_s().
+ *
+ * Return: Success: 0
+ *
+ * Failure: number of errors
+ *
+ * Programmer: Robb Matzke
+ * Friday, April 30, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_conv_int_2(void)
+{
+ int i, j;
+ hid_t src_type, dst_type;
+ char buf[32*100];
+
+ printf("%-70s", "Testing overlap calculations");
+ fflush(stdout);
+
+ memset(buf, 0, sizeof buf);
+ for (i=1; i<=32; i++) {
+ for (j=1; j<=32; j++) {
+
+ /* Source type */
+ src_type = H5Tcopy(H5T_NATIVE_CHAR);
+ H5Tset_size(src_type, i);
+
+ /* Destination type */
+ dst_type = H5Tcopy(H5T_NATIVE_CHAR);
+ H5Tset_size(dst_type, j);
+
+ /*
+ * Conversion. If overlap calculations aren't right then an
+ * assertion will fail in H5T_conv_i_i()
+ */
+ H5Tconvert(src_type, dst_type, 100, buf, NULL);
+ H5Tclose(src_type);
+ H5Tclose(dst_type);
+ }
+ }
+ PASSED();
+ return 0;
+}
+
+
+/*-------------------------------------------------------------------------
* Function: my_isnan
*
* Purpose: Determines whether VAL points to NaN.
@@ -2984,6 +3037,7 @@ main(void)
reset_hdf5();
/* Test software integer conversion functions */
+ nerrors += test_conv_int_2();
nerrors += run_integer_tests("sw");
/* Test software floating-point conversion functions */
diff --git a/tools/h5ls.c b/tools/h5ls.c
index 6073738..6dc1ed5 100644
--- a/tools/h5ls.c
+++ b/tools/h5ls.c
@@ -18,7 +18,8 @@
/* Command-line switches */
static int verbose_g = 0; /*lots of extra output */
static int width_g = 80; /*output width in characters */
-static hbool_t dump_g = FALSE; /*display dataset values? */
+static hbool_t address_g = FALSE; /*print raw data addresses */
+static hbool_t data_g = FALSE; /*display dataset values? */
static hbool_t label_g = FALSE; /*label compound values? */
static hbool_t string_g = FALSE; /*print 1-byte numbers as ASCII? */
static hbool_t fullname_g = FALSE; /*print full path names */
@@ -83,7 +84,8 @@ usage (const char *progname)
usage: %s [OPTIONS] FILE [OBJECTS...]\n\
OPTIONS\n\
-h, -?, --help Print a usage message and exit\n\
- -d, --dump Print the values of datasets\n\
+ -a, --address Print addresses for raw data\n\
+ -d, --data Print the values of datasets\n\
-f, --full Print full path names instead of base names\n\
-g, --group Show information about a group, not its contents\n\
-l, --label Label members of compound datasets\n\
@@ -1312,13 +1314,16 @@ dataset_list2(hid_t dset, const char UNUSED *name)
display_type(type, 15);
printf("\n");
+ /* Print address information */
+ if (address_g) H5Ddebug(dset, 0);
+
/* Close stuff */
H5Tclose(type);
H5Sclose(space);
H5Pclose(dcpl);
}
- if (dump_g) dump_dataset_values(dset);
+ if (data_g) dump_dataset_values(dset);
return 0;
}
@@ -1402,7 +1407,7 @@ datatype_list2(hid_t type, const char UNUSED *name)
static herr_t
ragged_list2(hid_t UNUSED ra, const char UNUSED *name)
{
- if (dump_g) {
+ if (data_g) {
puts(" Data: Not implemented yet (see values of member");
puts(" datasets `raw', `over', and `meta')");
}
@@ -1752,10 +1757,12 @@ main (int argc, char *argv[])
} else if (!strcmp(argv[argno], "--help")) {
usage(progname);
exit(0);
+ } else if (!strcmp(argv[argno], "--address")) {
+ address_g = TRUE;
} else if (!strcmp(argv[argno], "--group")) {
grp_literal_g = TRUE;
- } else if (!strcmp(argv[argno], "--dump")) {
- dump_g = TRUE;
+ } else if (!strcmp(argv[argno], "--data")) {
+ data_g = TRUE;
} else if (!strcmp(argv[argno], "--full")) {
fullname_g = TRUE;
} else if (!strcmp(argv[argno], "--label")) {
@@ -1799,8 +1806,11 @@ main (int argc, char *argv[])
case 'h': /* --help */
usage(progname);
exit(0);
- case 'd': /* --dump */
- dump_g++;
+ case 'a': /* --address */
+ address_g = TRUE;
+ break;
+ case 'd': /* --data */
+ data_g = TRUE;
break;
case 'f': /* --full */
fullname_g = TRUE;