summaryrefslogtreecommitdiffstats
path: root/src/H5system.c
diff options
context:
space:
mode:
authorDana Robinson <derobins@hdfgroup.org>2017-07-14 16:18:33 (GMT)
committerDana Robinson <derobins@hdfgroup.org>2017-07-14 16:18:33 (GMT)
commitd4234d0a98ff68eb55b3fa0d2246e61e53308e41 (patch)
tree64b4a153f36c7fbeaf7e160f1b614e9f0aca9ef0 /src/H5system.c
parent26390d02df919476ff3d293293dacbcaba9a4c24 (diff)
downloadhdf5-d4234d0a98ff68eb55b3fa0d2246e61e53308e41.zip
hdf5-d4234d0a98ff68eb55b3fa0d2246e61e53308e41.tar.gz
hdf5-d4234d0a98ff68eb55b3fa0d2246e61e53308e41.tar.bz2
Major rework of H5PL package code before bringing VOL changes
over. Brings coding standards in line with the rest of the library, enforces better software engineering principles, and makes everything more maintainable.
Diffstat (limited to 'src/H5system.c')
-rw-r--r--src/H5system.c50
1 files changed, 50 insertions, 0 deletions
diff --git a/src/H5system.c b/src/H5system.c
index 7e25540..1e718e7 100644
--- a/src/H5system.c
+++ b/src/H5system.c
@@ -1237,3 +1237,53 @@ H5_get_time(void)
} /* end H5_get_time() */
+#ifdef H5_HAVE_WIN32_API
+
+#define H5_WIN32_ENV_VAR_BUFFER_SIZE 32767
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5_expand_windows_env_vars()
+ *
+ * Purpose: Replaces windows environment variables of the form %foo%
+ * with user-specific values.
+ *
+ * Return: SUCCEED/FAIL
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5_expand_windows_env_vars(char **env_var)
+{
+ long n_chars = 0;
+ char *temp_buf = NULL;
+ herr_t ret_value = SUCCEED; /* Return value */
+
+ FUNC_ENTER_NOAPI_NOINIT
+
+ /* Allocate buffer for expanded environment variable string */
+ if (NULL == (temp_buf = (char *)H5MM_calloc((size_t)H5_WIN32_ENV_VAR_BUFFER_SIZE)))
+ HGOTO_ERROR(H5E_PLUGIN, H5E_CANTALLOC, FAIL, "can't allocate memory for expanded path")
+
+ /* Expand the environment variable string */
+ if ((n_chars = ExpandEnvironmentStringsA(*env_var, temp_buf, H5_WIN32_ENV_VAR_BUFFER_SIZE)) > H5_WIN32_ENV_VAR_BUFFER_SIZE) {
+ temp_buf = (char *)H5MM_xfree(temp_buf);
+ HGOTO_ERROR(H5E_PLUGIN, H5E_NOSPACE, FAIL, "expanded path is too long")
+ }
+
+ if (n_chars == 0) {
+ temp_buf = (char *)H5MM_xfree(temp_buf);
+ HGOTO_ERROR(H5E_PLUGIN, H5E_CANTGET, FAIL, "failed to expand path")
+ }
+
+ *env_var = (char *)H5MM_xfree(*env_var);
+ *env_var = temp_buf;
+
+done:
+ if (FAIL == ret_value && temp_buf)
+ temp_buf = (char *)H5MM_xfree(temp_buf);
+
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5_expand_windows_env_vars() */
+#endif /* H5_HAVE_WIN32_API */
+