summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xconfigure232
-rw-r--r--configure.in7
-rw-r--r--src/H5D.c87
-rw-r--r--src/H5Fprivate.h11
-rw-r--r--src/H5Oefl.c21
-rw-r--r--src/H5V.c2
-rw-r--r--src/H5config.h.in9
-rw-r--r--test/dsets.c305
-rw-r--r--test/external.c75
9 files changed, 470 insertions, 279 deletions
diff --git a/configure b/configure
index 04c7116..48182b7 100755
--- a/configure
+++ b/configure
@@ -1077,16 +1077,55 @@ EOF
fi
+for ac_hdr in unistd.h
+do
+ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
+echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
+echo "configure:1085: checking for $ac_hdr" >&5
+if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.$ac_ext <<EOF
+#line 1090 "configure"
+#include "confdefs.h"
+#include <$ac_hdr>
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:1095: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out`
+if test -z "$ac_err"; then
+ rm -rf conftest*
+ eval "ac_cv_header_$ac_safe=yes"
+else
+ echo "$ac_err" >&5
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_header_$ac_safe=no"
+fi
+rm -f conftest*
+fi
+if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
+ cat >> confdefs.h <<EOF
+#define $ac_tr_hdr 1
+EOF
+
+else
+ echo "$ac_t""no" 1>&6
+fi
+done
echo $ac_n "checking for off_t""... $ac_c" 1>&6
-echo "configure:1085: checking for off_t" >&5
+echo "configure:1124: checking for off_t" >&5
if eval "test \"`echo '$''{'ac_cv_type_off_t'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 1090 "configure"
+#line 1129 "configure"
#include "confdefs.h"
#include <sys/types.h>
#if STDC_HEADERS
@@ -1114,12 +1153,12 @@ EOF
fi
echo $ac_n "checking for size_t""... $ac_c" 1>&6
-echo "configure:1118: checking for size_t" >&5
+echo "configure:1157: checking for size_t" >&5
if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 1123 "configure"
+#line 1162 "configure"
#include "confdefs.h"
#include <sys/types.h>
#if STDC_HEADERS
@@ -1152,12 +1191,12 @@ fi
for ac_func in getpwuid gethostname
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:1156: checking for $ac_func" >&5
+echo "configure:1195: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 1161 "configure"
+#line 1200 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -1180,7 +1219,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:1184: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:1223: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -1206,24 +1245,24 @@ done
cat > conftest.$ac_ext <<EOF
-#line 1210 "configure"
+#line 1249 "configure"
#include "confdefs.h"
#include<sys/types.h>
int main() {
off64_t n = 0;
; return 0; }
EOF
-if { (eval echo configure:1217: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1256: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
for ac_func in lseek64 fseek64
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:1222: checking for $ac_func" >&5
+echo "configure:1261: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 1227 "configure"
+#line 1266 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -1246,7 +1285,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:1250: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:1289: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -1280,14 +1319,14 @@ rm -f conftest*
echo $ac_n "checking whether byte ordering is bigendian""... $ac_c" 1>&6
-echo "configure:1284: checking whether byte ordering is bigendian" >&5
+echo "configure:1323: checking whether byte ordering is bigendian" >&5
if eval "test \"`echo '$''{'ac_cv_c_bigendian'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
ac_cv_c_bigendian=unknown
# See if sys/param.h defines the BYTE_ORDER macro.
cat > conftest.$ac_ext <<EOF
-#line 1291 "configure"
+#line 1330 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <sys/param.h>
@@ -1298,11 +1337,11 @@ int main() {
#endif
; return 0; }
EOF
-if { (eval echo configure:1302: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1341: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
# It does; now see whether it defined to BIG_ENDIAN or not.
cat > conftest.$ac_ext <<EOF
-#line 1306 "configure"
+#line 1345 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <sys/param.h>
@@ -1313,7 +1352,7 @@ int main() {
#endif
; return 0; }
EOF
-if { (eval echo configure:1317: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1356: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_c_bigendian=yes
else
@@ -1333,7 +1372,7 @@ if test "$cross_compiling" = yes; then
{ echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; }
else
cat > conftest.$ac_ext <<EOF
-#line 1337 "configure"
+#line 1376 "configure"
#include "confdefs.h"
main () {
/* Are we little or big endian? From Harbison&Steele. */
@@ -1346,7 +1385,7 @@ main () {
exit (u.c[sizeof (long) - 1] == 1);
}
EOF
-if { (eval echo configure:1350: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:1389: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
then
ac_cv_c_bigendian=no
else
@@ -1370,7 +1409,7 @@ EOF
fi
echo $ac_n "checking size of short""... $ac_c" 1>&6
-echo "configure:1374: checking size of short" >&5
+echo "configure:1413: checking size of short" >&5
if eval "test \"`echo '$''{'ac_cv_sizeof_short'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1378,7 +1417,7 @@ else
ac_cv_sizeof_short=2
else
cat > conftest.$ac_ext <<EOF
-#line 1382 "configure"
+#line 1421 "configure"
#include "confdefs.h"
#include <stdio.h>
main()
@@ -1389,7 +1428,7 @@ main()
exit(0);
}
EOF
-if { (eval echo configure:1393: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:1432: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
then
ac_cv_sizeof_short=`cat conftestval`
else
@@ -1409,7 +1448,7 @@ EOF
echo $ac_n "checking size of int""... $ac_c" 1>&6
-echo "configure:1413: checking size of int" >&5
+echo "configure:1452: checking size of int" >&5
if eval "test \"`echo '$''{'ac_cv_sizeof_int'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1417,7 +1456,7 @@ else
ac_cv_sizeof_int=4
else
cat > conftest.$ac_ext <<EOF
-#line 1421 "configure"
+#line 1460 "configure"
#include "confdefs.h"
#include <stdio.h>
main()
@@ -1428,7 +1467,7 @@ main()
exit(0);
}
EOF
-if { (eval echo configure:1432: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:1471: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
then
ac_cv_sizeof_int=`cat conftestval`
else
@@ -1448,7 +1487,7 @@ EOF
echo $ac_n "checking size of long""... $ac_c" 1>&6
-echo "configure:1452: checking size of long" >&5
+echo "configure:1491: checking size of long" >&5
if eval "test \"`echo '$''{'ac_cv_sizeof_long'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1456,7 +1495,7 @@ else
ac_cv_sizeof_long=4
else
cat > conftest.$ac_ext <<EOF
-#line 1460 "configure"
+#line 1499 "configure"
#include "confdefs.h"
#include <stdio.h>
main()
@@ -1467,7 +1506,7 @@ main()
exit(0);
}
EOF
-if { (eval echo configure:1471: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:1510: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
then
ac_cv_sizeof_long=`cat conftestval`
else
@@ -1487,7 +1526,7 @@ EOF
echo $ac_n "checking size of long long""... $ac_c" 1>&6
-echo "configure:1491: checking size of long long" >&5
+echo "configure:1530: checking size of long long" >&5
if eval "test \"`echo '$''{'ac_cv_sizeof_long_long'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1495,7 +1534,7 @@ else
ac_cv_sizeof_long_long=8
else
cat > conftest.$ac_ext <<EOF
-#line 1499 "configure"
+#line 1538 "configure"
#include "confdefs.h"
#include <stdio.h>
main()
@@ -1506,7 +1545,7 @@ main()
exit(0);
}
EOF
-if { (eval echo configure:1510: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:1549: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
then
ac_cv_sizeof_long_long=`cat conftestval`
else
@@ -1526,7 +1565,7 @@ EOF
echo $ac_n "checking size of float""... $ac_c" 1>&6
-echo "configure:1530: checking size of float" >&5
+echo "configure:1569: checking size of float" >&5
if eval "test \"`echo '$''{'ac_cv_sizeof_float'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1534,7 +1573,7 @@ else
ac_cv_sizeof_float=4
else
cat > conftest.$ac_ext <<EOF
-#line 1538 "configure"
+#line 1577 "configure"
#include "confdefs.h"
#include <stdio.h>
main()
@@ -1545,7 +1584,7 @@ main()
exit(0);
}
EOF
-if { (eval echo configure:1549: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:1588: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
then
ac_cv_sizeof_float=`cat conftestval`
else
@@ -1565,7 +1604,7 @@ EOF
echo $ac_n "checking size of double""... $ac_c" 1>&6
-echo "configure:1569: checking size of double" >&5
+echo "configure:1608: checking size of double" >&5
if eval "test \"`echo '$''{'ac_cv_sizeof_double'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1573,7 +1612,7 @@ else
ac_cv_sizeof_double=8
else
cat > conftest.$ac_ext <<EOF
-#line 1577 "configure"
+#line 1616 "configure"
#include "confdefs.h"
#include <stdio.h>
main()
@@ -1584,7 +1623,7 @@ main()
exit(0);
}
EOF
-if { (eval echo configure:1588: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:1627: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
then
ac_cv_sizeof_double=`cat conftestval`
else
@@ -1603,17 +1642,98 @@ cat >> confdefs.h <<EOF
EOF
+echo $ac_n "checking size of size_t""... $ac_c" 1>&6
+echo "configure:1647: checking size of size_t" >&5
+if eval "test \"`echo '$''{'ac_cv_sizeof_size_t'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ if test "$cross_compiling" = yes; then
+ ac_cv_sizeof_size_t=4
+else
+ cat > conftest.$ac_ext <<EOF
+#line 1655 "configure"
+#include "confdefs.h"
+#include <stdio.h>
+main()
+{
+ FILE *f=fopen("conftestval", "w");
+ if (!f) exit(1);
+ fprintf(f, "%d\n", sizeof(size_t));
+ exit(0);
+}
+EOF
+if { (eval echo configure:1666: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
+then
+ ac_cv_sizeof_size_t=`cat conftestval`
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -fr conftest*
+ ac_cv_sizeof_size_t=0
+fi
+rm -fr conftest*
+fi
+
+fi
+echo "$ac_t""$ac_cv_sizeof_size_t" 1>&6
+cat >> confdefs.h <<EOF
+#define SIZEOF_SIZE_T $ac_cv_sizeof_size_t
+EOF
+
+
+cat >>confdefs.h <<\EOF
+#include <sys/types.h> /*for off_t definition*/
+EOF
+echo $ac_n "checking size of off_t""... $ac_c" 1>&6
+echo "configure:1689: checking size of off_t" >&5
+if eval "test \"`echo '$''{'ac_cv_sizeof_off_t'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ if test "$cross_compiling" = yes; then
+ ac_cv_sizeof_off_t=4
+else
+ cat > conftest.$ac_ext <<EOF
+#line 1697 "configure"
+#include "confdefs.h"
+#include <stdio.h>
+main()
+{
+ FILE *f=fopen("conftestval", "w");
+ if (!f) exit(1);
+ fprintf(f, "%d\n", sizeof(off_t));
+ exit(0);
+}
+EOF
+if { (eval echo configure:1708: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
+then
+ ac_cv_sizeof_off_t=`cat conftestval`
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -fr conftest*
+ ac_cv_sizeof_off_t=0
+fi
+rm -fr conftest*
+fi
+
+fi
+echo "$ac_t""$ac_cv_sizeof_off_t" 1>&6
+cat >> confdefs.h <<EOF
+#define SIZEOF_OFF_T $ac_cv_sizeof_off_t
+EOF
+
+
echo $ac_n "checking for working const""... $ac_c" 1>&6
-echo "configure:1612: checking for working const" >&5
+echo "configure:1732: checking for working const" >&5
if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 1617 "configure"
+#line 1737 "configure"
#include "confdefs.h"
int main() {
@@ -1662,7 +1782,7 @@ ccp = (char const *const *) p;
; return 0; }
EOF
-if { (eval echo configure:1666: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1786: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_c_const=yes
else
@@ -1683,21 +1803,21 @@ EOF
fi
echo $ac_n "checking for inline""... $ac_c" 1>&6
-echo "configure:1687: checking for inline" >&5
+echo "configure:1807: checking for inline" >&5
if eval "test \"`echo '$''{'ac_cv_c_inline'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
ac_cv_c_inline=no
for ac_kw in inline __inline__ __inline; do
cat > conftest.$ac_ext <<EOF
-#line 1694 "configure"
+#line 1814 "configure"
#include "confdefs.h"
int main() {
} $ac_kw foo() {
; return 0; }
EOF
-if { (eval echo configure:1701: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1821: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_c_inline=$ac_kw; break
else
@@ -1724,16 +1844,16 @@ esac
echo $ac_n "checking for __attribute__ extension""... $ac_c" 1>&6
-echo "configure:1728: checking for __attribute__ extension" >&5
+echo "configure:1848: checking for __attribute__ extension" >&5
cat > conftest.$ac_ext <<EOF
-#line 1730 "configure"
+#line 1850 "configure"
#include "confdefs.h"
int main() {
int __attribute__((unused)) f(void){return 1;}
; return 0; }
EOF
-if { (eval echo configure:1737: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1857: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
cat >> confdefs.h <<\EOF
#define HAVE_ATTRIBUTE 1
@@ -1749,16 +1869,16 @@ fi
rm -f conftest*
echo $ac_n "checking for __FUNCTION__ extension""... $ac_c" 1>&6
-echo "configure:1753: checking for __FUNCTION__ extension" >&5
+echo "configure:1873: checking for __FUNCTION__ extension" >&5
cat > conftest.$ac_ext <<EOF
-#line 1755 "configure"
+#line 1875 "configure"
#include "confdefs.h"
int main() {
int f(void){return __FUNCTION__;}
; return 0; }
EOF
-if { (eval echo configure:1762: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1882: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
cat >> confdefs.h <<\EOF
#define HAVE_FUNCTION 1
@@ -1781,7 +1901,7 @@ if test "${enable_parallel+set}" = set; then
fi
echo $ac_n "checking for parallel support""... $ac_c" 1>&6
-echo "configure:1785: checking for parallel support" >&5;
+echo "configure:1905: checking for parallel support" >&5;
RUNTEST=""
@@ -1807,7 +1927,7 @@ EOF
CPPFLAGS="$CPPFLAGS $MPI_INC"
CFLAGS="$CFLAGS $MPI_LIB"
echo $ac_n "checking for main in -lmpi""... $ac_c" 1>&6
-echo "configure:1811: checking for main in -lmpi" >&5
+echo "configure:1931: checking for main in -lmpi" >&5
ac_lib_var=`echo mpi'_'main | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -1815,14 +1935,14 @@ else
ac_save_LIBS="$LIBS"
LIBS="-lmpi $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 1819 "configure"
+#line 1939 "configure"
#include "confdefs.h"
int main() {
main()
; return 0; }
EOF
-if { (eval echo configure:1826: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:1946: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -1849,7 +1969,7 @@ else
echo "$ac_t""no" 1>&6
fi
echo $ac_n "checking for main in -lmpio""... $ac_c" 1>&6
-echo "configure:1853: checking for main in -lmpio" >&5
+echo "configure:1973: checking for main in -lmpio" >&5
ac_lib_var=`echo mpio'_'main | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -1857,14 +1977,14 @@ else
ac_save_LIBS="$LIBS"
LIBS="-lmpio $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 1861 "configure"
+#line 1981 "configure"
#include "confdefs.h"
int main() {
main()
; return 0; }
EOF
-if { (eval echo configure:1868: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:1988: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
diff --git a/configure.in b/configure.in
index 1686261..4df9317 100644
--- a/configure.in
+++ b/configure.in
@@ -93,7 +93,7 @@ dnl ----------------------------------------------------------------------
dnl Check for header files.
dnl
AC_HEADER_STDC
-
+AC_CHECK_HEADERS(unistd.h)
dnl ----------------------------------------------------------------------
@@ -125,6 +125,11 @@ AC_CHECK_SIZEOF(long, 4)
AC_CHECK_SIZEOF(long long, 8)
AC_CHECK_SIZEOF(float, 4)
AC_CHECK_SIZEOF(double, 8)
+AC_CHECK_SIZEOF(size_t, 4)
+cat >>confdefs.h <<\EOF
+#include <sys/types.h> /*for off_t definition*/
+EOF
+AC_CHECK_SIZEOF(off_t, 4)
diff --git a/src/H5D.c b/src/H5D.c
index da470d3..8d20c85 100644
--- a/src/H5D.c
+++ b/src/H5D.c
@@ -746,7 +746,9 @@ H5D_create(H5F_t *f, const char *name, const H5T_t *type, const H5S_t *space,
{
H5D_t *new_dset = NULL;
H5D_t *ret_value = NULL;
- intn i;
+ intn i, ndims;
+ size_t max_dim[H5O_LAYOUT_NDIMS];
+ H5O_efl_t *efl = NULL;
FUNC_ENTER(H5D_create, NULL);
@@ -763,6 +765,7 @@ H5D_create(H5F_t *f, const char *name, const H5T_t *type, const H5S_t *space,
new_dset->type = H5T_copy(type);
new_dset->space = H5S_copy(space);
new_dset->create_parms = H5P_copy (H5P_DATASET_CREATE, create_parms);
+ efl = &(new_dset->create_parms->efl);
/* Total raw data size */
new_dset->layout.type = new_dset->create_parms->layout;
@@ -772,26 +775,53 @@ H5D_create(H5F_t *f, const char *name, const H5T_t *type, const H5S_t *space,
switch (new_dset->create_parms->layout) {
case H5D_CONTIGUOUS:
- if (H5S_get_dims(space, new_dset->layout.dim, NULL) < 0) {
+ /*
+ * The maximum size of the dataset cannot exceed the storage size.
+ * Also, only the slowest varying dimension of a simple data space
+ * can be extendible.
+ */
+ if ((ndims=H5S_get_dims(space, new_dset->layout.dim, max_dim)) < 0) {
HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, NULL,
"unable to initialize contiguous storage");
}
- if (new_dset->create_parms->efl.nused>0) {
+ for (i=1; i<ndims; i++) {
+ if (max_dim[i]>new_dset->layout.dim[i]) {
+ HGOTO_ERROR (H5E_DATASET, H5E_CANTINIT, NULL,
+ "only the first dimension can be extendible");
+ }
+ }
+ if (efl->nused>0) {
size_t max_points = H5S_get_npoints_max (space);
- if (max_points*H5T_get_size (type) >
- H5O_efl_total_size (&(new_dset->create_parms->efl))) {
+ size_t max_storage = H5O_efl_total_size (efl);
+
+ if (H5S_UNLIMITED==max_points) {
+ if (H5O_EFL_UNLIMITED!=max_storage) {
+ HGOTO_ERROR (H5E_DATASET, H5E_CANTINIT, NULL,
+ "unlimited data space but finite storage");
+ }
+ } else if (max_points * H5T_get_size (type) < max_points) {
HGOTO_ERROR (H5E_DATASET, H5E_CANTINIT, NULL,
- "max size exceeds external storage size");
+ "data space * type size overflowed");
+ } else if (max_points * H5T_get_size (type) > max_storage) {
+ HGOTO_ERROR (H5E_DATASET, H5E_CANTINIT, NULL,
+ "data space size exceeds external storage size");
}
+ } else if (max_dim[0]>new_dset->layout.dim[0]) {
+ HGOTO_ERROR (H5E_DATASET, H5E_UNSUPPORTED, NULL,
+ "extendible contiguous non-external dataset");
}
break;
case H5D_CHUNKED:
+ /*
+ * Chunked storage allows any type of data space extension, so we
+ * don't even bother checking.
+ */
if (new_dset->create_parms->chunk_ndims != H5S_get_ndims(space)) {
HGOTO_ERROR(H5E_DATASET, H5E_BADVALUE, NULL,
"dimensionality of chunks doesn't match the data space");
}
- if (new_dset->create_parms->efl.nused>0) {
+ if (efl->nused>0) {
HGOTO_ERROR (H5E_DATASET, H5E_BADVALUE, NULL,
"external storage not supported with chunked layout");
}
@@ -818,8 +848,12 @@ H5D_create(H5F_t *f, const char *name, const H5T_t *type, const H5S_t *space,
"can't update type or space header messages");
}
- /* Initialize storage */
- if (0==new_dset->create_parms->efl.nused) {
+ /*
+ * Initialize storage. We assume that external storage is already
+ * initialized by the caller, or at least will be before I/O is
+ * performed.
+ */
+ if (0==efl->nused) {
if (H5F_arr_create(f, &(new_dset->layout)) < 0) {
HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, NULL,
"unable to initialize storage");
@@ -827,26 +861,27 @@ H5D_create(H5F_t *f, const char *name, const H5T_t *type, const H5S_t *space,
} else {
H5F_addr_undef (&(new_dset->layout.addr));
}
+
+ /* Update layout message */
if (H5O_modify (&(new_dset->ent), H5O_LAYOUT, 0, H5O_FLAG_CONSTANT,
&(new_dset->layout)) < 0) {
HGOTO_ERROR (H5E_DATASET, H5E_CANTINIT, NULL,
"unable to update layout message");
}
- if (new_dset->create_parms->efl.nused>0) {
+
+ /* Update external storage message */
+ if (efl->nused>0) {
size_t heap_size = H5H_ALIGN (1);
- for (i=0; i<new_dset->create_parms->efl.nused; i++) {
- size_t n = strlen (new_dset->create_parms->efl.slot[i].name)+1;
- heap_size += H5H_ALIGN (n);
+ for (i=0; i<efl->nused; i++) {
+ heap_size += H5H_ALIGN (strlen (efl->slot[i].name)+1);
}
- if (H5H_create (f, H5H_LOCAL, heap_size,
- &(new_dset->create_parms->efl.heap_addr))<0 ||
- H5H_insert (f, &(new_dset->create_parms->efl.heap_addr),
- 1, "")<0) {
+ if (H5H_create (f, H5H_LOCAL, heap_size, &(efl->heap_addr))<0 ||
+ (size_t)(-1)==H5H_insert (f, &(efl->heap_addr), 1, "")) {
HGOTO_ERROR (H5E_DATASET, H5E_CANTINIT, NULL,
"unable to create external file list name heap");
}
if (H5O_modify (&(new_dset->ent), H5O_EFL, 0, H5O_FLAG_CONSTANT,
- &(new_dset->create_parms->efl))<0) {
+ efl)<0) {
HGOTO_ERROR (H5E_DATASET, H5E_CANTINIT, NULL,
"unable to update external file list message");
}
@@ -1368,16 +1403,12 @@ H5D_extend (H5D_t *dataset, const size_t *size)
assert (dataset);
assert (size);
- if (dataset->create_parms->efl.nused>0) {
- HRETURN_ERROR (H5E_DATASET, H5E_UNSUPPORTED, FAIL,
- "extending externally-stored data is not implemente yet");
- }
-
- /* This is only allowed for data spaces with chunked layout */
- if (H5D_CHUNKED!=dataset->layout.type) {
- HRETURN_ERROR (H5E_DATASET, H5E_UNSUPPORTED, FAIL,
- "size can only be increased for chunked datasets");
- }
+ /*
+ * Restrictions on extensions were checked when the dataset was created.
+ * All extensions are allowed here since none should be able to muck
+ * things up.
+ */
+ /*void*/
/* Increase the size of the data space */
if ((changed=H5S_extend (dataset->space, size))<0) {
diff --git a/src/H5Fprivate.h b/src/H5Fprivate.h
index 497a9a0..77a299f 100644
--- a/src/H5Fprivate.h
+++ b/src/H5Fprivate.h
@@ -209,6 +209,17 @@
#define NBYTEDECODE(s, d, n) { HDmemcpy(d,s,n); p+=n }
/*
+ * Macros that check for overflows. These are somewhat dangerous to fiddle
+ * with.
+ */
+#if (SIZEOF_SIZE_T >= SIZEOF_OFF_T)
+# define H5F_OVERFLOW_SIZET2OFFT(X) \
+ ((size_t)(X)>=(size_t)((size_t)1<<(8*sizeof(off_t)-1)))
+#else
+# define H5F_OVERFLOW_SIZET2OFFT(X) 0
+#endif
+
+/*
* File-creation property list.
*/
typedef struct H5F_create_t {
diff --git a/src/H5Oefl.c b/src/H5Oefl.c
index ac65101..1b3fa6a 100644
--- a/src/H5Oefl.c
+++ b/src/H5Oefl.c
@@ -386,7 +386,8 @@ H5O_efl_read (H5F_t *f, const H5O_efl_t *efl, haddr_t *addr, size_t size,
/* Find the first efl member from which to read */
for (i=0, cur=0; i<efl->nused; i++) {
- if (addr->offset < cur+efl->slot[i].size) {
+ if (H5O_EFL_UNLIMITED==efl->slot[i].size ||
+ addr->offset < cur+efl->slot[i].size) {
skip = addr->offset - cur;
break;
}
@@ -399,11 +400,15 @@ H5O_efl_read (H5F_t *f, const H5O_efl_t *efl, haddr_t *addr, size_t size,
HGOTO_ERROR (H5E_EFL, H5E_OVERFLOW, FAIL,
"read past logical end of file");
}
+ if (H5F_OVERFLOW_SIZET2OFFT (efl->slot[i].offset+skip)) {
+ HGOTO_ERROR (H5E_EFL, H5E_OVERFLOW, FAIL,
+ "external file address overflowed");
+ }
if ((fd=open (efl->slot[i].name, O_RDONLY))<0) {
HGOTO_ERROR (H5E_EFL, H5E_CANTOPENFILE, FAIL,
"unable to open external raw data file");
}
- if (lseek (fd, efl->slot[i].offset+skip, SEEK_SET)<0) {
+ if (lseek (fd, (off_t)(efl->slot[i].offset+skip), SEEK_SET)<0) {
HGOTO_ERROR (H5E_EFL, H5E_SEEKERROR, FAIL,
"unable to seek in external raw data file");
}
@@ -454,7 +459,6 @@ H5O_efl_write (H5F_t *f, const H5O_efl_t *efl, haddr_t *addr, size_t size,
{
int i, fd=-1;
size_t to_write, cur, skip;
- ssize_t n;
herr_t ret_value = FAIL;
FUNC_ENTER (H5O_efl_write, FAIL);
@@ -466,7 +470,8 @@ H5O_efl_write (H5F_t *f, const H5O_efl_t *efl, haddr_t *addr, size_t size,
/* Find the first efl member in which to write */
for (i=0, cur=0; i<efl->nused; i++) {
- if (addr->offset < cur+efl->slot[i].size) {
+ if (H5O_EFL_UNLIMITED==efl->slot[i].size ||
+ addr->offset < cur+efl->slot[i].size) {
skip = addr->offset - cur;
break;
}
@@ -479,6 +484,10 @@ H5O_efl_write (H5F_t *f, const H5O_efl_t *efl, haddr_t *addr, size_t size,
HGOTO_ERROR (H5E_EFL, H5E_OVERFLOW, FAIL,
"write past logical end of file");
}
+ if (H5F_OVERFLOW_SIZET2OFFT (efl->slot[i].offset+skip)) {
+ HGOTO_ERROR (H5E_EFL, H5E_OVERFLOW, FAIL,
+ "external file address overflowed");
+ }
if ((fd=open (efl->slot[i].name, O_RDWR))<0) {
if (access (efl->slot[i].name, F_OK)<0) {
HGOTO_ERROR (H5E_EFL, H5E_CANTOPENFILE, FAIL,
@@ -488,12 +497,12 @@ H5O_efl_write (H5F_t *f, const H5O_efl_t *efl, haddr_t *addr, size_t size,
"unable to open external raw data file");
}
}
- if (lseek (fd, efl->slot[i].offset+skip, SEEK_SET)<0) {
+ if (lseek (fd, (off_t)(efl->slot[i].offset+skip), SEEK_SET)<0) {
HGOTO_ERROR (H5E_EFL, H5E_SEEKERROR, FAIL,
"unable to seek in external raw data file");
}
to_write = MIN(efl->slot[i].size-skip, size);
- if ((n=write (fd, buf, to_write))!=to_write) {
+ if (write (fd, buf, to_write)!=to_write) {
HGOTO_ERROR (H5E_EFL, H5E_READERROR, FAIL,
"write error in external raw data file");
}
diff --git a/src/H5V.c b/src/H5V.c
index e686e29..85d8752 100644
--- a/src/H5V.c
+++ b/src/H5V.c
@@ -166,7 +166,7 @@ H5V_hyper_stride(intn n, const size_t *size,
for (i = n - 2, acc = 1; i >= 0; --i) {
size_t tmp = acc * (total_size[i+1] - size[i+1]);
assert (tmp<((size_t)1<<(8*sizeof(ssize_t)-1)));
- stride[i] = (size_t)tmp; /*overflow checked*/
+ stride[i] = (ssize_t)tmp; /*overflow checked*/
acc *= total_size[i+1];
skip += acc * (offset ? offset[i] : 0);
}
diff --git a/src/H5config.h.in b/src/H5config.h.in
index 6f8eef1..ebba10f 100644
--- a/src/H5config.h.in
+++ b/src/H5config.h.in
@@ -43,9 +43,15 @@
/* The number of bytes in a long long. */
#undef SIZEOF_LONG_LONG
+/* The number of bytes in a off_t. */
+#undef SIZEOF_OFF_T
+
/* The number of bytes in a short. */
#undef SIZEOF_SHORT
+/* The number of bytes in a size_t. */
+#undef SIZEOF_SIZE_T
+
/* Define if you have the fseek64 function. */
#undef HAVE_FSEEK64
@@ -58,6 +64,9 @@
/* Define if you have the lseek64 function. */
#undef HAVE_LSEEK64
+/* Define if you have the <unistd.h> header file. */
+#undef HAVE_UNISTD_H
+
/* Define if you have the mpi library (-lmpi). */
#undef HAVE_LIBMPI
diff --git a/test/dsets.c b/test/dsets.c
index df19ba1..c92824c 100644
--- a/test/dsets.c
+++ b/test/dsets.c
@@ -1,11 +1,11 @@
/*
* Copyright (C) 1997 NCSA
- * All rights reserved.
+ * All rights reserved.
*
- * Programmer: Robb Matzke <matzke@llnl.gov>
- * Tuesday, December 9, 1997
+ * Programmer: Robb Matzke <matzke@llnl.gov>
+ * Tuesday, December 9, 1997
*
- * Purpose: Tests the dataset interface (H5D)
+ * Purpose: Tests the dataset interface (H5D)
*/
#include <assert.h>
#include <hdf5.h>
@@ -18,25 +18,51 @@
#undef __FUNCTION__
#define __FUNCTION__ ""
#endif
-#define AT() printf (" at %s:%d in %s()...\n", \
- __FILE__, __LINE__, __FUNCTION__);
+#define AT() printf (" at %s:%d in %s()...\n", \
+ __FILE__, __LINE__, __FUNCTION__);
+
+#define DSET_DEFAULT_NAME "default"
+#define DSET_CHUNKED_NAME "chunked"
+#define DSET_SIMPLE_IO_NAME "simple_io"
+#define DSET_TCONV_NAME "tconv"
+
+
+/*-------------------------------------------------------------------------
+ * 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 *client_data)
+{
+ puts ("*FAILED*");
+ H5Eprint (stdout);
+ return 0;
+}
-#define DSET_DEFAULT_NAME "default"
-#define DSET_CHUNKED_NAME "chunked"
-#define DSET_SIMPLE_IO_NAME "simple_io"
-#define DSET_TCONV_NAME "tconv"
/*-------------------------------------------------------------------------
- * Function: test_create
+ * Function: test_create
*
- * Purpose: Attempts to create a dataset.
+ * Purpose: Attempts to create a dataset.
*
- * Return: Success: 0
+ * Return: Success: 0
*
- * Failure: -1
+ * Failure: -1
*
- * Programmer: Robb Matzke
- * Tuesday, December 9, 1997
+ * Programmer: Robb Matzke
+ * Tuesday, December 9, 1997
*
* Modifications:
*
@@ -45,10 +71,12 @@
static herr_t
test_create(hid_t file)
{
- hid_t dataset, space, create_parms;
- size_t dims[2];
- herr_t status;
- size_t csize[2];
+ hid_t dataset, space, create_parms;
+ size_t dims[2];
+ herr_t status;
+ size_t csize[2];
+ herr_t (*func)(void*) = NULL;
+ void *client_data = NULL;
printf("%-70s", "Testing create/open/close");
@@ -59,85 +87,54 @@ test_create(hid_t file)
assert(space>=0);
/*
- * Create a dataset using the default dataset creation properties. We're
+ * Create a dataset using the default dataset creation properties. We're
* not sure what they are, so we won't check.
*/
dataset = H5Dcreate(file, DSET_DEFAULT_NAME, H5T_NATIVE_DOUBLE, space,
- H5P_DEFAULT);
- if (dataset < 0) {
- puts("*FAILED*");
- if (!isatty(1)) {
- AT();
- printf(" Cannot create initial dataset.\n");
- }
- goto error;
- }
+ H5P_DEFAULT);
+ if (dataset<0) goto error;
+
/* Close the dataset */
- if (H5Dclose(dataset) < 0) {
- puts("*FAILED*");
- if (!isatty(1)) {
- AT();
- printf(" Cannot close initial dataset.\n");
- }
- goto error;
- }
+ if (H5Dclose(dataset) < 0) goto error;
/*
* Try creating a dataset that already exists. This should fail since a
* dataset can only be created once. Temporarily turn off error
* reporting.
*/
+ H5Eget_auto (&func, &client_data);
H5Eset_auto (NULL, NULL);
dataset = H5Dcreate(file, DSET_DEFAULT_NAME, H5T_NATIVE_DOUBLE, space,
- H5P_DEFAULT);
- H5Eset_auto ((herr_t(*)(void*))H5Eprint, stdout);
+ H5P_DEFAULT);
+ H5Eset_auto (func, client_data);
if (dataset >= 0) {
- puts("*FAILED*");
- if (!isatty(1)) {
- AT();
- printf(" Library allowed overwrite of existing dataset.\n");
- }
- goto error;
+ puts("*FAILED*");
+ printf(" Library allowed overwrite of existing dataset.\n");
+ goto error;
}
/*
* Open the dataset we created above and then close it. This is how
* existing datasets are accessed.
*/
- dataset = H5Dopen(file, DSET_DEFAULT_NAME);
- if (dataset < 0) {
- puts("*FAILED*");
- if (!isatty(1)) {
- AT();
- printf(" Cannot open dataset `%s'.\n", DSET_DEFAULT_NAME);
- }
- goto error;
- }
- if (H5Dclose(dataset) < 0) {
- puts("*FAILED*");
- if (!isatty(1)) {
- AT();
- printf(" Cannot close dataset.\n");
- }
- goto error;
- }
+ if ((dataset = H5Dopen(file, DSET_DEFAULT_NAME))<0) goto error;
+ if (H5Dclose(dataset) < 0) goto error;
/*
* Try opening a non-existent dataset. This should fail since new datasets
* cannot be created with this function. Temporarily turn off error
* reporting.
*/
+ H5Eget_auto (&func, &client_data);
H5Eset_auto (NULL, NULL);
dataset = H5Dopen(file, "does_not_exist");
- H5Eset_auto ((herr_t(*)(void*))H5Eprint, stdout);
+ H5Eset_auto (func, client_data);
if (dataset >= 0) {
- puts("*FAILED*");
- if (!isatty(1)) {
- AT();
- printf(" Opened a non-existent dataset.\n");
- }
- goto error;
+ puts("*FAILED*");
+ printf(" Opened a non-existent dataset.\n");
+ goto error;
}
+
/*
* Create a new dataset that uses chunked storage instead of the default
* layout.
@@ -150,46 +147,35 @@ test_create(hid_t file)
assert(status >= 0);
dataset = H5Dcreate(file, DSET_CHUNKED_NAME, H5T_NATIVE_DOUBLE, space,
- create_parms);
- if (dataset < 0) {
- puts("*FAILED*");
- if (!isatty(1)) {
- AT();
- printf(" Could not create a chunked dataset.\n");
- }
- goto error;
- }
+ create_parms);
+ if (dataset < 0) goto error;
+
/*
* Close the chunked dataset.
*/
- if (H5Dclose(dataset) < 0) {
- puts("*FAILED*");
- if (!isatty(1)) {
- AT();
- printf(" Cannot close chunked dataset.\n");
- }
- goto error;
- }
+ if (H5Dclose(dataset) < 0) goto error;
+
puts(" PASSED");
return 0;
- error:
+ error:
return -1;
}
+
/*-------------------------------------------------------------------------
- * Function: test_simple_io
+ * Function: test_simple_io
*
- * Purpose: Tests simple I/O. That is, reading and writing a complete
- * multi-dimensional array without data type or data space
- * conversions, without compression, and stored contiguously.
+ * Purpose: Tests simple I/O. That is, reading and writing a complete
+ * multi-dimensional array without data type or data space
+ * conversions, without compression, and stored contiguously.
*
- * Return: Success: 0
+ * Return: Success: 0
*
- * Failure: -1
+ * Failure: -1
*
- * Programmer: Robb Matzke
- * Wednesday, December 10, 1997
+ * Programmer: Robb Matzke
+ * Wednesday, December 10, 1997
*
* Modifications:
*
@@ -198,19 +184,19 @@ test_create(hid_t file)
static herr_t
test_simple_io(hid_t file)
{
- hid_t dataset, space;
- herr_t status;
- int points[100][200], check[100][200];
- int i, j, n;
- size_t dims[2];
+ hid_t dataset, space;
+ herr_t status;
+ int points[100][200], check[100][200];
+ int i, j, n;
+ size_t dims[2];
printf("%-70s", "Testing simple I/O");
/* Initialize the dataset */
for (i = n = 0; i < 100; i++) {
- for (j = 0; j < 100; j++) {
- points[i][j] = n++;
- }
+ for (j = 0; j < 100; j++) {
+ points[i][j] = n++;
+ }
}
/* Create the data space */
@@ -221,44 +207,29 @@ test_simple_io(hid_t file)
/* Create the dataset */
dataset = H5Dcreate(file, DSET_SIMPLE_IO_NAME, H5T_NATIVE_INT, space,
- H5P_DEFAULT);
+ H5P_DEFAULT);
assert(dataset >= 0);
/* Write the data to the dataset */
status = H5Dwrite(dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL,
- H5P_DEFAULT, points);
- if (status < 0) {
- puts("*FAILED*");
- if (!isatty(1)) {
- AT();
- printf(" H5Dwrite() failed\n");
- }
- goto error;
- }
+ H5P_DEFAULT, points);
+ if (status<0) goto error;
+
/* Read the dataset back */
status = H5Dread(dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL,
- H5P_DEFAULT, check);
- if (status < 0) {
- puts("*FAILED*");
- if (!isatty(1)) {
- AT();
- printf(" H5Dread() failed\n");
- }
- goto error;
- }
+ H5P_DEFAULT, check);
+ if (status<0) goto error;
+
/* Check that the values read are the same as the values written */
for (i = 0; i < 100; i++) {
- for (j = 0; j < 200; j++) {
- if (points[i][j] != check[i][j]) {
- puts("*FAILED*");
- if (!isatty(1)) {
- AT();
- printf(" Read different values than written.\n");
- printf(" At index %d,%d\n", i, j);
- }
- goto error;
- }
- }
+ for (j = 0; j < 200; j++) {
+ if (points[i][j] != check[i][j]) {
+ puts("*FAILED*");
+ printf(" Read different values than written.\n");
+ printf(" At index %d,%d\n", i, j);
+ goto error;
+ }
+ }
}
H5Dclose(dataset);
@@ -271,16 +242,16 @@ test_simple_io(hid_t file)
}
/*-------------------------------------------------------------------------
- * Function: test_tconv
+ * Function: test_tconv
*
- * Purpose: Test some simple data type conversion stuff.
+ * Purpose: Test some simple data type conversion stuff.
*
- * Return: Success: 0
+ * Return: Success: 0
*
- * Failure: -1
+ * Failure: -1
*
- * Programmer: Robb Matzke
- * Wednesday, January 14, 1998
+ * Programmer: Robb Matzke
+ * Wednesday, January 14, 1998
*
* Modifications:
*
@@ -317,26 +288,26 @@ test_tconv(hid_t file)
/* Create the data set */
dataset = H5Dcreate(file, DSET_TCONV_NAME, H5T_NATIVE_INT32, space,
- H5P_DEFAULT);
+ H5P_DEFAULT);
assert(dataset >= 0);
/* Write the data to the dataset */
status = H5Dwrite(dataset, H5T_NATIVE_INT32, H5S_ALL, H5S_ALL,
- H5P_DEFAULT, out);
+ H5P_DEFAULT, out);
assert(status >= 0);
/* Create a new type with the opposite byte order */
type = H5Tcopy(H5T_NATIVE_INT32);
switch (H5Tget_order(type)) {
case H5T_ORDER_BE:
- H5Tset_order(type, H5T_ORDER_LE);
- break;
+ H5Tset_order(type, H5T_ORDER_LE);
+ break;
case H5T_ORDER_LE:
- H5Tset_order(type, H5T_ORDER_BE);
- break;
+ H5Tset_order(type, H5T_ORDER_BE);
+ break;
default:
- assert("funny byte order" && 0);
- break;
+ assert("funny byte order" && 0);
+ break;
}
/* Read data with byte order conversion */
@@ -345,10 +316,10 @@ test_tconv(hid_t file)
/* Check */
for (i = 0; i < 1000000; i++) {
- assert(in[4 * i + 0] == out[4 * i + 3]);
- assert(in[4 * i + 1] == out[4 * i + 2]);
- assert(in[4 * i + 2] == out[4 * i + 1]);
- assert(in[4 * i + 3] == out[4 * i + 0]);
+ assert(in[4 * i + 0] == out[4 * i + 3]);
+ assert(in[4 * i + 1] == out[4 * i + 2]);
+ assert(in[4 * i + 2] == out[4 * i + 1]);
+ assert(in[4 * i + 3] == out[4 * i + 0]);
}
H5Dclose(dataset);
@@ -359,16 +330,16 @@ test_tconv(hid_t file)
}
/*-------------------------------------------------------------------------
- * Function: main
+ * Function: main
*
- * Purpose: Tests the dataset interface (H5D)
+ * Purpose: Tests the dataset interface (H5D)
*
- * Return: Success: exit(0)
+ * Return: Success: exit(0)
*
- * Failure: exit(1)
+ * Failure: exit(1)
*
- * Programmer: Robb Matzke
- * Tuesday, December 9, 1997
+ * Programmer: Robb Matzke
+ * Tuesday, December 9, 1997
*
* Modifications:
*
@@ -377,15 +348,15 @@ test_tconv(hid_t file)
int
main(void)
{
- hid_t file;
- herr_t status;
- int nerrors = 0;
+ hid_t file;
+ herr_t status;
+ int nerrors = 0;
status = H5open ();
assert (status>=0);
/* Automatic error reporting to standard output */
- H5Eset_auto ((herr_t(*)(void*))H5Eprint, stdout);
+ H5Eset_auto (display_error_cb, NULL);
unlink("dataset.h5");
file = H5Fcreate("dataset.h5", H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
@@ -403,13 +374,9 @@ main(void)
status = H5Fclose(file);
if (nerrors) {
- printf("***** %d DATASET TEST%s FAILED! *****\n",
- nerrors, 1 == nerrors ? "" : "S");
- if (isatty(1)) {
- printf("(Redirect output to a pager or a file to see debug "
- "output)\n");
- }
- exit(1);
+ printf("***** %d DATASET TEST%s FAILED! *****\n",
+ nerrors, 1 == nerrors ? "" : "S");
+ exit(1);
}
printf("All dataset tests passed.\n");
diff --git a/test/external.c b/test/external.c
index 53f1c15..1e0df7e 100644
--- a/test/external.c
+++ b/test/external.c
@@ -630,16 +630,16 @@ test_2 (void)
static void
test_3 (void)
{
- hid_t file, plist, space, dset;
+ hid_t file, plist, mem_space, file_space, dset;
herr_t status;
- int i;
- int part[25], whole[100];
- size_t size;
+ int i, fd;
+ int part[25], whole[100], hs_start=100;
+ size_t size=100, max_size=200, hs_count=100;
/*
- * Open the file from test_2().
+ * Create another file
*/
- file = H5Fcreate ("extern_2.h5", H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+ file = H5Fcreate ("extern_3.h5", H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
assert (file>=0);
/* Create the external file list */
@@ -651,31 +651,37 @@ test_3 (void)
assert (status>=0);
status = H5Pset_external (plist, "extern_3b.raw", 20, sizeof(part));
assert (status>=0);
- status = H5Pset_external (plist, "extern_4b.raw", 30, sizeof(part));
+ status = H5Pset_external (plist, "extern_4b.raw", 30, H5F_UNLIMITED);
assert (status>=0);
- /* Touch the files so they exist */
- system ("touch extern_1b.raw extern_2b.raw extern_3b.raw extern_4b.raw");
+ /* Make sure the output files are fresh*/
+ fd = open ("extern_1b.raw", O_RDWR|O_CREAT|O_TRUNC, 0666);
+ close (fd);
+ fd = open ("extern_2b.raw", O_RDWR|O_CREAT|O_TRUNC, 0666);
+ close (fd);
+ fd = open ("extern_3b.raw", O_RDWR|O_CREAT|O_TRUNC, 0666);
+ close (fd);
+ fd = open ("extern_4b.raw", O_RDWR|O_CREAT|O_TRUNC, 0666);
+ close (fd);
/* Create the data space */
- size = 100;
- space = H5Screate_simple (1, &size, NULL);
- assert (space>=0);
+ mem_space = H5Screate_simple (1, &size, &max_size);
+ assert (mem_space>=0);
+ file_space = H5Scopy (mem_space);
/* Create the dataset */
- dset = H5Dcreate (file, "dset1", H5T_NATIVE_INT, space, plist);
+ dset = H5Dcreate (file, "dset1", H5T_NATIVE_INT, file_space, plist);
assert (dset>=0);
/*
* Write the entire dataset and compare with the original
*/
do {
- /* Write to the dataset */
printf ("%-70s", "...writing entire dataset");
fflush (stdout);
- for (i=0; i<100; i++) whole[i] = i;
- status = H5Dwrite (dset, H5T_NATIVE_INT, space, space,
+ for (i=0; i<size; i++) whole[i] = i;
+ status = H5Dwrite (dset, H5T_NATIVE_INT, mem_space, file_space,
H5P_DEFAULT, whole);
if (status<0) break;
for (i=0; i<4; i++) {
@@ -692,10 +698,43 @@ test_3 (void)
puts (" PASSED");
} while (0);
+ /*
+ * Extend the dataset by another 100 elements
+ */
+ do {
+ printf ("%-70s", "...extending external contiguous dataset");
+ fflush (stdout);
+
+ if (H5Dextend (dset, &max_size)<0) break;
+ H5Sclose (file_space);
+ file_space = H5Dget_space (dset);
+ puts (" PASSED");
+ } while (0);
+
+ /*
+ * Write second half of dataset
+ */
+ do {
+ printf ("%-70s", "...writing to extended part of dataset");
+ fflush (stdout);
+
+ for (i=0; i<hs_count; i++) {
+ whole[i] = 100+i;
+ }
+ status = H5Sset_hyperslab (file_space, &hs_start, &hs_count, NULL);
+ assert (status>=0);
+ status = H5Dwrite (dset, H5T_NATIVE_INT, mem_space, file_space,
+ H5P_DEFAULT, whole);
+ if (status<0) break;
+ puts (" PASSED");
+ } while (0);
+
+
H5Dclose (dset);
H5Pclose (plist);
- H5Sclose (space);
+ H5Sclose (mem_space);
+ H5Sclose (file_space);
H5Fclose (file);
}
@@ -732,5 +771,5 @@ main (void)
printf ("%d TEST%s FAILED.\n", nerrors_g, 1==nerrors_g?"":"s");
}
- exit (nerrors_g?1:0);
+ return (nerrors_g?1:0);
}