mirror of
https://github.com/HDFGroup/hdf5.git
synced 2025-02-17 16:10:24 +08:00
Added support for passing connector info strings via the command
line to the tools internals.
This commit is contained in:
parent
35c0d5cdfc
commit
d86089f583
@ -575,10 +575,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) {
|
||||
@ -604,6 +605,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:
|
||||
@ -628,6 +634,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:
|
||||
@ -635,10 +646,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");
|
||||
@ -658,44 +673,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;
|
||||
@ -887,9 +902,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)
|
||||
@ -912,9 +927,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)
|
||||
|
@ -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);
|
||||
|
@ -1418,9 +1418,9 @@ main(int argc, const char *argv[])
|
||||
h5tools_fapl_info_t fapl_info;
|
||||
|
||||
/* Currently, only retrieval of VFDs is supported. */
|
||||
fapl_info.type = VFD_BY_NAME;
|
||||
fapl_info.info = NULL;
|
||||
fapl_info.u.name = driver;
|
||||
fapl_info.type = VFD_BY_NAME;
|
||||
fapl_info.info_string = NULL;
|
||||
fapl_info.u.name = driver;
|
||||
|
||||
if (!HDstrcmp(driver, drivernames[ROS3_VFD_IDX])) {
|
||||
#ifdef H5_HAVE_ROS3_VFD
|
||||
|
@ -3151,9 +3151,9 @@ main(int argc, const char *argv[])
|
||||
h5tools_fapl_info_t fapl_info;
|
||||
|
||||
/* Currently, only retrieval of VFDs is supported. */
|
||||
fapl_info.type = VFD_BY_NAME;
|
||||
fapl_info.info = NULL;
|
||||
fapl_info.u.name = preferred_driver;
|
||||
fapl_info.type = VFD_BY_NAME;
|
||||
fapl_info.info_string = NULL;
|
||||
fapl_info.u.name = preferred_driver;
|
||||
|
||||
if (!HDstrcmp(preferred_driver, drivernames[ROS3_VFD_IDX])) {
|
||||
#ifdef H5_HAVE_ROS3_VFD
|
||||
|
@ -694,7 +694,7 @@ int parse_command_line(int argc, const char **argv, pack_opt_t* options)
|
||||
break;
|
||||
|
||||
case '3':
|
||||
in_vol_info.info = opt_arg;
|
||||
in_vol_info.info_string = opt_arg;
|
||||
break;
|
||||
|
||||
case '4':
|
||||
@ -710,7 +710,7 @@ int parse_command_line(int argc, const char **argv, pack_opt_t* options)
|
||||
break;
|
||||
|
||||
case '6':
|
||||
out_vol_info.info = opt_arg;
|
||||
out_vol_info.info_string = opt_arg;
|
||||
break;
|
||||
|
||||
default:
|
||||
|
@ -1816,9 +1816,9 @@ main(int argc, const char *argv[])
|
||||
h5tools_fapl_info_t fapl_info;
|
||||
|
||||
/* Currently, only retrieval of VFDs is supported. */
|
||||
fapl_info.type = VFD_BY_NAME;
|
||||
fapl_info.info = NULL;
|
||||
fapl_info.u.name = drivername;
|
||||
fapl_info.type = VFD_BY_NAME;
|
||||
fapl_info.info_string = NULL;
|
||||
fapl_info.u.name = drivername;
|
||||
|
||||
if (!HDstrcmp(drivername, drivernames[ROS3_VFD_IDX])) {
|
||||
#ifdef H5_HAVE_ROS3_VFD
|
||||
|
Loading…
Reference in New Issue
Block a user