mirror of
https://github.com/HDFGroup/hdf5.git
synced 2024-12-27 08:01:04 +08:00
[svn-r23386] More updates for Windows.
Tested on koala.
This commit is contained in:
parent
b587321096
commit
721b337b15
58
src/H5PL.c
58
src/H5PL.c
@ -74,6 +74,8 @@ get_filter_info = (get_filter_info_t)H5PL_GET_LIB_FUNC(H, "H5PL_get_plugin_info"
|
|||||||
ret_val = get_filter_info(); \
|
ret_val = get_filter_info(); \
|
||||||
}
|
}
|
||||||
|
|
||||||
|
typedef const H5Z_class2_t *(__cdecl *get_filter_info_t)();
|
||||||
|
|
||||||
#else /* H5_HAVE_WIN32_API */
|
#else /* H5_HAVE_WIN32_API */
|
||||||
/* Handle for dynamic library */
|
/* Handle for dynamic library */
|
||||||
#define H5PL_HANDLE void *
|
#define H5PL_HANDLE void *
|
||||||
@ -104,6 +106,7 @@ get_filter_info_t get_filter_info; \
|
|||||||
ret_val = get_filter_info(); \
|
ret_val = get_filter_info(); \
|
||||||
}
|
}
|
||||||
|
|
||||||
|
typedef const H5Z_class2_t *(*get_filter_info_t)();
|
||||||
#endif /* H5_HAVE_WIN32_API */
|
#endif /* H5_HAVE_WIN32_API */
|
||||||
|
|
||||||
|
|
||||||
@ -488,7 +491,7 @@ static htri_t
|
|||||||
H5PL__open(H5PL_type_t pl_type, char *libname, int pl_id, void **pl_info)
|
H5PL__open(H5PL_type_t pl_type, char *libname, int pl_id, void **pl_info)
|
||||||
{
|
{
|
||||||
H5PL_HANDLE handle = NULL;
|
H5PL_HANDLE handle = NULL;
|
||||||
H5Z_class2_t *plugin_info = NULL;
|
get_filter_info_t H5PL_get_plugin_info = NULL;
|
||||||
htri_t ret_value = FALSE;
|
htri_t ret_value = FALSE;
|
||||||
|
|
||||||
FUNC_ENTER_STATIC
|
FUNC_ENTER_STATIC
|
||||||
@ -500,13 +503,10 @@ H5PL__open(H5PL_type_t pl_type, char *libname, int pl_id, void **pl_info)
|
|||||||
H5PL_CLR_ERROR; /* clear error */
|
H5PL_CLR_ERROR; /* clear error */
|
||||||
} /* end if */
|
} /* end if */
|
||||||
else {
|
else {
|
||||||
#ifdef TMP
|
|
||||||
H5Z_class2_t * (*H5PL_get_plugin_info)(void);
|
|
||||||
|
|
||||||
/* Return a handle for the function H5PL_get_plugin_info in the dynamic library.
|
/* Return a handle for the function H5PL_get_plugin_info in the dynamic library.
|
||||||
* The plugin library is suppose to define this function.
|
* The plugin library is suppose to define this function.
|
||||||
*/
|
*/
|
||||||
if(NULL == (H5PL_get_plugin_info = (H5Z_class2_t *(*)(void))H5PL_GET_LIB_FUNC(handle, "H5PL_get_plugin_info"))) {
|
if(NULL == (H5PL_get_plugin_info = (get_filter_info_t)H5PL_GET_LIB_FUNC(handle, "H5PL_get_plugin_info"))) {
|
||||||
if(H5PL__close(handle) < 0)
|
if(H5PL__close(handle) < 0)
|
||||||
HGOTO_ERROR(H5E_PLUGIN, H5E_CLOSEERROR, FAIL, "can't close dynamic library")
|
HGOTO_ERROR(H5E_PLUGIN, H5E_CLOSEERROR, FAIL, "can't close dynamic library")
|
||||||
} /* end if */
|
} /* end if */
|
||||||
@ -551,42 +551,6 @@ H5PL__open(H5PL_type_t pl_type, char *libname, int pl_id, void **pl_info)
|
|||||||
if(H5PL__close(handle) < 0)
|
if(H5PL__close(handle) < 0)
|
||||||
HGOTO_ERROR(H5E_PLUGIN, H5E_CLOSEERROR, FAIL, "can't close dynamic library")
|
HGOTO_ERROR(H5E_PLUGIN, H5E_CLOSEERROR, FAIL, "can't close dynamic library")
|
||||||
} /* end if */
|
} /* end if */
|
||||||
#else
|
|
||||||
H5PL_GET_PLUGIN_INFO(handle, plugin_info);
|
|
||||||
if(NULL == plugin_info) {
|
|
||||||
if(H5PL__close(handle) < 0)
|
|
||||||
HGOTO_ERROR(H5E_PLUGIN, H5E_CLOSEERROR, FAIL, "can't close dynamic library")
|
|
||||||
HGOTO_ERROR(H5E_DATATYPE, H5E_CANTGET, FAIL, "can't get plugin info")
|
|
||||||
}
|
|
||||||
|
|
||||||
if(plugin_info->id == pl_id) {
|
|
||||||
/* Expand the table if it is too small */
|
|
||||||
if(H5PL_table_used_g >= H5PL_table_alloc_g) {
|
|
||||||
size_t n = MAX(H5Z_MAX_NFILTERS, 2 * H5PL_table_alloc_g);
|
|
||||||
H5PL_table_t *table = (H5PL_table_t *)H5MM_realloc(H5PL_table_g, n * sizeof(H5PL_table_t));
|
|
||||||
|
|
||||||
if(!table)
|
|
||||||
HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "unable to extend dynamic library table")
|
|
||||||
|
|
||||||
H5PL_table_g = table;
|
|
||||||
H5PL_table_alloc_g = n;
|
|
||||||
} /* end if */
|
|
||||||
|
|
||||||
(H5PL_table_g[H5PL_table_used_g]).handle = handle;
|
|
||||||
(H5PL_table_g[H5PL_table_used_g]).pl_type = pl_type;
|
|
||||||
(H5PL_table_g[H5PL_table_used_g]).pl_id = plugin_info->id;
|
|
||||||
/*fprintf(stderr, "%s: H5PL_table_used_g=%d, id=%d, id 2=%d\n", FUNC, H5PL_table_used_g, (H5PL_table_g[H5PL_table_used_g]).pl_id, plugin_info->id);*/
|
|
||||||
H5PL_table_used_g++;
|
|
||||||
|
|
||||||
*pl_info = (void *)plugin_info;
|
|
||||||
ret_value = TRUE;
|
|
||||||
|
|
||||||
HGOTO_DONE(ret_value)
|
|
||||||
} else
|
|
||||||
if(H5PL__close(handle) < 0)
|
|
||||||
HGOTO_ERROR(H5E_PLUGIN, H5E_CLOSEERROR, FAIL, "can't close dynamic library")
|
|
||||||
|
|
||||||
#endif
|
|
||||||
} /* end else */
|
} /* end else */
|
||||||
|
|
||||||
done:
|
done:
|
||||||
@ -614,6 +578,7 @@ H5PL__search_table(H5PL_type_t plugin_type, int type_id, void **info)
|
|||||||
{
|
{
|
||||||
size_t i;
|
size_t i;
|
||||||
H5Z_class2_t *plugin_info;
|
H5Z_class2_t *plugin_info;
|
||||||
|
get_filter_info_t H5PL_get_plugin_info = NULL;
|
||||||
htri_t ret_value = FALSE;
|
htri_t ret_value = FALSE;
|
||||||
|
|
||||||
FUNC_ENTER_STATIC
|
FUNC_ENTER_STATIC
|
||||||
@ -622,17 +587,12 @@ H5PL__search_table(H5PL_type_t plugin_type, int type_id, void **info)
|
|||||||
if(H5PL_table_used_g > 0) {
|
if(H5PL_table_used_g > 0) {
|
||||||
for(i = 0; i < H5PL_table_used_g; i++) {
|
for(i = 0; i < H5PL_table_used_g; i++) {
|
||||||
if((plugin_type == (H5PL_table_g[i]).pl_type) && (type_id == (H5PL_table_g[i]).pl_id)) {
|
if((plugin_type == (H5PL_table_g[i]).pl_type) && (type_id == (H5PL_table_g[i]).pl_id)) {
|
||||||
#ifdef TMP
|
if(NULL == (H5PL_get_plugin_info = (get_filter_info_t)H5PL_GET_LIB_FUNC((H5PL_table_g[i]).handle, "H5PL_get_plugin_info")))
|
||||||
H5Z_class2_t *(*H5PL_get_plugin_info)(void);
|
|
||||||
H5Z_class2_t *plugin_info;
|
|
||||||
|
|
||||||
if(NULL == (H5PL_get_plugin_info = (H5Z_class2_t *(*)(void))H5PL_GET_LIB_FUNC((H5PL_table_g[i]).handle, "H5PL_get_plugin_info")))
|
|
||||||
HGOTO_ERROR(H5E_DATATYPE, H5E_CANTGET, FAIL, "can't get function for H5PL_get_plugin_info")
|
HGOTO_ERROR(H5E_DATATYPE, H5E_CANTGET, FAIL, "can't get function for H5PL_get_plugin_info")
|
||||||
|
|
||||||
if(NULL == (plugin_info = (*H5PL_get_plugin_info)()))
|
if(NULL == (plugin_info = (*H5PL_get_plugin_info)()))
|
||||||
HGOTO_ERROR(H5E_DATATYPE, H5E_CANTGET, FAIL, "can't get plugin info")
|
HGOTO_ERROR(H5E_DATATYPE, H5E_CANTGET, FAIL, "can't get plugin info")
|
||||||
#else
|
|
||||||
H5PL_GET_PLUGIN_INFO((H5PL_table_g[i]).handle, plugin_info);
|
|
||||||
#endif
|
|
||||||
*info = (void *)plugin_info;
|
*info = (void *)plugin_info;
|
||||||
ret_value = TRUE;
|
ret_value = TRUE;
|
||||||
break;
|
break;
|
||||||
|
Loading…
Reference in New Issue
Block a user