Added checks for native optional call support in some of the tools.
This commit is contained in:
@@ -663,7 +663,7 @@ done:
|
||||
/*---------------------------------------------------------------------------
|
||||
* Function: H5VLobject
|
||||
*
|
||||
* Purpose: Retrieve the object pointer associated with an hid_t for a.
|
||||
* Purpose: Retrieve the object pointer associated with an hid_t for a
|
||||
* VOL object.
|
||||
*
|
||||
* Note: This routine is mainly targeted toward unwrapping objects for
|
||||
|
||||
@@ -3110,7 +3110,7 @@ h5tools_print_fill_value(h5tools_str_t *buffer/*in,out*/, const h5tool_format_t
|
||||
*/
|
||||
void
|
||||
h5tools_dump_dcpl(FILE *stream, const h5tool_format_t *info,
|
||||
h5tools_context_t *ctx, hid_t dcpl_id, hid_t type_id, hid_t obj_id)
|
||||
h5tools_context_t *ctx, hid_t dcpl_id, hid_t type_id, hid_t dset_id)
|
||||
{
|
||||
int nfilters; /* number of filters */
|
||||
int rank; /* rank */
|
||||
@@ -3141,7 +3141,7 @@ h5tools_dump_dcpl(FILE *stream, const h5tool_format_t *info,
|
||||
if (info->line_ncols > 0)
|
||||
ncols = info->line_ncols;
|
||||
|
||||
storage_size = H5Dget_storage_size(obj_id);
|
||||
storage_size = H5Dget_storage_size(dset_id);
|
||||
nfilters = H5Pget_nfilters(dcpl_id);
|
||||
HDstrcpy(f_name,"\0");
|
||||
|
||||
@@ -3182,8 +3182,8 @@ h5tools_dump_dcpl(FILE *stream, const h5tool_format_t *info,
|
||||
double ratio = 0;
|
||||
int ok = 0;
|
||||
|
||||
hid_t tid = H5Dget_type(obj_id);
|
||||
hid_t sid = H5Dget_space(obj_id);
|
||||
hid_t tid = H5Dget_type(dset_id);
|
||||
hid_t sid = H5Dget_space(dset_id);
|
||||
size_t datum_size = H5Tget_size(tid);
|
||||
int ndims = H5Sget_simple_extent_dims(sid, dims, NULL);
|
||||
|
||||
@@ -3283,6 +3283,9 @@ h5tools_dump_dcpl(FILE *stream, const h5tool_format_t *info,
|
||||
}
|
||||
else {
|
||||
haddr_t ioffset;
|
||||
void *obj = NULL;
|
||||
hid_t connector_id = H5I_INVALID_HID;
|
||||
hbool_t supported = FALSE;
|
||||
|
||||
/* NORMAL FILE */
|
||||
|
||||
@@ -3298,21 +3301,26 @@ h5tools_dump_dcpl(FILE *stream, const h5tool_format_t *info,
|
||||
h5tools_str_append(&buffer,"SIZE " HSIZE_T_FORMAT, storage_size);
|
||||
h5tools_render_element(stream, info, ctx, &buffer, &curr_pos, (size_t) ncols, (hsize_t) 0, (hsize_t) 0);
|
||||
|
||||
ctx->need_prefix = TRUE;
|
||||
|
||||
/* NOTE: H5Dget_offset() is a native VOL connector optional
|
||||
* API call and will not work with arbitrary VOL
|
||||
* connectors. When unsupported, it will return
|
||||
* HADDR_UNDEF and the numerical value of this will
|
||||
* be printed.
|
||||
/* Only dump the offset if the VOL connector implements
|
||||
* the functionality.
|
||||
*/
|
||||
h5tools_str_reset(&buffer);
|
||||
ioffset = H5Dget_offset(obj_id);
|
||||
if (HADDR_UNDEF == ioffset)
|
||||
h5tools_str_append(&buffer, "OFFSET Undefined (HADDR_UNDEF)");
|
||||
else
|
||||
h5tools_str_append(&buffer, "OFFSET "H5_PRINTF_HADDR_FMT, ioffset);
|
||||
h5tools_render_element(stream, info, ctx, &buffer, &curr_pos, (size_t) ncols, (hsize_t) 0, (hsize_t) 0);
|
||||
obj = H5VLobject(dset_id);
|
||||
connector_id = H5VLget_connector_id(dset_id);
|
||||
H5VLintrospect_opt_query(obj, connector_id, H5VL_SUBCLS_DATASET, H5VL_NATIVE_DATASET_GET_OFFSET, &supported);
|
||||
H5VLclose(connector_id);
|
||||
|
||||
if (supported) {
|
||||
|
||||
ctx->need_prefix = TRUE;
|
||||
|
||||
h5tools_str_reset(&buffer);
|
||||
ioffset = H5Dget_offset(dset_id);
|
||||
if (HADDR_UNDEF == ioffset)
|
||||
h5tools_str_append(&buffer, "OFFSET Undefined (HADDR_UNDEF)");
|
||||
else
|
||||
h5tools_str_append(&buffer, "OFFSET "H5_PRINTF_HADDR_FMT, ioffset);
|
||||
h5tools_render_element(stream, info, ctx, &buffer, &curr_pos, (size_t) ncols, (hsize_t) 0, (hsize_t) 0);
|
||||
}
|
||||
}
|
||||
ctx->indent_level--;
|
||||
}
|
||||
@@ -3639,7 +3647,7 @@ h5tools_dump_dcpl(FILE *stream, const h5tool_format_t *info,
|
||||
break;
|
||||
case H5D_FILL_VALUE_USER_DEFINED:
|
||||
ctx->indent_level--;
|
||||
h5tools_print_fill_value(&buffer, info, ctx, dcpl_id, type_id, obj_id);
|
||||
h5tools_print_fill_value(&buffer, info, ctx, dcpl_id, type_id, dset_id);
|
||||
ctx->indent_level++;
|
||||
break;
|
||||
case H5D_FILL_VALUE_ERROR:
|
||||
@@ -3724,6 +3732,17 @@ h5tools_dump_comment(FILE *stream, const h5tool_format_t *info, h5tools_context_
|
||||
* instead of the current stripmine position i; this is necessary
|
||||
* to print the array indices
|
||||
*/
|
||||
void *obj = NULL;
|
||||
hid_t connector_id = H5I_INVALID_HID;
|
||||
hbool_t supported = FALSE;
|
||||
|
||||
/* Check if comments are supported and return if not */
|
||||
obj = H5VLobject(obj_id);
|
||||
connector_id = H5VLget_connector_id(obj_id);
|
||||
H5VLintrospect_opt_query(obj, connector_id, H5VL_SUBCLS_OBJECT, H5VL_NATIVE_OBJECT_GET_COMMENT, &supported);
|
||||
H5VLclose(connector_id);
|
||||
if (!supported)
|
||||
return;
|
||||
|
||||
/* setup */
|
||||
HDmemset(&buffer, 0, sizeof(h5tools_str_t));
|
||||
@@ -3733,8 +3752,7 @@ h5tools_dump_comment(FILE *stream, const h5tool_format_t *info, h5tools_context_
|
||||
|
||||
cmt_bufsize = H5Oget_comment(obj_id, comment, buf_size);
|
||||
|
||||
/* call H5Oget_comment again with the correct value.
|
||||
* If the call to H5Oget_comment returned an error, skip this block */
|
||||
/* call H5Oget_comment again with the correct value */
|
||||
if (cmt_bufsize > 0) {
|
||||
comment = (char *)HDmalloc((size_t)(cmt_bufsize+1)); /* new_size including null terminator */
|
||||
if(comment) {
|
||||
@@ -3749,7 +3767,7 @@ h5tools_dump_comment(FILE *stream, const h5tool_format_t *info, h5tools_context_
|
||||
h5tools_render_element(stream, info, ctx, &buffer, &curr_pos, (size_t)ncols, (hsize_t)0, (hsize_t)0);
|
||||
|
||||
h5tools_str_close(&buffer);
|
||||
} /* end if */
|
||||
}
|
||||
HDfree(comment);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1136,6 +1136,22 @@ dump_fcpl(hid_t fid)
|
||||
unsigned sym_ik; /* symbol table B-tree internal 'K' value */
|
||||
unsigned istore_ik; /* indexed storage B-tree internal 'K' value */
|
||||
|
||||
void *obj = NULL;
|
||||
hid_t connector_id = H5I_INVALID_HID;
|
||||
hbool_t supported = FALSE;
|
||||
|
||||
/* Dumping the information here only makes sense for the native
|
||||
* VOL connector. The only VOL call here is H5Fget_info(), so we'll
|
||||
* use that as a proxy for "native-ness". If that isn't supported, we'll
|
||||
* just return.
|
||||
*/
|
||||
obj = H5VLobject(fid);
|
||||
connector_id = H5VLget_connector_id(fid);
|
||||
H5VLintrospect_opt_query(obj, connector_id, H5VL_SUBCLS_FILE, H5VL_NATIVE_FILE_GET_INFO, &supported);
|
||||
H5VLclose(connector_id);
|
||||
if (!supported)
|
||||
return;
|
||||
|
||||
fcpl=H5Fget_create_plist(fid);
|
||||
H5Fget_info2(fid, &finfo);
|
||||
H5Pget_userblock(fcpl,&userblock);
|
||||
|
||||
@@ -2334,13 +2334,13 @@ list_obj(const char *name, const H5O_info2_t *oinfo, const char *first_seen, voi
|
||||
h5tools_render_element(rawoutstream, info, &ctx, &buffer, &curr_pos, (size_t)info->line_ncols, (hsize_t)0, (hsize_t)0);
|
||||
} /* end if */
|
||||
else {
|
||||
hid_t obj = H5I_INVALID_HID; /* ID of object opened */
|
||||
hid_t obj_id = H5I_INVALID_HID; /* ID of object opened */
|
||||
|
||||
/* Open the object. Not all objects can be opened. If this is the case
|
||||
* then return right away.
|
||||
*/
|
||||
H5TOOLS_DEBUG("Open object name=%s", name);
|
||||
if (obj_type >= 0 && (obj = H5Oopen(iter->fid, name, H5P_DEFAULT)) < 0) {
|
||||
if (obj_type >= 0 && (obj_id = H5Oopen(iter->fid, name, H5P_DEFAULT)) < 0) {
|
||||
h5tools_str_reset(&buffer);
|
||||
h5tools_str_append(&buffer, " *ERROR*\n");
|
||||
h5tools_render_element(rawoutstream, info, &ctx, &buffer, &curr_pos, (size_t)info->line_ncols, (hsize_t)0, (hsize_t)0);
|
||||
@@ -2350,7 +2350,7 @@ list_obj(const char *name, const H5O_info2_t *oinfo, const char *first_seen, voi
|
||||
/* List the first line of information for the object. */
|
||||
H5TOOLS_DEBUG("Object type:%d", obj_type);
|
||||
if (obj_type >= 0 && dispatch_g[obj_type].list1)
|
||||
(dispatch_g[obj_type].list1)(obj);
|
||||
(dispatch_g[obj_type].list1)(obj_id);
|
||||
if (!iter->symlink_target || (verbose_g > 0)) {
|
||||
h5tools_str_reset(&buffer);
|
||||
h5tools_str_append(&buffer, "\n");
|
||||
@@ -2364,14 +2364,17 @@ list_obj(const char *name, const H5O_info2_t *oinfo, const char *first_seen, voi
|
||||
char* comment = NULL;
|
||||
char* obj_tok_str = NULL;
|
||||
ssize_t cmt_bufsize = -1;
|
||||
void *obj = NULL;
|
||||
hid_t connector_id = H5I_INVALID_HID;
|
||||
hbool_t supported = FALSE;
|
||||
|
||||
/* Display attributes */
|
||||
H5TOOLS_DEBUG("Display attributes");
|
||||
if (obj_type >= 0)
|
||||
H5Aiterate2(obj, H5_INDEX_NAME, H5_ITER_INC, NULL, list_attr, NULL);
|
||||
H5Aiterate2(obj_id, H5_INDEX_NAME, H5_ITER_INC, NULL, list_attr, NULL);
|
||||
|
||||
/* Object location & reference count */
|
||||
H5Otoken_to_str(obj, &oinfo->token, &obj_tok_str);
|
||||
H5Otoken_to_str(obj_id, &oinfo->token, &obj_tok_str);
|
||||
|
||||
h5tools_str_reset(&buffer);
|
||||
h5tools_str_append(&buffer, " %-10s %lu:%s\n", "Location:", oinfo->fileno, obj_tok_str);
|
||||
@@ -2397,36 +2400,45 @@ list_obj(const char *name, const H5O_info2_t *oinfo, const char *first_seen, voi
|
||||
} /* end if */
|
||||
} /* end if */
|
||||
|
||||
/* Object comment */
|
||||
cmt_bufsize = H5Oget_comment(obj, comment, buf_size);
|
||||
/* Only emit comments if the VOL connector supports that */
|
||||
obj = H5VLobject(obj_id);
|
||||
connector_id = H5VLget_connector_id(obj_id);
|
||||
H5VLintrospect_opt_query(obj, connector_id, H5VL_SUBCLS_OBJECT, H5VL_NATIVE_OBJECT_GET_COMMENT, &supported);
|
||||
H5VLclose(connector_id);
|
||||
|
||||
/* if the actual length of the comment is longer than cmt_bufsize, then call
|
||||
* H5Oget_comment again with the correct value.
|
||||
* If the call to H5Oget_comment returned an error, skip this block */
|
||||
if (cmt_bufsize > 0) {
|
||||
comment = (char *)HDmalloc((size_t)cmt_bufsize + 1); /* new_size including null terminator */
|
||||
if (comment) {
|
||||
cmt_bufsize = H5Oget_comment(obj, comment, (size_t)cmt_bufsize);
|
||||
if (cmt_bufsize > 0) {
|
||||
comment[cmt_bufsize] = 0;
|
||||
h5tools_str_reset(&buffer);
|
||||
h5tools_str_append(&buffer, " %-10s \"", "Comment:");
|
||||
print_string(&buffer, comment, FALSE);
|
||||
h5tools_str_append(&buffer, "\"\n");
|
||||
h5tools_render_element(rawoutstream, info, &ctx, &buffer, &curr_pos, (size_t)info->line_ncols, (hsize_t)0, (hsize_t)0);
|
||||
} /* end if */
|
||||
HDfree(comment);
|
||||
if (supported) {
|
||||
|
||||
/* Object comment */
|
||||
cmt_bufsize = H5Oget_comment(obj_id, comment, buf_size);
|
||||
|
||||
/* if the actual length of the comment is longer than cmt_bufsize, then call
|
||||
* H5Oget_comment again with the correct value.
|
||||
*/
|
||||
if (cmt_bufsize > 0) {
|
||||
comment = (char *)HDmalloc((size_t)cmt_bufsize + 1); /* new_size including null terminator */
|
||||
if (comment) {
|
||||
cmt_bufsize = H5Oget_comment(obj_id, comment, (size_t)cmt_bufsize);
|
||||
if (cmt_bufsize > 0) {
|
||||
comment[cmt_bufsize] = 0;
|
||||
h5tools_str_reset(&buffer);
|
||||
h5tools_str_append(&buffer, " %-10s \"", "Comment:");
|
||||
print_string(&buffer, comment, FALSE);
|
||||
h5tools_str_append(&buffer, "\"\n");
|
||||
h5tools_render_element(rawoutstream, info, &ctx, &buffer, &curr_pos, (size_t)info->line_ncols, (hsize_t)0, (hsize_t)0);
|
||||
} /* end if */
|
||||
HDfree(comment);
|
||||
}
|
||||
}
|
||||
}
|
||||
} /* end if */
|
||||
|
||||
/* Detailed list for object */
|
||||
if (obj_type >= 0 && dispatch_g[obj_type].list2)
|
||||
(dispatch_g[obj_type].list2)(obj, name);
|
||||
(dispatch_g[obj_type].list2)(obj_id, name);
|
||||
|
||||
/* Close the object. */
|
||||
if (obj_type >= 0)
|
||||
H5Oclose(obj);
|
||||
H5Oclose(obj_id);
|
||||
} /* end else */
|
||||
|
||||
done:
|
||||
|
||||
Reference in New Issue
Block a user