mirror of
https://github.com/HDFGroup/hdf5.git
synced 2024-12-15 07:40:23 +08:00
HDFFV-10143 change h5PLget to use buffer like H5Iget_name
This commit is contained in:
parent
cb222dded2
commit
09e76f7782
63
src/H5PL.c
63
src/H5PL.c
@ -428,19 +428,15 @@ H5PLappend(const char* plugin_path)
|
||||
if(NULL == plugin_path)
|
||||
HGOTO_ERROR(H5E_PLUGIN, H5E_CANTALLOC, FAIL, "no path provided")
|
||||
dl_path = H5MM_strdup(plugin_path);
|
||||
if(NULL == dl_path)
|
||||
if(NULL == (dl_path = H5MM_strdup(plugin_path)))
|
||||
HGOTO_ERROR(H5E_PLUGIN, H5E_CANTALLOC, FAIL, "can't allocate memory for path")
|
||||
|
||||
H5PL_EXPAND_ENV_VAR
|
||||
|
||||
H5PL_path_table_g[H5PL_num_paths_g] = dl_path;
|
||||
dl_path = NULL;
|
||||
H5PL_num_paths_g++;
|
||||
|
||||
done:
|
||||
if(dl_path)
|
||||
dl_path = (char *)H5MM_xfree(dl_path);
|
||||
|
||||
FUNC_LEAVE_API(ret_value)
|
||||
} /* end H5PLappend() */
|
||||
|
||||
@ -466,8 +462,7 @@ H5PLprepend(const char* plugin_path)
|
||||
HGOTO_ERROR(H5E_PLUGIN, H5E_NOSPACE, FAIL, "too many directories in path for table")
|
||||
if(NULL == plugin_path)
|
||||
HGOTO_ERROR(H5E_PLUGIN, H5E_CANTALLOC, FAIL, "no path provided")
|
||||
dl_path = H5MM_strdup(plugin_path);
|
||||
if(NULL == dl_path)
|
||||
if(NULL == (dl_path = H5MM_strdup(plugin_path)))
|
||||
HGOTO_ERROR(H5E_PLUGIN, H5E_CANTALLOC, FAIL, "can't allocate memory for path")
|
||||
|
||||
H5PL_EXPAND_ENV_VAR
|
||||
@ -475,13 +470,9 @@ H5PLprepend(const char* plugin_path)
|
||||
for (plindex = (unsigned int)H5PL_num_paths_g; plindex > 0; plindex--)
|
||||
H5PL_path_table_g[plindex] = H5PL_path_table_g[plindex - 1];
|
||||
H5PL_path_table_g[0] = dl_path;
|
||||
dl_path = NULL;
|
||||
H5PL_num_paths_g++;
|
||||
|
||||
done:
|
||||
if (dl_path)
|
||||
dl_path = (char *)H5MM_xfree(dl_path);
|
||||
|
||||
FUNC_LEAVE_API(ret_value)
|
||||
} /* end H5PLprepend() */
|
||||
|
||||
@ -504,8 +495,7 @@ H5PLreplace(const char* plugin_path, unsigned int index)
|
||||
FUNC_ENTER_API(FAIL)
|
||||
if(NULL == plugin_path)
|
||||
HGOTO_ERROR(H5E_PLUGIN, H5E_CANTALLOC, FAIL, "no path provided")
|
||||
dl_path = H5MM_strdup(plugin_path);
|
||||
if(NULL == dl_path)
|
||||
if(NULL == (dl_path = H5MM_strdup(plugin_path)))
|
||||
HGOTO_ERROR(H5E_PLUGIN, H5E_CANTALLOC, FAIL, "can't allocate memory for path")
|
||||
|
||||
H5PL_EXPAND_ENV_VAR
|
||||
@ -513,12 +503,8 @@ H5PLreplace(const char* plugin_path, unsigned int index)
|
||||
if(H5PL_path_table_g[index])
|
||||
H5PL_path_table_g[index] = (char *)H5MM_xfree(H5PL_path_table_g[index]);
|
||||
H5PL_path_table_g[index] = dl_path;
|
||||
dl_path = NULL;
|
||||
|
||||
done:
|
||||
if(dl_path)
|
||||
dl_path = (char *)H5MM_xfree(dl_path);
|
||||
|
||||
FUNC_LEAVE_API(ret_value)
|
||||
} /* end H5PLreplace() */
|
||||
|
||||
@ -544,8 +530,7 @@ H5PLinsert(const char* plugin_path, unsigned int index)
|
||||
HGOTO_ERROR(H5E_PLUGIN, H5E_NOSPACE, FAIL, "too many directories in path for table")
|
||||
if(NULL == plugin_path)
|
||||
HGOTO_ERROR(H5E_PLUGIN, H5E_CANTALLOC, FAIL, "no path provided")
|
||||
dl_path = H5MM_strdup(plugin_path);
|
||||
if(NULL == dl_path)
|
||||
if(NULL == (dl_path = H5MM_strdup(plugin_path)))
|
||||
HGOTO_ERROR(H5E_PLUGIN, H5E_CANTALLOC, FAIL, "can't allocate memory for path")
|
||||
|
||||
H5PL_EXPAND_ENV_VAR
|
||||
@ -553,13 +538,9 @@ H5PLinsert(const char* plugin_path, unsigned int index)
|
||||
for(plindex = (unsigned int)H5PL_num_paths_g; plindex > index; plindex--)
|
||||
H5PL_path_table_g[plindex] = H5PL_path_table_g[plindex - 1];
|
||||
H5PL_path_table_g[index] = dl_path;
|
||||
dl_path = NULL;
|
||||
H5PL_num_paths_g++;
|
||||
|
||||
done:
|
||||
if(dl_path)
|
||||
dl_path = (char *)H5MM_xfree(dl_path);
|
||||
|
||||
FUNC_LEAVE_API(ret_value)
|
||||
} /* end H5PLinsert() */
|
||||
|
||||
@ -602,20 +583,40 @@ done:
|
||||
*
|
||||
* Purpose: Query the plugin path at the specified index.
|
||||
*
|
||||
* Return: Non-NULL on success/NULL on failure
|
||||
* Return: Success: The length of path.
|
||||
*
|
||||
* If `pathname' is non-NULL then write up to `size' bytes into that
|
||||
* buffer and always return the length of the pathname.
|
||||
* Otherwise `size' is ignored and the function does not store the pathname,
|
||||
* just returning the number of characters required to store the pathname.
|
||||
* If an error occurs then the buffer pointed to by `pathname' (NULL or non-NULL)
|
||||
* is unchanged and the function returns a negative value.
|
||||
* If a zero is returned for the name's length, then there is no pathname
|
||||
* associated with the index.
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
const char*
|
||||
H5PLget(unsigned int index)
|
||||
ssize_t
|
||||
H5PLget(unsigned int index, char *pathname/*out*/, size_t size)
|
||||
{
|
||||
char* ret_value = NULL; /* Return value */
|
||||
ssize_t ret_value = FAIL; /* Return value */
|
||||
ssize_t len = 0; /* Length of pathname */
|
||||
char *dl_path = NULL;
|
||||
|
||||
FUNC_ENTER_API(NULL)
|
||||
FUNC_ENTER_API(FAIL)
|
||||
if(H5PL_num_paths_g == 0)
|
||||
HGOTO_ERROR(H5E_PLUGIN, H5E_NOSPACE, NULL, "no directories in table")
|
||||
if(NULL == (ret_value = H5PL_path_table_g[index]))
|
||||
HGOTO_ERROR(H5E_PLUGIN, H5E_CANTALLOC, NULL, "no directory path at index")
|
||||
HGOTO_ERROR(H5E_PLUGIN, H5E_NOSPACE, FAIL, "no directories in table")
|
||||
if(NULL == (dl_path = H5PL_path_table_g[index]))
|
||||
HGOTO_ERROR(H5E_PLUGIN, H5E_CANTALLOC, FAIL, "no directory path at index")
|
||||
len = HDstrlen(dl_path);
|
||||
if(pathname) {
|
||||
HDstrncpy(pathname, dl_path, MIN((size_t)(len + 1), size));
|
||||
if((size_t)len >= size)
|
||||
pathname[size - 1] = '\0';
|
||||
} /* end if */
|
||||
|
||||
/* Set return value */
|
||||
ret_value = len;
|
||||
|
||||
done:
|
||||
FUNC_LEAVE_API(ret_value)
|
||||
|
@ -49,7 +49,7 @@ H5_DLL herr_t H5PLprepend(const char* plugin_path);
|
||||
H5_DLL herr_t H5PLreplace(const char* plugin_path, unsigned int index);
|
||||
H5_DLL herr_t H5PLinsert(const char* plugin_path, unsigned int index);
|
||||
H5_DLL herr_t H5PLremove(unsigned int index);
|
||||
H5_DLL const char* H5PLget(unsigned int index);
|
||||
H5_DLL ssize_t H5PLget(unsigned int index, char *pathname/*out*/, size_t size);
|
||||
H5_DLL unsigned int H5PLsize(void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
@ -744,6 +744,7 @@ test_filter_path_apis(void)
|
||||
int i;
|
||||
unsigned int ndx;
|
||||
herr_t ret;
|
||||
int pathlen = -1;
|
||||
char pathname[256];
|
||||
|
||||
HDputs("Testing access to the filter path table");
|
||||
@ -801,18 +802,37 @@ test_filter_path_apis(void)
|
||||
TEST_ERROR
|
||||
PASSED();
|
||||
|
||||
TESTING(" get (bounds)");
|
||||
HDsprintf(pathname, "%s", H5PLget(0));
|
||||
TESTING(" get (path name)");
|
||||
if ((pathlen = H5PLget(0, NULL, 0)) <= 0) {
|
||||
HDfprintf(stderr," get path 0 length failed\n");
|
||||
TEST_ERROR
|
||||
}
|
||||
HDfprintf(stdout," get path 0 length %d\n", pathlen);
|
||||
if (pathlen != 8) {
|
||||
TEST_ERROR
|
||||
}
|
||||
if ((pathlen = H5PLget(0, pathname, 256)) <= 0) {
|
||||
HDfprintf(stderr," get 0 len: %d : %s\n", pathlen, pathname);
|
||||
TEST_ERROR
|
||||
}
|
||||
HDfprintf(stdout," get path 0 length %d\n", pathlen);
|
||||
if (strcmp(pathname, "a_path_0") != 0) {
|
||||
HDfprintf(stderr," get 0: %s\n", pathname);
|
||||
TEST_ERROR
|
||||
}
|
||||
HDsprintf(pathname, "%s", H5PLget(1));
|
||||
PASSED();
|
||||
|
||||
TESTING(" get (bounds)");
|
||||
if ((pathlen = H5PLget(1, pathname, 256)) <= 0)
|
||||
TEST_ERROR
|
||||
HDfprintf(stdout," get path 1 length %d\n", pathlen);
|
||||
if (strcmp(pathname, "a_path_1") != 0) {
|
||||
HDfprintf(stderr," get 1: %s\n", pathname);
|
||||
TEST_ERROR
|
||||
}
|
||||
HDsprintf(pathname, "%s", H5PLget(15));
|
||||
if ((pathlen = H5PLget(15, pathname, 256)) <= 0)
|
||||
TEST_ERROR
|
||||
HDfprintf(stdout," get path 15 length %d\n", pathlen);
|
||||
if (strcmp(pathname, "a_path_15") != 0) {
|
||||
HDfprintf(stderr," get 15: %s\n", pathname);
|
||||
TEST_ERROR
|
||||
@ -820,16 +840,19 @@ test_filter_path_apis(void)
|
||||
PASSED();
|
||||
|
||||
TESTING(" get (bounds exceed)");
|
||||
if (H5PLget(16) != NULL)
|
||||
if ((pathlen = H5PLget(16, NULL, 0)) > 0)
|
||||
TEST_ERROR
|
||||
PASSED();
|
||||
HDfprintf(stdout," get path 16 length %d\n", pathlen);
|
||||
|
||||
TESTING(" remove (verify for prepend)");
|
||||
/* Remove one path*/
|
||||
if (H5PLremove(8) < 0) TEST_ERROR
|
||||
|
||||
/* Verify that the entries were moved */
|
||||
HDsprintf(pathname, "%s", H5PLget(8));
|
||||
if ((pathlen = H5PLget(8, pathname, 256)) <= 0)
|
||||
TEST_ERROR
|
||||
HDfprintf(stdout," get path 8 length %d\n", pathlen);
|
||||
if (strcmp(pathname, "a_path_9") != 0) {
|
||||
HDfprintf(stderr," get 8: %s\n", pathname);
|
||||
TEST_ERROR
|
||||
@ -851,12 +874,14 @@ test_filter_path_apis(void)
|
||||
if (H5PLsize() != 16) TEST_ERROR
|
||||
|
||||
/* Verify that the entries were moved */
|
||||
HDsprintf(pathname, "%s", H5PLget(8));
|
||||
if (H5PLget(8, pathname, 256) <= 0)
|
||||
TEST_ERROR
|
||||
if (strcmp(pathname, "a_path_7") != 0) {
|
||||
HDfprintf(stderr," get 8: %s\n", pathname);
|
||||
TEST_ERROR
|
||||
}
|
||||
HDsprintf(pathname, "%s", H5PLget(0));
|
||||
if (H5PLget(0, pathname, 256) <= 0)
|
||||
TEST_ERROR
|
||||
if (strcmp(pathname, "a_path_17") != 0) {
|
||||
HDfprintf(stderr," get 0: %s\n", pathname);
|
||||
TEST_ERROR
|
||||
@ -885,12 +910,14 @@ test_filter_path_apis(void)
|
||||
if (H5PLsize() != 16) TEST_ERROR
|
||||
|
||||
/* Verify that the entries were not moved */
|
||||
HDsprintf(pathname, "%s", H5PLget(0));
|
||||
if (H5PLget(0, pathname, 256) <= 0)
|
||||
TEST_ERROR
|
||||
if (strcmp(pathname, "a_path_17") != 0) {
|
||||
HDfprintf(stderr," get 0: %s\n", pathname);
|
||||
TEST_ERROR
|
||||
}
|
||||
HDsprintf(pathname, "%s", H5PLget(2));
|
||||
if (H5PLget(2, pathname, 256) <= 0)
|
||||
TEST_ERROR
|
||||
if (strcmp(pathname, "a_path_1") != 0) {
|
||||
HDfprintf(stderr," get 2: %s\n", pathname);
|
||||
TEST_ERROR
|
||||
@ -902,7 +929,8 @@ test_filter_path_apis(void)
|
||||
if (H5PLremove(4) < 0) TEST_ERROR
|
||||
|
||||
/* Verify that the entries were moved */
|
||||
HDsprintf(pathname, "%s", H5PLget(4));
|
||||
if (H5PLget(4, pathname, 256) <= 0)
|
||||
TEST_ERROR
|
||||
if (strcmp(pathname, "a_path_4") != 0) {
|
||||
HDfprintf(stderr," get 4: %s\n", pathname);
|
||||
TEST_ERROR
|
||||
@ -921,7 +949,8 @@ test_filter_path_apis(void)
|
||||
}
|
||||
|
||||
/* Verify that the entries were moved */
|
||||
HDsprintf(pathname, "%s", H5PLget(4));
|
||||
if (H5PLget(4, pathname, 256) <= 0)
|
||||
TEST_ERROR
|
||||
if (strcmp(pathname, "a_path_2") != 0){
|
||||
HDfprintf(stderr," get 4: %s\n", pathname);
|
||||
TEST_ERROR
|
||||
|
Loading…
Reference in New Issue
Block a user