diff options
Diffstat (limited to 'hl')
-rw-r--r-- | hl/src/H5DS.c | 77 | ||||
-rw-r--r-- | hl/src/H5LT.c | 511 | ||||
-rw-r--r-- | hl/src/H5LTprivate.h | 5 |
3 files changed, 129 insertions, 464 deletions
diff --git a/hl/src/H5DS.c b/hl/src/H5DS.c index 91a4c40..8c10623 100644 --- a/hl/src/H5DS.c +++ b/hl/src/H5DS.c @@ -138,7 +138,7 @@ herr_t H5DSattach_scale(hid_t did, hobj_ref_t ref_j; /* iterator reference */ hvl_t *buf; /* VL buffer to store in the attribute */ hid_t dsid_j; /* DS dataset ID in DIMENSION_LIST */ - H5G_stat_t sb1, sb2; + H5O_info_t oi1, oi2; H5I_type_t it1, it2; int i, len; int found_ds=0; @@ -152,15 +152,15 @@ herr_t H5DSattach_scale(hid_t did, return FAIL; /* get info for the dataset in the parameter list */ - if (H5Gget_objinfo(did,".",TRUE,&sb1)<0) + if(H5Oget_info(did, ".", &oi1, H5P_DEFAULT) < 0) return FAIL; /* get info for the scale in the parameter list */ - if (H5Gget_objinfo(dsid,".",TRUE,&sb2)<0) + if(H5Oget_info(dsid, ".", &oi2, H5P_DEFAULT) < 0) return FAIL; /* same object, not valid */ - if (!memcmp(&sb1.fileno, &sb2.fileno, sizeof(sb1.fileno)) && !memcmp(&sb1.objno, &sb2.objno, sizeof(sb1.objno))) + if(oi1.fileno == oi2.fileno && oi1.addr == oi2.addr) return FAIL; /* get ID type */ @@ -329,18 +329,16 @@ herr_t H5DSattach_scale(hid_t did, goto out; /* get info for DS in the parameter list */ - if (H5Gget_objinfo(dsid,".",TRUE,&sb1)<0) + if(H5Oget_info(dsid, ".", &oi1, H5P_DEFAULT) < 0) goto out; /* get info for this DS */ - if (H5Gget_objinfo(dsid_j,".",TRUE,&sb2)<0) + if(H5Oget_info(dsid_j, ".", &oi2, H5P_DEFAULT) < 0) goto out; /* same object, so this DS scale is already in this DIM IDX */ - if (!memcmp(&sb1.fileno, &sb2.fileno, sizeof(sb1.fileno)) && !memcmp(&sb1.objno, &sb2.objno, sizeof(sb1.objno))) - { + if(oi1.fileno == oi2.fileno && oi1.addr == oi2.addr) found_ds = 1; - } /* close the dereferenced dataset */ if (H5Dclose(dsid_j)<0) @@ -596,14 +594,14 @@ herr_t H5DSdetach_scale(hid_t did, hid_t tid = -1; /* attribute type ID */ hid_t aid = -1; /* attribute ID */ int rank; /* rank of dataset */ - ds_list_t *dsbuf=NULL; /* array of attribute data in the DS pointing to the dataset */ - ds_list_t *dsbufn=NULL; /* array of attribute data in the DS pointing to the dataset */ - hsize_t *dims=NULL; /* dimension of the "REFERENCE_LIST" array */ + ds_list_t *dsbuf = NULL; /* array of attribute data in the DS pointing to the dataset */ + ds_list_t *dsbufn = NULL; /* array of attribute data in the DS pointing to the dataset */ + hsize_t *dims = NULL; /* dimension of the "REFERENCE_LIST" array */ hobj_ref_t ref; /* reference to the DS */ - hvl_t *buf=NULL; /* VL buffer to store in the attribute */ + hvl_t *buf = NULL; /* VL buffer to store in the attribute */ unsigned i, j, jj; - H5G_stat_t sb1, sb2, sb3, sb4; - int found_dset=0, found_ds=0; + H5O_info_t oi1, oi2, oi3, oi4; + int found_dset = 0, found_ds = 0; H5I_type_t it1, it2; /*------------------------------------------------------------------------- @@ -615,15 +613,15 @@ herr_t H5DSdetach_scale(hid_t did, return FAIL; /* get info for the dataset in the parameter list */ - if (H5Gget_objinfo(did,".",TRUE,&sb1)<0) + if(H5Oget_info(did, ".", &oi1, H5P_DEFAULT) < 0) return FAIL; /* get info for the scale in the parameter list */ - if (H5Gget_objinfo(dsid,".",TRUE,&sb2)<0) + if(H5Oget_info(dsid, ".", &oi2, H5P_DEFAULT) < 0) return FAIL; /* same object, not valid */ - if (!memcmp(&sb1.fileno, &sb2.fileno, sizeof(sb1.fileno)) && !memcmp(&sb1.objno, &sb2.objno, sizeof(sb1.objno))) + if(oi1.fileno == oi2.fileno && oi1.addr == oi2.addr) return FAIL; /* get ID type */ @@ -709,20 +707,17 @@ herr_t H5DSdetach_scale(hid_t did, goto out; /* get info for DS in the parameter list */ - if (H5Gget_objinfo(dsid,".",TRUE,&sb1)<0) + if(H5Oget_info(dsid, ".", &oi1, H5P_DEFAULT) < 0) goto out; /* get info for this DS */ - if (H5Gget_objinfo(dsid_j,".",TRUE,&sb2)<0) + if(H5Oget_info(dsid_j, ".", &oi2, H5P_DEFAULT) < 0) goto out; /* same object, reset */ - if (!memcmp(&sb1.fileno, &sb2.fileno, sizeof(sb1.fileno)) && !memcmp(&sb1.objno, &sb2.objno, sizeof(sb1.objno))) - { + if(oi1.fileno == oi2.fileno && oi1.addr == oi2.addr) { for(jj=j; jj<buf[idx].len-1; jj++) - { ((hobj_ref_t *)buf[idx].p)[jj] = ((hobj_ref_t *)buf[idx].p)[jj+1]; - } buf[idx].len--; found_ds = 1; @@ -794,21 +789,17 @@ herr_t H5DSdetach_scale(hid_t did, goto out; /* get info for dataset in the parameter list */ - if (H5Gget_objinfo(did,".",TRUE,&sb3)<0) + if(H5Oget_info(did, ".", &oi3, H5P_DEFAULT) < 0) goto out; /* get info for this dataset */ - if (H5Gget_objinfo(did_i,".",TRUE,&sb4)<0) + if(H5Oget_info(did_i, ".", &oi4, H5P_DEFAULT) < 0) goto out; /* same object, reset. we want to detach only for this DIM */ - if (!memcmp(&sb3.fileno, &sb4.fileno, sizeof(sb3.fileno)) && !memcmp(&sb3.objno, &sb4.objno, sizeof(sb3.objno)) - && (int)idx==dsbuf[i].dim_idx) - { + if(oi3.fileno == oi4.fileno && oi3.addr == oi4.addr && (int)idx == dsbuf[i].dim_idx) { for(jj=i; jj<nelmts-1; jj++) - { dsbuf[jj] = dsbuf[jj+1]; - } nelmts--; found_dset=1; @@ -966,7 +957,7 @@ htri_t H5DSis_attached(hid_t did, hvl_t *buf; /* VL buffer to store in the attribute */ hid_t dsid_j; /* DS dataset ID in DIMENSION_LIST */ hid_t did_i; /* dataset ID in REFERENCE_LIST */ - H5G_stat_t sb1, sb2, sb3, sb4; + H5O_info_t oi1, oi2, oi3, oi4; H5I_type_t it1, it2; int i; int found_dset=0, found_ds=0; @@ -980,15 +971,15 @@ htri_t H5DSis_attached(hid_t did, return FAIL; /* get info for the dataset in the parameter list */ - if (H5Gget_objinfo(did,".",TRUE,&sb1)<0) + if(H5Oget_info(did, ".", &oi1, H5P_DEFAULT) < 0) return FAIL; /* get info for the scale in the parameter list */ - if (H5Gget_objinfo(dsid,".",TRUE,&sb2)<0) + if(H5Oget_info(dsid, ".", &oi2, H5P_DEFAULT) < 0) return FAIL; /* same object, not valid */ - if (!memcmp(&sb1.fileno, &sb2.fileno, sizeof(sb1.fileno)) && !memcmp(&sb1.objno, &sb2.objno, sizeof(sb1.objno))) + if(oi1.fileno == oi2.fileno && oi1.addr == oi2.addr) return FAIL; /* get ID type */ @@ -1062,18 +1053,16 @@ htri_t H5DSis_attached(hid_t did, goto out; /* get info for DS in the parameter list */ - if (H5Gget_objinfo(dsid,".",TRUE,&sb1)<0) + if(H5Oget_info(dsid, ".", &oi1, H5P_DEFAULT) < 0) goto out; /* get info for this DS */ - if (H5Gget_objinfo(dsid_j,".",TRUE,&sb2)<0) + if(H5Oget_info(dsid_j, ".", &oi2, H5P_DEFAULT) < 0) goto out; /* same object */ - if (!memcmp(&sb1.fileno, &sb2.fileno, sizeof(sb1.fileno)) && !memcmp(&sb1.objno, &sb2.objno, sizeof(sb1.objno))) - { + if(oi1.fileno == oi2.fileno && oi1.addr == oi2.addr) found_ds = 1; - } /* close the dereferenced dataset */ if (H5Dclose(dsid_j)<0) @@ -1150,18 +1139,16 @@ htri_t H5DSis_attached(hid_t did, goto out; /* get info for dataset in the parameter list */ - if (H5Gget_objinfo(did,".",TRUE,&sb3)<0) + if(H5Oget_info(did, ".", &oi3, H5P_DEFAULT) < 0) goto out; /* get info for this dataset */ - if (H5Gget_objinfo(did_i,".",TRUE,&sb4)<0) + if(H5Oget_info(did_i, ".", &oi4, H5P_DEFAULT) < 0) goto out; /* same object */ - if (!memcmp(&sb3.fileno, &sb4.fileno, sizeof(sb3.fileno)) && !memcmp(&sb3.objno, &sb4.objno, sizeof(sb3.objno)) - && (int)idx==dsbuf[i].dim_idx) { + if(oi3.fileno == oi4.fileno && oi3.addr == oi4.addr && (int)idx==dsbuf[i].dim_idx) found_dset=1; - } /* if */ /* close the dereferenced dataset */ if (H5Dclose(did_i)<0) diff --git a/hl/src/H5LT.c b/hl/src/H5LT.c index 10977a7..d7f720a 100644 --- a/hl/src/H5LT.c +++ b/hl/src/H5LT.c @@ -38,13 +38,11 @@ int indent = 0; * *------------------------------------------------------------------------- */ - -herr_t H5LT_open_id( hid_t loc_id, - const char *obj_name, - int obj_type ); - -herr_t H5LT_close_id( hid_t obj_id, - int obj_type ); +static herr_t H5LT_get_attribute_mem(hid_t loc_id, + const char *obj_name, + const char *attr_name, + hid_t mem_type_id, + void *data); /*------------------------------------------------------------------------- * @@ -1121,16 +1119,10 @@ herr_t H5LTset_attribute_string( hid_t loc_id, hid_t attr_id; hid_t obj_id; int has_attr; - H5G_stat_t statbuf; size_t attr_size; - - /* Get the type of object */ - if (H5Gget_objinfo( loc_id, obj_name, 1, &statbuf )<0) - return -1; - /* Open the object */ - if ((obj_id = H5LT_open_id( loc_id, obj_name, statbuf.type )) < 0) + if ((obj_id = H5Oopen(loc_id, obj_name, H5P_DEFAULT)) < 0) return -1; /* Create the attribute */ @@ -1176,14 +1168,14 @@ herr_t H5LTset_attribute_string( hid_t loc_id, goto out; /* Close the object */ - if ( H5LT_close_id( obj_id, statbuf.type ) < 0 ) + if(H5Oclose(obj_id) < 0) return -1; return 0; out: - H5LT_close_id( obj_id, statbuf.type ); + H5Oclose(obj_id); return -1; } @@ -1219,14 +1211,9 @@ herr_t H5LT_set_attribute_numerical( hid_t loc_id, hid_t obj_id, sid, attr_id; hsize_t dim_size=size; int has_attr; - H5G_stat_t statbuf; - - /* Get the type of object */ - if (H5Gget_objinfo(loc_id, obj_name, 1, &statbuf)<0) - return -1; /* Open the object */ - if ((obj_id = H5LT_open_id( loc_id, obj_name, statbuf.type )) < 0) + if ((obj_id = H5Oopen(loc_id, obj_name, H5P_DEFAULT)) < 0) return -1; /* Create the data space for the attribute. */ @@ -1260,99 +1247,16 @@ herr_t H5LT_set_attribute_numerical( hid_t loc_id, goto out; /* Close the object */ - if ( H5LT_close_id( obj_id, statbuf.type ) < 0 ) + if(H5Oclose(obj_id) < 0 ) return -1; return 0; out: - H5LT_close_id( obj_id, statbuf.type ); + H5Oclose(obj_id); return -1; } -/*------------------------------------------------------------------------- - * Function: H5LT_open_id - * - * Purpose: Private function used by H5LT_set_attribute_* - * - * Return: Success: 0, Failure: -1 - * - * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu - * - * Date: September 19, 2002 - * - * Comments: - * - *------------------------------------------------------------------------- - */ - -herr_t H5LT_open_id( hid_t loc_id, - const char *obj_name, - int obj_type /*basic object type*/ ) -{ - hid_t obj_id = -1; - - switch(obj_type) { - case H5G_DATASET: - /* Open the dataset. */ - if((obj_id = H5Dopen(loc_id, obj_name)) < 0) - return -1; - break; - - case H5G_GROUP: - /* Open the group. */ - if((obj_id = H5Gopen2(loc_id, obj_name, H5P_DEFAULT)) < 0) - return -1; - break; - - default: - return -1; - } - - return obj_id; -} - - -/*------------------------------------------------------------------------- - * Function: H5LT_close_id - * - * Purpose: Private function used by H5LT_set_attribute_* - * - * Return: Success: 0, Failure: -1 - * - * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu - * - * Date: September 19, 2002 - * - * Comments: - * - *------------------------------------------------------------------------- - */ - -herr_t H5LT_close_id( hid_t obj_id, - int obj_type /*basic object type*/ ) -{ - switch ( obj_type ) - { - case H5G_DATASET: - /* Close the dataset. */ - if ( H5Dclose( obj_id ) < 0 ) - return -1; - break; - - case H5G_GROUP: - /* Close the group. */ - if ( H5Gclose( obj_id ) < 0 ) - return -1; - break; - - default: - return -1; - } - - return 0; -} - /*------------------------------------------------------------------------- * Function: H5LTset_attribute_char @@ -1825,21 +1729,16 @@ herr_t H5LTget_attribute_ndims( hid_t loc_id, { hid_t attr_id; hid_t sid; - H5G_stat_t statbuf; hid_t obj_id; - /* Get the type of object */ - if (H5Gget_objinfo( loc_id, obj_name, 1, &statbuf )<0) - return -1; - /* Open the object */ - if ((obj_id = H5LT_open_id( loc_id, obj_name, statbuf.type )) < 0) + if ((obj_id = H5Oopen(loc_id, obj_name, H5P_DEFAULT)) < 0) return -1; /* Open the attribute. */ if ( ( attr_id = H5Aopen_name( obj_id, attr_name ) ) < 0 ) { - H5LT_close_id( obj_id, statbuf.type ); + H5Oclose(obj_id); return -1; } @@ -1860,14 +1759,14 @@ herr_t H5LTget_attribute_ndims( hid_t loc_id, goto out;; /* Close the object */ - if ( H5LT_close_id( obj_id, statbuf.type ) < 0 ) + if(H5Oclose(obj_id) < 0 ) return -1; return 0; out: H5Aclose( attr_id ); - H5LT_close_id( obj_id, statbuf.type ); + H5Oclose(obj_id); return -1; } @@ -1897,21 +1796,16 @@ herr_t H5LTget_attribute_info( hid_t loc_id, hid_t attr_id; hid_t tid; hid_t sid; - H5G_stat_t statbuf; hid_t obj_id; - /* Get the type of object */ - if (H5Gget_objinfo( loc_id, obj_name, 1, &statbuf )<0) - return -1; - /* Open the object */ - if ((obj_id = H5LT_open_id( loc_id, obj_name, statbuf.type )) < 0) + if ((obj_id = H5Oopen(loc_id, obj_name, H5P_DEFAULT)) < 0) return -1; /* Open the attribute. */ if ( ( attr_id = H5Aopen_name( obj_id, attr_name ) ) < 0 ) { - H5LT_close_id( obj_id, statbuf.type ); + H5Oclose(obj_id); return -1; } @@ -1945,15 +1839,15 @@ herr_t H5LTget_attribute_info( hid_t loc_id, goto out; /* Close the object */ - if ( H5LT_close_id( obj_id, statbuf.type ) < 0 ) + if(H5Oclose(obj_id) < 0 ) return -1; return 0; out: - H5Tclose( tid ); - H5Aclose( attr_id ); - H5LT_close_id( obj_id, statbuf.type ); + H5Tclose(tid); + H5Aclose(attr_id); + H5Oclose(obj_id); return -1; } @@ -2695,17 +2589,11 @@ herr_t H5LTget_attribute_string( hid_t loc_id, const char *attr_name, char *data ) { - /* identifiers */ hid_t obj_id; - H5G_stat_t statbuf; - - /* Get the type of object */ - if (H5Gget_objinfo(loc_id, obj_name, 1, &statbuf)<0) - return -1; /* Open the object */ - if ((obj_id = H5LT_open_id( loc_id, obj_name, statbuf.type )) < 0) + if ((obj_id = H5Oopen( loc_id, obj_name, H5P_DEFAULT)) < 0) return -1; /* Get the attribute */ @@ -2713,7 +2601,7 @@ herr_t H5LTget_attribute_string( hid_t loc_id, return -1; /* Close the object */ - if ( H5LT_close_id( obj_id, statbuf.type ) < 0 ) + if(H5Oclose(obj_id) < 0) return -1; return 0; @@ -2742,29 +2630,11 @@ herr_t H5LTget_attribute_char( hid_t loc_id, const char *attr_name, char *data ) { + /* Get the attribute */ + if(H5LT_get_attribute_mem(loc_id, obj_name, attr_name, H5T_NATIVE_CHAR, data) < 0) + return -1; - /* identifiers */ - hid_t obj_id; - H5G_stat_t statbuf; - - /* Get the type of object */ - if (H5Gget_objinfo(loc_id, obj_name, 1, &statbuf)<0) - return -1; - - /* Open the object */ - if ((obj_id = H5LT_open_id( loc_id, obj_name, statbuf.type )) < 0) - return -1; - - /* Get the attribute */ - if ( H5LT_get_attribute_mem( obj_id, attr_name, H5T_NATIVE_CHAR, data ) < 0 ) - return -1; - - /* Close the object */ - if ( H5LT_close_id( obj_id, statbuf.type ) < 0 ) - return -1; - - return 0; - + return 0; } /*------------------------------------------------------------------------- @@ -2789,29 +2659,11 @@ herr_t H5LTget_attribute_uchar( hid_t loc_id, const char *attr_name, unsigned char *data ) { + /* Get the attribute */ + if(H5LT_get_attribute_mem(loc_id, obj_name, attr_name, H5T_NATIVE_UCHAR, data) < 0) + return -1; - /* identifiers */ - hid_t obj_id; - H5G_stat_t statbuf; - - /* Get the type of object */ - if (H5Gget_objinfo(loc_id, obj_name, 1, &statbuf)<0) - return -1; - - /* Open the object */ - if ((obj_id = H5LT_open_id( loc_id, obj_name, statbuf.type )) < 0) - return -1; - - /* Get the attribute */ - if ( H5LT_get_attribute_mem( obj_id, attr_name, H5T_NATIVE_UCHAR, data ) < 0 ) - return -1; - - /* Close the object */ - if ( H5LT_close_id( obj_id, statbuf.type ) < 0 ) - return -1; - - return 0; - + return 0; } @@ -2838,29 +2690,11 @@ herr_t H5LTget_attribute_short( hid_t loc_id, const char *attr_name, short *data ) { + /* Get the attribute */ + if(H5LT_get_attribute_mem(loc_id, obj_name, attr_name, H5T_NATIVE_SHORT, data) < 0) + return -1; - /* identifiers */ - hid_t obj_id; - H5G_stat_t statbuf; - - /* Get the type of object */ - if (H5Gget_objinfo(loc_id, obj_name, 1, &statbuf)<0) - return -1; - - /* Open the object */ - if ((obj_id = H5LT_open_id( loc_id, obj_name, statbuf.type )) < 0) - return -1; - - /* Get the attribute */ - if ( H5LT_get_attribute_mem( obj_id, attr_name, H5T_NATIVE_SHORT, data ) < 0 ) - return -1; - - /* Close the object */ - if ( H5LT_close_id( obj_id, statbuf.type ) < 0 ) - return -1; - - return 0; - + return 0; } /*------------------------------------------------------------------------- @@ -2885,29 +2719,11 @@ herr_t H5LTget_attribute_ushort( hid_t loc_id, const char *attr_name, unsigned short *data ) { + /* Get the attribute */ + if(H5LT_get_attribute_mem(loc_id, obj_name, attr_name, H5T_NATIVE_USHORT, data) < 0) + return -1; - /* identifiers */ - hid_t obj_id; - H5G_stat_t statbuf; - - /* Get the type of object */ - if (H5Gget_objinfo(loc_id, obj_name, 1, &statbuf)<0) - return -1; - - /* Open the object */ - if ((obj_id = H5LT_open_id( loc_id, obj_name, statbuf.type )) < 0) - return -1; - - /* Get the attribute */ - if ( H5LT_get_attribute_mem( obj_id, attr_name, H5T_NATIVE_USHORT, data ) < 0 ) - return -1; - - /* Close the object */ - if ( H5LT_close_id( obj_id, statbuf.type ) < 0 ) - return -1; - - return 0; - + return 0; } @@ -2934,29 +2750,11 @@ herr_t H5LTget_attribute_int( hid_t loc_id, const char *attr_name, int *data ) { + /* Get the attribute */ + if(H5LT_get_attribute_mem(loc_id, obj_name, attr_name, H5T_NATIVE_INT, data) < 0) + return -1; - /* identifiers */ - hid_t obj_id; - H5G_stat_t statbuf; - - /* Get the type of object */ - if (H5Gget_objinfo(loc_id, obj_name, 1, &statbuf)<0) - return -1; - - /* Open the object */ - if ((obj_id = H5LT_open_id( loc_id, obj_name, statbuf.type )) < 0) - return -1; - - /* Get the attribute */ - if ( H5LT_get_attribute_mem( obj_id, attr_name, H5T_NATIVE_INT, data ) < 0 ) - return -1; - - /* Close the object */ - if ( H5LT_close_id( obj_id, statbuf.type ) < 0 ) - return -1; - - return 0; - + return 0; } /*------------------------------------------------------------------------- @@ -2981,29 +2779,11 @@ herr_t H5LTget_attribute_uint( hid_t loc_id, const char *attr_name, unsigned int *data ) { + /* Get the attribute */ + if(H5LT_get_attribute_mem(loc_id, obj_name, attr_name, H5T_NATIVE_UINT, data) < 0) + return -1; - /* identifiers */ - hid_t obj_id; - H5G_stat_t statbuf; - - /* Get the type of object */ - if (H5Gget_objinfo(loc_id, obj_name, 1, &statbuf)<0) - return -1; - - /* Open the object */ - if ((obj_id = H5LT_open_id( loc_id, obj_name, statbuf.type )) < 0) - return -1; - - /* Get the attribute */ - if ( H5LT_get_attribute_mem( obj_id, attr_name, H5T_NATIVE_UINT, data ) < 0 ) - return -1; - - /* Close the object */ - if ( H5LT_close_id( obj_id, statbuf.type ) < 0 ) - return -1; - - return 0; - + return 0; } @@ -3030,30 +2810,13 @@ herr_t H5LTget_attribute_long( hid_t loc_id, const char *attr_name, long *data ) { + /* Get the attribute */ + if(H5LT_get_attribute_mem(loc_id, obj_name, attr_name, H5T_NATIVE_LONG, data) < 0) + return -1; - /* identifiers */ - hid_t obj_id; - H5G_stat_t statbuf; - - /* Get the type of object */ - if (H5Gget_objinfo(loc_id, obj_name, 1, &statbuf)<0) - return -1; - - /* Open the object */ - if ((obj_id = H5LT_open_id( loc_id, obj_name, statbuf.type )) < 0) - return -1; - - /* Get the attribute */ - if ( H5LT_get_attribute_mem( obj_id, attr_name, H5T_NATIVE_LONG, data ) < 0 ) - return -1; - - /* Close the object */ - if ( H5LT_close_id( obj_id, statbuf.type ) < 0 ) - return -1; - - return 0; - + return 0; } + /*------------------------------------------------------------------------- * Function: H5LTget_attribute_long_long * @@ -3076,29 +2839,11 @@ herr_t H5LTget_attribute_long_long( hid_t loc_id, const char *attr_name, long_long *data ) { + /* Get the attribute */ + if(H5LT_get_attribute_mem(loc_id, obj_name, attr_name, H5T_NATIVE_LLONG, data) < 0) + return -1; - /* identifiers */ - hid_t obj_id; - H5G_stat_t statbuf; - - /* Get the type of object */ - if (H5Gget_objinfo(loc_id, obj_name, 1, &statbuf)<0) - return -1; - - /* Open the object */ - if ((obj_id = H5LT_open_id( loc_id, obj_name, statbuf.type )) < 0) - return -1; - - /* Get the attribute */ - if ( H5LT_get_attribute_mem( obj_id, attr_name, H5T_NATIVE_LLONG, data ) < 0 ) - return -1; - - /* Close the object */ - if ( H5LT_close_id( obj_id, statbuf.type ) < 0 ) - return -1; - - return 0; - + return 0; } @@ -3124,29 +2869,11 @@ herr_t H5LTget_attribute_ulong( hid_t loc_id, const char *attr_name, unsigned long *data ) { + /* Get the attribute */ + if(H5LT_get_attribute_mem(loc_id, obj_name, attr_name, H5T_NATIVE_ULONG, data) < 0) + return -1; - /* identifiers */ - hid_t obj_id; - H5G_stat_t statbuf; - - /* Get the type of object */ - if (H5Gget_objinfo(loc_id, obj_name, 1, &statbuf)<0) - return -1; - - /* Open the object */ - if ((obj_id = H5LT_open_id( loc_id, obj_name, statbuf.type )) < 0) - return -1; - - /* Get the attribute */ - if ( H5LT_get_attribute_mem( obj_id, attr_name, H5T_NATIVE_ULONG, data ) < 0 ) - return -1; - - /* Close the object */ - if ( H5LT_close_id( obj_id, statbuf.type ) < 0 ) - return -1; - - return 0; - + return 0; } @@ -3174,29 +2901,11 @@ herr_t H5LTget_attribute_float( hid_t loc_id, const char *attr_name, float *data ) { + /* Get the attribute */ + if(H5LT_get_attribute_mem(loc_id, obj_name, attr_name, H5T_NATIVE_FLOAT, data) < 0) + return -1; - /* identifiers */ - hid_t obj_id; - H5G_stat_t statbuf; - - /* Get the type of object */ - if (H5Gget_objinfo(loc_id, obj_name, 1, &statbuf)<0) - return -1; - - /* Open the object */ - if ((obj_id = H5LT_open_id( loc_id, obj_name, statbuf.type )) < 0) - return -1; - - /* Get the attribute */ - if ( H5LT_get_attribute_mem( obj_id, attr_name, H5T_NATIVE_FLOAT, data ) < 0 ) - return -1; - - /* Close the object */ - if ( H5LT_close_id( obj_id, statbuf.type ) < 0 ) - return -1; - - return 0; - + return 0; } @@ -3224,29 +2933,11 @@ herr_t H5LTget_attribute_double( hid_t loc_id, const char *attr_name, double *data ) { + /* Get the attribute */ + if(H5LT_get_attribute_mem(loc_id, obj_name, attr_name, H5T_NATIVE_DOUBLE, data) < 0) + return -1; - /* identifiers */ - hid_t obj_id; - H5G_stat_t statbuf; - - /* Get the type of object */ - if (H5Gget_objinfo(loc_id, obj_name, 1, &statbuf)<0) - return -1; - - /* Open the object */ - if ((obj_id = H5LT_open_id( loc_id, obj_name, statbuf.type )) < 0) - return -1; - - /* Get the attribute */ - if ( H5LT_get_attribute_mem( obj_id, attr_name, H5T_NATIVE_DOUBLE, data ) < 0 ) - return -1; - - /* Close the object */ - if ( H5LT_close_id( obj_id, statbuf.type ) < 0 ) - return -1; - - return 0; - + return 0; } @@ -3275,31 +2966,11 @@ herr_t H5LTget_attribute( hid_t loc_id, hid_t mem_type_id, void *data ) { + /* Get the attribute */ + if(H5LT_get_attribute_mem(loc_id, obj_name, attr_name, mem_type_id, data) < 0) + return -1; - /* identifiers */ - hid_t obj_id; - H5G_stat_t statbuf; - - /* Get the type of object */ - if (H5Gget_objinfo(loc_id, obj_name, 1, &statbuf)<0) - return -1; - - /* Open the object */ - if ((obj_id = H5LT_open_id( loc_id, obj_name, statbuf.type )) < 0) - return -1; - - /* Get the attribute */ - if ( H5LT_get_attribute_mem( obj_id, attr_name, mem_type_id, data ) < 0 ) - { - H5LT_close_id( obj_id, statbuf.type ); - return -1; - } - - /* Close the object */ - if ( H5LT_close_id( obj_id, statbuf.type ) < 0 ) - return -1; - - return 0; + return 0; } @@ -3328,29 +2999,41 @@ herr_t H5LTget_attribute( hid_t loc_id, */ -herr_t H5LT_get_attribute_mem( hid_t obj_id, +static herr_t H5LT_get_attribute_mem(hid_t loc_id, + const char *obj_name, const char *attr_name, hid_t mem_type_id, - void *data ) + void *data) { + /* identifiers */ + hid_t obj_id = -1; + hid_t attr_id = -1; - /* identifiers */ - hid_t attr_id; + /* Open the object */ + if((obj_id = H5Oopen(loc_id, obj_name, H5P_DEFAULT)) < 0) + goto out; - if ( ( attr_id = H5Aopen_name( obj_id, attr_name ) ) < 0 ) - return -1; + if((attr_id = H5Aopen_name(obj_id, attr_name)) < 0) + goto out; - if ( H5Aread( attr_id, mem_type_id, data ) < 0 ) - goto out; + if(H5Aread(attr_id, mem_type_id, data) < 0) + goto out; - if ( H5Aclose( attr_id ) < 0 ) - return -1; + if(H5Aclose(attr_id) < 0) + goto out; + attr_id = -1; - return 0; + /* Close the object */ + if(H5Oclose(obj_id) < 0) + goto out; + obj_id = -1; + + return 0; out: - H5Aclose( attr_id ); - return -1; + if(attr_id > 0) + H5Aclose(attr_id); + return -1; } /*------------------------------------------------------------------------- diff --git a/hl/src/H5LTprivate.h b/hl/src/H5LTprivate.h index 51bcbce..c51ee7c 100644 --- a/hl/src/H5LTprivate.h +++ b/hl/src/H5LTprivate.h @@ -27,11 +27,6 @@ *------------------------------------------------------------------------- */ -H5_HLDLL herr_t H5LT_get_attribute_mem( hid_t obj_id, - const char *attr_name, - hid_t mem_type_id, - void *data ); - H5_HLDLL herr_t H5LT_get_attribute_disk( hid_t obj_id, const char *attr_name, void *data ); |