diff options
author | Quincey Koziol <koziol@hdfgroup.org> | 2004-09-14 05:04:25 (GMT) |
---|---|---|
committer | Quincey Koziol <koziol@hdfgroup.org> | 2004-09-14 05:04:25 (GMT) |
commit | b73f3230590f7716ac9bc603bd6692345a376c8e (patch) | |
tree | f3ed8a6ffc5a30b1c5fe6d726ebcdf3ced429d51 /src/H5R.c | |
parent | 147951e4bb7a7967bbec2324b6f5cc66e40260f3 (diff) | |
download | hdf5-b73f3230590f7716ac9bc603bd6692345a376c8e.zip hdf5-b73f3230590f7716ac9bc603bd6692345a376c8e.tar.gz hdf5-b73f3230590f7716ac9bc603bd6692345a376c8e.tar.bz2 |
[svn-r9250] Purpose:
Bug fix
Description:
Correct typedef for dataset region references to avoid struct alignment
issues on Crays.
Solution:
Change the typedef for hdset_reg_ref_t from a struct to an array of
unsigned char's of the correct size and propagate the appropriate adjustments
around the code.
Platforms tested:
FreeBSD 4.10 (sleipnir)
Linux 2.4 (verbena) w/fortran
Cray T90 (subzero) w/fortran
Cray SV1 (wind) w/fortran & parallel
Cray T3E (cyclone) w/fortran & parallel
Diffstat (limited to 'src/H5R.c')
-rw-r--r-- | src/H5R.c | 14 |
1 files changed, 7 insertions, 7 deletions
@@ -175,8 +175,8 @@ H5R_create(void *_ref, H5G_entry_t *loc, const char *name, H5R_type_t ref_type, /* Return any previous heap block to the free list if we are garbage collecting */ if(loc->file->shared->gc_ref) { /* Check for an existing heap ID in the reference */ - for(u=0, heapid_found=0; u<H5R_DSET_REG_REF_BUF_SIZE; u++) - if(ref->heapid[u]!=0) { + for(u=0, heapid_found=0, p=(uint8_t *)ref; u<H5R_DSET_REG_REF_BUF_SIZE; u++) + if(p[u]!=0) { heapid_found=1; break; } /* end if */ @@ -187,7 +187,7 @@ H5R_create(void *_ref, H5G_entry_t *loc, const char *name, H5R_type_t ref_type, } /* end if */ /* Zero the heap ID out, may leak heap space if user is re-using reference and doesn't have garbage collection on */ - HDmemset(ref->heapid,H5R_DSET_REG_REF_BUF_SIZE,0); + HDmemset(ref,H5R_DSET_REG_REF_BUF_SIZE,0); /* Get the amount of space required to serialize the selection */ if ((buf_size = H5S_SELECT_SERIAL_SIZE(space)) < 0) @@ -215,7 +215,7 @@ H5R_create(void *_ref, H5G_entry_t *loc, const char *name, H5R_type_t ref_type, HGOTO_ERROR(H5E_REFERENCE, H5E_WRITEERROR, FAIL, "Unable to serialize selection"); /* Serialize the heap ID and index for storage in the file */ - p=(uint8_t *)ref->heapid; + p=(uint8_t *)ref; H5F_addr_encode(loc->file,&p,hobjid.addr); INT32ENCODE(p,hobjid.idx); @@ -358,7 +358,7 @@ H5R_dereference(H5F_t *file, hid_t dxpl_id, H5R_type_t ref_type, void *_ref) uint8_t *buf; /* Buffer to store serialized selection in */ /* Get the heap ID for the dataset region */ - p=(uint8_t *)ref->heapid; + p=(uint8_t *)ref; H5F_addr_decode(ent.file,(const uint8_t **)&p,&(hobjid.addr)); INT32DECODE(p,hobjid.idx); @@ -525,7 +525,7 @@ H5R_get_region(H5F_t *file, hid_t dxpl_id, H5R_type_t UNUSED ref_type, void *_re ent.file=file; /* Get the heap ID for the dataset region */ - p=(uint8_t *)ref->heapid; + p=(uint8_t *)ref; H5F_addr_decode(ent.file,(const uint8_t **)&p,&(hobjid.addr)); INT32DECODE(p,hobjid.idx); @@ -667,7 +667,7 @@ H5R_get_obj_type(H5F_t *file, hid_t dxpl_id, H5R_type_t ref_type, void *_ref) uint8_t *buf; /* Buffer to store serialized selection in */ /* Get the heap ID for the dataset region */ - p=(uint8_t *)ref->heapid; + p=(uint8_t *)ref; H5F_addr_decode(ent.file,(const uint8_t **)&p,&(hobjid.addr)); INT32DECODE(p,hobjid.idx); |