summaryrefslogtreecommitdiffstats
path: root/tools/lib
diff options
context:
space:
mode:
Diffstat (limited to 'tools/lib')
-rw-r--r--tools/lib/h5tools.c55
-rw-r--r--tools/lib/h5tools.h4
2 files changed, 37 insertions, 22 deletions
diff --git a/tools/lib/h5tools.c b/tools/lib/h5tools.c
index 63f3baf..eab63ad 100644
--- a/tools/lib/h5tools.c
+++ b/tools/lib/h5tools.c
@@ -632,10 +632,11 @@ done:
*-------------------------------------------------------------------------
*/
static herr_t
-h5tools_set_vol_fapl(hid_t fapl, h5tools_fapl_info_t *fapl_info)
+h5tools_set_vol_fapl(hid_t fapl_id, h5tools_fapl_info_t *fapl_info)
{
htri_t connector_is_registered;
hid_t connector_id = H5I_INVALID_HID;
+ void *vol_info = NULL;
herr_t ret_value = SUCCEED;
switch (fapl_info->type) {
@@ -661,6 +662,11 @@ h5tools_set_vol_fapl(hid_t fapl, h5tools_fapl_info_t *fapl_info)
}
}
+ /* Convert the info string */
+ if (fapl_info->info_string)
+ if (H5VLconnector_str_to_info(fapl_info->info_string, connector_id, &vol_info) < 0)
+ H5TOOLS_GOTO_ERROR(FAIL, "can't get VOL info from string");
+
break;
case VOL_BY_ID:
@@ -685,6 +691,11 @@ h5tools_set_vol_fapl(hid_t fapl, h5tools_fapl_info_t *fapl_info)
}
}
+ /* Convert the info string */
+ if (fapl_info->info_string)
+ if (H5VLconnector_str_to_info(fapl_info->info_string, connector_id, &vol_info) < 0)
+ H5TOOLS_GOTO_ERROR(FAIL, "can't get VOL info from string");
+
break;
case VFD_BY_NAME:
@@ -692,10 +703,14 @@ h5tools_set_vol_fapl(hid_t fapl, h5tools_fapl_info_t *fapl_info)
H5TOOLS_GOTO_ERROR(FAIL, "invalid VOL retrieval type");
}
- if (H5Pset_vol(fapl, connector_id, fapl_info->info) < 0)
+ if (H5Pset_vol(fapl_id, connector_id, vol_info) < 0)
H5TOOLS_GOTO_ERROR(FAIL, "can't set VOL connector on FAPL");
done:
+ if (vol_info)
+ if (H5VLfree_connector_info(connector_id, vol_info))
+ H5TOOLS_ERROR(FAIL, "failed to free VOL connector-specific info");
+
if (ret_value < 0) {
if (connector_id >= 0 && H5Idec_ref(connector_id) < 0)
H5TOOLS_ERROR(FAIL, "failed to decrement refcount on VOL connector ID");
@@ -715,44 +730,44 @@ done:
*-------------------------------------------------------------------------
*/
hid_t
-h5tools_get_fapl(hid_t fapl, h5tools_fapl_info_t *fapl_info)
+h5tools_get_fapl(hid_t prev_fapl_id, h5tools_fapl_info_t *fapl_info)
{
- hid_t new_fapl = H5I_INVALID_HID;
+ hid_t new_fapl_id = H5I_INVALID_HID;
hid_t ret_value = H5I_INVALID_HID;
- if (fapl < 0)
+ if (prev_fapl_id < 0)
H5TOOLS_GOTO_ERROR(FAIL, "invalid FAPL");
if (!fapl_info)
H5TOOLS_GOTO_ERROR(FAIL, "invalid FAPL retrieval info");
/* Make a copy of the FAPL if necessary, or create a FAPL if
* H5P_DEFAULT is specified. */
- if (H5P_DEFAULT == fapl) {
- if ((new_fapl = H5Pcreate(H5P_FILE_ACCESS)) < 0)
+ if (H5P_DEFAULT == prev_fapl_id) {
+ if ((new_fapl_id = H5Pcreate(H5P_FILE_ACCESS)) < 0)
H5TOOLS_GOTO_ERROR(H5I_INVALID_HID, "H5Pcreate failed");
} /* end if */
else {
- if ((new_fapl = H5Pcopy(fapl)) < 0)
+ if ((new_fapl_id = H5Pcopy(prev_fapl_id)) < 0)
H5TOOLS_GOTO_ERROR(H5I_INVALID_HID, "H5Pcopy failed");
}
if (VFD_BY_NAME == fapl_info->type) {
- if (h5tools_set_vfd_fapl(new_fapl, fapl_info) < 0)
+ if (h5tools_set_vfd_fapl(new_fapl_id, fapl_info) < 0)
H5TOOLS_GOTO_ERROR(H5I_INVALID_HID, "failed to set VFD on FAPL");
}
else if (VOL_BY_NAME == fapl_info->type || VOL_BY_ID == fapl_info->type) {
- if (h5tools_set_vol_fapl(new_fapl, fapl_info) < 0)
+ if (h5tools_set_vol_fapl(new_fapl_id, fapl_info) < 0)
H5TOOLS_GOTO_ERROR(H5I_INVALID_HID, "failed to set VOL on FAPL");
}
else
H5TOOLS_GOTO_ERROR(H5I_INVALID_HID, "invalid FAPL retrieval type");
- ret_value = new_fapl;
+ ret_value = new_fapl_id;
done:
- if ((new_fapl >= 0) && (ret_value < 0)) {
- H5Pclose(new_fapl);
- new_fapl = H5I_INVALID_HID;
+ if ((new_fapl_id >= 0) && (ret_value < 0)) {
+ H5Pclose(new_fapl_id);
+ new_fapl_id = H5I_INVALID_HID;
}
return ret_value;
@@ -944,9 +959,9 @@ h5tools_fopen(const char *fname, unsigned flags, hid_t fapl, hbool_t use_specifi
for (volnum = 0; volnum < NUM_VOLS; volnum++) {
h5tools_fapl_info_t vol_info;
- vol_info.type = VOL_BY_NAME;
- vol_info.info = NULL;
- vol_info.u.name = volnames[volnum];
+ vol_info.type = VOL_BY_NAME;
+ vol_info.info_string = NULL;
+ vol_info.u.name = volnames[volnum];
/* Get a FAPL for the current VOL connector */
if ((tmp_vol_fapl = h5tools_get_fapl(fapl, &vol_info)) < 0)
@@ -969,9 +984,9 @@ h5tools_fopen(const char *fname, unsigned flags, hid_t fapl, hbool_t use_specifi
if (drivernum == LOG_VFD_IDX)
continue;
- vfd_info.type = VFD_BY_NAME;
- vfd_info.info = NULL;
- vfd_info.u.name = drivernames[drivernum];
+ vfd_info.type = VFD_BY_NAME;
+ vfd_info.info_string = NULL;
+ vfd_info.u.name = drivernames[drivernum];
/* Using the current VOL FAPL as a base, get the correct FAPL for the given VFL driver */
if ((tmp_vfd_fapl = h5tools_get_fapl(tmp_vol_fapl, &vfd_info)) < 0)
diff --git a/tools/lib/h5tools.h b/tools/lib/h5tools.h
index 5244f7be..fd09a14 100644
--- a/tools/lib/h5tools.h
+++ b/tools/lib/h5tools.h
@@ -549,7 +549,7 @@ typedef struct h5tools_fapl_info_t {
h5tools_fapl_info_type_t type;
/* Pointer to information to be passed to the driver/connector for its setup */
- const void *info;
+ const char *info_string;
/* Field specifying either the driver's/connector's name or ID */
union {
@@ -637,7 +637,7 @@ H5TOOLS_DLL int h5tools_set_attr_output_file(const char *fname, int is_bin);
H5TOOLS_DLL int h5tools_set_input_file(const char *fname, int is_bin);
H5TOOLS_DLL int h5tools_set_output_file(const char *fname, int is_bin);
H5TOOLS_DLL int h5tools_set_error_file(const char *fname, int is_bin);
-H5TOOLS_DLL hid_t h5tools_get_fapl(hid_t fapl, h5tools_fapl_info_t *fapl_info);
+H5TOOLS_DLL hid_t h5tools_get_fapl(hid_t prev_fapl_id, h5tools_fapl_info_t *fapl_info);
H5TOOLS_DLL herr_t h5tools_get_vfd_name(hid_t fapl_id, char *drivername, size_t drivername_size);
H5TOOLS_DLL hid_t h5tools_fopen(const char *fname, unsigned flags, hid_t fapl,
hbool_t use_specific_driver, char *drivername, size_t drivername_size);