From bb80ae98543f80779ef726a20460b9b180b5cd2b Mon Sep 17 00:00:00 2001 From: Allen Byrne Date: Tue, 28 Mar 2017 13:35:49 -0500 Subject: HDFFV-10143 add APIs to manipulate plugin path table --- src/H5PL.c | 298 ++++++++++++++++++++++++++ src/H5PLpublic.h | 7 + test/plugin.c | 622 ++++++++++++++++++++++++++++++++++++------------------- 3 files changed, 712 insertions(+), 215 deletions(-) diff --git a/src/H5PL.c b/src/H5PL.c index 1f7bb2a..898e84b 100644 --- a/src/H5PL.c +++ b/src/H5PL.c @@ -390,6 +390,304 @@ done: /*------------------------------------------------------------------------- + * Function: H5PLappend + * + * Purpose: Insert a plugin path at the end of the list. + * + * Return: Non-negative or success. + * + *------------------------------------------------------------------------- + */ +herr_t +H5PLappend(char* plugin_path) +{ + herr_t ret_value = SUCCEED; /* Return value */ + char *dl_path = NULL; + + FUNC_ENTER_API(FAIL) + if(H5PL_num_paths_g == H5PL_MAX_PATH_NUM) + 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) + HGOTO_ERROR(H5E_PLUGIN, H5E_CANTALLOC, FAIL, "can't allocate memory for path") +#ifdef H5_HAVE_WIN32_API + else { /* Expand windows env var*/ + long bufCharCount; + char *tempbuf; + if(NULL == (tempbuf = (char *)H5MM_malloc(H5PL_EXPAND_BUFFER_SIZE))) + HGOTO_ERROR(H5E_PLUGIN, H5E_CANTALLOC, FAIL, "can't allocate memory for expanded path") + if((bufCharCount = ExpandEnvironmentStrings(dl_path, tempbuf, H5PL_EXPAND_BUFFER_SIZE)) > H5PL_EXPAND_BUFFER_SIZE) { + tempbuf = (char *)H5MM_xfree(tempbuf); + HGOTO_ERROR(H5E_PLUGIN, H5E_NOSPACE, FAIL, "expanded path is too long") + } + if(bufCharCount == 0) { + tempbuf = (char *)H5MM_xfree(tempbuf); + HGOTO_ERROR(H5E_PLUGIN, H5E_CANTGET, FAIL, "failed to expand path") + } + dl_path = (char *)H5MM_xfree(dl_path); + dl_path = H5MM_strdup(tempbuf); + tempbuf = (char *)H5MM_xfree(tempbuf); + } +#endif /* H5_HAVE_WIN32_API */ + if(NULL == (H5PL_path_table_g[H5PL_num_paths_g] = H5MM_strdup(dl_path))) + HGOTO_ERROR(H5E_PLUGIN, H5E_CANTALLOC, FAIL, "can't allocate memory for path") + H5PL_num_paths_g++; + +done: + if(dl_path) + dl_path = (char *)H5MM_xfree(dl_path); + + FUNC_LEAVE_API(ret_value) +} /* end H5PLappend() */ + + +/*------------------------------------------------------------------------- + * Function: H5PLprepend + * + * Purpose: Insert a plugin path at the beginning of the list. + * + * Return: Non-negative or success. + * + *------------------------------------------------------------------------- + */ +herr_t +H5PLprepend(char* plugin_path) +{ + herr_t ret_value = SUCCEED; /* Return value */ + char *dl_path = NULL; + unsigned int plindex; + + FUNC_ENTER_API(FAIL) + if(H5PL_num_paths_g == H5PL_MAX_PATH_NUM) + 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) + HGOTO_ERROR(H5E_PLUGIN, H5E_CANTALLOC, FAIL, "can't allocate memory for path") +#ifdef H5_HAVE_WIN32_API + else { /* Expand windows env var*/ + long bufCharCount; + char *tempbuf; + if (NULL == (tempbuf = (char *)H5MM_malloc(H5PL_EXPAND_BUFFER_SIZE))) + HGOTO_ERROR(H5E_PLUGIN, H5E_CANTALLOC, FAIL, "can't allocate memory for expanded path") + if ((bufCharCount = ExpandEnvironmentStrings(dl_path, tempbuf, H5PL_EXPAND_BUFFER_SIZE)) > H5PL_EXPAND_BUFFER_SIZE) { + tempbuf = (char *)H5MM_xfree(tempbuf); + HGOTO_ERROR(H5E_PLUGIN, H5E_NOSPACE, FAIL, "expanded path is too long") + } + if (bufCharCount == 0) { + tempbuf = (char *)H5MM_xfree(tempbuf); + HGOTO_ERROR(H5E_PLUGIN, H5E_CANTGET, FAIL, "failed to expand path") + } + dl_path = (char *)H5MM_xfree(dl_path); + dl_path = H5MM_strdup(tempbuf); + tempbuf = (char *)H5MM_xfree(tempbuf); + } +#endif /* H5_HAVE_WIN32_API */ + for (plindex = (unsigned int)H5PL_num_paths_g; plindex > 0; plindex--) + H5PL_path_table_g[plindex] = H5PL_path_table_g[plindex - 1]; + if (NULL == (H5PL_path_table_g[0] = H5MM_strdup(dl_path))) + HGOTO_ERROR(H5E_PLUGIN, H5E_CANTALLOC, FAIL, "can't allocate memory for path") + H5PL_num_paths_g++; + +done: + if (dl_path) + dl_path = (char *)H5MM_xfree(dl_path); + + FUNC_LEAVE_API(ret_value) +} /* end H5PLprepend() */ + + +/*------------------------------------------------------------------------- + * Function: H5PLput + * + * Purpose: Replace the path at the specified index. + * + * Return: Non-negative or success. + * + *------------------------------------------------------------------------- + */ +herr_t +H5PLput(char* plugin_path, unsigned int index) +{ + herr_t ret_value = SUCCEED; /* Return value */ + char *dl_path = NULL; + + 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) + HGOTO_ERROR(H5E_PLUGIN, H5E_CANTALLOC, FAIL, "can't allocate memory for path") +#ifdef H5_HAVE_WIN32_API + else { /* Expand windows env var*/ + long bufCharCount; + char *tempbuf; + if(NULL == (tempbuf = (char *)H5MM_malloc(H5PL_EXPAND_BUFFER_SIZE))) + HGOTO_ERROR(H5E_PLUGIN, H5E_CANTALLOC, FAIL, "can't allocate memory for expanded path") + if((bufCharCount = ExpandEnvironmentStrings(dl_path, tempbuf, H5PL_EXPAND_BUFFER_SIZE)) > H5PL_EXPAND_BUFFER_SIZE) { + tempbuf = (char *)H5MM_xfree(tempbuf); + HGOTO_ERROR(H5E_PLUGIN, H5E_NOSPACE, FAIL, "expanded path is too long") + } + if(bufCharCount == 0) { + tempbuf = (char *)H5MM_xfree(tempbuf); + HGOTO_ERROR(H5E_PLUGIN, H5E_CANTGET, FAIL, "failed to expand path") + } + dl_path = (char *)H5MM_xfree(dl_path); + dl_path = H5MM_strdup(tempbuf); + tempbuf = (char *)H5MM_xfree(tempbuf); + } +#endif /* H5_HAVE_WIN32_API */ + if(H5PL_path_table_g[index]) + H5PL_path_table_g[index] = (char *)H5MM_xfree(H5PL_path_table_g[index]); + if(NULL == (H5PL_path_table_g[index] = H5MM_strdup(dl_path))) + HGOTO_ERROR(H5E_PLUGIN, H5E_CANTALLOC, FAIL, "can't allocate memory for path") + +done: + if(dl_path) + dl_path = (char *)H5MM_xfree(dl_path); + + FUNC_LEAVE_API(ret_value) +} /* end H5PLput() */ + + +/*------------------------------------------------------------------------- + * Function: H5PLinsert + * + * Purpose: Insert a plugin path at the specified index, moving other paths after the index. + * + * Return: Non-negative or success. + * + *------------------------------------------------------------------------- + */ +herr_t +H5PLinsert(char* plugin_path, unsigned int index) +{ + herr_t ret_value = SUCCEED; /* Return value */ + char *dl_path = NULL; + unsigned int plindex; + + FUNC_ENTER_API(FAIL) + if(H5PL_num_paths_g == H5PL_MAX_PATH_NUM) + 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) + HGOTO_ERROR(H5E_PLUGIN, H5E_CANTALLOC, FAIL, "can't allocate memory for path") +#ifdef H5_HAVE_WIN32_API + else { /* Expand windows env var*/ + long bufCharCount; + char *tempbuf; + if(NULL == (tempbuf = (char *)H5MM_malloc(H5PL_EXPAND_BUFFER_SIZE))) + HGOTO_ERROR(H5E_PLUGIN, H5E_CANTALLOC, FAIL, "can't allocate memory for expanded path") + if((bufCharCount = ExpandEnvironmentStrings(dl_path, tempbuf, H5PL_EXPAND_BUFFER_SIZE)) > H5PL_EXPAND_BUFFER_SIZE) { + tempbuf = (char *)H5MM_xfree(tempbuf); + HGOTO_ERROR(H5E_PLUGIN, H5E_NOSPACE, FAIL, "expanded path is too long") + } + if(bufCharCount == 0) { + tempbuf = (char *)H5MM_xfree(tempbuf); + HGOTO_ERROR(H5E_PLUGIN, H5E_CANTGET, FAIL, "failed to expand path") + } + dl_path = (char *)H5MM_xfree(dl_path); + dl_path = H5MM_strdup(tempbuf); + tempbuf = (char *)H5MM_xfree(tempbuf); + } +#endif /* H5_HAVE_WIN32_API */ + for(plindex = (unsigned int)H5PL_num_paths_g; plindex > index; plindex--) + H5PL_path_table_g[plindex] = H5PL_path_table_g[plindex - 1]; + if(NULL == (H5PL_path_table_g[index] = H5MM_strdup(dl_path))) + HGOTO_ERROR(H5E_PLUGIN, H5E_CANTALLOC, FAIL, "can't allocate memory for path") + H5PL_num_paths_g++; + +done: + if(dl_path) + dl_path = (char *)H5MM_xfree(dl_path); + + FUNC_LEAVE_API(ret_value) +} /* end H5PLinsert() */ + + +/*------------------------------------------------------------------------- + * Function: H5PLremove + * + * Purpose: Remove the plugin path at the specifed index and compacting the list. + * + * Return: Non-negative or success. + * + *------------------------------------------------------------------------- + */ +herr_t +H5PLremove(unsigned int index) +{ + herr_t ret_value = SUCCEED; /* Return value */ + char *dl_path = NULL; + unsigned int plindex; + + FUNC_ENTER_API(FAIL) + if(H5PL_num_paths_g == 0) + 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") + for(plindex = index; plindex < (unsigned int)H5PL_num_paths_g; plindex++) + H5PL_path_table_g[plindex] = H5PL_path_table_g[plindex + 1]; + if(H5PL_path_table_g[plindex]) + dl_path = (char *)H5MM_xfree(dl_path); + H5PL_num_paths_g--; + H5PL_path_table_g[H5PL_num_paths_g] = NULL; + +done: + if(dl_path) + dl_path = (char *)H5MM_xfree(dl_path); + + FUNC_LEAVE_API(ret_value) +} /* end H5PLremove() */ + + +/*------------------------------------------------------------------------- + * Function: H5PLget + * + * Purpose: Query the plugin path at the specified index. + * + * Return: Non-NULL on success/NULL on failure + * + *------------------------------------------------------------------------- + */ +const char* +H5PLget(unsigned int index) +{ + char* ret_value = NULL; /* Return value */ + + FUNC_ENTER_API(NULL) + if(H5PL_num_paths_g == 0) + HGOTO_ERROR(H5E_PLUGIN, H5E_NOSPACE, FAIL, "no directories in table") + if(NULL == (ret_value = H5PL_path_table_g[index])) + HGOTO_ERROR(H5E_PLUGIN, H5E_CANTALLOC, FAIL, "no directory path at index") + +done: + FUNC_LEAVE_API(ret_value) +} /* end H5PLget() */ + + +/*------------------------------------------------------------------------- + * Function: H5PLsize + * + * Purpose: Query the size of the current list of plugin paths. + * + * Return: Non-negative or success. + * + *------------------------------------------------------------------------- + */ +unsigned int +H5PLsize(void) +{ + return (unsigned int)H5PL_num_paths_g; +} /* end H5PLsize() */ + + +/*------------------------------------------------------------------------- * Function: H5PL__init_path_table * * Purpose: Initialize the path table. diff --git a/src/H5PLpublic.h b/src/H5PLpublic.h index 0528945..f3fe497 100644 --- a/src/H5PLpublic.h +++ b/src/H5PLpublic.h @@ -44,6 +44,13 @@ extern "C" { /* plugin state */ H5_DLL herr_t H5PLset_loading_state(unsigned int plugin_type); H5_DLL herr_t H5PLget_loading_state(unsigned int* plugin_type/*out*/); +H5_DLL herr_t H5PLappend(char* plugin_path); +H5_DLL herr_t H5PLprepend(char* plugin_path); +H5_DLL herr_t H5PLput(char* plugin_path, unsigned int index); +H5_DLL herr_t H5PLinsert(char* plugin_path, unsigned int index); +H5_DLL herr_t H5PLremove(unsigned int index); +H5_DLL const char* H5PLget(unsigned int index); +H5_DLL unsigned int H5PLsize(void); #ifdef __cplusplus } diff --git a/test/plugin.c b/test/plugin.c index a70e885..1d55a5d 100644 --- a/test/plugin.c +++ b/test/plugin.c @@ -12,10 +12,10 @@ * to either file, you may request a copy from help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* - * Programmer: Raymond Lu - * 13 February 2013 + * Programmer: Raymond Lu + * 13 February 2013 * - * Purpose: Tests the plugin module (H5PL) + * Purpose: Tests the plugin module (H5PL) */ #include "h5test.h" @@ -29,7 +29,7 @@ /* Filters for HDF5 internal test */ #define H5Z_FILTER_DYNLIB1 257 -#define H5Z_FILTER_DYNLIB2 258 +#define H5Z_FILTER_DYNLIB2 258 #define H5Z_FILTER_DYNLIB3 259 #define H5Z_FILTER_DYNLIB4 260 @@ -40,8 +40,8 @@ const char *FILENAME[] = { #define FILENAME_BUF_SIZE 1024 /* Dataset names for testing filters */ -#define DSET_DEFLATE_NAME "deflate" -#define DSET_DYNLIB1_NAME "dynlib1" +#define DSET_DEFLATE_NAME "deflate" +#define DSET_DYNLIB1_NAME "dynlib1" #define DSET_DYNLIB2_NAME "dynlib2" #define DSET_DYNLIB4_NAME "dynlib4" @@ -62,7 +62,7 @@ const char *FILENAME[] = { #define GROUP_ITERATION 1000 -int points_deflate[DSET_DIM1][DSET_DIM2], +int points_deflate[DSET_DIM1][DSET_DIM2], points_dynlib1[DSET_DIM1][DSET_DIM2], points_dynlib2[DSET_DIM1][DSET_DIM2], points_dynlib4[DSET_DIM1][DSET_DIM2], @@ -70,14 +70,14 @@ int points_deflate[DSET_DIM1][DSET_DIM2], /*------------------------------------------------------------------------- - * Function: test_filter_internal + * Function: test_filter_internal * - * Purpose: Tests writing entire data and partial data with filters + * Purpose: Tests writing entire data and partial data with filters * - * Return: Success: 0 - * Failure: -1 + * Return: Success: 0 + * Failure: -1 * - * Programmer: Raymond Lu + * Programmer: Raymond Lu * 27 February 2013 * *------------------------------------------------------------------------- @@ -85,28 +85,28 @@ int points_deflate[DSET_DIM1][DSET_DIM2], static herr_t test_filter_internal(hid_t fid, const char *name, hid_t dcpl) { - hid_t dataset; /* Dataset ID */ - hid_t dxpl; /* Dataset xfer property list ID */ - hid_t write_dxpl; /* Dataset xfer property list ID for writing */ - hid_t sid; /* Dataspace ID */ - const hsize_t size[2] = {DSET_DIM1, DSET_DIM2}; /* Dataspace dimensions */ - const hsize_t hs_offset[2] = {FILTER_HS_OFFSET1, FILTER_HS_OFFSET2}; /* Hyperslab offset */ - const hsize_t hs_size[2] = {FILTER_HS_SIZE1, FILTER_HS_SIZE2}; /* Hyperslab size */ - void *tconv_buf = NULL; /* Temporary conversion buffer */ - int points[DSET_DIM1][DSET_DIM2], check[DSET_DIM1][DSET_DIM2]; - size_t i, j; /* Local index variables */ + hid_t dataset; /* Dataset ID */ + hid_t dxpl; /* Dataset xfer property list ID */ + hid_t write_dxpl; /* Dataset xfer property list ID for writing */ + hid_t sid; /* Dataspace ID */ + const hsize_t size[2] = {DSET_DIM1, DSET_DIM2}; /* Dataspace dimensions */ + const hsize_t hs_offset[2] = {FILTER_HS_OFFSET1, FILTER_HS_OFFSET2}; /* Hyperslab offset */ + const hsize_t hs_size[2] = {FILTER_HS_SIZE1, FILTER_HS_SIZE2}; /* Hyperslab size */ + void *tconv_buf = NULL; /* Temporary conversion buffer */ + int points[DSET_DIM1][DSET_DIM2], check[DSET_DIM1][DSET_DIM2]; + size_t i, j; /* Local index variables */ int n = 0; /* Create the data space */ - if((sid = H5Screate_simple(2, size, NULL)) < 0) goto error; + if((sid = H5Screate_simple(2, size, NULL)) < 0) TEST_ERROR /* * Create a small conversion buffer to test strip mining. We * might as well test all we can! */ - if((dxpl = H5Pcreate(H5P_DATASET_XFER)) < 0) goto error; + if((dxpl = H5Pcreate(H5P_DATASET_XFER)) < 0) TEST_ERROR tconv_buf = HDmalloc((size_t)1000); - if(H5Pset_buffer(dxpl, (size_t)1000, tconv_buf, NULL) < 0) goto error; + if(H5Pset_buffer(dxpl, (size_t)1000, tconv_buf, NULL) < 0) TEST_ERROR if((write_dxpl = H5Pcopy(dxpl)) < 0) TEST_ERROR; TESTING(" filters (setup)"); @@ -115,12 +115,12 @@ test_filter_internal(hid_t fid, const char *name, hid_t dcpl) if(H5Pall_filters_avail(dcpl)!=TRUE) { H5_FAILED(); printf(" Line %d: Incorrect filter availability\n",__LINE__); - goto error; + TEST_ERROR } /* end if */ /* Create the dataset */ if((dataset = H5Dcreate2(fid, name, H5T_NATIVE_INT, sid, H5P_DEFAULT, - dcpl, H5P_DEFAULT)) < 0) goto error; + dcpl, H5P_DEFAULT)) < 0) TEST_ERROR PASSED(); @@ -131,18 +131,18 @@ test_filter_internal(hid_t fid, const char *name, hid_t dcpl) TESTING(" filters (uninitialized read)"); if(H5Dread(dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, dxpl, check) < 0) - TEST_ERROR; + TEST_ERROR; for(i=0; i<(size_t)size[0]; i++) { - for(j=0; j<(size_t)size[1]; j++) { - if(0!=check[i][j]) { - H5_FAILED(); - printf(" Read a non-zero value.\n"); - printf(" At index %lu,%lu\n", - (unsigned long)i, (unsigned long)j); - goto error; - } - } + for(j=0; j<(size_t)size[1]; j++) { + if(0!=check[i][j]) { + H5_FAILED(); + printf(" Read a non-zero value.\n"); + printf(" At index %lu,%lu\n", + (unsigned long)i, (unsigned long)j); + TEST_ERROR + } + } } PASSED(); @@ -155,13 +155,13 @@ test_filter_internal(hid_t fid, const char *name, hid_t dcpl) n = 0; for(i=0; i 0; i--) { + if (H5PLremove(i-1) < 0) { + fprintf(stderr," at %d: %s\n", i, pathname); + TEST_ERROR + } + } + /* Verify the table is empty */ + if (H5PLsize() > 0) TEST_ERROR + PASSED(); + + TESTING(" remove (exceed)"); + /* Exceed the min path removal */ + H5E_BEGIN_TRY { + ret = H5PLremove(0); + } H5E_END_TRY + if (ret >= 0) + TEST_ERROR + PASSED(); + TESTING(" append"); + /* Create multiple paths to fill table */ + for (i=0; i < 16; i++) { + sprintf(pathname, "a_path_%d", i); + if (H5PLappend(pathname) < 0) { + fprintf(stderr," at %d: %s\n", i, pathname); + TEST_ERROR + } + } + /* Verify the table is full */ + if (H5PLsize() != 16) TEST_ERROR + PASSED(); + + TESTING(" append (exceed)"); + /* Exceed the max path append */ + H5E_BEGIN_TRY { + sprintf(pathname, "a_path_%d", 16); + ret = H5PLappend(pathname); + } H5E_END_TRY + if (ret >= 0) + TEST_ERROR + PASSED(); + + TESTING(" remove (verify for prepend)"); + /* Remove one path*/ + if (H5PLremove(8) < 0) TEST_ERROR + + /* Verify that the entries were moved */ + sprintf(pathname, "%s", H5PLget(8)); + if (strcmp(pathname, "a_path_9") != 0) { + fprintf(stderr," get 8: %s\n", pathname); + TEST_ERROR + } + PASSED(); + + /* Verify the table is not full */ + if (H5PLsize() != 15) TEST_ERROR + + TESTING(" prepend"); + /* Prepend one path*/ + sprintf(pathname, "a_path_%d", 17); + if (H5PLprepend(pathname) < 0) { + fprintf(stderr," prepend 17: %s\n", pathname); + TEST_ERROR + } + + /* Verify the table is full */ + if (H5PLsize() != 16) TEST_ERROR + + /* Verify that the entries were moved */ + sprintf(pathname, "%s", H5PLget(8)); + if (strcmp(pathname, "a_path_7") != 0) { + fprintf(stderr," get 8: %s\n", pathname); + TEST_ERROR + } + sprintf(pathname, "%s", H5PLget(0)); + if (strcmp(pathname, "a_path_17") != 0) { + fprintf(stderr," get 0: %s\n", pathname); + TEST_ERROR + } + PASSED(); + + TESTING(" prepend (exceed)"); + /* Exceed the max path prepend */ + H5E_BEGIN_TRY { + sprintf(pathname, "a_path_%d", 18); + ret = H5PLprepend(pathname); + } H5E_END_TRY + if (ret >= 0) + TEST_ERROR + PASSED(); + + TESTING(" replace"); + /* Replace one path*/ + sprintf(pathname, "a_path_%d", 20); + if (H5PLput(pathname, 1) < 0) { + fprintf(stderr," replace 1: %s\n", pathname); + TEST_ERROR + } + + /* Verify the table is full */ + if (H5PLsize() != 16) TEST_ERROR + + /* Verify that the entries were not moved */ + sprintf(pathname, "%s", H5PLget(0)); + if (strcmp(pathname, "a_path_17") != 0) { + fprintf(stderr," get 0: %s\n", pathname); + TEST_ERROR + } + sprintf(pathname, "%s", H5PLget(2)); + if (strcmp(pathname, "a_path_1") != 0) { + fprintf(stderr," get 2: %s\n", pathname); + TEST_ERROR + } + PASSED(); + + TESTING(" remove (verify for insert)"); + /* Remove one path*/ + if (H5PLremove(4) < 0) TEST_ERROR + + /* Verify that the entries were moved */ + sprintf(pathname, "%s", H5PLget(4)); + if (strcmp(pathname, "a_path_4") != 0) { + fprintf(stderr," get 4: %s\n", pathname); + TEST_ERROR + } + PASSED(); + + /* Verify the table is not full */ + if (H5PLsize() != 15) TEST_ERROR + + TESTING(" insert"); + /* Insert one path*/ + sprintf(pathname, "a_path_%d", 21); + if (H5PLinsert(pathname, 3) < 0){ + fprintf(stderr," insert 3: %s\n", pathname); + TEST_ERROR + } + + /* Verify that the entries were moved */ + sprintf(pathname, "%s", H5PLget(4)); + if (strcmp(pathname, "a_path_2") != 0){ + fprintf(stderr," get 4: %s\n", pathname); + TEST_ERROR + } PASSED(); + /* Verify the table is full */ + if (H5PLsize() != 16) TEST_ERROR + + TESTING(" insert (exceed)"); + /* Exceed the max path insert */ + H5E_BEGIN_TRY { + sprintf(pathname, "a_path_%d", 22); + ret = H5PLinsert(pathname, 12); + } H5E_END_TRY + if (ret >= 0) + TEST_ERROR + + PASSED (); + return 0; error: @@ -729,30 +918,30 @@ error: /*------------------------------------------------------------------------- - * Function: main + * Function: main * - * Purpose: Tests the plugin module (H5PL) + * Purpose: Tests the plugin module (H5PL) * - * Return: Success: exit(EXIT_SUCCESS) + * Return: Success: exit(EXIT_SUCCESS) * - * Failure: exit(EXIT_FAILURE) + * Failure: exit(EXIT_FAILURE) * - * Programmer: Raymond Lu - * 14 March 2013 + * Programmer: Raymond Lu + * 14 March 2013 * *------------------------------------------------------------------------- */ int main(void) { - char filename[FILENAME_BUF_SIZE]; - hid_t file, fapl, fapl2; + char filename[FILENAME_BUF_SIZE]; + hid_t file, fapl, fapl2; unsigned new_format; int mdc_nelmts; size_t rdcc_nelmts; size_t rdcc_nbytes; double rdcc_w0; - int nerrors = 0; + int nerrors = 0; /* Testing setup */ h5_reset(); @@ -760,10 +949,10 @@ main(void) /* Turn off the chunk cache, so all the chunks are immediately written to disk */ if(H5Pget_cache(fapl, &mdc_nelmts, &rdcc_nelmts, &rdcc_nbytes, &rdcc_w0) < 0) - TEST_ERROR + TEST_ERROR rdcc_nbytes = 0; if(H5Pset_cache(fapl, mdc_nelmts, rdcc_nelmts, rdcc_nbytes, rdcc_w0) < 0) - TEST_ERROR + TEST_ERROR /* Copy the file access property list */ if((fapl2 = H5Pcopy(fapl)) < 0) TEST_ERROR @@ -789,22 +978,22 @@ main(void) /* Create the file for this test */ if((file = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, my_fapl)) < 0) - TEST_ERROR + TEST_ERROR /* Test dynamically loaded filters for chunked dataset */ - nerrors += (test_filters_for_datasets(file) < 0 ? 1 : 0); + nerrors += (test_filters_for_datasets(file) < 0 ? 1 : 0); /* Test dynamically loaded filters for groups */ nerrors += (test_filters_for_groups(file) < 0 ? 1 : 0); if(H5Fclose(file) < 0) - TEST_ERROR + TEST_ERROR } /* end for */ /* Close FAPL */ if(H5Pclose(fapl2) < 0) TEST_ERROR if(H5Pclose(fapl) < 0) TEST_ERROR - + /* Restore the default error handler (set in h5_reset()) */ h5_restore_err(); @@ -816,13 +1005,13 @@ main(void) /* Reopen the file for testing data reading */ if((file = H5Fopen(filename, H5F_ACC_RDONLY, fapl)) < 0) - TEST_ERROR + TEST_ERROR /* Read the data with filters */ - nerrors += (test_read_with_filters(file) < 0 ? 1 : 0); + nerrors += (test_read_with_filters(file) < 0 ? 1 : 0); /* Open the groups with filters */ - nerrors += (test_groups_with_filters(file) < 0 ? 1 : 0); + nerrors += (test_groups_with_filters(file) < 0 ? 1 : 0); /* Restore the default error handler (set in h5_reset()) */ h5_restore_err(); @@ -839,10 +1028,13 @@ main(void) nerrors += (test_noread_with_filters(file) < 0 ? 1 : 0); if(H5Fclose(file) < 0) - TEST_ERROR + TEST_ERROR + + /* Test the APIs for access to the filter plugin path table */ + nerrors += (test_filter_path_apis() < 0 ? 1 : 0); if(nerrors) - TEST_ERROR + TEST_ERROR printf("All plugin tests passed.\n"); h5_cleanup(FILENAME, fapl); -- cgit v0.12 From 7fd79abc0c10002af5f556b4ad4c8a12c5e81beb Mon Sep 17 00:00:00 2001 From: Allen Byrne Date: Tue, 28 Mar 2017 13:42:00 -0500 Subject: Remove duplicated paths, add new paths --- config/cmake/FindJNI.cmake | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/config/cmake/FindJNI.cmake b/config/cmake/FindJNI.cmake index baab2ea..c82d308 100644 --- a/config/cmake/FindJNI.cmake +++ b/config/cmake/FindJNI.cmake @@ -137,7 +137,6 @@ JAVA_APPEND_LIBRARY_DIRECTORIES(JAVA_AWT_LIBRARY_DIRECTORIES /usr/lib/java/jre/lib/{libarch} /usr/lib64/java/jre/lib/{libarch} /usr/lib/jvm/jre/lib/{libarch} - /usr/lib64/jvm/jre/lib/{libarch} /usr/local/lib/java/jre/lib/{libarch} /usr/local/share/java/jre/lib/{libarch} /usr/lib/j2sdk1.4-sun/jre/lib/{libarch} @@ -152,6 +151,9 @@ JAVA_APPEND_LIBRARY_DIRECTORIES(JAVA_AWT_LIBRARY_DIRECTORIES /usr/lib/jvm/default-java/jre/lib/{libarch} /usr/lib/jvm/default-java/jre/lib /usr/lib/jvm/default-java/lib + # Arch Linux specific paths for default JVM + /usr/lib/jvm/default/jre/lib/{libarch} + /usr/lib/jvm/default/lib/{libarch} # Ubuntu specific paths for default JVM /usr/lib/jvm/java-8-openjdk-{libarch}/jre/lib/{libarch} # Ubuntu 15.10 /usr/lib/jvm/java-7-openjdk-{libarch}/jre/lib/{libarch} # Ubuntu 15.10 @@ -197,14 +199,11 @@ JAVA_APPEND_LIBRARY_DIRECTORIES(JAVA_AWT_INCLUDE_DIRECTORIES /usr/lib64/java/include /usr/local/lib/java/include /usr/lib/jvm/java/include - /usr/lib64/jvm/java/include /usr/lib/jvm/java-6-sun/include /usr/lib/jvm/java-1.5.0-sun/include /usr/lib/jvm/java-6-sun-1.6.0.00/include # can this one be removed according to #8821 ? Alex /usr/lib/jvm/java-6-openjdk/include /usr/lib/jvm/java-7-openjdk/include - /usr/lib/jvm/java-7-openjdk-i386/include - /usr/lib/jvm/java-7-openjdk-amd64/include /usr/lib64/jvm/java-7-openjdk/include /usr/lib64/jvm/java-7-openjdk-amd64/include /usr/lib/jvm/java-8-openjdk-{libarch}/include # ubuntu 15.10 @@ -216,6 +215,8 @@ JAVA_APPEND_LIBRARY_DIRECTORIES(JAVA_AWT_INCLUDE_DIRECTORIES /opt/sun-jdk-1.5.0.04/include # Debian specific path for default JVM /usr/lib/jvm/default-java/include + # Arch specific path for default JVM + /usr/lib/jvm/default/include # OpenBSD specific path for default JVM /usr/local/jdk-1.7.0/include /usr/local/jdk-1.6.0/include -- cgit v0.12 From 1dee0d46273882eedeed50238d9e3e23cf435291 Mon Sep 17 00:00:00 2001 From: Allen Byrne Date: Thu, 30 Mar 2017 12:15:25 -0500 Subject: HDFFV-10143 Fix initial issues from review --- MANIFEST | 1 + src/CMakeLists.txt | 1 + src/H5PL.c | 137 +++++++++++++---------------------------------- src/H5PLpkg.h | 50 ++++++++++++++++++ test/plugin.c | 152 ++++++++++++++++++++++++++++++++--------------------- 5 files changed, 181 insertions(+), 160 deletions(-) create mode 100644 src/H5PLpkg.h diff --git a/MANIFEST b/MANIFEST index 3d252eb..9400fe3 100644 --- a/MANIFEST +++ b/MANIFEST @@ -800,6 +800,7 @@ ./src/H5PBprivate.h ./src/H5PL.c ./src/H5PLmodule.h +./src/H5PLpkg.h ./src/H5PLprivate.h ./src/H5PLpublic.h ./src/H5PLextern.h diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 9321bbd..e2acd30 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -520,6 +520,7 @@ set (H5PL_SOURCES set (H5PL_HDRS ${HDF5_SRC_DIR}/H5PLextern.h + ${HDF5_SRC_DIR}/H5PLpkg.h ${HDF5_SRC_DIR}/H5PLpublic.h ) IDE_GENERATED_PROPERTIES ("H5PL" "${H5PL_HDRS}" "${H5PL_SOURCES}" ) diff --git a/src/H5PL.c b/src/H5PL.c index 898e84b..f6af691 100644 --- a/src/H5PL.c +++ b/src/H5PL.c @@ -25,15 +25,34 @@ #include "H5private.h" /* Generic Functions */ #include "H5Eprivate.h" /* Error handling */ #include "H5MMprivate.h" /* Memory management */ -#include "H5PLprivate.h" /* Plugin */ +#include "H5PLpkg.h" /* Plugin */ #include "H5Zprivate.h" /* Filter pipeline */ /****************/ /* Local Macros */ /****************/ - -#define H5PL_MAX_PATH_NUM 16 +#ifdef H5_HAVE_WIN32_API +#define H5PL_EXPAND_ENV_VAR { \ + long bufCharCount; \ + char *tempbuf; \ + if(NULL == (tempbuf = (char *)H5MM_malloc(H5PL_EXPAND_BUFFER_SIZE))) \ + HGOTO_ERROR(H5E_PLUGIN, H5E_CANTALLOC, FAIL, "can't allocate memory for expanded path") \ + if((bufCharCount = ExpandEnvironmentStrings(dl_path, tempbuf, H5PL_EXPAND_BUFFER_SIZE)) > H5PL_EXPAND_BUFFER_SIZE) { \ + tempbuf = (char *)H5MM_xfree(tempbuf); \ + HGOTO_ERROR(H5E_PLUGIN, H5E_NOSPACE, FAIL, "expanded path is too long") \ + } \ + if(bufCharCount == 0) { \ + tempbuf = (char *)H5MM_xfree(tempbuf); \ + HGOTO_ERROR(H5E_PLUGIN, H5E_CANTGET, FAIL, "failed to expand path") \ + } \ + dl_path = (char *)H5MM_xfree(dl_path); \ + dl_path = H5MM_strdup(tempbuf); \ + tempbuf = (char *)H5MM_xfree(tempbuf); \ + } +#else +#define H5PL_EXPAND_ENV_VAR +#endif /* H5_HAVE_WIN32_API */ /****************************/ /* Macros for supporting @@ -412,25 +431,9 @@ H5PLappend(char* plugin_path) dl_path = H5MM_strdup(plugin_path); if(NULL == dl_path) HGOTO_ERROR(H5E_PLUGIN, H5E_CANTALLOC, FAIL, "can't allocate memory for path") -#ifdef H5_HAVE_WIN32_API - else { /* Expand windows env var*/ - long bufCharCount; - char *tempbuf; - if(NULL == (tempbuf = (char *)H5MM_malloc(H5PL_EXPAND_BUFFER_SIZE))) - HGOTO_ERROR(H5E_PLUGIN, H5E_CANTALLOC, FAIL, "can't allocate memory for expanded path") - if((bufCharCount = ExpandEnvironmentStrings(dl_path, tempbuf, H5PL_EXPAND_BUFFER_SIZE)) > H5PL_EXPAND_BUFFER_SIZE) { - tempbuf = (char *)H5MM_xfree(tempbuf); - HGOTO_ERROR(H5E_PLUGIN, H5E_NOSPACE, FAIL, "expanded path is too long") - } - if(bufCharCount == 0) { - tempbuf = (char *)H5MM_xfree(tempbuf); - HGOTO_ERROR(H5E_PLUGIN, H5E_CANTGET, FAIL, "failed to expand path") - } - dl_path = (char *)H5MM_xfree(dl_path); - dl_path = H5MM_strdup(tempbuf); - tempbuf = (char *)H5MM_xfree(tempbuf); - } -#endif /* H5_HAVE_WIN32_API */ + + H5PL_EXPAND_ENV_VAR + if(NULL == (H5PL_path_table_g[H5PL_num_paths_g] = H5MM_strdup(dl_path))) HGOTO_ERROR(H5E_PLUGIN, H5E_CANTALLOC, FAIL, "can't allocate memory for path") H5PL_num_paths_g++; @@ -467,25 +470,9 @@ H5PLprepend(char* plugin_path) dl_path = H5MM_strdup(plugin_path); if(NULL == dl_path) HGOTO_ERROR(H5E_PLUGIN, H5E_CANTALLOC, FAIL, "can't allocate memory for path") -#ifdef H5_HAVE_WIN32_API - else { /* Expand windows env var*/ - long bufCharCount; - char *tempbuf; - if (NULL == (tempbuf = (char *)H5MM_malloc(H5PL_EXPAND_BUFFER_SIZE))) - HGOTO_ERROR(H5E_PLUGIN, H5E_CANTALLOC, FAIL, "can't allocate memory for expanded path") - if ((bufCharCount = ExpandEnvironmentStrings(dl_path, tempbuf, H5PL_EXPAND_BUFFER_SIZE)) > H5PL_EXPAND_BUFFER_SIZE) { - tempbuf = (char *)H5MM_xfree(tempbuf); - HGOTO_ERROR(H5E_PLUGIN, H5E_NOSPACE, FAIL, "expanded path is too long") - } - if (bufCharCount == 0) { - tempbuf = (char *)H5MM_xfree(tempbuf); - HGOTO_ERROR(H5E_PLUGIN, H5E_CANTGET, FAIL, "failed to expand path") - } - dl_path = (char *)H5MM_xfree(dl_path); - dl_path = H5MM_strdup(tempbuf); - tempbuf = (char *)H5MM_xfree(tempbuf); - } -#endif /* H5_HAVE_WIN32_API */ + + H5PL_EXPAND_ENV_VAR + for (plindex = (unsigned int)H5PL_num_paths_g; plindex > 0; plindex--) H5PL_path_table_g[plindex] = H5PL_path_table_g[plindex - 1]; if (NULL == (H5PL_path_table_g[0] = H5MM_strdup(dl_path))) @@ -521,25 +508,9 @@ H5PLput(char* plugin_path, unsigned int index) dl_path = H5MM_strdup(plugin_path); if(NULL == dl_path) HGOTO_ERROR(H5E_PLUGIN, H5E_CANTALLOC, FAIL, "can't allocate memory for path") -#ifdef H5_HAVE_WIN32_API - else { /* Expand windows env var*/ - long bufCharCount; - char *tempbuf; - if(NULL == (tempbuf = (char *)H5MM_malloc(H5PL_EXPAND_BUFFER_SIZE))) - HGOTO_ERROR(H5E_PLUGIN, H5E_CANTALLOC, FAIL, "can't allocate memory for expanded path") - if((bufCharCount = ExpandEnvironmentStrings(dl_path, tempbuf, H5PL_EXPAND_BUFFER_SIZE)) > H5PL_EXPAND_BUFFER_SIZE) { - tempbuf = (char *)H5MM_xfree(tempbuf); - HGOTO_ERROR(H5E_PLUGIN, H5E_NOSPACE, FAIL, "expanded path is too long") - } - if(bufCharCount == 0) { - tempbuf = (char *)H5MM_xfree(tempbuf); - HGOTO_ERROR(H5E_PLUGIN, H5E_CANTGET, FAIL, "failed to expand path") - } - dl_path = (char *)H5MM_xfree(dl_path); - dl_path = H5MM_strdup(tempbuf); - tempbuf = (char *)H5MM_xfree(tempbuf); - } -#endif /* H5_HAVE_WIN32_API */ + + H5PL_EXPAND_ENV_VAR + if(H5PL_path_table_g[index]) H5PL_path_table_g[index] = (char *)H5MM_xfree(H5PL_path_table_g[index]); if(NULL == (H5PL_path_table_g[index] = H5MM_strdup(dl_path))) @@ -577,25 +548,9 @@ H5PLinsert(char* plugin_path, unsigned int index) dl_path = H5MM_strdup(plugin_path); if(NULL == dl_path) HGOTO_ERROR(H5E_PLUGIN, H5E_CANTALLOC, FAIL, "can't allocate memory for path") -#ifdef H5_HAVE_WIN32_API - else { /* Expand windows env var*/ - long bufCharCount; - char *tempbuf; - if(NULL == (tempbuf = (char *)H5MM_malloc(H5PL_EXPAND_BUFFER_SIZE))) - HGOTO_ERROR(H5E_PLUGIN, H5E_CANTALLOC, FAIL, "can't allocate memory for expanded path") - if((bufCharCount = ExpandEnvironmentStrings(dl_path, tempbuf, H5PL_EXPAND_BUFFER_SIZE)) > H5PL_EXPAND_BUFFER_SIZE) { - tempbuf = (char *)H5MM_xfree(tempbuf); - HGOTO_ERROR(H5E_PLUGIN, H5E_NOSPACE, FAIL, "expanded path is too long") - } - if(bufCharCount == 0) { - tempbuf = (char *)H5MM_xfree(tempbuf); - HGOTO_ERROR(H5E_PLUGIN, H5E_CANTGET, FAIL, "failed to expand path") - } - dl_path = (char *)H5MM_xfree(dl_path); - dl_path = H5MM_strdup(tempbuf); - tempbuf = (char *)H5MM_xfree(tempbuf); - } -#endif /* H5_HAVE_WIN32_API */ + + H5PL_EXPAND_ENV_VAR + for(plindex = (unsigned int)H5PL_num_paths_g; plindex > index; plindex--) H5PL_path_table_g[plindex] = H5PL_path_table_g[plindex - 1]; if(NULL == (H5PL_path_table_g[index] = H5MM_strdup(dl_path))) @@ -662,9 +617,9 @@ H5PLget(unsigned int index) FUNC_ENTER_API(NULL) if(H5PL_num_paths_g == 0) - HGOTO_ERROR(H5E_PLUGIN, H5E_NOSPACE, FAIL, "no directories in table") + 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, FAIL, "no directory path at index") + HGOTO_ERROR(H5E_PLUGIN, H5E_CANTALLOC, NULL, "no directory path at index") done: FUNC_LEAVE_API(ret_value) @@ -720,25 +675,7 @@ H5PL__init_path_table(void) if(NULL == dl_path) HGOTO_ERROR(H5E_PLUGIN, H5E_CANTALLOC, FAIL, "can't allocate memory for path") -#ifdef H5_HAVE_WIN32_API - else { /* Expand windows env var*/ - long bufCharCount; - char *tempbuf; - if(NULL == (tempbuf = (char *)H5MM_malloc(H5PL_EXPAND_BUFFER_SIZE))) - HGOTO_ERROR(H5E_PLUGIN, H5E_CANTALLOC, FAIL, "can't allocate memory for expanded path") - if((bufCharCount = ExpandEnvironmentStrings(dl_path, tempbuf, H5PL_EXPAND_BUFFER_SIZE)) > H5PL_EXPAND_BUFFER_SIZE) { - tempbuf = (char *)H5MM_xfree(tempbuf); - HGOTO_ERROR(H5E_PLUGIN, H5E_NOSPACE, FAIL, "expanded path is too long") - } - if(bufCharCount == 0) { - tempbuf = (char *)H5MM_xfree(tempbuf); - HGOTO_ERROR(H5E_PLUGIN, H5E_CANTGET, FAIL, "failed to expand path") - } - dl_path = (char *)H5MM_xfree(dl_path); - dl_path = H5MM_strdup(tempbuf); - tempbuf = (char *)H5MM_xfree(tempbuf); - } -#endif /* H5_HAVE_WIN32_API */ + H5PL_EXPAND_ENV_VAR /* Put paths in the path table. They are separated by ":" */ dir = HDstrtok(dl_path, H5PL_PATH_SEPARATOR); diff --git a/src/H5PLpkg.h b/src/H5PLpkg.h new file mode 100644 index 0000000..2761a33 --- /dev/null +++ b/src/H5PLpkg.h @@ -0,0 +1,50 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * Copyright by The HDF Group. * + * Copyright by the Board of Trustees of the University of Illinois. * + * All rights reserved. * + * * + * This file is part of HDF5. The full HDF5 copyright notice, including * + * terms governing use, modification, and redistribution, is contained in * + * the files COPYING and Copyright.html. COPYING can be found at the root * + * of the source code distribution tree; Copyright.html can be found at the * + * root level of an installed copy of the electronic HDF5 document set and * + * is linked from the top-level documents page. It can also be found at * + * http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have * + * access to either file, you may request a copy from help@hdfgroup.org. * + * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + +#if !(defined H5PL_FRIEND || defined H5PL_MODULE) +#error "Do not include this file outside the H5PL package!" +#endif + +#ifndef _H5PLpkg_H +#define _H5PLpkg_H + +/* Include private header file */ +#include "H5PLprivate.h" /* Filter functions */ + +/* Other private headers needed by this file */ + +/**************************/ +/* Package Private Macros */ +/**************************/ + + +/****************************/ +/* Package Private Typedefs */ +/****************************/ + +#define H5PL_MAX_PATH_NUM 16 + + +/*****************************/ +/* Package Private Variables */ +/*****************************/ + + +/******************************/ +/* Package Private Prototypes */ +/******************************/ + +#endif /* _H5PLpkg_H */ + diff --git a/test/plugin.c b/test/plugin.c index 1d55a5d..c739b72 100644 --- a/test/plugin.c +++ b/test/plugin.c @@ -22,8 +22,10 @@ #include "H5srcdir.h" /* - * This file needs to access private datatypes from the H5Z package. + * This file needs to access private datatypes from the H5Z and H5PL package. */ +#define H5PL_FRIEND +#include "H5PLpkg.h" #define H5Z_FRIEND #include "H5Zpkg.h" @@ -114,7 +116,7 @@ test_filter_internal(hid_t fid, const char *name, hid_t dcpl) /* Check if all the filters are available */ if(H5Pall_filters_avail(dcpl)!=TRUE) { H5_FAILED(); - printf(" Line %d: Incorrect filter availability\n",__LINE__); + HDprintf(" Line %d: Incorrect filter availability\n",__LINE__); TEST_ERROR } /* end if */ @@ -137,8 +139,8 @@ test_filter_internal(hid_t fid, const char *name, hid_t dcpl) for(j=0; j<(size_t)size[1]; j++) { if(0!=check[i][j]) { H5_FAILED(); - printf(" Read a non-zero value.\n"); - printf(" At index %lu,%lu\n", + HDprintf(" Read a non-zero value.\n"); + HDprintf(" At index %lu,%lu\n", (unsigned long)i, (unsigned long)j); TEST_ERROR } @@ -180,10 +182,10 @@ test_filter_internal(hid_t fid, const char *name, hid_t dcpl) for(j=0; j 0; i--) { if (H5PLremove(i-1) < 0) { - fprintf(stderr," at %d: %s\n", i, pathname); + HDfprintf(stderr," at %d: %s\n", i, pathname); TEST_ERROR } } @@ -772,9 +774,9 @@ test_filter_path_apis(void) TESTING(" append"); /* Create multiple paths to fill table */ for (i=0; i < 16; i++) { - sprintf(pathname, "a_path_%d", i); + HDsprintf(pathname, "a_path_%d", i); if (H5PLappend(pathname) < 0) { - fprintf(stderr," at %d: %s\n", i, pathname); + HDfprintf(stderr," at %d: %s\n", i, pathname); TEST_ERROR } } @@ -785,11 +787,41 @@ test_filter_path_apis(void) TESTING(" append (exceed)"); /* Exceed the max path append */ H5E_BEGIN_TRY { - sprintf(pathname, "a_path_%d", 16); + HDsprintf(pathname, "a_path_%d", 16); ret = H5PLappend(pathname); } H5E_END_TRY if (ret >= 0) TEST_ERROR + + /* Exceed the max path removal */ + H5E_BEGIN_TRY { + ret = H5PLremove(16); + } H5E_END_TRY + if (ret >= 0) + TEST_ERROR + PASSED(); + + TESTING(" get (bounds)"); + HDsprintf(pathname, "%s", H5PLget(0)); + if (strcmp(pathname, "a_path_0") != 0) { + HDfprintf(stderr," get 0: %s\n", pathname); + TEST_ERROR + } + HDsprintf(pathname, "%s", H5PLget(1)); + if (strcmp(pathname, "a_path_1") != 0) { + HDfprintf(stderr," get 1: %s\n", pathname); + TEST_ERROR + } + HDsprintf(pathname, "%s", H5PLget(15)); + if (strcmp(pathname, "a_path_15") != 0) { + HDfprintf(stderr," get 15: %s\n", pathname); + TEST_ERROR + } + PASSED(); + + TESTING(" get (bounds exceed)"); + if (H5PLget(16) != NULL) + TEST_ERROR PASSED(); TESTING(" remove (verify for prepend)"); @@ -797,9 +829,9 @@ test_filter_path_apis(void) if (H5PLremove(8) < 0) TEST_ERROR /* Verify that the entries were moved */ - sprintf(pathname, "%s", H5PLget(8)); + HDsprintf(pathname, "%s", H5PLget(8)); if (strcmp(pathname, "a_path_9") != 0) { - fprintf(stderr," get 8: %s\n", pathname); + HDfprintf(stderr," get 8: %s\n", pathname); TEST_ERROR } PASSED(); @@ -809,9 +841,9 @@ test_filter_path_apis(void) TESTING(" prepend"); /* Prepend one path*/ - sprintf(pathname, "a_path_%d", 17); + HDsprintf(pathname, "a_path_%d", 17); if (H5PLprepend(pathname) < 0) { - fprintf(stderr," prepend 17: %s\n", pathname); + HDfprintf(stderr," prepend 17: %s\n", pathname); TEST_ERROR } @@ -819,14 +851,14 @@ test_filter_path_apis(void) if (H5PLsize() != 16) TEST_ERROR /* Verify that the entries were moved */ - sprintf(pathname, "%s", H5PLget(8)); + HDsprintf(pathname, "%s", H5PLget(8)); if (strcmp(pathname, "a_path_7") != 0) { - fprintf(stderr," get 8: %s\n", pathname); + HDfprintf(stderr," get 8: %s\n", pathname); TEST_ERROR } - sprintf(pathname, "%s", H5PLget(0)); + HDsprintf(pathname, "%s", H5PLget(0)); if (strcmp(pathname, "a_path_17") != 0) { - fprintf(stderr," get 0: %s\n", pathname); + HDfprintf(stderr," get 0: %s\n", pathname); TEST_ERROR } PASSED(); @@ -834,7 +866,7 @@ test_filter_path_apis(void) TESTING(" prepend (exceed)"); /* Exceed the max path prepend */ H5E_BEGIN_TRY { - sprintf(pathname, "a_path_%d", 18); + HDsprintf(pathname, "a_path_%d", 18); ret = H5PLprepend(pathname); } H5E_END_TRY if (ret >= 0) @@ -843,9 +875,9 @@ test_filter_path_apis(void) TESTING(" replace"); /* Replace one path*/ - sprintf(pathname, "a_path_%d", 20); + HDsprintf(pathname, "a_path_%d", 20); if (H5PLput(pathname, 1) < 0) { - fprintf(stderr," replace 1: %s\n", pathname); + HDfprintf(stderr," replace 1: %s\n", pathname); TEST_ERROR } @@ -853,14 +885,14 @@ test_filter_path_apis(void) if (H5PLsize() != 16) TEST_ERROR /* Verify that the entries were not moved */ - sprintf(pathname, "%s", H5PLget(0)); + HDsprintf(pathname, "%s", H5PLget(0)); if (strcmp(pathname, "a_path_17") != 0) { - fprintf(stderr," get 0: %s\n", pathname); + HDfprintf(stderr," get 0: %s\n", pathname); TEST_ERROR } - sprintf(pathname, "%s", H5PLget(2)); + HDsprintf(pathname, "%s", H5PLget(2)); if (strcmp(pathname, "a_path_1") != 0) { - fprintf(stderr," get 2: %s\n", pathname); + HDfprintf(stderr," get 2: %s\n", pathname); TEST_ERROR } PASSED(); @@ -870,9 +902,9 @@ test_filter_path_apis(void) if (H5PLremove(4) < 0) TEST_ERROR /* Verify that the entries were moved */ - sprintf(pathname, "%s", H5PLget(4)); + HDsprintf(pathname, "%s", H5PLget(4)); if (strcmp(pathname, "a_path_4") != 0) { - fprintf(stderr," get 4: %s\n", pathname); + HDfprintf(stderr," get 4: %s\n", pathname); TEST_ERROR } PASSED(); @@ -882,16 +914,16 @@ test_filter_path_apis(void) TESTING(" insert"); /* Insert one path*/ - sprintf(pathname, "a_path_%d", 21); + HDsprintf(pathname, "a_path_%d", 21); if (H5PLinsert(pathname, 3) < 0){ - fprintf(stderr," insert 3: %s\n", pathname); + HDfprintf(stderr," insert 3: %s\n", pathname); TEST_ERROR } /* Verify that the entries were moved */ - sprintf(pathname, "%s", H5PLget(4)); + HDsprintf(pathname, "%s", H5PLget(4)); if (strcmp(pathname, "a_path_2") != 0){ - fprintf(stderr," get 4: %s\n", pathname); + HDfprintf(stderr," get 4: %s\n", pathname); TEST_ERROR } PASSED(); @@ -902,7 +934,7 @@ test_filter_path_apis(void) TESTING(" insert (exceed)"); /* Exceed the max path insert */ H5E_BEGIN_TRY { - sprintf(pathname, "a_path_%d", 22); + HDsprintf(pathname, "a_path_%d", 22); ret = H5PLinsert(pathname, 12); } H5E_END_TRY if (ret >= 0) @@ -968,11 +1000,11 @@ main(void) /* Set the FAPL for the type of format */ if(new_format) { - puts("\nTesting with new file format:"); + HDputs("\nTesting with new file format:"); my_fapl = fapl2; } /* end if */ else { - puts("Testing with old file format:"); + HDputs("Testing with old file format:"); my_fapl = fapl; } /* end else */ @@ -997,7 +1029,7 @@ main(void) /* Restore the default error handler (set in h5_reset()) */ h5_restore_err(); - puts("\nTesting reading data with with dynamic plugin filters:"); + HDputs("\nTesting reading data with with dynamic plugin filters:"); /* Close the library so that all loaded plugin libraries are unloaded */ h5_reset(); @@ -1035,14 +1067,14 @@ main(void) if(nerrors) TEST_ERROR - printf("All plugin tests passed.\n"); + HDprintf("All plugin tests passed.\n"); h5_cleanup(FILENAME, fapl); return 0; error: nerrors = MAX(1, nerrors); - printf("***** %d PLUGIN TEST%s FAILED! *****\n", + HDprintf("***** %d PLUGIN TEST%s FAILED! *****\n", nerrors, 1 == nerrors ? "" : "S"); return 1; } -- cgit v0.12 From 17bb6be1d8cd6f13f937de511e16da9a1774152b Mon Sep 17 00:00:00 2001 From: Allen Byrne Date: Thu, 30 Mar 2017 12:17:48 -0500 Subject: HDFFV-10143 Use Windows A version of ExpandEnvironmentStrings --- src/H5PL.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/H5PL.c b/src/H5PL.c index f6af691..2a9b046 100644 --- a/src/H5PL.c +++ b/src/H5PL.c @@ -38,7 +38,7 @@ char *tempbuf; \ if(NULL == (tempbuf = (char *)H5MM_malloc(H5PL_EXPAND_BUFFER_SIZE))) \ HGOTO_ERROR(H5E_PLUGIN, H5E_CANTALLOC, FAIL, "can't allocate memory for expanded path") \ - if((bufCharCount = ExpandEnvironmentStrings(dl_path, tempbuf, H5PL_EXPAND_BUFFER_SIZE)) > H5PL_EXPAND_BUFFER_SIZE) { \ + if((bufCharCount = ExpandEnvironmentStringsA(dl_path, tempbuf, H5PL_EXPAND_BUFFER_SIZE)) > H5PL_EXPAND_BUFFER_SIZE) { \ tempbuf = (char *)H5MM_xfree(tempbuf); \ HGOTO_ERROR(H5E_PLUGIN, H5E_NOSPACE, FAIL, "expanded path is too long") \ } \ -- cgit v0.12 From 0bd67539d65658d3fc6dfe2a5f0d578909e81780 Mon Sep 17 00:00:00 2001 From: Allen Byrne Date: Thu, 30 Mar 2017 12:36:12 -0500 Subject: Remove redundant code --- src/H5PL.c | 22 +++++++++------------- 1 file changed, 9 insertions(+), 13 deletions(-) diff --git a/src/H5PL.c b/src/H5PL.c index 2a9b046..abd3ea2 100644 --- a/src/H5PL.c +++ b/src/H5PL.c @@ -47,8 +47,7 @@ HGOTO_ERROR(H5E_PLUGIN, H5E_CANTGET, FAIL, "failed to expand path") \ } \ dl_path = (char *)H5MM_xfree(dl_path); \ - dl_path = H5MM_strdup(tempbuf); \ - tempbuf = (char *)H5MM_xfree(tempbuf); \ + dl_path = tempbuf; \ } #else #define H5PL_EXPAND_ENV_VAR @@ -434,8 +433,8 @@ H5PLappend(char* plugin_path) H5PL_EXPAND_ENV_VAR - if(NULL == (H5PL_path_table_g[H5PL_num_paths_g] = H5MM_strdup(dl_path))) - HGOTO_ERROR(H5E_PLUGIN, H5E_CANTALLOC, FAIL, "can't allocate memory for path") + H5PL_path_table_g[H5PL_num_paths_g] = dl_path; + dl_path = NULL; H5PL_num_paths_g++; done: @@ -475,8 +474,8 @@ H5PLprepend(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]; - if (NULL == (H5PL_path_table_g[0] = H5MM_strdup(dl_path))) - HGOTO_ERROR(H5E_PLUGIN, H5E_CANTALLOC, FAIL, "can't allocate memory for path") + H5PL_path_table_g[0] = dl_path; + dl_path = NULL; H5PL_num_paths_g++; done: @@ -513,8 +512,8 @@ H5PLput(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]); - if(NULL == (H5PL_path_table_g[index] = H5MM_strdup(dl_path))) - HGOTO_ERROR(H5E_PLUGIN, H5E_CANTALLOC, FAIL, "can't allocate memory for path") + H5PL_path_table_g[index] = dl_path; + dl_path = NULL; done: if(dl_path) @@ -553,8 +552,8 @@ H5PLinsert(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]; - if(NULL == (H5PL_path_table_g[index] = H5MM_strdup(dl_path))) - HGOTO_ERROR(H5E_PLUGIN, H5E_CANTALLOC, FAIL, "can't allocate memory for path") + H5PL_path_table_g[index] = dl_path; + dl_path = NULL; H5PL_num_paths_g++; done: @@ -594,9 +593,6 @@ H5PLremove(unsigned int index) H5PL_path_table_g[H5PL_num_paths_g] = NULL; done: - if(dl_path) - dl_path = (char *)H5MM_xfree(dl_path); - FUNC_LEAVE_API(ret_value) } /* end H5PLremove() */ -- cgit v0.12 From af4d79cbb6ab621414f5c72366dadc7910e7402a Mon Sep 17 00:00:00 2001 From: Allen Byrne Date: Thu, 30 Mar 2017 13:22:43 -0500 Subject: HDFFV-10143 change put to replace and add const --- src/H5PL.c | 12 ++++++------ src/H5PLpublic.h | 8 ++++---- test/plugin.c | 2 +- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/H5PL.c b/src/H5PL.c index abd3ea2..4bf19fc 100644 --- a/src/H5PL.c +++ b/src/H5PL.c @@ -417,7 +417,7 @@ done: *------------------------------------------------------------------------- */ herr_t -H5PLappend(char* plugin_path) +H5PLappend(const char* plugin_path) { herr_t ret_value = SUCCEED; /* Return value */ char *dl_path = NULL; @@ -455,7 +455,7 @@ done: *------------------------------------------------------------------------- */ herr_t -H5PLprepend(char* plugin_path) +H5PLprepend(const char* plugin_path) { herr_t ret_value = SUCCEED; /* Return value */ char *dl_path = NULL; @@ -487,7 +487,7 @@ done: /*------------------------------------------------------------------------- - * Function: H5PLput + * Function: H5PLreplace * * Purpose: Replace the path at the specified index. * @@ -496,7 +496,7 @@ done: *------------------------------------------------------------------------- */ herr_t -H5PLput(char* plugin_path, unsigned int index) +H5PLreplace(const char* plugin_path, unsigned int index) { herr_t ret_value = SUCCEED; /* Return value */ char *dl_path = NULL; @@ -520,7 +520,7 @@ done: dl_path = (char *)H5MM_xfree(dl_path); FUNC_LEAVE_API(ret_value) -} /* end H5PLput() */ +} /* end H5PLreplace() */ /*------------------------------------------------------------------------- @@ -533,7 +533,7 @@ done: *------------------------------------------------------------------------- */ herr_t -H5PLinsert(char* plugin_path, unsigned int index) +H5PLinsert(const char* plugin_path, unsigned int index) { herr_t ret_value = SUCCEED; /* Return value */ char *dl_path = NULL; diff --git a/src/H5PLpublic.h b/src/H5PLpublic.h index f3fe497..ca46542 100644 --- a/src/H5PLpublic.h +++ b/src/H5PLpublic.h @@ -44,10 +44,10 @@ extern "C" { /* plugin state */ H5_DLL herr_t H5PLset_loading_state(unsigned int plugin_type); H5_DLL herr_t H5PLget_loading_state(unsigned int* plugin_type/*out*/); -H5_DLL herr_t H5PLappend(char* plugin_path); -H5_DLL herr_t H5PLprepend(char* plugin_path); -H5_DLL herr_t H5PLput(char* plugin_path, unsigned int index); -H5_DLL herr_t H5PLinsert(char* plugin_path, unsigned int index); +H5_DLL herr_t H5PLappend(const char* plugin_path); +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 unsigned int H5PLsize(void); diff --git a/test/plugin.c b/test/plugin.c index c739b72..359bbdd 100644 --- a/test/plugin.c +++ b/test/plugin.c @@ -876,7 +876,7 @@ test_filter_path_apis(void) TESTING(" replace"); /* Replace one path*/ HDsprintf(pathname, "a_path_%d", 20); - if (H5PLput(pathname, 1) < 0) { + if (H5PLreplace(pathname, 1) < 0) { HDfprintf(stderr," replace 1: %s\n", pathname); TEST_ERROR } -- cgit v0.12 From d29548351fa5c7976a771d02042020b9b133312b Mon Sep 17 00:00:00 2001 From: Allen Byrne Date: Thu, 30 Mar 2017 14:40:03 -0500 Subject: HDFFV-10143 change h5PLget to use buffer like H5Iget_name --- src/H5PL.c | 63 ++++++++++++++++++++++++++++---------------------------- src/H5PLpublic.h | 2 +- test/plugin.c | 53 ++++++++++++++++++++++++++++++++++++----------- 3 files changed, 74 insertions(+), 44 deletions(-) diff --git a/src/H5PL.c b/src/H5PL.c index 4bf19fc..0957629 100644 --- a/src/H5PL.c +++ b/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) diff --git a/src/H5PLpublic.h b/src/H5PLpublic.h index ca46542..5e4dcae 100644 --- a/src/H5PLpublic.h +++ b/src/H5PLpublic.h @@ -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 diff --git a/test/plugin.c b/test/plugin.c index 359bbdd..19a0ebd 100644 --- a/test/plugin.c +++ b/test/plugin.c @@ -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 -- cgit v0.12 From e51c624ac0b27e0a5aeff86cd338716ecf8c8b0c Mon Sep 17 00:00:00 2001 From: Allen Byrne Date: Thu, 30 Mar 2017 14:47:38 -0500 Subject: HDFFV-10143 remove debugging output --- test/plugin.c | 6 ------ 1 file changed, 6 deletions(-) diff --git a/test/plugin.c b/test/plugin.c index 19a0ebd..0fca40f 100644 --- a/test/plugin.c +++ b/test/plugin.c @@ -807,7 +807,6 @@ test_filter_path_apis(void) HDfprintf(stderr," get path 0 length failed\n"); TEST_ERROR } - HDfprintf(stdout," get path 0 length %d\n", pathlen); if (pathlen != 8) { TEST_ERROR } @@ -815,7 +814,6 @@ test_filter_path_apis(void) 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 @@ -825,14 +823,12 @@ test_filter_path_apis(void) 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 } 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 @@ -843,7 +839,6 @@ test_filter_path_apis(void) 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*/ @@ -852,7 +847,6 @@ test_filter_path_apis(void) /* Verify that the entries were moved */ 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 -- cgit v0.12 From 51412aa48c6435ef7798f563fb269b13b6c0418c Mon Sep 17 00:00:00 2001 From: Allen Byrne Date: Thu, 30 Mar 2017 15:03:31 -0500 Subject: HDFFV-10143 Cleanup due to comments --- src/H5PL.c | 6 ++---- src/H5PLpkg.h | 4 ++-- test/plugin.c | 14 +++++++------- 3 files changed, 11 insertions(+), 13 deletions(-) diff --git a/src/H5PL.c b/src/H5PL.c index 0957629..78ccd88 100644 --- a/src/H5PL.c +++ b/src/H5PL.c @@ -558,18 +558,16 @@ herr_t H5PLremove(unsigned int index) { herr_t ret_value = SUCCEED; /* Return value */ - char *dl_path = NULL; unsigned int plindex; FUNC_ENTER_API(FAIL) if(H5PL_num_paths_g == 0) HGOTO_ERROR(H5E_PLUGIN, H5E_NOSPACE, FAIL, "no directories in table") - if(NULL == (dl_path = H5PL_path_table_g[index])) + if(NULL == H5PL_path_table_g[index]) HGOTO_ERROR(H5E_PLUGIN, H5E_CANTALLOC, FAIL, "no directory path at index") + H5PL_path_table_g[plindex] = (char *)H5MM_xfree(H5PL_path_table_g[plindex]); for(plindex = index; plindex < (unsigned int)H5PL_num_paths_g; plindex++) H5PL_path_table_g[plindex] = H5PL_path_table_g[plindex + 1]; - if(H5PL_path_table_g[plindex]) - dl_path = (char *)H5MM_xfree(dl_path); H5PL_num_paths_g--; H5PL_path_table_g[H5PL_num_paths_g] = NULL; diff --git a/src/H5PLpkg.h b/src/H5PLpkg.h index 2761a33..5cf3096 100644 --- a/src/H5PLpkg.h +++ b/src/H5PLpkg.h @@ -29,13 +29,13 @@ /* Package Private Macros */ /**************************/ +#define H5PL_MAX_PATH_NUM 16 + /****************************/ /* Package Private Typedefs */ /****************************/ -#define H5PL_MAX_PATH_NUM 16 - /*****************************/ /* Package Private Variables */ diff --git a/test/plugin.c b/test/plugin.c index 0fca40f..3c1a71a 100644 --- a/test/plugin.c +++ b/test/plugin.c @@ -774,7 +774,7 @@ test_filter_path_apis(void) TESTING(" append"); /* Create multiple paths to fill table */ - for (i=0; i < 16; i++) { + for (i=0; i < H5PL_MAX_PATH_NUM; i++) { HDsprintf(pathname, "a_path_%d", i); if (H5PLappend(pathname) < 0) { HDfprintf(stderr," at %d: %s\n", i, pathname); @@ -782,7 +782,7 @@ test_filter_path_apis(void) } } /* Verify the table is full */ - if (H5PLsize() != 16) TEST_ERROR + if (H5PLsize() != H5PL_MAX_PATH_NUM) TEST_ERROR PASSED(); TESTING(" append (exceed)"); @@ -796,7 +796,7 @@ test_filter_path_apis(void) /* Exceed the max path removal */ H5E_BEGIN_TRY { - ret = H5PLremove(16); + ret = H5PLremove(H5PL_MAX_PATH_NUM); } H5E_END_TRY if (ret >= 0) TEST_ERROR @@ -836,7 +836,7 @@ test_filter_path_apis(void) PASSED(); TESTING(" get (bounds exceed)"); - if ((pathlen = H5PLget(16, NULL, 0)) > 0) + if ((pathlen = H5PLget(H5PL_MAX_PATH_NUM, NULL, 0)) > 0) TEST_ERROR PASSED(); @@ -865,7 +865,7 @@ test_filter_path_apis(void) } /* Verify the table is full */ - if (H5PLsize() != 16) TEST_ERROR + if (H5PLsize() != H5PL_MAX_PATH_NUM) TEST_ERROR /* Verify that the entries were moved */ if (H5PLget(8, pathname, 256) <= 0) @@ -901,7 +901,7 @@ test_filter_path_apis(void) } /* Verify the table is full */ - if (H5PLsize() != 16) TEST_ERROR + if (H5PLsize() != H5PL_MAX_PATH_NUM) TEST_ERROR /* Verify that the entries were not moved */ if (H5PLget(0, pathname, 256) <= 0) @@ -952,7 +952,7 @@ test_filter_path_apis(void) PASSED(); /* Verify the table is full */ - if (H5PLsize() != 16) TEST_ERROR + if (H5PLsize() != H5PL_MAX_PATH_NUM) TEST_ERROR TESTING(" insert (exceed)"); /* Exceed the max path insert */ -- cgit v0.12 From b46aa5aff7119236fcbf726169bdc3ddaf69bc95 Mon Sep 17 00:00:00 2001 From: Allen Byrne Date: Thu, 30 Mar 2017 16:48:10 -0500 Subject: Fix code error and use H5PL_MAX_PATH_NUM in test --- src/H5PL.c | 3 +-- test/plugin.c | 30 +++++++++++++++++------------- 2 files changed, 18 insertions(+), 15 deletions(-) diff --git a/src/H5PL.c b/src/H5PL.c index 78ccd88..b5a55f5 100644 --- a/src/H5PL.c +++ b/src/H5PL.c @@ -427,7 +427,6 @@ H5PLappend(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 = H5MM_strdup(plugin_path))) HGOTO_ERROR(H5E_PLUGIN, H5E_CANTALLOC, FAIL, "can't allocate memory for path") @@ -597,7 +596,7 @@ done: ssize_t H5PLget(unsigned int index, char *pathname/*out*/, size_t size) { - ssize_t ret_value = FAIL; /* Return value */ + ssize_t ret_value = 0; /* Return value */ ssize_t len = 0; /* Length of pathname */ char *dl_path = NULL; diff --git a/test/plugin.c b/test/plugin.c index 3c1a71a..19a1e42 100644 --- a/test/plugin.c +++ b/test/plugin.c @@ -746,6 +746,7 @@ test_filter_path_apis(void) herr_t ret; int pathlen = -1; char pathname[256]; + char tempname[256]; HDputs("Testing access to the filter path table"); @@ -788,7 +789,7 @@ test_filter_path_apis(void) TESTING(" append (exceed)"); /* Exceed the max path append */ H5E_BEGIN_TRY { - HDsprintf(pathname, "a_path_%d", 16); + HDsprintf(pathname, "a_path_%d", H5PL_MAX_PATH_NUM); ret = H5PLappend(pathname); } H5E_END_TRY if (ret >= 0) @@ -827,10 +828,11 @@ test_filter_path_apis(void) HDfprintf(stderr," get 1: %s\n", pathname); TEST_ERROR } - if ((pathlen = H5PLget(15, pathname, 256)) <= 0) + if ((pathlen = H5PLget(H5PL_MAX_PATH_NUM - 1, pathname, 256)) <= 0) TEST_ERROR - if (strcmp(pathname, "a_path_15") != 0) { - HDfprintf(stderr," get 15: %s\n", pathname); + HDsprintf(tempname, "a_path_%d", H5PL_MAX_PATH_NUM - 1); + if (strcmp(pathname, tempname") != 0) { + HDfprintf(stderr," get %d: %s\n", H5PL_MAX_PATH_NUM - 1, pathname); TEST_ERROR } PASSED(); @@ -854,13 +856,13 @@ test_filter_path_apis(void) PASSED(); /* Verify the table is not full */ - if (H5PLsize() != 15) TEST_ERROR + if (H5PLsize() != H5PL_MAX_PATH_NUM - 1) TEST_ERROR TESTING(" prepend"); /* Prepend one path*/ - HDsprintf(pathname, "a_path_%d", 17); + HDsprintf(pathname, "a_path_%d", H5PL_MAX_PATH_NUM + 1); if (H5PLprepend(pathname) < 0) { - HDfprintf(stderr," prepend 17: %s\n", pathname); + HDfprintf(stderr," prepend %d: %s\n", H5PL_MAX_PATH_NUM + 1, pathname); TEST_ERROR } @@ -876,7 +878,8 @@ test_filter_path_apis(void) } if (H5PLget(0, pathname, 256) <= 0) TEST_ERROR - if (strcmp(pathname, "a_path_17") != 0) { + HDsprintf(tempname, "a_path_%d", H5PL_MAX_PATH_NUM + 1); + if (strcmp(pathname, tempname") != 0) { HDfprintf(stderr," get 0: %s\n", pathname); TEST_ERROR } @@ -885,7 +888,7 @@ test_filter_path_apis(void) TESTING(" prepend (exceed)"); /* Exceed the max path prepend */ H5E_BEGIN_TRY { - HDsprintf(pathname, "a_path_%d", 18); + HDsprintf(pathname, "a_path_%d", H5PL_MAX_PATH_NUM + 2); ret = H5PLprepend(pathname); } H5E_END_TRY if (ret >= 0) @@ -894,7 +897,7 @@ test_filter_path_apis(void) TESTING(" replace"); /* Replace one path*/ - HDsprintf(pathname, "a_path_%d", 20); + HDsprintf(pathname, "a_path_%d", H5PL_MAX_PATH_NUM + 4); if (H5PLreplace(pathname, 1) < 0) { HDfprintf(stderr," replace 1: %s\n", pathname); TEST_ERROR @@ -906,7 +909,8 @@ test_filter_path_apis(void) /* Verify that the entries were not moved */ if (H5PLget(0, pathname, 256) <= 0) TEST_ERROR - if (strcmp(pathname, "a_path_17") != 0) { + HDsprintf(tempname, "a_path_%d", H5PL_MAX_PATH_NUM + 1); + if (strcmp(pathname, tempname") != 0) { HDfprintf(stderr," get 0: %s\n", pathname); TEST_ERROR } @@ -936,7 +940,7 @@ test_filter_path_apis(void) TESTING(" insert"); /* Insert one path*/ - HDsprintf(pathname, "a_path_%d", 21); + HDsprintf(pathname, "a_path_%d", H5PL_MAX_PATH_NUM + 5); if (H5PLinsert(pathname, 3) < 0){ HDfprintf(stderr," insert 3: %s\n", pathname); TEST_ERROR @@ -957,7 +961,7 @@ test_filter_path_apis(void) TESTING(" insert (exceed)"); /* Exceed the max path insert */ H5E_BEGIN_TRY { - HDsprintf(pathname, "a_path_%d", 22); + HDsprintf(pathname, "a_path_%d", H5PL_MAX_PATH_NUM + 6); ret = H5PLinsert(pathname, 12); } H5E_END_TRY if (ret >= 0) -- cgit v0.12 From e40a33f74da188ca7b633d6f6e79f698f518b650 Mon Sep 17 00:00:00 2001 From: Allen Byrne Date: Thu, 30 Mar 2017 16:55:33 -0500 Subject: HDFFV-10143 typo removed --- test/plugin.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/plugin.c b/test/plugin.c index 19a1e42..5dfdcc8 100644 --- a/test/plugin.c +++ b/test/plugin.c @@ -831,7 +831,7 @@ test_filter_path_apis(void) if ((pathlen = H5PLget(H5PL_MAX_PATH_NUM - 1, pathname, 256)) <= 0) TEST_ERROR HDsprintf(tempname, "a_path_%d", H5PL_MAX_PATH_NUM - 1); - if (strcmp(pathname, tempname") != 0) { + if (strcmp(pathname, tempname) != 0) { HDfprintf(stderr," get %d: %s\n", H5PL_MAX_PATH_NUM - 1, pathname); TEST_ERROR } -- cgit v0.12 From 8e663833939f5604c608ddaccdcb6cdb6d9d2003 Mon Sep 17 00:00:00 2001 From: Allen Byrne Date: Thu, 30 Mar 2017 17:03:08 -0500 Subject: HDFFV-10143 typo cleanup --- test/plugin.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/test/plugin.c b/test/plugin.c index 5dfdcc8..b7ca52b 100644 --- a/test/plugin.c +++ b/test/plugin.c @@ -741,10 +741,10 @@ error: static herr_t test_filter_path_apis(void) { - int i; + unsigned int i; unsigned int ndx; herr_t ret; - int pathlen = -1; + ssize_t pathlen = -1; char pathname[256]; char tempname[256]; @@ -879,7 +879,7 @@ test_filter_path_apis(void) if (H5PLget(0, pathname, 256) <= 0) TEST_ERROR HDsprintf(tempname, "a_path_%d", H5PL_MAX_PATH_NUM + 1); - if (strcmp(pathname, tempname") != 0) { + if (strcmp(pathname, tempname) != 0) { HDfprintf(stderr," get 0: %s\n", pathname); TEST_ERROR } @@ -910,7 +910,7 @@ test_filter_path_apis(void) if (H5PLget(0, pathname, 256) <= 0) TEST_ERROR HDsprintf(tempname, "a_path_%d", H5PL_MAX_PATH_NUM + 1); - if (strcmp(pathname, tempname") != 0) { + if (strcmp(pathname, tempname) != 0) { HDfprintf(stderr," get 0: %s\n", pathname); TEST_ERROR } -- cgit v0.12 From 1eb4693aa895fa13e35173907f65f92051ff0cd5 Mon Sep 17 00:00:00 2001 From: Allen Byrne Date: Thu, 30 Mar 2017 17:11:50 -0500 Subject: HDFFV-10143 surround will fail with try block --- test/plugin.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/test/plugin.c b/test/plugin.c index b7ca52b..fca8916 100644 --- a/test/plugin.c +++ b/test/plugin.c @@ -838,7 +838,10 @@ test_filter_path_apis(void) PASSED(); TESTING(" get (bounds exceed)"); - if ((pathlen = H5PLget(H5PL_MAX_PATH_NUM, NULL, 0)) > 0) + H5E_BEGIN_TRY { + pathlen = H5PLget(H5PL_MAX_PATH_NUM, NULL, 0); + } H5E_END_TRY + if (pathlen > 0) TEST_ERROR PASSED(); -- cgit v0.12 From 0892bf320cba6e5a3b83db41519a4000c2f5e3c4 Mon Sep 17 00:00:00 2001 From: Allen Byrne Date: Thu, 30 Mar 2017 17:40:44 -0500 Subject: HDFFV-10143 fix use before set --- src/H5PL.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/H5PL.c b/src/H5PL.c index b5a55f5..fe7b26b 100644 --- a/src/H5PL.c +++ b/src/H5PL.c @@ -564,7 +564,7 @@ H5PLremove(unsigned int index) HGOTO_ERROR(H5E_PLUGIN, H5E_NOSPACE, FAIL, "no directories in table") if(NULL == H5PL_path_table_g[index]) HGOTO_ERROR(H5E_PLUGIN, H5E_CANTALLOC, FAIL, "no directory path at index") - H5PL_path_table_g[plindex] = (char *)H5MM_xfree(H5PL_path_table_g[plindex]); + H5PL_path_table_g[index] = (char *)H5MM_xfree(H5PL_path_table_g[index]); for(plindex = index; plindex < (unsigned int)H5PL_num_paths_g; plindex++) H5PL_path_table_g[plindex] = H5PL_path_table_g[plindex + 1]; H5PL_num_paths_g--; -- cgit v0.12 From d86d708aea48a4ca3d569c1c00c7bfa45e54e6dd Mon Sep 17 00:00:00 2001 From: Allen Byrne Date: Mon, 3 Apr 2017 11:33:01 -0500 Subject: Update tools issues --- release_docs/RELEASE.txt | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/release_docs/RELEASE.txt b/release_docs/RELEASE.txt index 22accd3..9780dc2 100644 --- a/release_docs/RELEASE.txt +++ b/release_docs/RELEASE.txt @@ -77,7 +77,7 @@ New Features The page buffering layer in the HDF5 library absorbs small accesses to the file system. Each page in memory corresponds to a page allocated in the file. Access to the file system is then performed as a single page - or multiple of pages, if they are contiguous. This ensures that small + or multiple of pages, if they are contiguous. This ensures that small accesses to the file system are avoided while providing another caching layer for improved I/O performance. This feature works in conjunction with the paged aggregation feature. @@ -139,7 +139,7 @@ Bug Fixes since HDF5-1.10.0-patch1 release (HDFFV-9940 VC 2016/07/03, 2016/07/06) - (a) Throw an error instead of assertion when v1 btree level hits the 1 byte limit. - (b) Modifications to better handle error recovery when conversion by + (b) Modifications to better handle error recovery when conversion by h5format_convert fails. (HDFFV-9434 VC 2016/05/29) @@ -172,6 +172,13 @@ Bug Fixes since HDF5-1.10.0-patch1 release - h5repack now correctly parses the command line filter options. (HDFFV-10046 ADB 2017/01/24) + - h5diff correctly indicates error when it cannot read data due + to an unavailable filter plugin. + (HDFFV-9994 ADB 2017/01/18) + + - h5repack allows the --enable-error-stack option on the command line. + (HDFFV-775 ADB 2016/08/08) + High-Level APIs: ------ - -- cgit v0.12 From 1f88a34fa75861d862a8186015e9238a426ea743 Mon Sep 17 00:00:00 2001 From: Allen Byrne Date: Mon, 3 Apr 2017 12:34:17 -0500 Subject: Update with checks for index bounds --- src/H5PL.c | 11 ++++++++++- test/plugin.c | 25 ++++++++++++++----------- 2 files changed, 24 insertions(+), 12 deletions(-) diff --git a/src/H5PL.c b/src/H5PL.c index fe7b26b..bfa3ace 100644 --- a/src/H5PL.c +++ b/src/H5PL.c @@ -494,6 +494,8 @@ 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") + if(index >= H5PL_MAX_PATH_NUM) + HGOTO_ERROR(H5E_PLUGIN, H5E_NOSPACE, FAIL, "index path out of bounds for table") if(NULL == (dl_path = H5MM_strdup(plugin_path))) HGOTO_ERROR(H5E_PLUGIN, H5E_CANTALLOC, FAIL, "can't allocate memory for path") @@ -529,6 +531,8 @@ 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") + if(index >= H5PL_MAX_PATH_NUM) + HGOTO_ERROR(H5E_PLUGIN, H5E_NOSPACE, FAIL, "index path out of bounds for table") if(NULL == (dl_path = H5MM_strdup(plugin_path))) HGOTO_ERROR(H5E_PLUGIN, H5E_CANTALLOC, FAIL, "can't allocate memory for path") @@ -562,12 +566,15 @@ H5PLremove(unsigned int index) FUNC_ENTER_API(FAIL) if(H5PL_num_paths_g == 0) HGOTO_ERROR(H5E_PLUGIN, H5E_NOSPACE, FAIL, "no directories in table") + if(index >= H5PL_MAX_PATH_NUM) + HGOTO_ERROR(H5E_PLUGIN, H5E_NOSPACE, FAIL, "index path out of bounds for table") if(NULL == H5PL_path_table_g[index]) HGOTO_ERROR(H5E_PLUGIN, H5E_CANTALLOC, FAIL, "no directory path at index") H5PL_path_table_g[index] = (char *)H5MM_xfree(H5PL_path_table_g[index]); + + H5PL_num_paths_g--; for(plindex = index; plindex < (unsigned int)H5PL_num_paths_g; plindex++) H5PL_path_table_g[plindex] = H5PL_path_table_g[plindex + 1]; - H5PL_num_paths_g--; H5PL_path_table_g[H5PL_num_paths_g] = NULL; done: @@ -603,6 +610,8 @@ H5PLget(unsigned int index, char *pathname/*out*/, size_t size) FUNC_ENTER_API(FAIL) if(H5PL_num_paths_g == 0) HGOTO_ERROR(H5E_PLUGIN, H5E_NOSPACE, FAIL, "no directories in table") + if(index >= H5PL_MAX_PATH_NUM) + HGOTO_ERROR(H5E_PLUGIN, H5E_NOSPACE, FAIL, "index path out of bounds for 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); diff --git a/test/plugin.c b/test/plugin.c index fca8916..6c14062 100644 --- a/test/plugin.c +++ b/test/plugin.c @@ -750,6 +750,8 @@ test_filter_path_apis(void) HDputs("Testing access to the filter path table"); + if(H5Zfilter_avail(H5Z_FILTER_DYNLIB1) != TRUE) TEST_ERROR + ndx = H5PLsize(); TESTING(" remove"); @@ -764,7 +766,7 @@ test_filter_path_apis(void) if (H5PLsize() > 0) TEST_ERROR PASSED(); - TESTING(" remove (exceed)"); + TESTING(" remove (exceed min)"); /* Exceed the min path removal */ H5E_BEGIN_TRY { ret = H5PLremove(0); @@ -795,6 +797,7 @@ test_filter_path_apis(void) if (ret >= 0) TEST_ERROR + TESTING(" remove (exceed max)"); /* Exceed the max path removal */ H5E_BEGIN_TRY { ret = H5PLremove(H5PL_MAX_PATH_NUM); @@ -815,7 +818,7 @@ test_filter_path_apis(void) HDfprintf(stderr," get 0 len: %d : %s\n", pathlen, pathname); TEST_ERROR } - if (strcmp(pathname, "a_path_0") != 0) { + if (HDstrcmp(pathname, "a_path_0") != 0) { HDfprintf(stderr," get 0: %s\n", pathname); TEST_ERROR } @@ -824,14 +827,14 @@ test_filter_path_apis(void) TESTING(" get (bounds)"); if ((pathlen = H5PLget(1, pathname, 256)) <= 0) TEST_ERROR - if (strcmp(pathname, "a_path_1") != 0) { + if (HDstrcmp(pathname, "a_path_1") != 0) { HDfprintf(stderr," get 1: %s\n", pathname); TEST_ERROR } if ((pathlen = H5PLget(H5PL_MAX_PATH_NUM - 1, pathname, 256)) <= 0) TEST_ERROR HDsprintf(tempname, "a_path_%d", H5PL_MAX_PATH_NUM - 1); - if (strcmp(pathname, tempname) != 0) { + if (HDstrcmp(pathname, tempname) != 0) { HDfprintf(stderr," get %d: %s\n", H5PL_MAX_PATH_NUM - 1, pathname); TEST_ERROR } @@ -852,7 +855,7 @@ test_filter_path_apis(void) /* Verify that the entries were moved */ if ((pathlen = H5PLget(8, pathname, 256)) <= 0) TEST_ERROR - if (strcmp(pathname, "a_path_9") != 0) { + if (HDstrcmp(pathname, "a_path_9") != 0) { HDfprintf(stderr," get 8: %s\n", pathname); TEST_ERROR } @@ -875,14 +878,14 @@ test_filter_path_apis(void) /* Verify that the entries were moved */ if (H5PLget(8, pathname, 256) <= 0) TEST_ERROR - if (strcmp(pathname, "a_path_7") != 0) { + if (HDstrcmp(pathname, "a_path_7") != 0) { HDfprintf(stderr," get 8: %s\n", pathname); TEST_ERROR } if (H5PLget(0, pathname, 256) <= 0) TEST_ERROR HDsprintf(tempname, "a_path_%d", H5PL_MAX_PATH_NUM + 1); - if (strcmp(pathname, tempname) != 0) { + if (HDstrcmp(pathname, tempname) != 0) { HDfprintf(stderr," get 0: %s\n", pathname); TEST_ERROR } @@ -913,13 +916,13 @@ test_filter_path_apis(void) if (H5PLget(0, pathname, 256) <= 0) TEST_ERROR HDsprintf(tempname, "a_path_%d", H5PL_MAX_PATH_NUM + 1); - if (strcmp(pathname, tempname) != 0) { + if (HDstrcmp(pathname, tempname) != 0) { HDfprintf(stderr," get 0: %s\n", pathname); TEST_ERROR } if (H5PLget(2, pathname, 256) <= 0) TEST_ERROR - if (strcmp(pathname, "a_path_1") != 0) { + if (HDstrcmp(pathname, "a_path_1") != 0) { HDfprintf(stderr," get 2: %s\n", pathname); TEST_ERROR } @@ -932,7 +935,7 @@ test_filter_path_apis(void) /* Verify that the entries were moved */ if (H5PLget(4, pathname, 256) <= 0) TEST_ERROR - if (strcmp(pathname, "a_path_4") != 0) { + if (HDstrcmp(pathname, "a_path_4") != 0) { HDfprintf(stderr," get 4: %s\n", pathname); TEST_ERROR } @@ -952,7 +955,7 @@ test_filter_path_apis(void) /* Verify that the entries were moved */ if (H5PLget(4, pathname, 256) <= 0) TEST_ERROR - if (strcmp(pathname, "a_path_2") != 0){ + if (HDstrcmp(pathname, "a_path_2") != 0){ HDfprintf(stderr," get 4: %s\n", pathname); TEST_ERROR } -- cgit v0.12 From 4bd667bfde558d7ac3fd348d9954ab572e6eb026 Mon Sep 17 00:00:00 2001 From: Allen Byrne Date: Mon, 3 Apr 2017 14:06:47 -0500 Subject: HDFFV-10143 Add plugin APIs to Java interface --- java/src/hdf/hdf5lib/H5.java | 72 +++++++++++++++++++ java/src/jni/h5plImp.c | 161 ++++++++++++++++++++++++++++++++++++++++++ java/src/jni/h5plImp.h | 63 +++++++++++++++++ java/test/JUnit-interface.txt | 3 +- java/test/TestH5PL.java | 30 ++++++++ 5 files changed, 328 insertions(+), 1 deletion(-) diff --git a/java/src/hdf/hdf5lib/H5.java b/java/src/hdf/hdf5lib/H5.java index a1099d8..88bd0e5 100644 --- a/java/src/hdf/hdf5lib/H5.java +++ b/java/src/hdf/hdf5lib/H5.java @@ -7202,6 +7202,78 @@ public class H5 implements java.io.Serializable { **/ public synchronized static native int H5PLget_loading_state() throws HDF5LibraryException; + /** + * H5PLappend inserts the plugin path at the end of the table. + * + * @param plugin_path + * IN: Path for location of filter plugin libraries. + * + * @exception HDF5LibraryException + * - Error from the HDF-5 Library. + **/ + public synchronized static native void H5PLappend(String plugin_path) throws HDF5LibraryException; + + /** + * H5PLprepend inserts the plugin path at the beginning of the table. + * + * @param plugin_path + * IN: Path for location of filter plugin libraries. + * + * @exception HDF5LibraryException + * - Error from the HDF-5 Library. + **/ + public synchronized static native void H5PLprepend(String plugin_path) throws HDF5LibraryException; + + /** + * H5PLreplace replaces the plugin path at the specified index. + * + * @param plugin_path + * IN: Path for location of filter plugin libraries. + * + * @exception HDF5LibraryException + * - Error from the HDF-5 Library. + **/ + public synchronized static native void H5PLreplace(String plugin_path, int index) throws HDF5LibraryException; + + /** + * H5PLinsert inserts the plugin path at the specified index. + * + * @param plugin_path + * IN: Path for location of filter plugin libraries. + * + * @exception HDF5LibraryException + * - Error from the HDF-5 Library. + **/ + public synchronized static native void H5PLinsert(String plugin_path, int index) throws HDF5LibraryException; + + /** + * H5PLremove removes the plugin path at the specified index. + * + * @exception HDF5LibraryException + * - Error from the HDF-5 Library. + **/ + public synchronized static native void H5PLremove(int index) throws HDF5LibraryException; + + /** + * H5PLget retrieves the plugin path at the specified index. + * + * @return the current path at the index in plugin path table + * + * @exception HDF5LibraryException + * - Error from the HDF-5 Library. + **/ + public synchronized static native String H5PLget(int index) throws HDF5LibraryException; + + /** + * H5PLsize retrieves the size of the current list of plugin paths. + * + * @return the current number of paths in the plugin path table + * + * @exception HDF5LibraryException + * - Error from the HDF-5 Library. + **/ + public synchronized static native int H5PLsize() throws HDF5LibraryException; + // //////////////////////////////////////////////////////////// // // // H5R: HDF5 1.8 Reference API Functions // diff --git a/java/src/jni/h5plImp.c b/java/src/jni/h5plImp.c index 59de3cf..34d6f8b 100644 --- a/java/src/jni/h5plImp.c +++ b/java/src/jni/h5plImp.c @@ -61,6 +61,167 @@ Java_hdf_hdf5lib_H5_H5PLget_1loading_1state return (jint)plugin_type; } /* end Java_hdf_hdf5lib_H5_H5PLget_1loading_1state */ +/* + * Class: hdf_hdf5lib_H5 + * Method: H5PLappend + * Signature: (Ljava/lang/String;)V + */ +JNIEXPORT void JNICALL +Java_hdf_hdf5lib_H5_H5PLappend + (JNIEnv *env, jclass clss, jobjectArray plugin_path) +{ + char *aName; + herr_t retVal = -1; + + PIN_JAVA_STRING(plugin_path, aName); + if (aName != NULL) { + retVal = H5PLappend(aName); + + UNPIN_JAVA_STRING(plugin_path, aName); + + if (retVal < 0) + h5libraryError(env); + } +} /* end Java_hdf_hdf5lib_H5_H5PLappend */ +/* + * Class: hdf_hdf5lib_H5 + * Method: H5PLprepend + * Signature: (Ljava/lang/String;)V + */ +JNIEXPORT void JNICALL +Java_hdf_hdf5lib_H5_H5PLprepend + (JNIEnv *env, jclass clss, jobjectArray plugin_path) +{ + char *aName; + herr_t retVal = -1; + + PIN_JAVA_STRING(plugin_path, aName); + if (aName != NULL) { + retVal = H5PLprepend(aName); + + UNPIN_JAVA_STRING(plugin_path, aName); + + if (retVal < 0) + h5libraryError(env); + } +} /* end Java_hdf_hdf5lib_H5_H5PLprepend */ + +/* + * Class: hdf_hdf5lib_H5 + * Method: H5PLreplace + * Signature: (Ljava/lang/String;I)V + */ +JNIEXPORT void JNICALL +Java_hdf_hdf5lib_H5_H5PLreplace + (JNIEnv *env, jclass clss, jobjectArray plugin_path, jint index) +{ + char *aName; + herr_t retVal = -1; + + PIN_JAVA_STRING(plugin_path, aName); + if (aName != NULL) { + retVal = H5PLreplace(aName, index); + + UNPIN_JAVA_STRING(plugin_path, aName); + + if (retVal < 0) + h5libraryError(env); + } +} /* end Java_hdf_hdf5lib_H5_H5PLreplace */ + +/* + * Class: hdf_hdf5lib_H5 + * Method: H5PLinsert + * Signature: (Ljava/lang/String;I)V + */ +JNIEXPORT void JNICALL +Java_hdf_hdf5lib_H5_H5PLinsert + (JNIEnv *env, jclass clss, jobjectArray plugin_path, jint index) +{ + char *aName; + herr_t retVal = -1; + + PIN_JAVA_STRING(plugin_path, aName); + if (aName != NULL) { + retVal = H5PLinsert(aName, index); + + UNPIN_JAVA_STRING(plugin_path, aName); + + if (retVal < 0) + h5libraryError(env); + } +} /* end Java_hdf_hdf5lib_H5_H5PLinsert */ + +/* + * Class: hdf_hdf5lib_H5 + * Method: H5PLremove + * Signature: (I)V + */ +JNIEXPORT void JNICALL +Java_hdf_hdf5lib_H5_H5PLremove + (JNIEnv *env, jclass clss, jint index) +{ + if (H5PLremove(index) < 0) + h5libraryError(env); +} /* end Java_hdf_hdf5lib_H5_H5PLremove */ + +/* + * Class: hdf_hdf5lib_H5 + * Method: H5PLget + * Signature: (I)Ljava/lang/String; + */ +JNIEXPORT jstring JNICALL +Java_hdf_hdf5lib_H5_H5PLget + (JNIEnv *env, jclass clss, jint index) +{ + char *aName; + jstring str = NULL; + ssize_t buf_size; + + /* get the length of the name */ + buf_size = H5PLget(index, NULL, 0); + + if (buf_size <= 0) { + h5badArgument(env, "H5PLget: buf_size <= 0"); + } /* end if */ + else { + buf_size++; /* add extra space for the null terminator */ + aName = (char*)HDmalloc(sizeof(char) * (size_t)buf_size); + if (aName == NULL) { + h5outOfMemory(env, "H5PLget: malloc failed"); + } /* end if */ + else { + buf_size = H5PLget(index, aName, (size_t)buf_size); + if (buf_size < 0) { + h5libraryError(env); + } /* end if */ + else { + str = ENVPTR->NewStringUTF(ENVPAR aName); + } + HDfree(aName); + } + } + return str; +} /* end Java_hdf_hdf5lib_H5_H5PLget */ + +/* + * Class: hdf_hdf5lib_H5 + * Method: H5PLsize + * Signature: (V)I + */ +JNIEXPORT jint JNICALL +Java_hdf_hdf5lib_H5_H5PLsize + (JNIEnv *env, jclass clss) +{ + int retVal = -1; + + retVal = H5PLsize(); + if (retVal < 0) + h5libraryError(env); + + return (jint)retVal; +} /* end Java_hdf_hdf5lib_H5_H5PLsize */ + #ifdef __cplusplus } /* end extern "C" */ #endif /* __cplusplus */ diff --git a/java/src/jni/h5plImp.h b/java/src/jni/h5plImp.h index d0507a8..5326a94 100644 --- a/java/src/jni/h5plImp.h +++ b/java/src/jni/h5plImp.h @@ -41,6 +41,69 @@ JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5PLget_1loading_1state (JNIEnv *, jclass); +/* + * Class: hdf_hdf5lib_H5 + * Method: H5PLappend + * Signature: (Ljava/lang/String;)V + */ +JNIEXPORT void JNICALL +Java_hdf_hdf5lib_H5_H5PLappend + (JNIEnv *, jclass, jobjectArray); + +/* + * Class: hdf_hdf5lib_H5 + * Method: H5PLprepend + * Signature: (Ljava/lang/String;)V + */ +JNIEXPORT void JNICALL +Java_hdf_hdf5lib_H5_H5PLprepend + (JNIEnv *, jclass, jobjectArray); + +/* + * Class: hdf_hdf5lib_H5 + * Method: H5PLreplace + * Signature: (Ljava/lang/String;I)V + */ +JNIEXPORT void JNICALL +Java_hdf_hdf5lib_H5_H5PLreplace + (JNIEnv *, jclass, jobjectArray, jint); + +/* + * Class: hdf_hdf5lib_H5 + * Method: H5PLinsert + * Signature: (Ljava/lang/String;I)V + */ +JNIEXPORT void JNICALL +Java_hdf_hdf5lib_H5_H5PLinsert + (JNIEnv *, jclass, jobjectArray, jint); + +/* + * Class: hdf_hdf5lib_H5 + * Method: H5PLremove + * Signature: (I)V + */ +JNIEXPORT void JNICALL +Java_hdf_hdf5lib_H5_H5PLremove + (JNIEnv *, jclass, jint); + +/* + * Class: hdf_hdf5lib_H5 + * Method: H5PLget + * Signature: (I)Ljava/lang/String; + */ +JNIEXPORT jstring JNICALL +Java_hdf_hdf5lib_H5_H5PLget + (JNIEnv *, jclass, jint); + +/* + * Class: hdf_hdf5lib_H5 + * Method: H5PLsize + * Signature: (V)I + */ +JNIEXPORT jint JNICALL +Java_hdf_hdf5lib_H5_H5PLsize + (JNIEnv *, jclass); + #ifdef __cplusplus } /* end extern "C" */ #endif /* __cplusplus */ diff --git a/java/test/JUnit-interface.txt b/java/test/JUnit-interface.txt index cae8cef..ab2f3b1 100644 --- a/java/test/JUnit-interface.txt +++ b/java/test/JUnit-interface.txt @@ -633,13 +633,14 @@ JUnit version 4.11 .testH5Ocomment_clear .testH5Ocopy_cur_not_exists .TestH5PLplugins +.TestH5PLpaths .testH5Zfilter_avail .testH5Zunregister_predefined .testH5Zget_filter_info Time: XXXX -OK (637 tests) +OK (638 tests) HDF5-DIAG: Error detected in HDF5 (version (number)) thread (IDs): #000: (file name) line (number) in H5Fopen(): can't set access and transfer property lists diff --git a/java/test/TestH5PL.java b/java/test/TestH5PL.java index 9f1876c..759db5f 100644 --- a/java/test/TestH5PL.java +++ b/java/test/TestH5PL.java @@ -69,6 +69,36 @@ public class TestH5PL { } } + @Test + public void TestH5PLpaths() { + try { + int original_entries = H5.H5PLsize(); + H5.H5PLappend("path_one"); + int plugin_entries = H5.H5PLsize(); + assertTrue("H5.H5PLsize: "+plugin_entries, (original_entries+1) == plugin_entries); + H5.H5PLprepend("path_two"); + plugin_entries = H5.H5PLsize(); + assertTrue("H5.H5PLsize: "+plugin_entries, (original_entries+2) == plugin_entries); + H5.H5PLinsert("path_three", original_entries); + plugin_entries = H5.H5PLsize(); + assertTrue("H5.H5PLsize: "+plugin_entries, (original_entries+3) == plugin_entries); + String first_path = H5.H5PLget(original_entries); + assertTrue("First path was : "+first_path + " ",first_path.compareToIgnoreCase("path_three")==0); + H5.H5PLreplace("path_four", original_entries); + first_path = H5.H5PLget(original_entries); + assertTrue("First path changed to : "+first_path + " ",first_path.compareToIgnoreCase("path_four")==0); + H5.H5PLremove(original_entries); + first_path = H5.H5PLget(original_entries); + assertTrue("First path now : "+first_path + " ",first_path.compareToIgnoreCase("path_two")==0); + plugin_entries = H5.H5PLsize(); + assertTrue("H5.H5PLsize: "+plugin_entries, (original_entries+2) == plugin_entries); + } + catch (Throwable err) { + err.printStackTrace(); + fail("TestH5PLpaths " + err); + } + } + @Ignore public void TestH5PLdlopen() { long file_id = -1; -- cgit v0.12 From cbdc1250ce40a7476fc1df69710b2138dd1774ac Mon Sep 17 00:00:00 2001 From: Allen Byrne Date: Tue, 4 Apr 2017 09:53:42 -0500 Subject: HDFFV-10143 clean up format and function return --- test/plugin.c | 654 +++++++++++++++++++++++++++------------------------------- 1 file changed, 306 insertions(+), 348 deletions(-) diff --git a/test/plugin.c b/test/plugin.c index 6c14062..6d4a0e1 100644 --- a/test/plugin.c +++ b/test/plugin.c @@ -44,8 +44,8 @@ const char *FILENAME[] = { /* Dataset names for testing filters */ #define DSET_DEFLATE_NAME "deflate" #define DSET_DYNLIB1_NAME "dynlib1" -#define DSET_DYNLIB2_NAME "dynlib2" -#define DSET_DYNLIB4_NAME "dynlib4" +#define DSET_DYNLIB2_NAME "dynlib2" +#define DSET_DYNLIB4_NAME "dynlib4" /* Parameters for internal filter test */ #define FILTER_CHUNK_DIM1 2 @@ -65,39 +65,36 @@ const char *FILENAME[] = { #define GROUP_ITERATION 1000 int points_deflate[DSET_DIM1][DSET_DIM2], - points_dynlib1[DSET_DIM1][DSET_DIM2], - points_dynlib2[DSET_DIM1][DSET_DIM2], - points_dynlib4[DSET_DIM1][DSET_DIM2], - points_bzip2[DSET_DIM1][DSET_DIM2]; + points_dynlib1[DSET_DIM1][DSET_DIM2], + points_dynlib2[DSET_DIM1][DSET_DIM2], + points_dynlib4[DSET_DIM1][DSET_DIM2], + points_bzip2[DSET_DIM1][DSET_DIM2]; /*------------------------------------------------------------------------- - * Function: test_filter_internal + * Function: test_filter_internal * - * Purpose: Tests writing entire data and partial data with filters + * Purpose: Tests writing entire data and partial data with filters * * Return: Success: 0 - * Failure: -1 - * - * Programmer: Raymond Lu - * 27 February 2013 - * + * Failure: -1 *------------------------------------------------------------------------- */ static herr_t test_filter_internal(hid_t fid, const char *name, hid_t dcpl) { - hid_t dataset; /* Dataset ID */ - hid_t dxpl; /* Dataset xfer property list ID */ - hid_t write_dxpl; /* Dataset xfer property list ID for writing */ - hid_t sid; /* Dataspace ID */ - const hsize_t size[2] = {DSET_DIM1, DSET_DIM2}; /* Dataspace dimensions */ + herr_t ret_value = -1; + hid_t dataset = -1; /* Dataset ID */ + hid_t dxpl = -1; /* Dataset xfer property list ID */ + hid_t write_dxpl = -1; /* Dataset xfer property list ID for writing */ + hid_t sid = -1; /* Dataspace ID */ + const hsize_t size[2] = {DSET_DIM1, DSET_DIM2}; /* Dataspace dimensions */ const hsize_t hs_offset[2] = {FILTER_HS_OFFSET1, FILTER_HS_OFFSET2}; /* Hyperslab offset */ - const hsize_t hs_size[2] = {FILTER_HS_SIZE1, FILTER_HS_SIZE2}; /* Hyperslab size */ + const hsize_t hs_size[2] = {FILTER_HS_SIZE1, FILTER_HS_SIZE2}; /* Hyperslab size */ void *tconv_buf = NULL; /* Temporary conversion buffer */ - int points[DSET_DIM1][DSET_DIM2], check[DSET_DIM1][DSET_DIM2]; - size_t i, j; /* Local index variables */ - int n = 0; + int points[DSET_DIM1][DSET_DIM2], check[DSET_DIM1][DSET_DIM2]; + size_t i, j; /* Local index variables */ + int n = 0; /* Create the data space */ if((sid = H5Screate_simple(2, size, NULL)) < 0) TEST_ERROR @@ -114,15 +111,14 @@ test_filter_internal(hid_t fid, const char *name, hid_t dcpl) TESTING(" filters (setup)"); /* Check if all the filters are available */ - if(H5Pall_filters_avail(dcpl)!=TRUE) { + if(H5Pall_filters_avail(dcpl) != TRUE) { H5_FAILED(); - HDprintf(" Line %d: Incorrect filter availability\n",__LINE__); + HDprintf(" Line %d: Incorrect filter availability\n", __LINE__); TEST_ERROR } /* end if */ /* Create the dataset */ - if((dataset = H5Dcreate2(fid, name, H5T_NATIVE_INT, sid, H5P_DEFAULT, - dcpl, H5P_DEFAULT)) < 0) TEST_ERROR + if((dataset = H5Dcreate2(fid, name, H5T_NATIVE_INT, sid, H5P_DEFAULT, dcpl, H5P_DEFAULT)) < 0) TEST_ERROR PASSED(); @@ -132,20 +128,16 @@ test_filter_internal(hid_t fid, const char *name, hid_t dcpl) */ TESTING(" filters (uninitialized read)"); - if(H5Dread(dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, dxpl, check) < 0) - TEST_ERROR; + if(H5Dread(dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, dxpl, check) < 0) TEST_ERROR; - for(i=0; i<(size_t)size[0]; i++) { - for(j=0; j<(size_t)size[1]; j++) { - if(0!=check[i][j]) { - H5_FAILED(); - HDprintf(" Read a non-zero value.\n"); - HDprintf(" At index %lu,%lu\n", - (unsigned long)i, (unsigned long)j); - TEST_ERROR - } - } - } + for(i=0; i<(size_t)size[0]; i++) + for(j=0; j<(size_t)size[1]; j++) + if(0 != check[i][j]) { + H5_FAILED(); + HDprintf(" Read a non-zero value.\n"); + HDprintf(" At index %lu,%lu\n", (unsigned long)i, (unsigned long)j); + TEST_ERROR + } /* end if */ PASSED(); /*---------------------------------------------------------------------- @@ -156,14 +148,11 @@ test_filter_internal(hid_t fid, const char *name, hid_t dcpl) TESTING(" filters (write)"); n = 0; - for(i=0; i 0; i--) { - if (H5PLremove(i-1) < 0) { + for(i=ndx; i > 0; i--) + if(H5PLremove(i-1) < 0) { HDfprintf(stderr," at %d: %s\n", i, pathname); TEST_ERROR - } - } + } /* end if */ /* Verify the table is empty */ - if (H5PLsize() > 0) TEST_ERROR + if(H5PLsize() > 0) TEST_ERROR PASSED(); TESTING(" remove (exceed min)"); @@ -771,21 +751,20 @@ test_filter_path_apis(void) H5E_BEGIN_TRY { ret = H5PLremove(0); } H5E_END_TRY - if (ret >= 0) - TEST_ERROR + if(ret >= 0) TEST_ERROR PASSED(); TESTING(" append"); /* Create multiple paths to fill table */ - for (i=0; i < H5PL_MAX_PATH_NUM; i++) { + for(i=0; i < H5PL_MAX_PATH_NUM; i++) { HDsprintf(pathname, "a_path_%d", i); - if (H5PLappend(pathname) < 0) { + if(H5PLappend(pathname) < 0) { HDfprintf(stderr," at %d: %s\n", i, pathname); TEST_ERROR } } /* Verify the table is full */ - if (H5PLsize() != H5PL_MAX_PATH_NUM) TEST_ERROR + if(H5PLsize() != H5PL_MAX_PATH_NUM) TEST_ERROR PASSED(); TESTING(" append (exceed)"); @@ -794,47 +773,42 @@ test_filter_path_apis(void) HDsprintf(pathname, "a_path_%d", H5PL_MAX_PATH_NUM); ret = H5PLappend(pathname); } H5E_END_TRY - if (ret >= 0) - TEST_ERROR + if(ret >= 0) TEST_ERROR TESTING(" remove (exceed max)"); /* Exceed the max path removal */ H5E_BEGIN_TRY { ret = H5PLremove(H5PL_MAX_PATH_NUM); } H5E_END_TRY - if (ret >= 0) - TEST_ERROR + if(ret >= 0) TEST_ERROR PASSED(); TESTING(" get (path name)"); - if ((pathlen = H5PLget(0, NULL, 0)) <= 0) { + if((pathlen = H5PLget(0, NULL, 0)) <= 0) { HDfprintf(stderr," get path 0 length failed\n"); TEST_ERROR } - if (pathlen != 8) { - TEST_ERROR - } - if ((pathlen = H5PLget(0, pathname, 256)) <= 0) { + if(pathlen != 8) TEST_ERROR + + if((pathlen = H5PLget(0, pathname, 256)) <= 0) { HDfprintf(stderr," get 0 len: %d : %s\n", pathlen, pathname); TEST_ERROR } - if (HDstrcmp(pathname, "a_path_0") != 0) { + if(HDstrcmp(pathname, "a_path_0") != 0) { HDfprintf(stderr," get 0: %s\n", pathname); TEST_ERROR } PASSED(); TESTING(" get (bounds)"); - if ((pathlen = H5PLget(1, pathname, 256)) <= 0) - TEST_ERROR - if (HDstrcmp(pathname, "a_path_1") != 0) { + if((pathlen = H5PLget(1, pathname, 256)) <= 0) TEST_ERROR + if(HDstrcmp(pathname, "a_path_1") != 0) { HDfprintf(stderr," get 1: %s\n", pathname); TEST_ERROR } - if ((pathlen = H5PLget(H5PL_MAX_PATH_NUM - 1, pathname, 256)) <= 0) - TEST_ERROR + if((pathlen = H5PLget(H5PL_MAX_PATH_NUM - 1, pathname, 256)) <= 0) TEST_ERROR HDsprintf(tempname, "a_path_%d", H5PL_MAX_PATH_NUM - 1); - if (HDstrcmp(pathname, tempname) != 0) { + if(HDstrcmp(pathname, tempname) != 0) { HDfprintf(stderr," get %d: %s\n", H5PL_MAX_PATH_NUM - 1, pathname); TEST_ERROR } @@ -844,18 +818,16 @@ test_filter_path_apis(void) H5E_BEGIN_TRY { pathlen = H5PLget(H5PL_MAX_PATH_NUM, NULL, 0); } H5E_END_TRY - if (pathlen > 0) - TEST_ERROR + if(pathlen > 0) TEST_ERROR PASSED(); TESTING(" remove (verify for prepend)"); /* Remove one path*/ - if (H5PLremove(8) < 0) TEST_ERROR + if(H5PLremove(8) < 0) TEST_ERROR /* Verify that the entries were moved */ - if ((pathlen = H5PLget(8, pathname, 256)) <= 0) - TEST_ERROR - if (HDstrcmp(pathname, "a_path_9") != 0) { + if((pathlen = H5PLget(8, pathname, 256)) <= 0) TEST_ERROR + if(HDstrcmp(pathname, "a_path_9") != 0) { HDfprintf(stderr," get 8: %s\n", pathname); TEST_ERROR } @@ -867,25 +839,23 @@ test_filter_path_apis(void) TESTING(" prepend"); /* Prepend one path*/ HDsprintf(pathname, "a_path_%d", H5PL_MAX_PATH_NUM + 1); - if (H5PLprepend(pathname) < 0) { + if(H5PLprepend(pathname) < 0) { HDfprintf(stderr," prepend %d: %s\n", H5PL_MAX_PATH_NUM + 1, pathname); TEST_ERROR } /* Verify the table is full */ - if (H5PLsize() != H5PL_MAX_PATH_NUM) TEST_ERROR + if(H5PLsize() != H5PL_MAX_PATH_NUM) TEST_ERROR /* Verify that the entries were moved */ - if (H5PLget(8, pathname, 256) <= 0) - TEST_ERROR - if (HDstrcmp(pathname, "a_path_7") != 0) { + if(H5PLget(8, pathname, 256) <= 0) TEST_ERROR + if(HDstrcmp(pathname, "a_path_7") != 0) { HDfprintf(stderr," get 8: %s\n", pathname); TEST_ERROR } - if (H5PLget(0, pathname, 256) <= 0) - TEST_ERROR + if(H5PLget(0, pathname, 256) <= 0) TEST_ERROR HDsprintf(tempname, "a_path_%d", H5PL_MAX_PATH_NUM + 1); - if (HDstrcmp(pathname, tempname) != 0) { + if(HDstrcmp(pathname, tempname) != 0) { HDfprintf(stderr," get 0: %s\n", pathname); TEST_ERROR } @@ -897,32 +867,29 @@ test_filter_path_apis(void) HDsprintf(pathname, "a_path_%d", H5PL_MAX_PATH_NUM + 2); ret = H5PLprepend(pathname); } H5E_END_TRY - if (ret >= 0) - TEST_ERROR + if(ret >= 0) TEST_ERROR PASSED(); TESTING(" replace"); /* Replace one path*/ HDsprintf(pathname, "a_path_%d", H5PL_MAX_PATH_NUM + 4); - if (H5PLreplace(pathname, 1) < 0) { + if(H5PLreplace(pathname, 1) < 0) { HDfprintf(stderr," replace 1: %s\n", pathname); TEST_ERROR } /* Verify the table is full */ - if (H5PLsize() != H5PL_MAX_PATH_NUM) TEST_ERROR + if(H5PLsize() != H5PL_MAX_PATH_NUM) TEST_ERROR /* Verify that the entries were not moved */ - if (H5PLget(0, pathname, 256) <= 0) - TEST_ERROR + if(H5PLget(0, pathname, 256) <= 0) TEST_ERROR HDsprintf(tempname, "a_path_%d", H5PL_MAX_PATH_NUM + 1); - if (HDstrcmp(pathname, tempname) != 0) { + if(HDstrcmp(pathname, tempname) != 0) { HDfprintf(stderr," get 0: %s\n", pathname); TEST_ERROR } - if (H5PLget(2, pathname, 256) <= 0) - TEST_ERROR - if (HDstrcmp(pathname, "a_path_1") != 0) { + if(H5PLget(2, pathname, 256) <= 0) TEST_ERROR + if(HDstrcmp(pathname, "a_path_1") != 0) { HDfprintf(stderr," get 2: %s\n", pathname); TEST_ERROR } @@ -930,39 +897,37 @@ test_filter_path_apis(void) TESTING(" remove (verify for insert)"); /* Remove one path*/ - if (H5PLremove(4) < 0) TEST_ERROR + if H5PLremove(4) < 0) TEST_ERROR /* Verify that the entries were moved */ - if (H5PLget(4, pathname, 256) <= 0) - TEST_ERROR - if (HDstrcmp(pathname, "a_path_4") != 0) { + if H5PLget(4, pathname, 256) <= 0) TEST_ERROR + if(HDstrcmp(pathname, "a_path_4") != 0) { HDfprintf(stderr," get 4: %s\n", pathname); TEST_ERROR } PASSED(); /* Verify the table is not full */ - if (H5PLsize() != 15) TEST_ERROR + if(H5PLsize() != 15) TEST_ERROR TESTING(" insert"); /* Insert one path*/ HDsprintf(pathname, "a_path_%d", H5PL_MAX_PATH_NUM + 5); - if (H5PLinsert(pathname, 3) < 0){ + if(H5PLinsert(pathname, 3) < 0) { HDfprintf(stderr," insert 3: %s\n", pathname); TEST_ERROR } /* Verify that the entries were moved */ - if (H5PLget(4, pathname, 256) <= 0) - TEST_ERROR - if (HDstrcmp(pathname, "a_path_2") != 0){ + if(H5PLget(4, pathname, 256) <= 0) TEST_ERROR + if(HDstrcmp(pathname, "a_path_2") != 0) { HDfprintf(stderr," get 4: %s\n", pathname); TEST_ERROR } PASSED(); /* Verify the table is full */ - if (H5PLsize() != H5PL_MAX_PATH_NUM) TEST_ERROR + if(H5PLsize() != H5PL_MAX_PATH_NUM) TEST_ERROR TESTING(" insert (exceed)"); /* Exceed the max path insert */ @@ -970,15 +935,14 @@ test_filter_path_apis(void) HDsprintf(pathname, "a_path_%d", H5PL_MAX_PATH_NUM + 6); ret = H5PLinsert(pathname, 12); } H5E_END_TRY - if (ret >= 0) - TEST_ERROR + if(ret >= 0) TEST_ERROR - PASSED (); + PASSED(); - return 0; + ret_value = 0; error: - return -1; + return ret_value; } @@ -1000,24 +964,24 @@ int main(void) { char filename[FILENAME_BUF_SIZE]; - hid_t file, fapl, fapl2; - unsigned new_format; - int mdc_nelmts; - size_t rdcc_nelmts; - size_t rdcc_nbytes; - double rdcc_w0; - int nerrors = 0; + hid_t file = -1; + hid_t fapl = -1; + hid_t fapl2 = -1; + unsigned new_format; + int mdc_nelmts; + size_t rdcc_nelmts; + size_t rdcc_nbytes; + double rdcc_w0; + int nerrors = 0; /* Testing setup */ h5_reset(); fapl = h5_fileaccess(); /* Turn off the chunk cache, so all the chunks are immediately written to disk */ - if(H5Pget_cache(fapl, &mdc_nelmts, &rdcc_nelmts, &rdcc_nbytes, &rdcc_w0) < 0) - TEST_ERROR + if(H5Pget_cache(fapl, &mdc_nelmts, &rdcc_nelmts, &rdcc_nbytes, &rdcc_w0) < 0) TEST_ERROR rdcc_nbytes = 0; - if(H5Pset_cache(fapl, mdc_nelmts, rdcc_nelmts, rdcc_nbytes, rdcc_w0) < 0) - TEST_ERROR + if(H5Pset_cache(fapl, mdc_nelmts, rdcc_nelmts, rdcc_nbytes, rdcc_w0) < 0) TEST_ERROR /* Copy the file access property list */ if((fapl2 = H5Pcopy(fapl)) < 0) TEST_ERROR @@ -1042,8 +1006,7 @@ main(void) } /* end else */ /* Create the file for this test */ - if((file = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, my_fapl)) < 0) - TEST_ERROR + if((file = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, my_fapl)) < 0) TEST_ERROR /* Test dynamically loaded filters for chunked dataset */ nerrors += (test_filters_for_datasets(file) < 0 ? 1 : 0); @@ -1051,8 +1014,7 @@ main(void) /* Test dynamically loaded filters for groups */ nerrors += (test_filters_for_groups(file) < 0 ? 1 : 0); - if(H5Fclose(file) < 0) - TEST_ERROR + if(H5Fclose(file) < 0) TEST_ERROR } /* end for */ /* Close FAPL */ @@ -1069,14 +1031,13 @@ main(void) fapl = h5_fileaccess(); /* Reopen the file for testing data reading */ - if((file = H5Fopen(filename, H5F_ACC_RDONLY, fapl)) < 0) - TEST_ERROR + if((file = H5Fopen(filename, H5F_ACC_RDONLY, fapl)) < 0) TEST_ERROR /* Read the data with filters */ - nerrors += (test_read_with_filters(file) < 0 ? 1 : 0); + nerrors += (test_read_with_filters(file) < 0 ? 1 : 0); /* Open the groups with filters */ - nerrors += (test_groups_with_filters(file) < 0 ? 1 : 0); + nerrors += (test_groups_with_filters(file) < 0 ? 1 : 0); /* Restore the default error handler (set in h5_reset()) */ h5_restore_err(); @@ -1086,20 +1047,18 @@ main(void) fapl = h5_fileaccess(); /* Reopen the file for testing data reading */ - if((file = H5Fopen(filename, H5F_ACC_RDONLY, fapl)) < 0) - TEST_ERROR + if((file = H5Fopen(filename, H5F_ACC_RDONLY, fapl)) < 0) TEST_ERROR /* Read the data with disabled filters */ nerrors += (test_noread_with_filters(file) < 0 ? 1 : 0); - if(H5Fclose(file) < 0) - TEST_ERROR + if(H5Fclose(file) < 0) TEST_ERROR /* Test the APIs for access to the filter plugin path table */ nerrors += (test_filter_path_apis() < 0 ? 1 : 0); - if(nerrors) - TEST_ERROR + if(nerrors) TEST_ERROR + HDprintf("All plugin tests passed.\n"); h5_cleanup(FILENAME, fapl); @@ -1107,8 +1066,7 @@ main(void) error: nerrors = MAX(1, nerrors); - HDprintf("***** %d PLUGIN TEST%s FAILED! *****\n", - nerrors, 1 == nerrors ? "" : "S"); + HDprintf("***** %d PLUGIN TEST%s FAILED! *****\n", nerrors, 1 == nerrors ? "" : "S"); return 1; } -- cgit v0.12 From 9b17c2e12412492cc34f302be2cf9293109d6726 Mon Sep 17 00:00:00 2001 From: Allen Byrne Date: Tue, 4 Apr 2017 10:07:41 -0500 Subject: HDFFV-10143 Update new feature section. --- release_docs/RELEASE.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/release_docs/RELEASE.txt b/release_docs/RELEASE.txt index 9780dc2..be8cec8 100644 --- a/release_docs/RELEASE.txt +++ b/release_docs/RELEASE.txt @@ -82,6 +82,10 @@ New Features layer for improved I/O performance. This feature works in conjunction with the paged aggregation feature. + - Filter plugin API added to access the table of paths to search for a + library. Java interface expanded with wrappers for the new functions. + (HDFFV-10143 ADB 2017/04/04) + Parallel Library: ----------------- - -- cgit v0.12 From c2941faa6673022218b365ead5be24b02c47ab6a Mon Sep 17 00:00:00 2001 From: Allen Byrne Date: Tue, 4 Apr 2017 10:15:56 -0500 Subject: Fix typo deletion --- test/plugin.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/plugin.c b/test/plugin.c index 6d4a0e1..041f702 100644 --- a/test/plugin.c +++ b/test/plugin.c @@ -897,10 +897,10 @@ test_filter_path_apis(void) TESTING(" remove (verify for insert)"); /* Remove one path*/ - if H5PLremove(4) < 0) TEST_ERROR + if(H5PLremove(4) < 0) TEST_ERROR /* Verify that the entries were moved */ - if H5PLget(4, pathname, 256) <= 0) TEST_ERROR + if(H5PLget(4, pathname, 256) <= 0) TEST_ERROR if(HDstrcmp(pathname, "a_path_4") != 0) { HDfprintf(stderr," get 4: %s\n", pathname); TEST_ERROR -- cgit v0.12