mirror of
https://github.com/Unidata/netcdf-c.git
synced 2025-02-17 16:50:18 +08:00
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:
parent
9f9b125028
commit
c5d2e99417
@ -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;
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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 ||
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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));
|
||||
|
Loading…
Reference in New Issue
Block a user