Updated to use H5O_info2_t for HDF5 1.12 and the use of H5Oget_info3 instead of H5Gget_objinfo

This commit is contained in:
Scot Breitenfeld 2020-03-12 15:50:24 +00:00
parent 9f9b125028
commit c5d2e99417
7 changed files with 224 additions and 14 deletions

View File

@ -24,7 +24,6 @@ herr_t alien_visitor(hid_t did, unsigned dim, hid_t dsid,
void *visitor_data)
{
char name1[STR_LEN];
H5G_stat_t statbuf;
HDF5_OBJID_T *objid = visitor_data;
/* This should get "/var1", the name of the dataset that the scale
@ -33,28 +32,42 @@ herr_t alien_visitor(hid_t did, unsigned dim, hid_t dsid,
if (strcmp(&name1[1], VAR1_NAME)) ERR;
/* Get more info on the dimscale object.*/
#if H5_VERSION_GE(1,12,0)
H5O_info2_t statbuf;
if (H5Oget_info3(dsid, &statbuf, H5O_INFO_BASIC ) < 0) ERR;
objid->fileno = statbuf.fileno;
objid->token = statbuf.token;
#else
H5G_stat_t statbuf;
if (H5Gget_objinfo(dsid, ".", 1, &statbuf) < 0) ERR;
objid->fileno[0] = statbuf.fileno[0];
objid->objno[0] = statbuf.objno[0];
objid->fileno[1] = statbuf.fileno[1];
objid->objno[1] = statbuf.objno[1];
#endif
return 0;
}
herr_t alien_visitor2(hid_t did, unsigned dim, hid_t dsid, void *visitor_data)
{
H5G_stat_t statbuf;
HDF5_OBJID_T *objid = visitor_data;
/* Get obj id of the dimscale object. THis will be used later to
* match dimensions to dimscales. */
#if H5_VERSION_GE(1,12,0)
H5O_info2_t statbuf;
if (H5Oget_info3(dsid, &statbuf, H5O_INFO_BASIC ) < 0) ERR;
objid->fileno = statbuf.fileno;
objid->token = statbuf.token;
#else
H5G_stat_t statbuf;
if (H5Gget_objinfo(dsid, ".", 1, &statbuf) < 0) ERR;
objid->fileno[0] = statbuf.fileno[0];
objid->objno[0] = statbuf.objno[0];
objid->fileno[1] = statbuf.fileno[1];
objid->objno[1] = statbuf.objno[1];
#endif
return 0;
}
@ -112,7 +125,11 @@ main()
char label[STR_LEN+1];
int num_scales;
hsize_t dims[1], maxdims[1];
#if H5_VERSION_GE(1,12,0)
H5O_info2_t statbuf;
#else
H5G_stat_t statbuf;
#endif
HDF5_OBJID_T dimscale_obj, vars_dimscale_obj;
/* Open the file. */
@ -153,11 +170,17 @@ main()
/* fileno and objno uniquely identify an object and a
* HDF5 file. */
#if H5_VERSION_GE(1,12,0)
if (H5Oget_info3(datasetid, &statbuf, H5O_INFO_BASIC) < 0) ERR;
dimscale_obj.fileno = statbuf.fileno;
dimscale_obj.token = statbuf.token;
#else
if (H5Gget_objinfo(datasetid, ".", 1, &statbuf) < 0) ERR;
dimscale_obj.fileno[0] = statbuf.fileno[0];
dimscale_obj.objno[0] = statbuf.objno[0];
dimscale_obj.fileno[1] = statbuf.fileno[1];
dimscale_obj.objno[1] = statbuf.objno[1];
#endif
}
else
{
@ -169,11 +192,19 @@ main()
/* Go through all dimscales for this var and learn about them. */
if (H5DSiterate_scales(datasetid, 0, NULL, alien_visitor,
&vars_dimscale_obj) < 0) ERR;
#if H5_VERSION_GE(1,12,0)
int token_cmp;
if (H5Otoken_cmp(datasetid,
&vars_dimscale_obj.token,
&dimscale_obj.token, &token_cmp) < 0) ERR;
if (vars_dimscale_obj.fileno != dimscale_obj.fileno ||
token_cmp != 0) ERR;
#else
if (vars_dimscale_obj.fileno[0] != dimscale_obj.fileno[0] ||
vars_dimscale_obj.objno[0] != dimscale_obj.objno[0] ||
vars_dimscale_obj.fileno[1] != dimscale_obj.fileno[1] ||
vars_dimscale_obj.objno[1] != dimscale_obj.objno[1]) ERR;
#endif
/* There's also a label for dimension 0. */
if (H5DSget_label(datasetid, 0, label, STR_LEN) < 0) ERR;
}
@ -259,7 +290,11 @@ main()
htri_t is_scale;
int num_scales;
hsize_t dims[NDIMS2], maxdims[NDIMS2];
#if H5_VERSION_GE(1,12,0)
H5O_info2_t statbuf;
#else
H5G_stat_t statbuf;
#endif
HDF5_OBJID_T dimscale_obj[2], vars_dimscale_obj[2];
int dimscale_cnt = 0;
int d, ndims;
@ -297,11 +332,17 @@ main()
{
/* fileno and objno uniquely identify an object and a
* HDF5 file. */
#if H5_VERSION_GE(1,12,0)
if (H5Oget_info3(datasetid, &statbuf, H5O_INFO_BASIC) < 0) ERR;
dimscale_obj[dimscale_cnt].fileno = statbuf.fileno;
dimscale_obj[dimscale_cnt].token = statbuf.token;
#else
if (H5Gget_objinfo(datasetid, ".", 1, &statbuf) < 0) ERR;
dimscale_obj[dimscale_cnt].fileno[0] = statbuf.fileno[0];
dimscale_obj[dimscale_cnt].objno[0] = statbuf.objno[0];
dimscale_obj[dimscale_cnt].fileno[1] = statbuf.fileno[1];
dimscale_obj[dimscale_cnt].objno[1] = statbuf.objno[1];
#endif
dimscale_cnt++;
}
else
@ -322,10 +363,19 @@ main()
/* Verify that the object ids passed from the
* alien_visitor2 function match the ones we found
* for the lat and lon datasets. */
#if H5_VERSION_GE(1,12,0)
int token_cmp;
if (H5Otoken_cmp(datasetid,
&vars_dimscale_obj[d].token,
&dimscale_obj[d].token, &token_cmp) < 0) ERR;
if (vars_dimscale_obj[d].fileno != dimscale_obj[d].fileno ||
token_cmp != 0) ERR;
#else
if (vars_dimscale_obj[d].fileno[0] != dimscale_obj[d].fileno[0] ||
vars_dimscale_obj[d].objno[0] != dimscale_obj[d].objno[0]) ERR;
if (vars_dimscale_obj[d].fileno[1] != dimscale_obj[d].fileno[1] ||
vars_dimscale_obj[d].objno[1] != dimscale_obj[d].objno[1]) ERR;
#endif
}
}
if (H5Dclose(datasetid) < 0) ERR;
@ -363,7 +413,11 @@ main()
char obj_name[STR_LEN + 1];
htri_t is_scale;
int num_scales;
#if H5_VERSION_GE(1,12,0)
H5O_info2_t statbuf;
#else
H5G_stat_t statbuf;
#endif
HDF5_OBJID_T dimscale_obj[2], vars_dimscale_obj[2];
int dimscale_cnt = 0;
int d, ndims;
@ -476,11 +530,17 @@ main()
{
/* fileno and objno uniquely identify an object and a
* HDF5 file. */
#if H5_VERSION_GE(1,12,0)
if (H5Oget_info3(datasetid, &statbuf, H5O_INFO_BASIC) < 0) ERR;
dimscale_obj[dimscale_cnt].fileno = statbuf.fileno;
dimscale_obj[dimscale_cnt].token = statbuf.token;
#else
if (H5Gget_objinfo(datasetid, ".", 1, &statbuf) < 0) ERR;
dimscale_obj[dimscale_cnt].fileno[0] = statbuf.fileno[0];
dimscale_obj[dimscale_cnt].objno[0] = statbuf.objno[0];
dimscale_obj[dimscale_cnt].fileno[1] = statbuf.fileno[1];
dimscale_obj[dimscale_cnt].objno[1] = statbuf.objno[1];
#endif
dimscale_cnt++;
}
else
@ -501,10 +561,19 @@ main()
/* Verify that the object ids passed from the
* alien_visitor2 function match the ones we found
* for the lat and lon datasets. */
#if H5_VERSION_GE(1,12,0)
int token_cmp;
if (H5Otoken_cmp(datasetid,
&vars_dimscale_obj[d].token,
&dimscale_obj[d].token, &token_cmp) < 0) ERR;
if (vars_dimscale_obj[d].fileno != dimscale_obj[d].fileno ||
token_cmp != 0) ERR;
#else
if (vars_dimscale_obj[d].fileno[0] != dimscale_obj[d].fileno[0] ||
vars_dimscale_obj[d].objno[0] != dimscale_obj[d].objno[0]) ERR;
if (vars_dimscale_obj[d].fileno[1] != dimscale_obj[d].fileno[1] ||
vars_dimscale_obj[d].objno[1] != dimscale_obj[d].objno[1]) ERR;
#endif
}
}
@ -666,7 +735,11 @@ main()
htri_t is_scale;
int num_scales;
hsize_t maxdims[DIMS_3];
#if H5_VERSION_GE(1,12,0)
H5O_info2_t statbuf;
#else
H5G_stat_t statbuf;
#endif
HDF5_OBJID_T dimscale_obj[NUM_DIMSCALES1], vars_dimscale_obj[NUM_DIMSCALES1];
int dimscale_cnt = 0;
int d, ndims;
@ -777,11 +850,17 @@ main()
{
/* fileno and objno uniquely identify an object and a
* HDF5 file. */
#if H5_VERSION_GE(1,12,0)
if (H5Oget_info3(datasetid, &statbuf, H5O_INFO_BASIC) < 0) ERR;
dimscale_obj[dimscale_cnt].fileno = statbuf.fileno;
dimscale_obj[dimscale_cnt].token = statbuf.token;
#else
if (H5Gget_objinfo(datasetid, ".", 1, &statbuf) < 0) ERR;
dimscale_obj[dimscale_cnt].fileno[0] = statbuf.fileno[0];
dimscale_obj[dimscale_cnt].objno[0] = statbuf.objno[0];
dimscale_obj[dimscale_cnt].fileno[1] = statbuf.fileno[1];
dimscale_obj[dimscale_cnt].objno[1] = statbuf.objno[1];
#endif
dimscale_cnt++;
}
else
@ -802,10 +881,19 @@ main()
/* Verify that the object ids passed from the
* alien_visitor2 function match the ones we found
* for the lat and lon datasets. */
#if H5_VERSION_GE(1,12,0)
int token_cmp;
if (H5Otoken_cmp(datasetid,
&vars_dimscale_obj[d].token,
&dimscale_obj[d].token, &token_cmp) < 0) ERR;
if (vars_dimscale_obj[d].fileno != dimscale_obj[d].fileno ||
token_cmp != 0) ERR;
#else
if (vars_dimscale_obj[d].fileno[0] != dimscale_obj[d].fileno[0] ||
vars_dimscale_obj[d].objno[0] != dimscale_obj[d].objno[0]) ERR;
if (vars_dimscale_obj[d].fileno[1] != dimscale_obj[d].fileno[1] ||
vars_dimscale_obj[d].objno[1] != dimscale_obj[d].objno[1]) ERR;
#endif
}
}
if (H5Dclose(datasetid) < 0) ERR;
@ -851,7 +939,11 @@ main()
htri_t is_scale;
int num_scales;
hsize_t maxdims[DIMS_3];
#if H5_VERSION_GE(1,12,0)
H5O_info2_t statbuf;
#else
H5G_stat_t statbuf;
#endif
HDF5_OBJID_T dimscale_obj[NUM_DIMSCALES2], vars_dimscale_obj[NUM_DIMSCALES2];
int dimscale_cnt = 0;
int d, ndims;
@ -962,11 +1054,17 @@ main()
{
/* fileno and objno uniquely identify an object and a
* HDF5 file. */
#if H5_VERSION_GE(1,12,0)
if (H5Oget_info3(datasetid, &statbuf, H5O_INFO_BASIC) < 0) ERR;
dimscale_obj[dimscale_cnt].fileno = statbuf.fileno;
dimscale_obj[dimscale_cnt].token = statbuf.token;
#else
if (H5Gget_objinfo(datasetid, ".", 1, &statbuf) < 0) ERR;
dimscale_obj[dimscale_cnt].fileno[0] = statbuf.fileno[0];
dimscale_obj[dimscale_cnt].objno[0] = statbuf.objno[0];
dimscale_obj[dimscale_cnt].fileno[1] = statbuf.fileno[1];
dimscale_obj[dimscale_cnt].objno[1] = statbuf.objno[1];
#endif
dimscale_cnt++;
}
else
@ -987,10 +1085,19 @@ main()
/* Verify that the object ids passed from the
* alien_visitor2 function match the ones we found
* for the lat and lon datasets. */
#if H5_VERSION_GE(1,12,0)
int token_cmp;
if (H5Otoken_cmp(datasetid,
&vars_dimscale_obj[d].token,
&dimscale_obj[d].token, &token_cmp) < 0) ERR;
if (vars_dimscale_obj[d].fileno != dimscale_obj[d].fileno ||
token_cmp != 0) ERR;
#else
if (vars_dimscale_obj[d].fileno[0] != dimscale_obj[d].fileno[0] ||
vars_dimscale_obj[d].objno[0] != dimscale_obj[d].objno[0]) ERR;
if (vars_dimscale_obj[d].fileno[1] != dimscale_obj[d].fileno[1] ||
vars_dimscale_obj[d].objno[1] != dimscale_obj[d].objno[1]) ERR;
#endif
}
}
if (H5Dclose(datasetid) < 0) ERR;

View File

@ -27,7 +27,6 @@ herr_t alien_visitor(hid_t did, unsigned dim, hid_t dsid,
void *visitor_data)
{
char name1[STR_LEN];
H5G_stat_t statbuf;
HDF5_OBJID_T *objid = visitor_data;
/* This should get "/var1", the name of the dataset that the scale
@ -36,27 +35,42 @@ herr_t alien_visitor(hid_t did, unsigned dim, hid_t dsid,
if (strcmp(&name1[1], VAR1_NAME)) ERR;
/* Get more info on the dimscale object.*/
#if H5_VERSION_GE(1,12,0)
H5O_info2_t statbuf;
if (H5Oget_info3(dsid, &statbuf, H5O_INFO_BASIC ) < 0) ERR;
objid->fileno = statbuf.fileno;
objid->token = statbuf.token;
#else
H5G_stat_t statbuf;
if (H5Gget_objinfo(dsid, ".", 1, &statbuf) < 0) ERR;
objid->fileno[0] = statbuf.fileno[0];
objid->objno[0] = statbuf.objno[0];
objid->fileno[1] = statbuf.fileno[1];
objid->objno[1] = statbuf.objno[1];
#endif
return 0;
}
herr_t alien_visitor2(hid_t did, unsigned dim, hid_t dsid, void *visitor_data)
{
H5G_stat_t statbuf;
HDF5_OBJID_T *objid = visitor_data;
/* Get obj id of the dimscale object. THis will be used later to
* match dimensions to dimscales. */
#if H5_VERSION_GE(1,12,0)
H5O_info2_t statbuf;
if (H5Oget_info3(dsid, &statbuf, H5O_INFO_BASIC ) < 0) ERR;
objid->fileno = statbuf.fileno;
objid->token = statbuf.token;
#else
H5G_stat_t statbuf;
if (H5Gget_objinfo(dsid, ".", 1, &statbuf) < 0) ERR;
objid->fileno[0] = statbuf.fileno[0];
objid->objno[0] = statbuf.objno[0];
objid->fileno[1] = statbuf.fileno[1];
objid->objno[1] = statbuf.objno[1];
#endif
return 0;
}
@ -111,7 +125,11 @@ main()
char label[STR_LEN+1];
int num_scales;
hsize_t dims[1], maxdims[1];
H5G_stat_t statbuf;
#if H5_VERSION_GE(1,12,0)
H5O_info2_t statbuf;
#else
H5G_stat_t statbuf;
#endif
HDF5_OBJID_T dimscale_obj, vars_dimscale_obj;
/* Open the file. */
@ -152,11 +170,17 @@ main()
/* fileno and objno uniquely identify an object and a
* HDF5 file. */
#if H5_VERSION_GE(1,12,0)
if (H5Oget_info3(datasetid, &statbuf, H5O_INFO_BASIC) < 0) ERR;
dimscale_obj.fileno = statbuf.fileno;
dimscale_obj.token = statbuf.token;
#else
if (H5Gget_objinfo(datasetid, ".", 1, &statbuf) < 0) ERR;
dimscale_obj.fileno[0] = statbuf.fileno[0];
dimscale_obj.objno[0] = statbuf.objno[0];
dimscale_obj.fileno[1] = statbuf.fileno[1];
dimscale_obj.objno[1] = statbuf.objno[1];
#endif
}
else
{
@ -168,11 +192,19 @@ main()
/* Go through all dimscales for this var and learn about them. */
if (H5DSiterate_scales(datasetid, 0, NULL, alien_visitor,
&vars_dimscale_obj) < 0) ERR;
#if H5_VERSION_GE(1,12,0)
int token_cmp;
if (H5Otoken_cmp(datasetid,
&vars_dimscale_obj.token,
&dimscale_obj.token, &token_cmp) < 0) ERR;
if (vars_dimscale_obj.fileno != dimscale_obj.fileno ||
token_cmp != 0) ERR;
#else
if (vars_dimscale_obj.fileno[0] != dimscale_obj.fileno[0] ||
vars_dimscale_obj.objno[0] != dimscale_obj.objno[0] ||
vars_dimscale_obj.fileno[1] != dimscale_obj.fileno[1] ||
vars_dimscale_obj.objno[1] != dimscale_obj.objno[1]) ERR;
#endif
/* There's also a label for dimension 0. */
if (H5DSget_label(datasetid, 0, label, STR_LEN) < 0) ERR;
}

View File

@ -36,15 +36,21 @@ struct nc_hdf5_link_info
herr_t alien_visitor(hid_t did, unsigned dim, hid_t dsid,
void *visitor_data)
{
H5G_stat_t statbuf;
HDF5_OBJID_T *objid = visitor_data;
/* Get more info on the dimscale object.*/
#if H5_VERSION_GE(1,12,0)
H5O_info2_t statbuf;
if (H5Oget_info3(dsid, &statbuf, H5O_INFO_BASIC ) < 0) ERR;
objid->fileno = statbuf.fileno;
objid->token = statbuf.token;
#else
if (H5Gget_objinfo(dsid, ".", 1, &statbuf) < 0) ERR;
objid->fileno[0] = statbuf.fileno[0];
objid->objno[0] = statbuf.objno[0];
objid->fileno[1] = statbuf.fileno[1];
objid->objno[1] = statbuf.objno[1];
#endif
return 0;
}

View File

@ -80,7 +80,11 @@ main()
free(data[i].p);
/* HDF5 allocated memory to store the data. Free that memory. */
#if H5_VERSION_GE(1,12,0)
if (H5Treclaim(typeid, spaceid, H5P_DEFAULT, data_in) < 0) ERR;
#else
if (H5Dvlen_reclaim(typeid, spaceid, H5P_DEFAULT, data_in) < 0) ERR;
#endif
/* Close everything. */
if (H5Aclose(attid) < 0 ||

View File

@ -18,9 +18,15 @@
* dimscales. */
typedef struct hdf5_objid
{
#if H5_VERSION_GE(1,12,0)
unsigned long fileno; /* file number */
H5O_token_t token; /* token */
#else
unsigned long fileno[2]; /* file number */
haddr_t objno[2]; /* object number */
#endif
} HDF5_OBJID_T;
#endif /* USE_HDF5 */
#endif

View File

@ -66,7 +66,11 @@ typedef struct hdf5_obj_info
{
hid_t oid; /* HDF5 object ID */
char oname[NC_MAX_NAME + 1]; /* Name of object */
H5G_stat_t statbuf; /* Information about the object */
#if H5_VERSION_GE(1,12,0)
H5O_info2_t statbuf;
#else
H5G_stat_t statbuf; /* Information about the object */
#endif
struct hdf5_obj_info *next; /* Pointer to next node in list */
} hdf5_obj_info_t;
@ -340,11 +344,22 @@ static herr_t
dimscale_visitor(hid_t did, unsigned dim, hid_t dsid,
void *dimscale_hdf5_objids)
{
H5G_stat_t statbuf;
LOG((4, "%s", __func__));
/* Get more info on the dimscale object.*/
#if H5_VERSION_GE(1,12,0)
H5O_info2_t statbuf;
if (H5Oget_info3(dsid, &statbuf, H5O_INFO_BASIC) < 0)
return -1;
/* Pass this information back to caller. */
(*(HDF5_OBJID_T *)dimscale_hdf5_objids).fileno = statbuf.fileno;
(*(HDF5_OBJID_T *)dimscale_hdf5_objids).token = statbuf.token;
#else
H5G_stat_t statbuf;
if (H5Gget_objinfo(dsid, ".", 1, &statbuf) < 0)
return -1;
@ -353,6 +368,7 @@ dimscale_visitor(hid_t did, unsigned dim, hid_t dsid,
(*(HDF5_OBJID_T *)dimscale_hdf5_objids).fileno[1] = statbuf.fileno[1];
(*(HDF5_OBJID_T *)dimscale_hdf5_objids).objno[0] = statbuf.objno[0];
(*(HDF5_OBJID_T *)dimscale_hdf5_objids).objno[1] = statbuf.objno[1];
#endif
return 0;
}
@ -570,10 +586,20 @@ rec_match_dimscales(NC_GRP_INFO_T *grp)
/* Check for exact match of fileno/objid arrays
* to find identical objects in HDF5 file. */
#if H5_VERSION_GE(1,12,0)
int token_cmp;
if (H5Otoken_cmp(hdf5_var->hdf_datasetid,
&hdf5_var->dimscale_hdf5_objids[d].token,
&hdf5_dim->hdf5_objid.token, &token_cmp) < 0)
return NC_EHDFERR;
if (hdf5_var->dimscale_hdf5_objids[d].fileno == hdf5_dim->hdf5_objid.fileno &&
token_cmp == 0)
#else
if (hdf5_var->dimscale_hdf5_objids[d].fileno[0] == hdf5_dim->hdf5_objid.fileno[0] &&
hdf5_var->dimscale_hdf5_objids[d].objno[0] == hdf5_dim->hdf5_objid.objno[0] &&
hdf5_var->dimscale_hdf5_objids[d].fileno[1] == hdf5_dim->hdf5_objid.fileno[1] &&
hdf5_var->dimscale_hdf5_objids[d].objno[1] == hdf5_dim->hdf5_objid.objno[1])
#endif
{
LOG((4, "%s: for dimension %d, found dim %s", __func__,
d, dim->hdr.name));
@ -2187,7 +2213,12 @@ nc4_read_atts(NC_GRP_INFO_T *grp, NC_VAR_INFO_T *var)
*/
static int
read_scale(NC_GRP_INFO_T *grp, hid_t datasetid, const char *obj_name,
const H5G_stat_t *statbuf, hsize_t scale_size,
#if H5_VERSION_GE(1,12,0)
const H5O_info2_t *statbuf,
#else
const H5G_stat_t *statbuf,
#endif
hsize_t scale_size,
hsize_t max_scale_size, NC_DIM_INFO_T **dim)
{
NC_DIM_INFO_T *new_dim; /* Dimension added to group */
@ -2243,12 +2274,17 @@ read_scale(NC_GRP_INFO_T *grp, hid_t datasetid, const char *obj_name,
dimscale_created++;
/* Remember these 4 values to uniquely identify this dataset in the
/* Remember these 4 (or 2 for HDF5 1.12) values to uniquely identify this dataset in the
* HDF5 file. */
#if H5_VERSION_GE(1,12,0)
new_hdf5_dim->hdf5_objid.fileno = statbuf->fileno;
new_hdf5_dim->hdf5_objid.token = statbuf->token;
#else
new_hdf5_dim->hdf5_objid.fileno[0] = statbuf->fileno[0];
new_hdf5_dim->hdf5_objid.fileno[1] = statbuf->fileno[1];
new_hdf5_dim->hdf5_objid.objno[0] = statbuf->objno[0];
new_hdf5_dim->hdf5_objid.objno[1] = statbuf->objno[1];
#endif
/* If the dimscale has an unlimited dimension, then this dimension
* is unlimited. */
@ -2319,7 +2355,12 @@ exit:
*/
static int
read_dataset(NC_GRP_INFO_T *grp, hid_t datasetid, const char *obj_name,
const H5G_stat_t *statbuf)
#if H5_VERSION_GE(1,12,0)
const H5O_info2_t *statbuf
#else
const H5G_stat_t *statbuf
#endif
)
{
NC_DIM_INFO_T *dim = NULL; /* Dimension created for scales */
NC_HDF5_DIM_INFO_T *hdf5_dim;
@ -2431,8 +2472,13 @@ read_hdf5_obj(hid_t grpid, const char *name, const H5L_info_t *info,
BAIL(H5_ITER_ERROR);
/* Get info about the object.*/
#if H5_VERSION_GE(1,12,0)
if (H5Oget_info3(oinfo.oid, &oinfo.statbuf, H5O_INFO_BASIC) < 0)
BAIL(H5_ITER_ERROR);
#else
if (H5Gget_objinfo(oinfo.oid, ".", 1, &oinfo.statbuf) < 0)
BAIL(H5_ITER_ERROR);
#endif
strncpy(oinfo.oname, name, NC_MAX_NAME);

View File

@ -2160,10 +2160,19 @@ nc4_rec_match_dimscales(NC_GRP_INFO_T *grp)
/* Check for exact match of fileno/objid arrays
* to find identical objects in HDF5 file. */
#if H5_VERSION_GE(1,12,0)
int token_cmp;
if (H5Otoken_cmp(hdf5_var->hdf_datasetid, &hdf5_var->dimscale_hdf5_objids[d].token, &hdf5_dim->hdf5_objid.token, &token_cmp) < 0)
return NC_EHDFERR;
if (hdf5_var->dimscale_hdf5_objids[d].fileno == hdf5_dim->hdf5_objid.fileno &&
token_cmp == 0)
#else
if (hdf5_var->dimscale_hdf5_objids[d].fileno[0] == hdf5_dim->hdf5_objid.fileno[0] &&
hdf5_var->dimscale_hdf5_objids[d].objno[0] == hdf5_dim->hdf5_objid.objno[0] &&
hdf5_var->dimscale_hdf5_objids[d].fileno[1] == hdf5_dim->hdf5_objid.fileno[1] &&
hdf5_var->dimscale_hdf5_objids[d].objno[1] == hdf5_dim->hdf5_objid.objno[1])
#endif
{
LOG((4, "%s: for dimension %d, found dim %s", __func__,
d, dim->hdr.name));