From 2e6374407848d3c3a7b6a572e62ee88f4f18e8d0 Mon Sep 17 00:00:00 2001 From: Quincey Koziol Date: Thu, 22 Jul 2004 09:27:37 -0500 Subject: [svn-r8927] Purpose: Code cleanup Description: Clean up various recent changes a little. Platforms tested: FreeBSD 4.10 (sleipnir) Too minor to require h5committest --- src/H5O.c | 37 +++--------------------- src/H5Oprivate.h | 4 +-- src/H5Osdspace.c | 2 +- src/H5S.c | 88 +++++++++++++++++++++++++------------------------------- src/H5T.c | 13 +++------ src/H5Zszip.c | 16 +++++------ 6 files changed, 58 insertions(+), 102 deletions(-) diff --git a/src/H5O.c b/src/H5O.c index 03336f7..cab251b 100644 --- a/src/H5O.c +++ b/src/H5O.c @@ -3444,11 +3444,9 @@ done: *------------------------------------------------------------------------- */ herr_t -H5O_encode(unsigned char *buf, void *obj, hid_t type_id) +H5O_encode(H5F_t *f, unsigned char *buf, void *obj, unsigned type_id) { const H5O_class_t *type; /* Actual H5O class type for the ID */ - size_t extent_size; /* size of the message*/ - H5F_t f; /* fake file structure*/ herr_t ret_value = SUCCEED; /* Return value */ FUNC_ENTER_NOAPI(H5O_encode,FAIL); @@ -3458,23 +3456,10 @@ H5O_encode(unsigned char *buf, void *obj, hid_t type_id) type=message_type_g[type_id]; /* map the type ID to the actual type object */ assert(type); - if(type_id == H5O_SDSPACE_ID) { - /* Fake file structure, needed for space encoding and decoding. */ - f.shared = (H5F_file_t*)H5MM_calloc(sizeof(H5F_file_t)); - f.shared->sizeof_size = H5F_CRT_OBJ_BYTE_NUM_DEF; - - /* Encode this "size of size" */ - *buf = H5F_CRT_OBJ_BYTE_NUM_DEF; - buf++; - } - /* Encode */ - if ((type->encode)(&f, buf, obj)<0) + if ((type->encode)(f, buf, obj)<0) HGOTO_ERROR (H5E_OHDR, H5E_CANTENCODE, FAIL, "unable to encode message"); - if(type_id == H5O_SDSPACE_ID) - H5MM_free(f.shared); - done: FUNC_LEAVE_NOAPI(ret_value); } @@ -3499,10 +3484,9 @@ done: *------------------------------------------------------------------------- */ void* -H5O_decode(unsigned char *buf, unsigned type_id) +H5O_decode(H5F_t *f, unsigned char *buf, unsigned type_id) { const H5O_class_t *type; /* Actual H5O class type for the ID */ - H5F_t f; /* fake file structure*/ void *ret_value=NULL; /* Return value */ FUNC_ENTER_NOAPI(H5O_decode,NULL); @@ -3512,23 +3496,10 @@ H5O_decode(unsigned char *buf, unsigned type_id) type=message_type_g[type_id]; /* map the type ID to the actual type object */ assert(type); - if(type_id == H5O_SDSPACE_ID) { - /* Fake file structure, needed for space encoding and decoding. */ - f.shared = (H5F_file_t*)H5MM_calloc(sizeof(H5F_file_t)); - - /* Decode the "size of size", needed for space encoding and decoding */ - f.shared->sizeof_size = *buf; - buf++; - } - /* decode */ - if((ret_value = (type->decode)(&f, 0, buf, NULL))==NULL) + if((ret_value = (type->decode)(f, 0, buf, NULL))==NULL) HGOTO_ERROR (H5E_OHDR, H5E_CANTDECODE, NULL, "unable to decode message"); - if(type_id == H5O_SDSPACE_ID) { - H5MM_free(f.shared); - } - done: FUNC_LEAVE_NOAPI(ret_value); } diff --git a/src/H5Oprivate.h b/src/H5Oprivate.h index 4eb3a3c..31017a4 100644 --- a/src/H5Oprivate.h +++ b/src/H5Oprivate.h @@ -249,8 +249,8 @@ H5_DLL herr_t H5O_remove(H5G_entry_t *ent, unsigned type_id, int sequence, hid_t dxpl_id); H5_DLL herr_t H5O_reset(unsigned type_id, void *native); H5_DLL void *H5O_free(unsigned type_id, void *mesg); -H5_DLL herr_t H5O_encode(unsigned char *buf, void *obj, hid_t type_id); -H5_DLL void* H5O_decode(unsigned char *buf, unsigned type_id); +H5_DLL herr_t H5O_encode(H5F_t *f, unsigned char *buf, void *obj, unsigned type_id); +H5_DLL void* H5O_decode(H5F_t *f, unsigned char *buf, unsigned type_id); H5_DLL void *H5O_copy(unsigned type_id, const void *mesg, void *dst); H5_DLL size_t H5O_raw_size(unsigned type_id, H5F_t *f, const void *mesg); H5_DLL herr_t H5O_get_share(unsigned type_id, H5F_t *f, const void *mesg, H5O_shared_t *share); diff --git a/src/H5Osdspace.c b/src/H5Osdspace.c index 8fff4b0..e130977 100644 --- a/src/H5Osdspace.c +++ b/src/H5Osdspace.c @@ -108,7 +108,7 @@ H5O_sdspace_decode(H5F_t *f, hid_t UNUSED dxpl_id, const uint8_t *p, H5O_shared_ FUNC_ENTER_NOAPI_NOINIT(H5O_sdspace_decode); /* check args */ - /*assert(f);*/ + assert(f); assert(p); assert (!sh); diff --git a/src/H5S.c b/src/H5S.c index 678dadc..ea764f0 100644 --- a/src/H5S.c +++ b/src/H5S.c @@ -25,9 +25,9 @@ #define _H5S_IN_H5S_C #include "H5private.h" /* Generic Functions */ #include "H5Eprivate.h" /* Error handling */ -#include "H5Iprivate.h" /* ID Functions */ -#include "H5FLprivate.h" /* Free Lists */ #include "H5Fpkg.h" /* Dataspace functions */ +#include "H5FLprivate.h" /* Free Lists */ +#include "H5Iprivate.h" /* ID Functions */ #include "H5MMprivate.h" /* Memory Management functions */ #include "H5Oprivate.h" /* object headers */ #include "H5Spkg.h" /* Dataspace functions */ @@ -1766,7 +1766,7 @@ herr_t H5Sencode(hid_t obj_id, unsigned char* buf, size_t* nalloc) { H5S_t *dspace; - herr_t ret_value; + herr_t ret_value=SUCCEED; FUNC_ENTER_API (H5Sencode, FAIL); @@ -1774,7 +1774,8 @@ H5Sencode(hid_t obj_id, unsigned char* buf, size_t* nalloc) if (NULL==(dspace=H5I_object_verify(obj_id, H5I_DATASPACE))) HGOTO_ERROR (H5E_ARGS, H5E_BADTYPE, FAIL, "not a dataspace") - ret_value = H5S_encode(dspace, buf, nalloc); + if(H5S_encode(dspace, buf, nalloc)<0) + HGOTO_ERROR(H5E_DATATYPE, H5E_CANTENCODE, FAIL, "can't encode datatype"); done: FUNC_LEAVE_API(ret_value); @@ -1803,12 +1804,9 @@ done: herr_t H5S_encode(H5S_t *obj, unsigned char *buf, size_t *nalloc) { - size_t extent_size = 0; - hssize_t select_size = 0; + size_t extent_size; + hssize_t select_size; H5S_class_t space_type; - uint8_t *size_buf; - uint8_t *extent_buf; - uint8_t *select_buf; H5F_t f; /* fake file structure*/ herr_t ret_value = SUCCEED; @@ -1822,43 +1820,38 @@ H5S_encode(H5S_t *obj, unsigned char *buf, size_t *nalloc) if((extent_size=H5O_raw_size(H5O_SDSPACE_ID, &f, obj))==0) HGOTO_ERROR(H5E_DATASPACE, H5E_BADSIZE, FAIL, "can't find dataspace size"); - H5MM_free(f.shared); - - /* Make it 1 byte bigger to encode the f.shared->sizeof_size(8 bytes). The - * actual encoding happens in the level below(H5O_encode). */ - extent_size++; - /* Get space type */ space_type = H5S_GET_EXTENT_TYPE(obj); - if((H5S_SIMPLE==space_type) && (select_size=H5S_SELECT_SERIAL_SIZE(obj))<0) + if((select_size=H5S_SELECT_SERIAL_SIZE(obj))<0) HGOTO_ERROR(H5E_DATASPACE, H5E_BADSIZE, FAIL, "can't find dataspace selection size"); /* Verify the size of buffer. If it's not big enough, simply return the * right size without filling the buffer. */ - if(!buf || *nalloc<(extent_size+select_size+2)) { - *nalloc = extent_size+select_size+2; + if(!buf || *nalloc<(extent_size+select_size+3)) { + *nalloc = extent_size+select_size+3; HGOTO_DONE(ret_value); } + /* Encode the "size of size" information */ + *buf++ = f.shared->sizeof_size; + /* Encode size of extent information. Pointer is actually moved in this macro. */ - size_buf = buf; - UINT16ENCODE(size_buf, (uint8_t)extent_size); + UINT16ENCODE(buf, extent_size); /* Encode the extent part of dataspace */ - extent_buf = buf + 2; /* This 2 bytes come from UINT16ENCODE above */ - if(H5O_encode(extent_buf, obj, H5O_SDSPACE_ID)<0) + if(H5O_encode(&f, buf, obj, H5O_SDSPACE_ID)<0) HGOTO_ERROR(H5E_DATASPACE, H5E_CANTENCODE, FAIL, "can't encode extent space"); + buf +=extent_size; - /* Encode the selection part of dataspace. I believe the size is always greater - * than 0 */ - if(space_type==H5S_SIMPLE && select_size>0) { - select_buf = buf + 2 + extent_size; - if(H5S_SELECT_SERIALIZE(obj, select_buf) <0) - HGOTO_ERROR(H5E_DATASPACE, H5E_CANTENCODE, FAIL, "can't encode select space"); - } + /* Encode the selection part of dataspace. */ + if(H5S_SELECT_SERIALIZE(obj, buf) <0) + HGOTO_ERROR(H5E_DATASPACE, H5E_CANTENCODE, FAIL, "can't encode select space"); done: + if(f.shared) + H5MM_free(f.shared); + FUNC_LEAVE_NOAPI(ret_value); } @@ -1928,44 +1921,41 @@ H5S_decode(unsigned char *buf) H5S_t *ds; H5S_extent_t *extent; size_t extent_size; /* size of the extent message*/ - uint8_t *size_buf; - uint8_t *extent_buf; - uint8_t *select_buf; + H5F_t f; /* fake file structure*/ H5S_t *ret_value; FUNC_ENTER_NOAPI(H5S_decode, NULL); + /* Fake file structure, used only for header message operation */ + f.shared = (H5F_file_t*)H5MM_calloc(sizeof(H5F_file_t)); + + /* Decode the "size of size" information */ + f.shared->sizeof_size = *buf++; + /* Decode size of extent information */ - size_buf = buf; - UINT16DECODE(size_buf, extent_size); + UINT16DECODE(buf, extent_size); /* Decode the extent part of dataspace */ - extent_buf = buf+2; /*2 bytes are from the UINT16DECODE above*/ - - if((extent = H5O_decode(extent_buf, H5O_SDSPACE_ID))==NULL) + if((extent = H5O_decode(&f, buf, H5O_SDSPACE_ID))==NULL) HGOTO_ERROR(H5E_DATASPACE, H5E_CANTDECODE, NULL, "can't decode object"); + buf += extent_size; /* Copy the extent into dataspace structure */ - ds = H5FL_CALLOC(H5S_t); + if((ds = H5FL_CALLOC(H5S_t))==NULL) + HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed for data space conversion path table"); if(H5O_copy(H5O_SDSPACE_ID, extent, &(ds->extent))==NULL) HGOTO_ERROR(H5E_DATASPACE, H5E_CANTCOPY, NULL, "can't copy object"); - - H5S_extent_release(extent); + if(H5S_extent_release(extent)<0) + HGOTO_ERROR(H5E_RESOURCE, H5E_CANTDELETE, NULL, "can't release previous dataspace"); H5FL_FREE(H5S_extent_t,extent); - /* Initialize to "all" selection. Deserialization seems relying on it. */ + /* Initialize to "all" selection. Deserialization relies on valid existing selection. */ if(H5S_select_all(ds,0)<0) HGOTO_ERROR (H5E_DATASPACE, H5E_CANTSET, NULL, "unable to set all selection"); - /* Reset common selection info pointer */ - ds->select.sel_info.hslab=NULL; - /* Decode the select part of dataspace. I believe this part always exists. */ - if(ds->extent.type == H5S_SIMPLE) { - select_buf = buf + 2 + extent_size; - if(H5S_SELECT_DESERIALIZE(ds, select_buf)<0) - HGOTO_ERROR(H5E_DATASPACE, H5E_CANTDECODE, NULL, "can't decode space selection"); - } + if(H5S_SELECT_DESERIALIZE(ds, buf)<0) + HGOTO_ERROR(H5E_DATASPACE, H5E_CANTDECODE, NULL, "can't decode space selection"); /* Set return value */ ret_value=ds; diff --git a/src/H5T.c b/src/H5T.c index 095d449..acd4649 100644 --- a/src/H5T.c +++ b/src/H5T.c @@ -32,13 +32,12 @@ #include "H5private.h" /*generic functions */ #include "H5Dprivate.h" /*datasets (for H5Tcopy) */ #include "H5Eprivate.h" /*error handling */ +#include "H5Fpkg.h" /* File */ #include "H5FLprivate.h" /* Free Lists */ -#include "H5Fprivate.h" /* File */ #include "H5Gprivate.h" /*groups */ #include "H5Iprivate.h" /*ID functions */ #include "H5MMprivate.h" /*memory management */ #include "H5Pprivate.h" /* Property Lists */ -#include "H5Fpkg.h" /*file functions */ #include "H5Tpkg.h" /*data-type functions */ /* Check for header needed for SGI floating-point code */ @@ -2661,7 +2660,7 @@ done: herr_t H5T_encode(H5T_t *obj, unsigned char *buf, size_t *nalloc) { - size_t buf_size = 0; + size_t buf_size; H5F_t f; herr_t ret_value = SUCCEED; @@ -2677,7 +2676,7 @@ H5T_encode(H5T_t *obj, unsigned char *buf, size_t *nalloc) HGOTO_DONE(ret_value); } - if(H5O_encode(buf, obj, H5O_DTYPE_ID)<0) + if(H5O_encode(&f, buf, obj, H5O_DTYPE_ID)<0) HGOTO_ERROR(H5E_DATATYPE, H5E_CANTENCODE, FAIL, "can't encode object"); done: @@ -2706,17 +2705,13 @@ done: H5T_t* H5T_decode(unsigned char *buf) { - H5T_t *dt; H5T_t *ret_value; FUNC_ENTER_NOAPI(H5T_decode, NULL); - if((dt = H5O_decode(buf, H5O_DTYPE_ID))==NULL) + if((ret_value = H5O_decode(NULL, buf, H5O_DTYPE_ID))==NULL) HGOTO_ERROR(H5E_DATATYPE, H5E_CANTDECODE, NULL, "can't decode object"); - /* Set return value */ - ret_value=dt; - done: FUNC_LEAVE_NOAPI(ret_value); } diff --git a/src/H5Zszip.c b/src/H5Zszip.c index 0ea7423..71abb54 100644 --- a/src/H5Zszip.c +++ b/src/H5Zszip.c @@ -148,14 +148,14 @@ H5Z_can_apply_szip(hid_t dcpl_id, hid_t type_id, hid_t space_id) /* Check the pixels per block against the 'scanline' size */ if(scanline