diff options
author | Quincey Koziol <koziol@hdfgroup.org> | 2010-02-18 17:02:45 (GMT) |
---|---|---|
committer | Quincey Koziol <koziol@hdfgroup.org> | 2010-02-18 17:02:45 (GMT) |
commit | 722a9f9f8b263c43b37ff801ba9383cb0ef1ddb3 (patch) | |
tree | 1410fbb16d2dac4a27cbdba36dc53ec3e5b74698 | |
parent | ee757e449bda1e93bade0802948023147e157228 (diff) | |
download | hdf5-722a9f9f8b263c43b37ff801ba9383cb0ef1ddb3.zip hdf5-722a9f9f8b263c43b37ff801ba9383cb0ef1ddb3.tar.gz hdf5-722a9f9f8b263c43b37ff801ba9383cb0ef1ddb3.tar.bz2 |
[svn-r18275] Description:
Remove incorrect encoding of fractal heap IDs for dense attribute storage
and dense shared object header message storage.
Tested on:
FreeBSD/32 6.3 (duty) in debug mode
FreeBSD/64 6.3 (liberty) w/C++ & FORTRAN, in debug mode
Linux/32 2.6 (jam) w/PGI compilers, w/default API=1.8.x,
w/C++ & FORTRAN, w/threadsafe, in debug mode
Linux/64-amd64 2.6 (amani) w/Intel compilers, w/default API=1.6.x,
w/C++ & FORTRAN, in production mode
Solaris/32 2.10 (linew) w/deprecated symbols disabled, w/C++ & FORTRAN,
w/szip filter, in production mode
Linux/64-ia64 2.6 (cobalt) w/Intel compilers, w/C++ & FORTRAN,
in production mode
Linux/64-ia64 2.4 (tg-login3) w/parallel, w/FORTRAN, in debug mode
Linux/64-amd64 2.6 (abe) w/parallel, w/FORTRAN, in production mode
Mac OS X/32 10.6.2 (amazon) in debug mode
Mac OS X/32 10.6.2 (amazon) w/C++ & FORTRAN, w/threadsafe,
in production mode
-rw-r--r-- | src/H5Abtree2.c | 16 | ||||
-rw-r--r-- | src/H5Oprivate.h | 5 | ||||
-rw-r--r-- | src/H5Oshared.c | 2 | ||||
-rw-r--r-- | src/H5SMmessage.c | 6 |
4 files changed, 18 insertions, 11 deletions
diff --git a/src/H5Abtree2.c b/src/H5Abtree2.c index eb2c741..31dcb66 100644 --- a/src/H5Abtree2.c +++ b/src/H5Abtree2.c @@ -326,7 +326,8 @@ H5A_dense_btree2_name_encode(uint8_t *raw, const void *_nrecord, void UNUSED *ct FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5A_dense_btree2_name_encode) /* Encode the record's fields */ - UINT64ENCODE(raw, nrecord->id); + HDmemcpy(raw, nrecord->id.id, (size_t)H5O_FHEAP_ID_LEN); + raw += H5O_FHEAP_ID_LEN; *raw++ = nrecord->flags; UINT32ENCODE(raw, nrecord->corder) UINT32ENCODE(raw, nrecord->hash) @@ -356,7 +357,8 @@ H5A_dense_btree2_name_decode(const uint8_t *raw, void *_nrecord, void UNUSED *ct FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5A_dense_btree2_name_decode) /* Decode the record's fields */ - UINT64DECODE(raw, nrecord->id); + HDmemcpy(nrecord->id.id, raw, (size_t)H5O_FHEAP_ID_LEN); + raw += H5O_FHEAP_ID_LEN; nrecord->flags = *raw++; UINT32DECODE(raw, nrecord->corder) UINT32DECODE(raw, nrecord->hash) @@ -388,7 +390,7 @@ H5A_dense_btree2_name_debug(FILE *stream, const H5F_t UNUSED *f, hid_t UNUSED dx HDfprintf(stream, "%*s%-*s {%016Hx, %02x, %u, %08lx}\n", indent, "", fwidth, "Record:", - (hsize_t)nrecord->id, (unsigned)nrecord->flags, (unsigned)nrecord->corder, (unsigned long)nrecord->hash); + (hsize_t)nrecord->id.val, (unsigned)nrecord->flags, (unsigned)nrecord->corder, (unsigned long)nrecord->hash); FUNC_LEAVE_NOAPI(SUCCEED) } /* H5A_dense_btree2_name_debug() */ @@ -484,7 +486,8 @@ H5A_dense_btree2_corder_encode(uint8_t *raw, const void *_nrecord, void UNUSED * FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5A_dense_btree2_corder_encode) /* Encode the record's fields */ - UINT64ENCODE(raw, nrecord->id); + HDmemcpy(raw, nrecord->id.id, (size_t)H5O_FHEAP_ID_LEN); + raw += H5O_FHEAP_ID_LEN; *raw++ = nrecord->flags; UINT32ENCODE(raw, nrecord->corder) @@ -513,7 +516,8 @@ H5A_dense_btree2_corder_decode(const uint8_t *raw, void *_nrecord, void UNUSED * FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5A_dense_btree2_corder_decode) /* Decode the record's fields */ - UINT64DECODE(raw, nrecord->id); + HDmemcpy(nrecord->id.id, raw, (size_t)H5O_FHEAP_ID_LEN); + raw += H5O_FHEAP_ID_LEN; nrecord->flags = *raw++; UINT32DECODE(raw, nrecord->corder) @@ -544,7 +548,7 @@ H5A_dense_btree2_corder_debug(FILE *stream, const H5F_t UNUSED *f, hid_t UNUSED HDfprintf(stream, "%*s%-*s {%016Hx, %02x, %u}\n", indent, "", fwidth, "Record:", - (hsize_t)nrecord->id, (unsigned)nrecord->flags, (unsigned)nrecord->corder); + (hsize_t)nrecord->id.val, (unsigned)nrecord->flags, (unsigned)nrecord->corder); FUNC_LEAVE_NOAPI(SUCCEED) } /* H5A_dense_btree2_corder_debug() */ diff --git a/src/H5Oprivate.h b/src/H5Oprivate.h index 93eb40f..39ae9cf 100644 --- a/src/H5Oprivate.h +++ b/src/H5Oprivate.h @@ -119,7 +119,10 @@ typedef struct H5O_t H5O_t; /* Fractal heap ID type for shared message & attribute heap IDs. */ -typedef uint64_t H5O_fheap_id_t; +typedef union { + uint8_t id[H5O_FHEAP_ID_LEN]; /* Buffer to hold ID, for encoding/decoding */ + uint64_t val; /* Value, for quick comparisons */ +} H5O_fheap_id_t; /* The object location information for an object */ typedef struct H5O_loc_t { diff --git a/src/H5Oshared.c b/src/H5Oshared.c index fd7cc8b..cdd9778 100644 --- a/src/H5Oshared.c +++ b/src/H5Oshared.c @@ -731,7 +731,7 @@ H5O_shared_debug(const H5O_shared_t *mesg, FILE *stream, int indent, int fwidth) "SOHM"); HDfprintf(stream, "%*s%-*s %016llx\n", indent, "", fwidth, "Heap ID:", - (unsigned long long)mesg->u.heap_id); + (unsigned long long)mesg->u.heap_id.val); break; case H5O_SHARE_TYPE_HERE: diff --git a/src/H5SMmessage.c b/src/H5SMmessage.c index 9a214ea..32ded03 100644 --- a/src/H5SMmessage.c +++ b/src/H5SMmessage.c @@ -201,7 +201,7 @@ H5SM_message_compare(const void *rec1, const void *rec2) * message in the index, we've found the message. */ if(mesg->location == H5SM_IN_HEAP && key->message.location == H5SM_IN_HEAP) { - if(key->message.u.heap_loc.fheap_id == mesg->u.heap_loc.fheap_id) + if(key->message.u.heap_loc.fheap_id.val == mesg->u.heap_loc.fheap_id.val) HGOTO_DONE(0); } /* end if */ else if(mesg->location == H5SM_IN_OH && key->message.location == H5SM_IN_OH) { @@ -301,7 +301,7 @@ H5SM_message_encode(uint8_t *raw, const void *_nrecord, void *_ctx) if(message->location == H5SM_IN_HEAP) { UINT32ENCODE(raw, message->u.heap_loc.ref_count); - UINT64ENCODE(raw, message->u.heap_loc.fheap_id); + HDmemcpy(raw, message->u.heap_loc.fheap_id.id, (size_t)H5O_FHEAP_ID_LEN); } /* end if */ else { HDassert(message->location == H5SM_IN_OH); @@ -342,7 +342,7 @@ H5SM_message_decode(const uint8_t *raw, void *_nrecord, void *_ctx) if(message->location == H5SM_IN_HEAP) { UINT32DECODE(raw, message->u.heap_loc.ref_count); - UINT64DECODE(raw, message->u.heap_loc.fheap_id); + HDmemcpy(message->u.heap_loc.fheap_id.id, raw, (size_t)H5O_FHEAP_ID_LEN); } /* end if */ else { HDassert(message->location == H5SM_IN_OH); |