mirror of
https://github.com/HDFGroup/hdf5.git
synced 2025-03-19 16:50:46 +08:00
[svn-r2699] Purpose:
Bug fix Description: "Time" datatypes (H5T_UNIX_D*) were not being stored and retrieved in the datatype object header message correctly. Solution: Store endian-ness and precision in the datatype object header message and added test to continue to track them working correctly. This fixes bug #512. Platforms tested: FreeBSD 4.1.1 (hawkwind)
This commit is contained in:
parent
e5c6170754
commit
95445613ca
1
MANIFEST
1
MANIFEST
@ -607,6 +607,7 @@
|
||||
./test/th5s.h5
|
||||
./test/titerate.c
|
||||
./test/tmeta.c
|
||||
./test/ttime.c
|
||||
./test/trefer.c
|
||||
./test/tselect.c
|
||||
./test/ttbbt.c
|
||||
|
2
RELEASE
2
RELEASE
@ -90,6 +90,8 @@ Library
|
||||
put an upper limit on the amount of memory used for free lists.
|
||||
* Checked for non-existent or deleted objects when dereferencing one with
|
||||
object or region references and disallow dereference.
|
||||
* "Time" datatypes (H5T_UNIX_D*) were not being stored and retrieved from
|
||||
object headers correctly, fixed now.
|
||||
|
||||
|
||||
Configuration
|
||||
|
@ -322,6 +322,11 @@ H5O_dtype_decode_helper(H5F_t *f, const uint8_t **pp, H5T_t *dt)
|
||||
"invalid VL location");
|
||||
break;
|
||||
|
||||
case H5T_TIME: /* Time datatypes */
|
||||
dt->u.atomic.order = (flags & 0x1) ? H5T_ORDER_BE : H5T_ORDER_LE;
|
||||
UINT16DECODE(*pp, dt->u.atomic.prec);
|
||||
break;
|
||||
|
||||
default:
|
||||
if (flags) {
|
||||
HRETURN_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL,
|
||||
@ -656,6 +661,20 @@ H5O_dtype_encode_helper(uint8_t **pp, const H5T_t *dt)
|
||||
}
|
||||
break;
|
||||
|
||||
case H5T_TIME: /* Time datatypes... */
|
||||
switch (dt->u.atomic.order) {
|
||||
case H5T_ORDER_LE:
|
||||
break; /*nothing */
|
||||
case H5T_ORDER_BE:
|
||||
flags |= 0x01;
|
||||
break;
|
||||
default:
|
||||
HRETURN_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL,
|
||||
"byte order is not supported in file format yet");
|
||||
}
|
||||
UINT16ENCODE(*pp, dt->u.atomic.prec);
|
||||
break;
|
||||
|
||||
default:
|
||||
/*nothing */
|
||||
break;
|
||||
@ -859,6 +878,10 @@ H5O_dtype_size(H5F_t *f, const void *mesg)
|
||||
ret_value += H5O_dtype_size(f, dt->parent);
|
||||
break;
|
||||
|
||||
case H5T_TIME:
|
||||
ret_value += 2;
|
||||
break;
|
||||
|
||||
default:
|
||||
/*no properties */
|
||||
break;
|
||||
|
@ -6426,7 +6426,7 @@ H5T_cmp(const H5T_t *dt1, const H5T_t *dt2)
|
||||
|
||||
break;
|
||||
|
||||
case H5T_TIME:
|
||||
case H5T_TIME: /* order and precision are checked above */
|
||||
/*void */
|
||||
break;
|
||||
|
||||
|
@ -46,7 +46,7 @@ MOSTLYCLEAN=cmpd_dset.h5 dataset.h5 extend.h5 istore.h5 tfile1.h5 tfile2.h5 \
|
||||
gheap1.h5 gheap2.h5 gheap3.h5 gheap4.h5 links.h5 chunk.h5 \
|
||||
big.data big[0-9][0-9][0-9][0-9][0-9].h5 dtypes1.h5 dtypes2.h5 \
|
||||
tattr.h5 tselect.h5 mtime.h5 ragged.h5 unlink.h5 overhead.h5 \
|
||||
fillval_[0-9].h5 fillval.raw mount_[0-9].h5 trefer[12].h5 \
|
||||
fillval_[0-9].h5 fillval.raw mount_[0-9].h5 ttime.h5 trefer[12].h5 \
|
||||
tvltypes.h5 tvlstr.h5 flush.h5 enum1.h5 titerate.h5 ttsafe.h5
|
||||
CLEAN=$(TIMINGS)
|
||||
|
||||
@ -59,7 +59,7 @@ TEST_SRC=big.c bittests.c chunk.c cmpd_dset.c dsets.c dtypes.c extend.c \
|
||||
external.c fillval.c flush1.c flush2.c gheap.c h5test.c hyperslab.c \
|
||||
iopipe.c istore.c lheap.c links.c mount.c mtime.c ohdr.c overhead.c \
|
||||
ragged.c stab.c tattr.c testhdf5.c tfile.c th5s.c titerate.c tmeta.c \
|
||||
trefer.c tselect.c ttbbt.c tvltypes.c tvlstr.c unlink.c enum.c \
|
||||
ttime.c trefer.c tselect.c ttbbt.c tvltypes.c tvlstr.c unlink.c enum.c \
|
||||
ttsafe.c ttsafe_dcreate.c ttsafe_error.c ttsafe_cancel.c \
|
||||
ttsafe_acreate.c \
|
||||
gass_write.c gass_read.c gass_append.c dpss_read.c dpss_write.c \
|
||||
@ -83,7 +83,7 @@ timings _timings: $(TIMINGS)
|
||||
## How to build the tests... They all depend on the test and hdf5 libraries.
|
||||
$(TEST_PROGS): $(LIB) $(LIBHDF5)
|
||||
|
||||
TESTHDF5_OBJ=testhdf5.lo tattr.lo tfile.lo titerate.lo tmeta.lo trefer.lo tselect.lo ttbbt.lo tvltypes.lo tvlstr.lo th5s.lo
|
||||
TESTHDF5_OBJ=testhdf5.lo tattr.lo tfile.lo titerate.lo tmeta.lo ttime.lo trefer.lo tselect.lo ttbbt.lo tvltypes.lo tvlstr.lo th5s.lo
|
||||
|
||||
TTS_OBJ=ttsafe.lo ttsafe_dcreate.lo ttsafe_error.lo ttsafe_cancel.lo \
|
||||
ttsafe_acreate.lo
|
||||
|
@ -168,6 +168,7 @@ main(int argc, char *argv[])
|
||||
InitTest("h5s", test_h5s, cleanup_h5s, "Dataspaces");
|
||||
InitTest("attr", test_attr, cleanup_attr, "Attributes");
|
||||
InitTest("select", test_select, cleanup_select, "Selections");
|
||||
InitTest("time", test_time, cleanup_time, "Time Datatypes");
|
||||
InitTest("reference", test_reference, cleanup_reference, "References");
|
||||
InitTest("vltypes", test_vltypes, cleanup_vltypes, "Variable-Length Datatypes");
|
||||
InitTest("vlstrings", test_vlstrings, cleanup_vlstrings, "Variable-Length Strings");
|
||||
|
@ -125,6 +125,7 @@ void test_h5s(void);
|
||||
void test_h5d(void);
|
||||
void test_attr(void);
|
||||
void test_select(void);
|
||||
void test_time(void);
|
||||
void test_reference(void);
|
||||
void test_vltypes(void);
|
||||
void test_vlstrings(void);
|
||||
@ -136,6 +137,7 @@ void cleanup_file(void);
|
||||
void cleanup_h5s(void);
|
||||
void cleanup_attr(void);
|
||||
void cleanup_select(void);
|
||||
void cleanup_time(void);
|
||||
void cleanup_reference(void);
|
||||
void cleanup_vltypes(void);
|
||||
void cleanup_vlstrings(void);
|
||||
|
155
test/ttime.c
Normal file
155
test/ttime.c
Normal file
@ -0,0 +1,155 @@
|
||||
/****************************************************************************
|
||||
* NCSA HDF *
|
||||
* Software Development Group *
|
||||
* National Center for Supercomputing Applications *
|
||||
* University of Illinois at Urbana-Champaign *
|
||||
* 605 E. Springfield, Champaign IL 61820 *
|
||||
* *
|
||||
* For conditions of distribution and use, see the accompanying *
|
||||
* hdf/COPYING file. *
|
||||
* *
|
||||
****************************************************************************/
|
||||
|
||||
#ifdef RCSID
|
||||
static char RcsId[] = "$Revision$";
|
||||
#endif
|
||||
|
||||
/* $Id$ */
|
||||
|
||||
/***********************************************************
|
||||
*
|
||||
* Test program: ttime
|
||||
*
|
||||
* Test the Time Datatype functionality
|
||||
*
|
||||
*************************************************************/
|
||||
|
||||
#include <testhdf5.h>
|
||||
|
||||
#include <hdf5.h>
|
||||
|
||||
#define FILE "ttime.h5"
|
||||
|
||||
/****************************************************************
|
||||
**
|
||||
** test_time(): Main time datatype testing routine.
|
||||
**
|
||||
****************************************************************/
|
||||
void
|
||||
test_time(void)
|
||||
{
|
||||
hid_t file_id, tid; /* identifiers */
|
||||
herr_t status;
|
||||
|
||||
/* Output message about test being performed */
|
||||
MESSAGE(5, ("Testing Time Datatypes\n"));
|
||||
|
||||
/* Create a new file using default properties. */
|
||||
file_id = H5Fcreate(FILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
|
||||
CHECK(file_id, FAIL, "H5Fcreate");
|
||||
|
||||
tid = H5Tcopy (H5T_UNIX_D32LE);
|
||||
CHECK(tid, FAIL, "H5Tcopy");
|
||||
status = H5Tcommit(file_id, "Committed D32LE type", tid);
|
||||
CHECK(status, FAIL, "H5Tcommit");
|
||||
status = H5Tclose (tid);
|
||||
CHECK(status, FAIL, "H5Tclose");
|
||||
|
||||
tid = H5Tcopy (H5T_UNIX_D32BE);
|
||||
CHECK(tid, FAIL, "H5Tcopy");
|
||||
status = H5Tcommit(file_id, "Committed D32BE type", tid);
|
||||
CHECK(status, FAIL, "H5Tcommit");
|
||||
status = H5Tclose (tid);
|
||||
CHECK(status, FAIL, "H5Tclose");
|
||||
|
||||
tid = H5Tcopy (H5T_UNIX_D64LE);
|
||||
CHECK(tid, FAIL, "H5Tcopy");
|
||||
status = H5Tcommit(file_id, "Committed D64LE type", tid);
|
||||
CHECK(status, FAIL, "H5Tcommit");
|
||||
status = H5Tclose (tid);
|
||||
CHECK(status, FAIL, "H5Tclose");
|
||||
|
||||
tid = H5Tcopy (H5T_UNIX_D64BE);
|
||||
CHECK(tid, FAIL, "H5Tcopy");
|
||||
status = H5Tcommit(file_id, "Committed D64BE type", tid);
|
||||
CHECK(status, FAIL, "H5Tcommit");
|
||||
status = H5Tclose (tid);
|
||||
CHECK(status, FAIL, "H5Tclose");
|
||||
|
||||
/* Close the file. */
|
||||
status = H5Fclose(file_id);
|
||||
CHECK(status, FAIL, "H5Fclose");
|
||||
|
||||
file_id = H5Fopen(FILE, H5F_ACC_RDWR, H5P_DEFAULT);
|
||||
CHECK(file_id, FAIL, "H5Fopen");
|
||||
|
||||
tid = H5Topen(file_id, "Committed D32LE type");
|
||||
CHECK(tid, FAIL, "H5Topen");
|
||||
|
||||
if(!H5Tequal(tid, H5T_UNIX_D32LE)) {
|
||||
num_errs++;
|
||||
MESSAGE(0, ("H5T_UNIX_D32LE datatype not found"));
|
||||
} /* end if */
|
||||
|
||||
status = H5Tclose (tid);
|
||||
CHECK(status, FAIL, "H5Tclose");
|
||||
|
||||
tid = H5Topen(file_id, "Committed D32BE type");
|
||||
CHECK(tid, FAIL, "H5Topen");
|
||||
|
||||
if(!H5Tequal(tid, H5T_UNIX_D32BE)) {
|
||||
num_errs++;
|
||||
MESSAGE(0, ("H5T_UNIX_D32BE datatype not found"));
|
||||
} /* end if */
|
||||
|
||||
status = H5Tclose (tid);
|
||||
CHECK(status, FAIL, "H5Tclose");
|
||||
|
||||
tid = H5Topen(file_id, "Committed D64LE type");
|
||||
CHECK(tid, FAIL, "H5Topen");
|
||||
|
||||
if(!H5Tequal(tid, H5T_UNIX_D64LE)) {
|
||||
num_errs++;
|
||||
MESSAGE(0, ("H5T_UNIX_D64LE datatype not found"));
|
||||
} /* end if */
|
||||
|
||||
status = H5Tclose (tid);
|
||||
CHECK(status, FAIL, "H5Tclose");
|
||||
|
||||
tid = H5Topen(file_id, "Committed D64BE type");
|
||||
CHECK(tid, FAIL, "H5Topen");
|
||||
|
||||
if(!H5Tequal(tid, H5T_UNIX_D64BE)) {
|
||||
num_errs++;
|
||||
MESSAGE(0, ("H5T_UNIX_D64BE datatype not found"));
|
||||
} /* end if */
|
||||
|
||||
status = H5Tclose (tid);
|
||||
CHECK(status, FAIL, "H5Tclose");
|
||||
|
||||
status = H5Fclose(file_id);
|
||||
CHECK(status, FAIL, "H5Fclose");
|
||||
|
||||
} /* test_reference() */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: cleanup_time
|
||||
*
|
||||
* Purpose: Cleanup temporary test files
|
||||
*
|
||||
* Return: none
|
||||
*
|
||||
* Programmer: Quincey Koziol
|
||||
* October 19, 2000
|
||||
*
|
||||
* Modifications:
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
void
|
||||
cleanup_time(void)
|
||||
{
|
||||
remove(FILE);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user