From 17be6c2574222bf146ddc01eb3c8e344b1efddd0 Mon Sep 17 00:00:00 2001 From: Dana Robinson <43805+derobins@users.noreply.github.com> Date: Mon, 18 Apr 2022 05:29:00 -0700 Subject: Cleans up some HL library code that inappropriately returns htri_t values cast to herr_t (#1651) * Cleans up some HL library code that inappropriately returns htri_t values cast to herr_t * Committing clang-format changes * Formatted source Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com> --- hl/src/H5DS.c | 172 ++++++++++++++++++++++++--------------------------- hl/src/H5IM.c | 56 ++++++++--------- hl/src/H5LT.c | 81 ++++++++---------------- hl/src/H5LTprivate.h | 17 +---- hl/src/H5TB.c | 14 ++--- 5 files changed, 144 insertions(+), 196 deletions(-) diff --git a/hl/src/H5DS.c b/hl/src/H5DS.c index 387419b..d55512f 100644 --- a/hl/src/H5DS.c +++ b/hl/src/H5DS.c @@ -17,7 +17,7 @@ #include "H5TBprivate.h" /* Local routines */ -static herr_t H5DS_is_reserved(hid_t did); +static herr_t H5DS_is_reserved(hid_t did, hbool_t *is_reserved); /*------------------------------------------------------------------------- * Function: H5DSwith_new_ref @@ -73,7 +73,7 @@ H5DSwith_new_ref(hid_t obj_id, hbool_t *with_new_ref) herr_t H5DSset_scale(hid_t dsid, const char *dimname) { - int has_dimlist; + htri_t has_dimlist; H5I_type_t it; /*------------------------------------------------------------------------- @@ -92,11 +92,10 @@ H5DSset_scale(hid_t dsid, const char *dimname) *------------------------------------------------------------------------- */ - /* try to find the attribute "DIMENSION_LIST" */ - if ((has_dimlist = H5LT_find_attribute(dsid, DIMENSION_LIST)) < 0) + /* Try to find the attribute "DIMENSION_LIST" */ + if ((has_dimlist = H5Aexists(dsid, DIMENSION_LIST)) < 0) return FAIL; - - if (has_dimlist == 1) + if (has_dimlist > 0) return FAIL; /*------------------------------------------------------------------------- @@ -139,8 +138,8 @@ H5DSset_scale(hid_t dsid, const char *dimname) herr_t H5DSattach_scale(hid_t did, hid_t dsid, unsigned int idx) { - int has_dimlist; - int has_reflist; + htri_t has_dimlist; + htri_t has_reflist; int is_ds; hssize_t nelmts; hid_t sid, sid_w; /* space ID */ @@ -173,6 +172,7 @@ H5DSattach_scale(hid_t did, hid_t dsid, unsigned int idx) size_t len; int found_ds = 0; htri_t is_scale; + hbool_t is_reserved; /*------------------------------------------------------------------------- * parameter checking @@ -221,12 +221,14 @@ H5DSattach_scale(hid_t did, hid_t dsid, unsigned int idx) if (H5I_DATASET != it1 || H5I_DATASET != it2) return FAIL; - /* the DS dataset cannot have dimension scales */ - if (H5LT_find_attribute(dsid, DIMENSION_LIST) == 1) + /* The DS dataset cannot have dimension scales */ + if (H5Aexists(dsid, DIMENSION_LIST) > 0) return FAIL; - /* check if the dataset is a "reserved" dataset (image, table) */ - if (H5DS_is_reserved(did) == 1) + /* Check if the dataset is a "reserved" dataset (image, table) */ + if (H5DS_is_reserved(did, &is_reserved) < 0) + return FAIL; + if (is_reserved == TRUE) return FAIL; /*------------------------------------------------------------------------- @@ -279,8 +281,8 @@ H5DSattach_scale(hid_t did, hid_t dsid, unsigned int idx) if (H5Rcreate(&dsl.ref, did, ".", H5R_OBJECT, (hid_t)-1) < 0) return FAIL; } - /* try to find the attribute "DIMENSION_LIST" on the >>data<< dataset */ - if ((has_dimlist = H5LT_find_attribute(did, DIMENSION_LIST)) < 0) + /* Try to find the attribute "DIMENSION_LIST" on the >>data<< dataset */ + if ((has_dimlist = H5Aexists(did, DIMENSION_LIST)) < 0) return FAIL; /*------------------------------------------------------------------------- @@ -354,7 +356,7 @@ H5DSattach_scale(hid_t did, hid_t dsid, unsigned int idx) * and insert the new reference *------------------------------------------------------------------------- */ - else if (has_dimlist == 1) { + else if (has_dimlist > 0) { if ((aid = H5Aopen(did, DIMENSION_LIST, H5P_DEFAULT)) < 0) goto out; @@ -469,7 +471,7 @@ H5DSattach_scale(hid_t did, hid_t dsid, unsigned int idx) */ /* try to find the attribute "REFERENCE_LIST" on the >>DS<< dataset */ - if ((has_reflist = H5LT_find_attribute(dsid, REFERENCE_LIST)) < 0) + if ((has_reflist = H5Aexists(dsid, REFERENCE_LIST)) < 0) goto out; /*------------------------------------------------------------------------- @@ -530,7 +532,7 @@ H5DSattach_scale(hid_t did, hid_t dsid, unsigned int idx) * the "REFERENCE_LIST" array already exists, open it and extend it *------------------------------------------------------------------------- */ - else if (has_reflist == 1) { + else if (has_reflist > 0) { hid_t tmp_id; /* Temporary DS dataset ID to recreate reference */ int j; @@ -727,8 +729,8 @@ out: herr_t H5DSdetach_scale(hid_t did, hid_t dsid, unsigned int idx) { - int has_dimlist; - int has_reflist; + htri_t has_dimlist; + htri_t has_reflist; hssize_t nelmts; hid_t dsid_j; /* DS dataset ID in DIMENSION_LIST */ hid_t did_i; /* dataset ID in REFERENCE_LIST */ @@ -804,10 +806,9 @@ H5DSdetach_scale(hid_t did, hid_t dsid, unsigned int idx) *------------------------------------------------------------------------- */ - /* try to find the attribute "DIMENSION_LIST" on the >>data<< dataset */ - if ((has_dimlist = H5LT_find_attribute(did, DIMENSION_LIST)) < 0) + /* Try to find the attribute "DIMENSION_LIST" on the >>data<< dataset */ + if ((has_dimlist = H5Aexists(did, DIMENSION_LIST)) < 0) return FAIL; - if (has_dimlist == 0) return FAIL; @@ -833,9 +834,8 @@ H5DSdetach_scale(hid_t did, hid_t dsid, unsigned int idx) */ /* try to find the attribute "REFERENCE_LIST" on the >>DS<< dataset */ - if ((has_reflist = H5LT_find_attribute(dsid, REFERENCE_LIST)) < 0) + if ((has_reflist = H5Aexists(dsid, REFERENCE_LIST)) < 0) return FAIL; - if (has_reflist == 0) return FAIL; @@ -1228,8 +1228,8 @@ out: htri_t H5DSis_attached(hid_t did, hid_t dsid, unsigned int idx) { - int has_dimlist; - int has_reflist; + htri_t has_dimlist; + htri_t has_reflist; hssize_t nelmts; hid_t sid; /* space ID */ hid_t tid = H5I_INVALID_HID; /* attribute type ID */ @@ -1319,7 +1319,7 @@ H5DSis_attached(hid_t did, hid_t dsid, unsigned int idx) return FAIL; /* try to find the attribute "DIMENSION_LIST" on the >>data<< dataset */ - if ((has_dimlist = H5LT_find_attribute(did, DIMENSION_LIST)) < 0) + if ((has_dimlist = H5Aexists(did, DIMENSION_LIST)) < 0) return FAIL; /*------------------------------------------------------------------------- @@ -1327,7 +1327,7 @@ H5DSis_attached(hid_t did, hid_t dsid, unsigned int idx) *------------------------------------------------------------------------- */ - if (has_dimlist == 1) { + if (has_dimlist > 0) { if ((aid = H5Aopen(did, DIMENSION_LIST, H5P_DEFAULT)) < 0) goto out; @@ -1407,7 +1407,7 @@ H5DSis_attached(hid_t did, hid_t dsid, unsigned int idx) */ /* try to find the attribute "REFERENCE_LIST" on the >>DS<< dataset */ - if ((has_reflist = H5LT_find_attribute(dsid, REFERENCE_LIST)) < 0) + if ((has_reflist = H5Aexists(dsid, REFERENCE_LIST)) < 0) goto out; /*------------------------------------------------------------------------- @@ -1415,7 +1415,7 @@ H5DSis_attached(hid_t did, hid_t dsid, unsigned int idx) *------------------------------------------------------------------------- */ - if (has_reflist == 1) { + if (has_reflist > 0) { if ((aid = H5Aopen(dsid, REFERENCE_LIST, H5P_DEFAULT)) < 0) goto out; @@ -1610,7 +1610,7 @@ H5DSiterate_scales(hid_t did, unsigned int dim, int *ds_idx, H5DS_iterate_t visi herr_t ret_value = 0; int j_idx; int nscales; - int has_dimlist; + htri_t has_dimlist; int i; hbool_t is_new_ref; @@ -1658,14 +1658,13 @@ H5DSiterate_scales(hid_t did, unsigned int dim, int *ds_idx, H5DS_iterate_t visi if (dim >= (unsigned)rank) return FAIL; - /* try to find the attribute "DIMENSION_LIST" on the >>data<< dataset */ - if ((has_dimlist = H5LT_find_attribute(did, DIMENSION_LIST)) < 0) + /* Try to find the attribute "DIMENSION_LIST" on the >>data<< dataset */ + if ((has_dimlist = H5Aexists(did, DIMENSION_LIST)) < 0) return FAIL; - if (has_dimlist == 0) return SUCCEED; - else if (has_dimlist == 1) { + else if (has_dimlist > 0) { if ((aid = H5Aopen(did, DIMENSION_LIST, H5P_DEFAULT)) < 0) goto out; if ((tid = H5Aget_type(aid)) < 0) @@ -1788,7 +1787,7 @@ out: herr_t H5DSset_label(hid_t did, unsigned int idx, const char *label) { - int has_labels; + htri_t has_labels; hid_t sid = H5I_INVALID_HID; /* space ID */ hid_t tid = H5I_INVALID_HID; /* attribute type ID */ hid_t aid = H5I_INVALID_HID; /* attribute ID */ @@ -1838,7 +1837,7 @@ H5DSset_label(hid_t did, unsigned int idx, const char *label) */ /* try to find the attribute "DIMENSION_LABELS" on the >>data<< dataset */ - if ((has_labels = H5LT_find_attribute(did, DIMENSION_LABELS)) < 0) + if ((has_labels = H5Aexists(did, DIMENSION_LABELS)) < 0) return FAIL; /*------------------------------------------------------------------------- @@ -1991,7 +1990,7 @@ out: ssize_t H5DSget_label(hid_t did, unsigned int idx, char *label, size_t size) { - int has_labels; + htri_t has_labels; hid_t sid = H5I_INVALID_HID; /* space ID */ hid_t tid = H5I_INVALID_HID; /* attribute type ID */ hid_t aid = H5I_INVALID_HID; /* attribute ID */ @@ -2033,11 +2032,11 @@ H5DSget_label(hid_t did, unsigned int idx, char *label, size_t size) *------------------------------------------------------------------------- */ - /* try to find the attribute "DIMENSION_LABELS" on the >>data<< dataset */ - if ((has_labels = H5LT_find_attribute(did, DIMENSION_LABELS)) < 0) + /* Try to find the attribute "DIMENSION_LABELS" on the >>data<< dataset */ + if ((has_labels = H5Aexists(did, DIMENSION_LABELS)) < 0) return FAIL; - /* return 0 and NULL for label if no label found */ + /* Return 0 and NULL for label if no label found */ if (has_labels == 0) { if (label) label[0] = 0; @@ -2049,7 +2048,6 @@ H5DSget_label(hid_t did, unsigned int idx, char *label, size_t size) *------------------------------------------------------------------------- */ - assert(has_labels == 1); if ((aid = H5Aopen(did, DIMENSION_LABELS, H5P_DEFAULT)) < 0) goto out; @@ -2146,7 +2144,7 @@ H5DSget_scale_name(hid_t did, char *name, size_t size) H5I_type_t it; /* ID type */ size_t nbytes; size_t copy_len; - int has_name; + htri_t has_name; char * buf = NULL; /*------------------------------------------------------------------------- @@ -2169,9 +2167,8 @@ H5DSget_scale_name(hid_t did, char *name, size_t size) */ /* try to find the attribute "NAME" on the >>DS<< dataset */ - if ((has_name = H5LT_find_attribute(did, "NAME")) < 0) + if ((has_name = H5Aexists(did, "NAME")) < 0) return FAIL; - if (has_name == 0) return 0; @@ -2259,7 +2256,7 @@ H5DSis_scale(hid_t did) { hid_t tid = H5I_INVALID_HID; /* attribute type ID */ hid_t aid = H5I_INVALID_HID; /* attribute ID */ - herr_t attr_class; /* has the "CLASS" attribute */ + htri_t attr_class; /* has the "CLASS" attribute */ htri_t is_ds = -1; /* set to "not a dimension scale" */ H5I_type_t it; /* type of identifier */ char * buf = NULL; /* buffer to read name of attribute */ @@ -2279,7 +2276,7 @@ H5DSis_scale(hid_t did) goto out; /* try to find the attribute "CLASS" on the dataset */ - if ((attr_class = H5LT_find_attribute(did, "CLASS")) < 0) + if ((attr_class = H5Aexists(did, "CLASS")) < 0) goto out; if (attr_class == 0) { @@ -2370,7 +2367,7 @@ out: int H5DSget_num_scales(hid_t did, unsigned int idx) { - int has_dimlist; + htri_t has_dimlist; hid_t sid; /* space ID */ hid_t tid = H5I_INVALID_HID; /* attribute type ID */ hid_t aid = H5I_INVALID_HID; /* attribute ID */ @@ -2410,11 +2407,11 @@ H5DSget_num_scales(hid_t did, unsigned int idx) if (idx >= (unsigned int)rank) return FAIL; - /* try to find the attribute "DIMENSION_LIST" on the >>data<< dataset */ - if ((has_dimlist = H5LT_find_attribute(did, DIMENSION_LIST)) < 0) + /* Try to find the attribute "DIMENSION_LIST" on the >>data<< dataset */ + if ((has_dimlist = H5Aexists(did, DIMENSION_LIST)) < 0) return FAIL; - /* it does not exist */ + /* No scales */ if (has_dimlist == 0) return 0; @@ -2475,86 +2472,77 @@ out: /*------------------------------------------------------------------------- * Function: H5DS_is_reserved * - * Purpose: Verify that a dataset's CLASS is either an image, palette or table - * - * Return: true, false, fail - * - * Programmer: Pedro Vicente - * - * Date: March 19, 2005 + * Purpose: Verify that a dataset's CLASS is either an image, palette or + * table * + * Return: SUCCEED/FAIL *------------------------------------------------------------------------- */ static herr_t -H5DS_is_reserved(hid_t did) +H5DS_is_reserved(hid_t did, hbool_t *is_reserved) { - int has_class; + htri_t has_class; hid_t tid = H5I_INVALID_HID; hid_t aid = H5I_INVALID_HID; char * buf = NULL; /* Name of attribute */ size_t string_size; /* Size of storage for attribute */ - herr_t ret; - - /* try to find the attribute "CLASS" on the dataset */ - if ((has_class = H5LT_find_attribute(did, "CLASS")) < 0) - return -1; - if (has_class == 0) - return 0; + /* Try to find the attribute "CLASS" on the dataset */ + if ((has_class = H5Aexists(did, "CLASS")) < 0) + return FAIL; + if (has_class == 0) { + *is_reserved = FALSE; + return SUCCEED; + } - assert(has_class == 1); if ((aid = H5Aopen(did, "CLASS", H5P_DEFAULT)) < 0) - goto out; - + goto error; if ((tid = H5Aget_type(aid)) < 0) - goto out; + goto error; - /* check to make sure attribute is a string */ + /* Check to make sure attribute is a string */ if (H5T_STRING != H5Tget_class(tid)) - goto out; + goto error; - /* check to make sure string is null-terminated */ + /* Check to make sure string is null-terminated */ if (H5T_STR_NULLTERM != H5Tget_strpad(tid)) - goto out; + goto error; - /* allocate buffer large enough to hold string */ + /* Allocate buffer large enough to hold string */ if ((string_size = H5Tget_size(tid)) == 0) - goto out; - - buf = (char *)HDmalloc((size_t)string_size * sizeof(char)); - if (buf == NULL) - goto out; + goto error; + if (NULL == (buf = HDmalloc(string_size * sizeof(char)))) + goto error; /* Read the attribute */ if (H5Aread(aid, tid, buf) < 0) - goto out; + goto error; if (HDstrncmp(buf, IMAGE_CLASS, MIN(HDstrlen(IMAGE_CLASS), HDstrlen(buf))) == 0 || HDstrncmp(buf, PALETTE_CLASS, MIN(HDstrlen(PALETTE_CLASS), HDstrlen(buf))) == 0 || HDstrncmp(buf, TABLE_CLASS, MIN(HDstrlen(TABLE_CLASS), HDstrlen(buf))) == 0) - ret = 1; + *is_reserved = TRUE; else - ret = 0; + *is_reserved = FALSE; HDfree(buf); if (H5Tclose(tid) < 0) - goto out; - + goto error; if (H5Aclose(aid) < 0) - goto out; + goto error; - return ret; + return SUCCEED; - /* error zone */ -out: +error: H5E_BEGIN_TRY { - if (buf) - HDfree(buf); H5Tclose(tid); H5Aclose(aid); } H5E_END_TRY; + + HDfree(buf); + return FAIL; } diff --git a/hl/src/H5IM.c b/hl/src/H5IM.c index ff10d57..75f2e28 100644 --- a/hl/src/H5IM.c +++ b/hl/src/H5IM.c @@ -228,7 +228,6 @@ H5IM_find_palette(hid_t loc_id) * *------------------------------------------------------------------------- */ - herr_t H5IMget_image_info(hid_t loc_id, const char *dset_name, hsize_t *width, hsize_t *height, hsize_t *planes, char *interlace, hssize_t *npals) @@ -241,7 +240,7 @@ H5IMget_image_info(hid_t loc_id, const char *dset_name, hsize_t *width, hsize_t hid_t atid = -1; H5T_class_t aclass; int has_pal; - int has_attr; + hid_t has_attr; /* check the arguments */ if (dset_name == NULL) @@ -257,11 +256,11 @@ H5IMget_image_info(hid_t loc_id, const char *dset_name, hsize_t *width, hsize_t return -1; /* Try to find the attribute "INTERLACE_MODE" on the >>image<< dataset */ - if ((has_attr = H5LT_find_attribute(did, "INTERLACE_MODE")) < 0) + if ((has_attr = H5Aexists(did, "INTERLACE_MODE")) < 0) goto out; /* It exists, get it */ - if (has_attr == 1) { + if (has_attr > 0) { if ((aid = H5Aopen(did, "INTERLACE_MODE", H5P_DEFAULT)) < 0) goto out; @@ -289,9 +288,8 @@ H5IMget_image_info(hid_t loc_id, const char *dset_name, hsize_t *width, hsize_t /* Initialize the image dimensions */ - if (has_attr == 1) - /* This is a 24 bit image */ - { + if (has_attr > 0) { + /* This is a 24 bit image */ if (HDstrncmp(interlace, "INTERLACE_PIXEL", 15) == 0) { /* Number of color planes is defined as the third dimension */ @@ -308,9 +306,8 @@ H5IMget_image_info(hid_t loc_id, const char *dset_name, hsize_t *width, hsize_t else return -1; } - else - /* This is a 8 bit image */ - { + else { + /* This is a 8 bit image */ *height = dims[0]; *width = dims[1]; *planes = 1; @@ -512,7 +509,7 @@ H5IMlink_palette(hid_t loc_id, const char *image_name, const char *pal_name) hobj_ref_t *refbuf; /* buffer to read references */ hssize_t n_refs; hsize_t dim_ref; - int ok_pal; + htri_t ok_pal; /* check the arguments */ if (image_name == NULL) @@ -531,7 +528,8 @@ H5IMlink_palette(hid_t loc_id, const char *image_name, const char *pal_name) return -1; /* Try to find the attribute "PALETTE" on the >>image<< dataset */ - ok_pal = H5LT_find_attribute(did, "PALETTE"); + if ((ok_pal = H5Aexists(did, "PALETTE")) < 0) + goto out; /*------------------------------------------------------------------------- * It does not exist. We create the attribute and one reference @@ -570,7 +568,7 @@ H5IMlink_palette(hid_t loc_id, const char *image_name, const char *pal_name) * The attribute already exists, open it *------------------------------------------------------------------------- */ - else if (ok_pal == 1) { + else if (ok_pal > 0) { if ((aid = H5Aopen(did, "PALETTE", H5P_DEFAULT)) < 0) goto out; @@ -631,7 +629,7 @@ H5IMlink_palette(hid_t loc_id, const char *image_name, const char *pal_name) HDfree(refbuf); - } /* ok_pal == 1 */ + } /* ok_pal > 0 */ /* Close the image dataset. */ if (H5Dclose(did) < 0) @@ -673,7 +671,8 @@ H5IMunlink_palette(hid_t loc_id, const char *image_name, const char *pal_name) hid_t atid; hid_t aid; H5T_class_t aclass; - int ok_pal, has_pal; + htri_t ok_pal; + int has_pal; /* check the arguments */ if (image_name == NULL) @@ -699,14 +698,14 @@ H5IMunlink_palette(hid_t loc_id, const char *image_name, const char *pal_name) return -1; /* Try to find the attribute "PALETTE" on the >>image<< dataset */ - ok_pal = H5LT_find_attribute(did, "PALETTE"); + if ((ok_pal = H5Aexists(did, "PALETTE")) < 0) + goto out; /* It does not exist. Nothing to do */ if (ok_pal == 0) - return -1; - - /* The attribute exists, open it */ - else if (ok_pal == 1) { + goto out; + else if (ok_pal > 0) { + /* The attribute exists, open it */ if ((aid = H5Aopen(did, "PALETTE", H5P_DEFAULT)) < 0) goto out; @@ -730,8 +729,7 @@ H5IMunlink_palette(hid_t loc_id, const char *image_name, const char *pal_name) /* Close the attribute. */ if (H5Aclose(aid) < 0) goto out; - - } /* ok_pal */ + } /* Close the image dataset. */ if (H5Dclose(did) < 0) @@ -1063,7 +1061,7 @@ herr_t H5IMis_image(hid_t loc_id, const char *dset_name) { hid_t did; - int has_class; + htri_t has_class; hid_t atid; hid_t aid = -1; char * attr_data; /* Name of attribute */ @@ -1082,13 +1080,14 @@ H5IMis_image(hid_t loc_id, const char *dset_name) return -1; /* Try to find the attribute "CLASS" on the dataset */ - has_class = H5LT_find_attribute(did, "CLASS"); + if ((has_class = H5Aexists(did, "CLASS")) < 0) + goto out; if (has_class == 0) { H5Dclose(did); return 0; } - else if (has_class == 1) { + else { if ((aid = H5Aopen(did, "CLASS", H5P_DEFAULT)) < 0) goto out; @@ -1163,7 +1162,7 @@ herr_t H5IMis_palette(hid_t loc_id, const char *dset_name) { hid_t did; - int has_class; + htri_t has_class; hid_t atid; hid_t aid = -1; char * attr_data; /* Name of attribute */ @@ -1182,13 +1181,14 @@ H5IMis_palette(hid_t loc_id, const char *dset_name) return -1; /* Try to find the attribute "CLASS" on the dataset */ - has_class = H5LT_find_attribute(did, "CLASS"); + if ((has_class = H5Aexists(did, "CLASS")) < 0) + goto out; if (has_class == 0) { H5Dclose(did); return 0; } - else if (has_class == 1) { + else { if ((aid = H5Aopen(did, "CLASS", H5P_DEFAULT)) < 0) goto out; diff --git a/hl/src/H5LT.c b/hl/src/H5LT.c index 238bbf2..78cc301 100644 --- a/hl/src/H5LT.c +++ b/hl/src/H5LT.c @@ -1385,7 +1385,6 @@ H5_GCC_CLANG_DIAG_ON("cast-qual") * *------------------------------------------------------------------------- */ - herr_t H5LTset_attribute_string(hid_t loc_id, const char *obj_name, const char *attr_name, const char *attr_data) { @@ -1393,7 +1392,7 @@ H5LTset_attribute_string(hid_t loc_id, const char *obj_name, const char *attr_na hid_t attr_space_id; hid_t attr_id; hid_t obj_id; - int has_attr; + htri_t has_attr; size_t attr_size; /* check the arguments */ @@ -1423,11 +1422,10 @@ H5LTset_attribute_string(hid_t loc_id, const char *obj_name, const char *attr_na if ((attr_space_id = H5Screate(H5S_SCALAR)) < 0) goto out; - /* Verify if the attribute already exists */ - has_attr = H5LT_find_attribute(obj_id, attr_name); - - /* The attribute already exists, delete it */ - if (has_attr == 1) + /* Delete the attribute if it already exists */ + if ((has_attr = H5Aexists(obj_id, attr_name)) < 0) + goto out; + if (has_attr > 0) if (H5Adelete(obj_id, attr_name) < 0) goto out; @@ -1483,7 +1481,7 @@ H5LT_set_attribute_numerical(hid_t loc_id, const char *obj_name, const char *att hid_t obj_id, sid, attr_id; hsize_t dim_size = size; - int has_attr; + htri_t has_attr; /* check the arguments */ if (obj_name == NULL) @@ -1499,11 +1497,10 @@ H5LT_set_attribute_numerical(hid_t loc_id, const char *obj_name, const char *att if ((sid = H5Screate_simple(1, &dim_size, NULL)) < 0) goto out; - /* Verify if the attribute already exists */ - has_attr = H5LT_find_attribute(obj_id, attr_name); - - /* The attribute already exists, delete it */ - if (has_attr == 1) + /* Delete the attribute if it already exists */ + if ((has_attr = H5Aexists(obj_id, attr_name)) < 0) + goto out; + if (has_attr > 0) if (H5Adelete(obj_id, attr_name) < 0) goto out; @@ -1858,49 +1855,24 @@ H5LTset_attribute_double(hid_t loc_id, const char *obj_name, const char *attr_na /*------------------------------------------------------------------------- * Function: H5LTfind_attribute * - * Purpose: Inquires if an attribute named attr_name exists attached to - * the object loc_id. - * - * Programmer: Pedro Vicente - * - * Date: May 17, 2006 + * Purpose: Checks if an attribute named attr_name exists attached to + * the object loc_id * - * Comments: - * Calls the private version of the function + * TODO: Overloading herr_t is not a great idea. This function either + * needs to be rewritten to take a Boolean out parameter in + * HDF5 2.0 or possibly even eliminated entirely as it simply + * wraps H5Aexists. * + * Return: An htri_t value cast to herr_t + * Exists: Positive + * Does not exist: 0 + * Error: Negative *------------------------------------------------------------------------- */ - herr_t H5LTfind_attribute(hid_t loc_id, const char *attr_name) { - return H5LT_find_attribute(loc_id, attr_name); -} - -/*------------------------------------------------------------------------- - * Function: H5LT_find_attribute - * - * Purpose: Inquires if an attribute named attr_name exists attached to the object loc_id. - * - * Programmer: Pedro Vicente - * - * Date: June 21, 2001 - * - * Return: - * Success: Positive if the attribute exists attached to the - * object loc_id. Zero if the attribute does not - * exist attached to the object loc_id. - * - * Failure: Negative if something goes wrong within the - * library. - * - *------------------------------------------------------------------------- - */ -herr_t -H5LT_find_attribute(hid_t loc_id, const char *attr_name) -{ - htri_t attr_exists = H5Aexists(loc_id, attr_name); - return (attr_exists < 0) ? (herr_t)-1 : (attr_exists) ? (herr_t)1 : (herr_t)0; + return (herr_t)H5Aexists(loc_id, attr_name); } /*------------------------------------------------------------------------- @@ -3539,14 +3511,13 @@ H5LT_set_attribute_string(hid_t dset_id, const char *name, const char *buf) hid_t tid; hid_t sid = -1; hid_t aid = -1; - int has_attr; + htri_t has_attr; size_t size; - /* verify if the attribute already exists */ - has_attr = H5LT_find_attribute(dset_id, name); - - /* the attribute already exists, delete it */ - if (has_attr == 1) + /* Delete the attribute if it already exists */ + if ((has_attr = H5Aexists(dset_id, name)) < 0) + return FAIL; + if (has_attr > 0) if (H5Adelete(dset_id, name) < 0) return FAIL; diff --git a/hl/src/H5LTprivate.h b/hl/src/H5LTprivate.h index 5a97d9c..e5c4e4e 100644 --- a/hl/src/H5LTprivate.h +++ b/hl/src/H5LTprivate.h @@ -20,23 +20,12 @@ /* public LT prototypes */ #include "H5LTpublic.h" -/*------------------------------------------------------------------------- - * Private functions - *------------------------------------------------------------------------- - */ - H5_HLDLL herr_t H5LT_get_attribute_disk(hid_t obj_id, const char *attr_name, void *data); - H5_HLDLL herr_t H5LT_set_attribute_numerical(hid_t loc_id, const char *obj_name, const char *attr_name, size_t size, hid_t type_id, const void *data); - H5_HLDLL herr_t H5LT_set_attribute_string(hid_t dset_id, const char *name, const char *buf); - -H5_HLDLL herr_t H5LT_find_attribute(hid_t loc_id, const char *name); - -H5_HLDLL char *H5LT_dtype_to_text(hid_t dtype, char *dt_str, H5LT_lang_t lang, size_t *slen, - hbool_t no_user_buf); - -H5_HLDLL hid_t H5LTyyparse(void); +H5_HLDLL char * H5LT_dtype_to_text(hid_t dtype, char *dt_str, H5LT_lang_t lang, size_t *slen, + hbool_t no_user_buf); +H5_HLDLL hid_t H5LTyyparse(void); #endif diff --git a/hl/src/H5TB.c b/hl/src/H5TB.c index efa61a3..eda3a35 100644 --- a/hl/src/H5TB.c +++ b/hl/src/H5TB.c @@ -2585,11 +2585,11 @@ H5TBdelete_field(hid_t loc_id, const char *dset_name, const char *field_name) HDsnprintf(attr_name, sizeof(attr_name), "FIELD_%d_FILL", (int)i); /* check if we have the _FILL attribute */ - if ((has_fill = H5LT_find_attribute(did_1, attr_name)) < 0) + if ((has_fill = H5Aexists(did_1, attr_name)) < 0) goto out; /* get it */ - if (has_fill) + if (has_fill > 0) if (H5LT_get_attribute_disk(did_1, attr_name, tmp_fill_buf + curr_offset) < 0) goto out; @@ -2747,7 +2747,7 @@ H5TBdelete_field(hid_t loc_id, const char *dset_name, const char *field_name) * attach the fill attributes from previous table *------------------------------------------------------------------------- */ - if (has_fill) { + if (has_fill > 0) { if ((sid_1 = H5Screate(H5S_SCALAR)) < 0) goto out; @@ -2918,15 +2918,15 @@ H5TBAget_fill(hid_t loc_id, const char *dset_name, hid_t dset_id, unsigned char for (i = 0; i < nfields; i++) { HDsnprintf(attr_name, sizeof(attr_name), "FIELD_%d_FILL", (int)i); - /* check if we have the _FILL attribute */ - if ((has_fill = H5LT_find_attribute(dset_id, attr_name)) < 0) + /* Check if we have the _FILL attribute */ + if ((has_fill = H5Aexists(dset_id, attr_name)) < 0) goto out; /* get it */ - if (has_fill) + if (has_fill > 0) if (H5LT_get_attribute_disk(dset_id, attr_name, dst_buf + src_offset[i]) < 0) goto out; - } /* end for */ + } ret_val = has_fill; -- cgit v0.12