summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDana Robinson <derobins@hdfgroup.org>2020-04-09 16:09:29 (GMT)
committerDana Robinson <derobins@hdfgroup.org>2020-04-09 16:09:29 (GMT)
commit7cf36ea7c3142b5246c102560ef439aef0a441c5 (patch)
treefe0787e69868cabeda229c90a521e8a2297eb681
parent0fdbbcfc0b7fe08421efe476e7cbe03411774fe0 (diff)
parentd86089f583382c0379f446a5e4d552599ed5b3b4 (diff)
downloadhdf5-7cf36ea7c3142b5246c102560ef439aef0a441c5.zip
hdf5-7cf36ea7c3142b5246c102560ef439aef0a441c5.tar.gz
hdf5-7cf36ea7c3142b5246c102560ef439aef0a441c5.tar.bz2
Merge pull request #2504 in HDFFV/hdf5 from ~DEROBINS/hdf5_der:develop_minor to develop
* commit 'd86089f583382c0379f446a5e4d552599ed5b3b4': Added support for passing connector info strings via the command line to the tools internals.
-rw-r--r--tools/lib/h5tools.c55
-rw-r--r--tools/lib/h5tools.h4
-rw-r--r--tools/src/h5dump/h5dump.c6
-rw-r--r--tools/src/h5ls/h5ls.c6
-rw-r--r--tools/src/h5repack/h5repack_main.c4
-rw-r--r--tools/src/h5stat/h5stat.c6
6 files changed, 48 insertions, 33 deletions
diff --git a/tools/lib/h5tools.c b/tools/lib/h5tools.c
index cd915f5..72f0dac 100644
--- a/tools/lib/h5tools.c
+++ b/tools/lib/h5tools.c
@@ -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)
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);
diff --git a/tools/src/h5dump/h5dump.c b/tools/src/h5dump/h5dump.c
index e49141d..457bdc0 100644
--- a/tools/src/h5dump/h5dump.c
+++ b/tools/src/h5dump/h5dump.c
@@ -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
diff --git a/tools/src/h5ls/h5ls.c b/tools/src/h5ls/h5ls.c
index 49f3bbf..eb86101 100644
--- a/tools/src/h5ls/h5ls.c
+++ b/tools/src/h5ls/h5ls.c
@@ -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
diff --git a/tools/src/h5repack/h5repack_main.c b/tools/src/h5repack/h5repack_main.c
index 1761fb4..5997449 100644
--- a/tools/src/h5repack/h5repack_main.c
+++ b/tools/src/h5repack/h5repack_main.c
@@ -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:
diff --git a/tools/src/h5stat/h5stat.c b/tools/src/h5stat/h5stat.c
index fdf49cd..aae5416 100644
--- a/tools/src/h5stat/h5stat.c
+++ b/tools/src/h5stat/h5stat.c
@@ -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