diff options
author | MuQun Yang <ymuqun@hdfgroup.org> | 2000-12-22 19:07:45 (GMT) |
---|---|---|
committer | MuQun Yang <ymuqun@hdfgroup.org> | 2000-12-22 19:07:45 (GMT) |
commit | 5c28e0edb915e1721281d71895a0b2083bd6e087 (patch) | |
tree | fca01d6e2281020abe043448561efa2cc7eae877 | |
parent | 7332a1934e1394770c98ba129d92cf2da467ab88 (diff) | |
download | hdf5-5c28e0edb915e1721281d71895a0b2083bd6e087.zip hdf5-5c28e0edb915e1721281d71895a0b2083bd6e087.tar.gz hdf5-5c28e0edb915e1721281d71895a0b2083bd6e087.tar.bz2 |
[svn-r3194]
Purpose:
bug fix
Description:
1. zeroing out memory before using the memory buffer
2. before wrongly using Vquerysize API of HDF4 to obtain
the real file size of record type in HDF4. Actually Vquerysize will
return the real data type size in Memory. That will cause the object
reference difference on Cray which file size is not equal memory size.
Solution:
1. using h4toh5ZeroingMemory function to zero out memory.
2. calcuating the real file size of vdata record in the converter instead of
using Vquerysize HDF4 API.
Platforms tested:
Cray J90, arabica, eirene
-rw-r--r-- | tools/h4toh5vdata.c | 25 |
1 files changed, 15 insertions, 10 deletions
diff --git a/tools/h4toh5vdata.c b/tools/h4toh5vdata.c index 68bfacb..ed692a9 100644 --- a/tools/h4toh5vdata.c +++ b/tools/h4toh5vdata.c @@ -95,7 +95,14 @@ int Vdata_h4_to_h5(int32 file_id,int32 vdata_id, hid_t group_id) { int check_vdname; - + /* Zeroing out memory for vdlabel,vdata_class,vdata_name */ + + h4toh5_ZeroMemory(vdata_name,MAX_NC_NAME); + h4toh5_ZeroMemory(fieldname,MAX_NC_NAME); + h4toh5_ZeroMemory(vdata_class,VSNAMELENMAX); + h4toh5_ZeroMemory(field_name_list,VSFIELDMAX*FIELDNAMELENMAX); + h4toh5_ZeroMemory(vdlabel,10); + /* get absolute path of vdata name. */ vdata_ref = VSQueryref(vdata_id); @@ -137,6 +144,7 @@ int Vdata_h4_to_h5(int32 file_id,int32 vdata_id, hid_t group_id) { } vdatamem_size = 0; + vdata_size = 0; nfields = VFnfields(vdata_id); if (nfields == FAIL) { @@ -187,6 +195,7 @@ int Vdata_h4_to_h5(int32 file_id,int32 vdata_id, hid_t group_id) { } vdatamem_size +=fieldorder*h4memsize[i]; + vdata_size +=fieldorder*h4size[i]; } @@ -387,7 +396,7 @@ int Vdata_h4_to_h5(int32 file_id,int32 vdata_id, hid_t group_id) { return FAIL; } - if(vdata_name != NULL) { + if(vdata_name[0] != '\0') { if(h4_transpredattrs(h5dset,HDF4_OBJECT_NAME,vdata_name)==FAIL){ printf("error in transfering vdata attributes.\n"); free(h5memtype); @@ -465,6 +474,10 @@ int vdata_transattrs(int32 vdata_id,hid_t h5dset,int snum_vdattrs, herr_t sret; int i; + /* zeroing out memory for svdattr_name and refstr */ + h4toh5_ZeroMemory(svdattr_name,2*MAX_NC_NAME); + h4toh5_ZeroMemory(refstr,MAXREF_LENGTH); + /* separate vdata attribute from vdata field attributes. */ if (field_index < -1) { @@ -671,10 +684,8 @@ int gen_h5comptype(int32 vdata_id,int32 nfields, char* fieldname; int32 fieldorder; - int32 fieldsize; size_t fil_offset; size_t mem_offset; - size_t fieldsizef; hsize_t fielddim[1]; hid_t h5str_type; int check_ifstr;/* flag to check if the h5 type is string.*/ @@ -684,7 +695,6 @@ int gen_h5comptype(int32 vdata_id,int32 nfields, check_ifstr = 0; fil_offset = 0; mem_offset = 0; - fieldsizef = 0; for (i =0;i< nfields;i++) { @@ -703,11 +713,6 @@ int gen_h5comptype(int32 vdata_id,int32 nfields, return FAIL; } - fieldsize = VFfieldesize(vdata_id,i); - if(fieldsize == FAIL) { - printf("error in obtaining fieldsize of vdata field.\n"); - return FAIL; - } /* when vdata is a character array, we will write the whole array as one hdf5 type string. */ |