summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAllen Byrne <50328838+byrnHDF@users.noreply.github.com>2023-08-02 16:28:36 (GMT)
committerGitHub <noreply@github.com>2023-08-02 16:28:36 (GMT)
commitd1cd849674c6e1c343930ca10b73d8170f20081e (patch)
tree52341c299d7da15a410c7b2b2d2d00a453498956 /src
parent2025610108c2757d17b02bfb2bf38a03f3206cf0 (diff)
downloadhdf5-d1cd849674c6e1c343930ca10b73d8170f20081e.zip
hdf5-d1cd849674c6e1c343930ca10b73d8170f20081e.tar.gz
hdf5-d1cd849674c6e1c343930ca10b73d8170f20081e.tar.bz2
Fix loading plugin fails with missing directory GH issue #3248 (#3325)
Diffstat (limited to 'src')
-rw-r--r--src/H5PLint.c36
-rw-r--r--src/H5PLpath.c8
-rw-r--r--src/H5PLplugin_cache.c4
-rw-r--r--src/H5PLpublic.h6
4 files changed, 39 insertions, 15 deletions
diff --git a/src/H5PLint.c b/src/H5PLint.c
index ff0be4e..6fbae7c 100644
--- a/src/H5PLint.c
+++ b/src/H5PLint.c
@@ -248,16 +248,22 @@ H5PL_load(H5PL_type_t type, H5PL_key_t key)
/* Search in the table of already loaded plugin libraries */
if (H5PL__find_plugin_in_cache(&search_params, &found, &plugin_info) < 0)
- HGOTO_ERROR(H5E_PLUGIN, H5E_CANTGET, NULL, "search in plugin cache failed")
+ HGOTO_ERROR(H5E_PLUGIN, H5E_CANTGET, NULL, "search in plugin cache failed")
/* If not found, try iterating through the path table to find an appropriate plugin */
if (!found)
if (H5PL__find_plugin_in_path_table(&search_params, &found, &plugin_info) < 0)
- HGOTO_ERROR(H5E_PLUGIN, H5E_CANTGET, NULL, "search in path table failed")
+ HGOTO_ERROR(H5E_PLUGIN, H5E_CANTGET, NULL,
+ "can't find plugin in the paths either set by HDF5_PLUGIN_PATH, or default location, "
+ "or set by H5PLxxx functions")
/* Set the return value we found the plugin */
if (found)
ret_value = plugin_info;
+ else
+ HGOTO_ERROR(H5E_PLUGIN, H5E_NOTFOUND, NULL,
+ "can't find plugin. Check either HDF5_PLUGIN_PATH, default location, "
+ "or path set by H5PLxxx functions")
done:
FUNC_LEAVE_NOAPI(ret_value)
@@ -268,9 +274,29 @@ done:
*
* Purpose: Opens a plugin.
*
- * The success parameter will be set to TRUE and the plugin_info
- * parameter will be filled in on success. Otherwise, they
- * will be FALSE and NULL, respectively.
+ * `path` specifies the path to the plugin library file.
+ *
+ * `type` specifies the type of plugin being searched for and
+ * will be used to verify that a loaded plugin matches the
+ * type requested. H5PL_TYPE_NONE may be passed, in which case
+ * no plugin type verification is performed. This is most
+ * useful when iterating over available plugins without regard
+ * to their types.
+ *
+ * `key` specifies the information that will be used to find a
+ * specific plugin. For filter plugins, this is typically an integer
+ * identifier. After a plugin has been opened, this information will
+ * be compared against the relevant information provided by the
+ * plugin to ensure that the plugin is a match. If
+ * H5PL_TYPE_NONE is provided for `type`, then `key` should be
+ * NULL.
+ *
+ * On successful open of a plugin, the `success` parameter
+ * will be set to TRUE and the `plugin_type` and `plugin_info`
+ * parameters will be filled appropriately. On failure, the
+ * `success` parameter will be set to FALSE, the `plugin_type`
+ * parameter will be set to H5PL_TYPE_ERROR and the
+ * `plugin_info` parameter will be set to NULL.
*
* Return: SUCCEED/FAIL
*
diff --git a/src/H5PLpath.c b/src/H5PLpath.c
index fc66448..f9626f5 100644
--- a/src/H5PLpath.c
+++ b/src/H5PLpath.c
@@ -583,8 +583,7 @@ H5PL__find_plugin_in_path_table(const H5PL_search_params_t *search_params, hbool
/* Search for the plugin in this path */
if (H5PL__find_plugin_in_path(search_params, found, H5PL_paths_g[u], plugin_info) < 0)
- HGOTO_ERROR(H5E_PLUGIN, H5E_CANTGET, FAIL, "search in path %s encountered an error",
- H5PL_paths_g[u])
+ HERROR(H5E_PLUGIN, H5E_CANTGET, "search in path %s encountered an error", H5PL_paths_g[u]);
/* Break out if found */
if (*found) {
@@ -636,7 +635,8 @@ H5PL__find_plugin_in_path(const H5PL_search_params_t *search_params, hbool_t *fo
/* Open the directory */
if (!(dirp = HDopendir(dir)))
- HGOTO_ERROR(H5E_PLUGIN, H5E_OPENERROR, FAIL, "can't open directory: %s", dir)
+ HGOTO_ERROR(H5E_PLUGIN, H5E_OPENERROR, FAIL, "can't open directory (%s). Please verify its existence",
+ dir)
/* Iterate through all entries in the directory */
while (NULL != (dp = HDreaddir(dirp))) {
@@ -714,7 +714,7 @@ H5PL__find_plugin_in_path(const H5PL_search_params_t *search_params, hbool_t *fo
*found = FALSE;
/* Specify a file mask. *.* = We want everything! */
- HDsprintf(service, "%s\\*.dll", dir);
+ HDsnprintf(service, sizeof(service), "%s\\*.dll", dir);
if ((hFind = FindFirstFileA(service, &fdFile)) == INVALID_HANDLE_VALUE)
HGOTO_ERROR(H5E_PLUGIN, H5E_OPENERROR, FAIL, "can't open directory")
diff --git a/src/H5PLplugin_cache.c b/src/H5PLplugin_cache.c
index 1d267a2..b48229c 100644
--- a/src/H5PLplugin_cache.c
+++ b/src/H5PLplugin_cache.c
@@ -286,9 +286,7 @@ H5PL__find_plugin_in_cache(const H5PL_search_params_t *search_params, hbool_t *f
/* No need to continue processing */
break;
-
- } /* end if */
-
+ }
} /* end for */
done:
diff --git a/src/H5PLpublic.h b/src/H5PLpublic.h
index f5332e6..31d4e4f 100644
--- a/src/H5PLpublic.h
+++ b/src/H5PLpublic.h
@@ -91,9 +91,9 @@ H5_DLL herr_t H5PLset_loading_state(unsigned int plugin_control_mask);
* \brief Queries the loadability of dynamic plugin types
*
* \param[out] plugin_control_mask List of dynamic plugin types that are enabled or disabled.\n
- * A plugin bit set to 0 (zero) indicates that that the dynamic plugin type is
+ * A plugin bit set to 0 (zero) indicates that the dynamic plugin type is
* disabled.\n
- * A plugin bit set to 1 (one) indicates that that the dynamic plugin type is
+ * A plugin bit set to 1 (one) indicates that the dynamic plugin type is
* enabled.\n
* If the value of \p plugin_control_mask is negative, all dynamic plugin
* types are enabled.\n
@@ -101,7 +101,7 @@ H5_DLL herr_t H5PLset_loading_state(unsigned int plugin_control_mask);
* are disabled.
* \return \herr_t
*
- * \details H5PLget_loading_state() retrieves the bitmask that controls whether a certain type of plugins
+ * \details H5PLget_loading_state() retrieves the bitmask that controls whether a certain type of plugin
* (e.g.: filters, VOL drivers) will be loaded by the HDF5 library.
*
* Bit positions allocated to date are specified in \ref H5PL_type_t as follows: