[svn-r9375] Purpose:

Bug fix

Description:
    Close a couple of memory leaks

Platforms tested:
    FreeBSD 4.10 (sleipnir)
    Solaris 2.7 (arabica) w/purify
    Linux 2.4 (verbena)
    too minor for h5committest
This commit is contained in:
Quincey Koziol 2004-10-06 11:35:18 -05:00
parent 01dbfdefb2
commit 458576c826
3 changed files with 38 additions and 12 deletions

View File

@ -2959,7 +2959,7 @@ H5T_open (H5G_entry_t *ent, hid_t dxpl_id)
{
shared_fo->fo_count++;
if(NULL == (dt = H5FL_CALLOC(H5T_t)))
if(NULL == (dt = H5FL_MALLOC(H5T_t)))
HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "can't allocate space for datatype")
dt->shared=shared_fo;
@ -3012,15 +3012,9 @@ H5T_open_oid (H5G_entry_t *ent, hid_t dxpl_id)
assert (ent);
if(NULL==(dt=H5FL_CALLOC(H5T_t)))
HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed")
if(NULL==(dt->shared=H5FL_MALLOC(H5T_shared_t)))
HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed")
if (H5O_open (ent)<0)
HGOTO_ERROR (H5E_DATATYPE, H5E_CANTOPENOBJ, NULL, "unable to open named data type");
/* The fourth argument to H5O_read is dt because we've already CALLOC'ed memory for it */
if (NULL==(dt=H5O_read (ent, H5O_DTYPE_ID, 0, dt, dxpl_id)))
if (NULL==(dt=H5O_read (ent, H5O_DTYPE_ID, 0, NULL, dxpl_id)))
HGOTO_ERROR (H5E_DATATYPE, H5E_CANTINIT, NULL, "unable to load type message from object header");
/* Mark the type as named and open */
@ -3568,10 +3562,7 @@ H5T_set_size(H5T_t *dt, size_t size)
}
}
if((memb_type = H5T_get_member_type(dt, max_index))==NULL)
HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "unable to get type of member");
max_size = H5T_get_size(memb_type);
max_size = H5T_get_member_size(dt, max_index);
if(size<(max_offset+max_size))
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "size shrinking will cut off last member ");

View File

@ -298,6 +298,40 @@ done:
FUNC_LEAVE_NOAPI(ret_value)
}
/*-------------------------------------------------------------------------
* Function: H5T_get_member_size
*
* Purpose: Returns the size of the specified member.
*
* Return: Success: The size in bytes of the member's datatype.
*
* Failure: 0
*
* Programmer: Quincey Koziol
* October 4, 2004
*
* Modifications:
*
*-------------------------------------------------------------------------
*/
size_t
H5T_get_member_size(H5T_t *dt, int membno)
{
size_t ret_value = 0;
FUNC_ENTER_NOAPI(H5T_get_member_size, 0);
assert(dt);
assert(membno >=0 && membno < dt->shared->u.compnd.nmembs);
/* Value */
ret_value = dt->shared->u.compnd.memb[membno].type->shared->size;
done:
FUNC_LEAVE_NOAPI(ret_value);
}
/*-------------------------------------------------------------------------
* Function: H5Tinsert

View File

@ -1091,6 +1091,7 @@ H5_DLL H5T_t * H5T_array_create(H5T_t *base, int ndims,
/* Compound functions */
H5_DLL H5T_t *H5T_get_member_type(const H5T_t *dt, unsigned membno);
H5_DLL size_t H5T_get_member_offset(const H5T_t *dt, unsigned membno);
H5_DLL size_t H5T_get_member_size(H5T_t *dt, int membno);
H5_DLL htri_t H5T_is_packed(const H5T_t *dt);
#endif