mirror of
https://github.com/HDFGroup/hdf5.git
synced 2025-01-30 15:32:37 +08:00
Merge pull request #1719 in HDFFV/hdf5 from ~DEROBINS/hdf5_der:vipl to develop
* commit 'a18727bc77c90a9925cabbde8d8ec46c757c6254': Added a VOL initialization property list type.
This commit is contained in:
commit
b31a53bfcb
@ -374,6 +374,7 @@ public class HDF5Constants {
|
||||
public static final long H5P_OBJECT_COPY = H5P_OBJECT_COPY();
|
||||
public static final long H5P_LINK_CREATE = H5P_LINK_CREATE();
|
||||
public static final long H5P_LINK_ACCESS = H5P_LINK_ACCESS();
|
||||
public static final long H5P_VOL_INITIALIZE = H5P_VOL_INITIALIZE();
|
||||
public static final long H5P_FILE_CREATE_DEFAULT = H5P_FILE_CREATE_DEFAULT();
|
||||
public static final long H5P_FILE_ACCESS_DEFAULT = H5P_FILE_ACCESS_DEFAULT();
|
||||
public static final long H5P_DATASET_CREATE_DEFAULT = H5P_DATASET_CREATE_DEFAULT();
|
||||
@ -389,6 +390,7 @@ public class HDF5Constants {
|
||||
public static final long H5P_OBJECT_COPY_DEFAULT = H5P_OBJECT_COPY_DEFAULT();
|
||||
public static final long H5P_LINK_CREATE_DEFAULT = H5P_LINK_CREATE_DEFAULT();
|
||||
public static final long H5P_LINK_ACCESS_DEFAULT = H5P_LINK_ACCESS_DEFAULT();
|
||||
public static final long H5P_VOL_INITIALIZE_DEFAULT = H5P_VOL_INITIALIZE_DEFAULT();
|
||||
public static final int H5P_CRT_ORDER_TRACKED = H5P_CRT_ORDER_TRACKED();
|
||||
public static final int H5P_CRT_ORDER_INDEXED = H5P_CRT_ORDER_INDEXED();
|
||||
public static final long H5P_DEFAULT = H5P_DEFAULT();
|
||||
@ -1352,6 +1354,8 @@ public class HDF5Constants {
|
||||
|
||||
private static native final long H5P_LINK_ACCESS();
|
||||
|
||||
private static native final long H5P_VOL_INITIALIZE();
|
||||
|
||||
private static native final long H5P_FILE_CREATE_DEFAULT();
|
||||
|
||||
private static native final long H5P_FILE_ACCESS_DEFAULT();
|
||||
@ -1382,6 +1386,8 @@ public class HDF5Constants {
|
||||
|
||||
private static native final long H5P_LINK_ACCESS_DEFAULT();
|
||||
|
||||
private static native final long H5P_VOL_INITIALIZE_DEFAULT();
|
||||
|
||||
private static native final int H5P_CRT_ORDER_TRACKED();
|
||||
|
||||
private static native final int H5P_CRT_ORDER_INDEXED();
|
||||
|
@ -731,6 +731,8 @@ Java_hdf_hdf5lib_HDF5Constants_H5P_1LINK_1CREATE(JNIEnv *env, jclass cls){return
|
||||
JNIEXPORT jlong JNICALL
|
||||
Java_hdf_hdf5lib_HDF5Constants_H5P_1LINK_1ACCESS(JNIEnv *env, jclass cls){return H5P_LINK_ACCESS;}
|
||||
JNIEXPORT jlong JNICALL
|
||||
Java_hdf_hdf5lib_HDF5Constants_H5P_1VOL_1INITIALIZE(JNIEnv *env, jclass cls){return H5P_VOL_INITIALIZE;}
|
||||
JNIEXPORT jlong JNICALL
|
||||
Java_hdf_hdf5lib_HDF5Constants_H5P_1FILE_1CREATE_1DEFAULT(JNIEnv *env, jclass cls){return H5P_FILE_CREATE_DEFAULT;}
|
||||
JNIEXPORT jlong JNICALL
|
||||
Java_hdf_hdf5lib_HDF5Constants_H5P_1FILE_1ACCESS_1DEFAULT(JNIEnv *env, jclass cls){return H5P_FILE_ACCESS_DEFAULT;}
|
||||
@ -760,6 +762,8 @@ JNIEXPORT jlong JNICALL
|
||||
Java_hdf_hdf5lib_HDF5Constants_H5P_1LINK_1CREATE_1DEFAULT(JNIEnv *env, jclass cls){return H5P_LINK_CREATE_DEFAULT;}
|
||||
JNIEXPORT jlong JNICALL
|
||||
Java_hdf_hdf5lib_HDF5Constants_H5P_1LINK_1ACCESS_1DEFAULT(JNIEnv *env, jclass cls){return H5P_LINK_ACCESS_DEFAULT;}
|
||||
JNIEXPORT jlong JNICALL
|
||||
Java_hdf_hdf5lib_HDF5Constants_H5P_1VOL_1INITIALIZE_1DEFAULT(JNIEnv *env, jclass cls){return H5P_VOL_INITIALIZE_DEFAULT;}
|
||||
JNIEXPORT jint JNICALL
|
||||
Java_hdf_hdf5lib_HDF5Constants_H5P_1CRT_1ORDER_1TRACKED(JNIEnv *env, jclass cls){return H5P_CRT_ORDER_TRACKED;}
|
||||
JNIEXPORT jint JNICALL
|
||||
|
105
src/H5Pint.c
105
src/H5Pint.c
@ -127,62 +127,65 @@ static herr_t H5P__free_del_name_cb(void *item, void H5_ATTR_UNUSED *key, void H
|
||||
* Predefined property list classes. These are initialized at runtime by
|
||||
* H5P__init_package() in this source file.
|
||||
*/
|
||||
hid_t H5P_CLS_ROOT_ID_g = FAIL;
|
||||
hid_t H5P_CLS_ROOT_ID_g = H5I_INVALID_HID;
|
||||
H5P_genclass_t *H5P_CLS_ROOT_g = NULL;
|
||||
hid_t H5P_CLS_OBJECT_CREATE_ID_g = FAIL;
|
||||
hid_t H5P_CLS_OBJECT_CREATE_ID_g = H5I_INVALID_HID;
|
||||
H5P_genclass_t *H5P_CLS_OBJECT_CREATE_g = NULL;
|
||||
hid_t H5P_CLS_FILE_CREATE_ID_g = FAIL;
|
||||
hid_t H5P_CLS_FILE_CREATE_ID_g = H5I_INVALID_HID;
|
||||
H5P_genclass_t *H5P_CLS_FILE_CREATE_g = NULL;
|
||||
hid_t H5P_CLS_FILE_ACCESS_ID_g = FAIL;
|
||||
hid_t H5P_CLS_FILE_ACCESS_ID_g = H5I_INVALID_HID;
|
||||
H5P_genclass_t *H5P_CLS_FILE_ACCESS_g = NULL;
|
||||
hid_t H5P_CLS_DATASET_CREATE_ID_g = FAIL;
|
||||
hid_t H5P_CLS_DATASET_CREATE_ID_g = H5I_INVALID_HID;
|
||||
H5P_genclass_t *H5P_CLS_DATASET_CREATE_g = NULL;
|
||||
hid_t H5P_CLS_DATASET_ACCESS_ID_g = FAIL;
|
||||
hid_t H5P_CLS_DATASET_ACCESS_ID_g = H5I_INVALID_HID;
|
||||
H5P_genclass_t *H5P_CLS_DATASET_ACCESS_g = NULL;
|
||||
hid_t H5P_CLS_DATASET_XFER_ID_g = FAIL;
|
||||
hid_t H5P_CLS_DATASET_XFER_ID_g = H5I_INVALID_HID;
|
||||
H5P_genclass_t *H5P_CLS_DATASET_XFER_g = NULL;
|
||||
hid_t H5P_CLS_FILE_MOUNT_ID_g = FAIL;
|
||||
hid_t H5P_CLS_FILE_MOUNT_ID_g = H5I_INVALID_HID;
|
||||
H5P_genclass_t *H5P_CLS_FILE_MOUNT_g = NULL;
|
||||
hid_t H5P_CLS_GROUP_CREATE_ID_g = FAIL;
|
||||
hid_t H5P_CLS_GROUP_CREATE_ID_g = H5I_INVALID_HID;
|
||||
H5P_genclass_t *H5P_CLS_GROUP_CREATE_g = NULL;
|
||||
hid_t H5P_CLS_GROUP_ACCESS_ID_g = FAIL;
|
||||
hid_t H5P_CLS_GROUP_ACCESS_ID_g = H5I_INVALID_HID;
|
||||
H5P_genclass_t *H5P_CLS_GROUP_ACCESS_g = NULL;
|
||||
hid_t H5P_CLS_DATATYPE_CREATE_ID_g = FAIL;
|
||||
hid_t H5P_CLS_DATATYPE_CREATE_ID_g = H5I_INVALID_HID;
|
||||
H5P_genclass_t *H5P_CLS_DATATYPE_CREATE_g = NULL;
|
||||
hid_t H5P_CLS_DATATYPE_ACCESS_ID_g = FAIL;
|
||||
hid_t H5P_CLS_DATATYPE_ACCESS_ID_g = H5I_INVALID_HID;
|
||||
H5P_genclass_t *H5P_CLS_DATATYPE_ACCESS_g = NULL;
|
||||
hid_t H5P_CLS_ATTRIBUTE_CREATE_ID_g = FAIL;
|
||||
hid_t H5P_CLS_ATTRIBUTE_CREATE_ID_g = H5I_INVALID_HID;
|
||||
H5P_genclass_t *H5P_CLS_ATTRIBUTE_CREATE_g = NULL;
|
||||
hid_t H5P_CLS_ATTRIBUTE_ACCESS_ID_g = FAIL;
|
||||
hid_t H5P_CLS_ATTRIBUTE_ACCESS_ID_g = H5I_INVALID_HID;
|
||||
H5P_genclass_t *H5P_CLS_ATTRIBUTE_ACCESS_g = NULL;
|
||||
hid_t H5P_CLS_OBJECT_COPY_ID_g = FAIL;
|
||||
hid_t H5P_CLS_OBJECT_COPY_ID_g = H5I_INVALID_HID;
|
||||
H5P_genclass_t *H5P_CLS_OBJECT_COPY_g = NULL;
|
||||
hid_t H5P_CLS_LINK_CREATE_ID_g = FAIL;
|
||||
hid_t H5P_CLS_LINK_CREATE_ID_g = H5I_INVALID_HID;
|
||||
H5P_genclass_t *H5P_CLS_LINK_CREATE_g = NULL;
|
||||
hid_t H5P_CLS_LINK_ACCESS_ID_g = FAIL;
|
||||
hid_t H5P_CLS_LINK_ACCESS_ID_g = H5I_INVALID_HID;
|
||||
H5P_genclass_t *H5P_CLS_LINK_ACCESS_g = NULL;
|
||||
hid_t H5P_CLS_STRING_CREATE_ID_g = FAIL;
|
||||
hid_t H5P_CLS_STRING_CREATE_ID_g = H5I_INVALID_HID;
|
||||
H5P_genclass_t *H5P_CLS_STRING_CREATE_g = NULL;
|
||||
hid_t H5P_CLS_VOL_INITIALIZE_ID_g = H5I_INVALID_HID;
|
||||
H5P_genclass_t *H5P_CLS_VOL_INITIALIZE_g = NULL;
|
||||
|
||||
/*
|
||||
* Predefined property lists for each predefined class. These are initialized
|
||||
* at runtime by H5P__init_package() in this source file.
|
||||
*/
|
||||
hid_t H5P_LST_FILE_CREATE_ID_g = FAIL;
|
||||
hid_t H5P_LST_FILE_ACCESS_ID_g = FAIL;
|
||||
hid_t H5P_LST_DATASET_CREATE_ID_g = FAIL;
|
||||
hid_t H5P_LST_DATASET_ACCESS_ID_g = FAIL;
|
||||
hid_t H5P_LST_DATASET_XFER_ID_g = FAIL;
|
||||
hid_t H5P_LST_FILE_MOUNT_ID_g = FAIL;
|
||||
hid_t H5P_LST_GROUP_CREATE_ID_g = FAIL;
|
||||
hid_t H5P_LST_GROUP_ACCESS_ID_g = FAIL;
|
||||
hid_t H5P_LST_DATATYPE_CREATE_ID_g = FAIL;
|
||||
hid_t H5P_LST_DATATYPE_ACCESS_ID_g = FAIL;
|
||||
hid_t H5P_LST_ATTRIBUTE_CREATE_ID_g = FAIL;
|
||||
hid_t H5P_LST_ATTRIBUTE_ACCESS_ID_g = FAIL;
|
||||
hid_t H5P_LST_OBJECT_COPY_ID_g = FAIL;
|
||||
hid_t H5P_LST_LINK_CREATE_ID_g = FAIL;
|
||||
hid_t H5P_LST_LINK_ACCESS_ID_g = FAIL;
|
||||
hid_t H5P_LST_FILE_CREATE_ID_g = H5I_INVALID_HID;
|
||||
hid_t H5P_LST_FILE_ACCESS_ID_g = H5I_INVALID_HID;
|
||||
hid_t H5P_LST_DATASET_CREATE_ID_g = H5I_INVALID_HID;
|
||||
hid_t H5P_LST_DATASET_ACCESS_ID_g = H5I_INVALID_HID;
|
||||
hid_t H5P_LST_DATASET_XFER_ID_g = H5I_INVALID_HID;
|
||||
hid_t H5P_LST_FILE_MOUNT_ID_g = H5I_INVALID_HID;
|
||||
hid_t H5P_LST_GROUP_CREATE_ID_g = H5I_INVALID_HID;
|
||||
hid_t H5P_LST_GROUP_ACCESS_ID_g = H5I_INVALID_HID;
|
||||
hid_t H5P_LST_DATATYPE_CREATE_ID_g = H5I_INVALID_HID;
|
||||
hid_t H5P_LST_DATATYPE_ACCESS_ID_g = H5I_INVALID_HID;
|
||||
hid_t H5P_LST_ATTRIBUTE_CREATE_ID_g = H5I_INVALID_HID;
|
||||
hid_t H5P_LST_ATTRIBUTE_ACCESS_ID_g = H5I_INVALID_HID;
|
||||
hid_t H5P_LST_OBJECT_COPY_ID_g = H5I_INVALID_HID;
|
||||
hid_t H5P_LST_LINK_CREATE_ID_g = H5I_INVALID_HID;
|
||||
hid_t H5P_LST_LINK_ACCESS_ID_g = H5I_INVALID_HID;
|
||||
hid_t H5P_LST_VOL_INITIALIZE_ID_g = H5I_INVALID_HID;
|
||||
|
||||
/* Root property list class library initialization object */
|
||||
const H5P_libclass_t H5P_CLS_ROOT[1] = {{
|
||||
@ -283,6 +286,26 @@ const H5P_libclass_t H5P_CLS_TACC[1] = {{
|
||||
NULL /* Class close callback info */
|
||||
}};
|
||||
|
||||
/* VOL initialization property list class library initialization object */
|
||||
/* (move to proper source code file when used for real) */
|
||||
const H5P_libclass_t H5P_CLS_VINI[1] = {{
|
||||
"VOL initialization", /* Class name for debugging */
|
||||
H5P_TYPE_VOL_INITIALIZE, /* Class type */
|
||||
|
||||
&H5P_CLS_ROOT_g, /* Parent class */
|
||||
&H5P_CLS_VOL_INITIALIZE_g, /* Pointer to class */
|
||||
&H5P_CLS_VOL_INITIALIZE_ID_g, /* Pointer to class ID */
|
||||
&H5P_LST_VOL_INITIALIZE_ID_g, /* Pointer to default property list ID */
|
||||
NULL, /* Default property registration routine */
|
||||
|
||||
NULL, /* Class creation callback */
|
||||
NULL, /* Class creation callback info */
|
||||
NULL, /* Class copy callback */
|
||||
NULL, /* Class copy callback info */
|
||||
NULL, /* Class close callback */
|
||||
NULL /* Class close callback info */
|
||||
}};
|
||||
|
||||
|
||||
/* Library property list classes defined in other code modules */
|
||||
/* (And not present in src/H5Pprivate.h) */
|
||||
@ -331,7 +354,8 @@ static H5P_libclass_t const * const init_class[] = {
|
||||
H5P_CLS_TACC, /* Datatype access */
|
||||
H5P_CLS_ACRT, /* Attribute creation */
|
||||
H5P_CLS_AACC, /* Attribute access */
|
||||
H5P_CLS_LCRT /* Link creation */
|
||||
H5P_CLS_LCRT, /* Link creation */
|
||||
H5P_CLS_VINI /* VOL initialization */
|
||||
};
|
||||
|
||||
/* Declare a free list to manage the H5P_genclass_t struct */
|
||||
@ -525,7 +549,8 @@ H5P_term_package(void)
|
||||
H5P_LST_OBJECT_COPY_ID_g =
|
||||
H5P_LST_LINK_CREATE_ID_g =
|
||||
H5P_LST_LINK_ACCESS_ID_g =
|
||||
H5P_LST_FILE_MOUNT_ID_g = (-1);
|
||||
H5P_LST_VOL_INITIALIZE_ID_g =
|
||||
H5P_LST_FILE_MOUNT_ID_g = H5I_INVALID_HID;
|
||||
} /* end if */
|
||||
} /* end if */
|
||||
|
||||
@ -552,6 +577,7 @@ H5P_term_package(void)
|
||||
H5P_CLS_OBJECT_COPY_g =
|
||||
H5P_CLS_LINK_CREATE_g =
|
||||
H5P_CLS_LINK_ACCESS_g =
|
||||
H5P_CLS_VOL_INITIALIZE_g =
|
||||
H5P_CLS_FILE_MOUNT_g = NULL;
|
||||
|
||||
H5P_CLS_ROOT_ID_g =
|
||||
@ -571,7 +597,8 @@ H5P_term_package(void)
|
||||
H5P_CLS_OBJECT_COPY_ID_g =
|
||||
H5P_CLS_LINK_CREATE_ID_g =
|
||||
H5P_CLS_LINK_ACCESS_ID_g =
|
||||
H5P_CLS_FILE_MOUNT_ID_g = (-1);
|
||||
H5P_CLS_VOL_INITIALIZE_ID_g =
|
||||
H5P_CLS_FILE_MOUNT_ID_g = H5I_INVALID_HID;
|
||||
} /* end if */
|
||||
} /* end if */
|
||||
|
||||
@ -5408,7 +5435,7 @@ H5P__new_plist_of_type(H5P_plist_type_t type)
|
||||
FUNC_ENTER_PACKAGE
|
||||
|
||||
/* Sanity checks */
|
||||
HDcompile_assert(H5P_TYPE_ATTRIBUTE_ACCESS == (H5P_TYPE_MAX_TYPE - 1));
|
||||
HDcompile_assert(H5P_TYPE_VOL_INITIALIZE == (H5P_TYPE_MAX_TYPE - 1));
|
||||
HDassert(type >= H5P_TYPE_USER && type <= H5P_TYPE_LINK_ACCESS);
|
||||
|
||||
/* Check arguments */
|
||||
@ -5487,6 +5514,10 @@ H5P__new_plist_of_type(H5P_plist_type_t type)
|
||||
class_id = H5P_CLS_LINK_ACCESS_ID_g;
|
||||
break;
|
||||
|
||||
case H5P_TYPE_VOL_INITIALIZE:
|
||||
class_id = H5P_CLS_VOL_INITIALIZE_ID_g;
|
||||
break;
|
||||
|
||||
case H5P_TYPE_USER: /* shut compiler warnings up */
|
||||
case H5P_TYPE_ROOT:
|
||||
case H5P_TYPE_MAX_TYPE:
|
||||
|
@ -78,6 +78,7 @@ typedef enum H5P_plist_type_t {
|
||||
H5P_TYPE_LINK_CREATE = 16,
|
||||
H5P_TYPE_LINK_ACCESS = 17,
|
||||
H5P_TYPE_ATTRIBUTE_ACCESS = 18,
|
||||
H5P_TYPE_VOL_INITIALIZE = 19,
|
||||
H5P_TYPE_MAX_TYPE
|
||||
} H5P_plist_type_t;
|
||||
|
||||
|
@ -68,6 +68,7 @@
|
||||
#define H5P_OBJECT_COPY (H5OPEN H5P_CLS_OBJECT_COPY_ID_g)
|
||||
#define H5P_LINK_CREATE (H5OPEN H5P_CLS_LINK_CREATE_ID_g)
|
||||
#define H5P_LINK_ACCESS (H5OPEN H5P_CLS_LINK_ACCESS_ID_g)
|
||||
#define H5P_VOL_INITIALIZE (H5OPEN H5P_CLS_VOL_INITIALIZE_ID_g)
|
||||
|
||||
/*
|
||||
* The library's default property lists
|
||||
@ -87,6 +88,7 @@
|
||||
#define H5P_OBJECT_COPY_DEFAULT (H5OPEN H5P_LST_OBJECT_COPY_ID_g)
|
||||
#define H5P_LINK_CREATE_DEFAULT (H5OPEN H5P_LST_LINK_CREATE_ID_g)
|
||||
#define H5P_LINK_ACCESS_DEFAULT (H5OPEN H5P_LST_LINK_ACCESS_ID_g)
|
||||
#define H5P_VOL_INITIALIZE_DEFAULT (H5OPEN H5P_LST_VOL_INITIALIZE_ID_g)
|
||||
|
||||
/* Common creation order flags (for links in groups and attributes on objects) */
|
||||
#define H5P_CRT_ORDER_TRACKED 0x0001
|
||||
@ -195,6 +197,7 @@ H5_DLLVAR hid_t H5P_CLS_ATTRIBUTE_ACCESS_ID_g;
|
||||
H5_DLLVAR hid_t H5P_CLS_OBJECT_COPY_ID_g;
|
||||
H5_DLLVAR hid_t H5P_CLS_LINK_CREATE_ID_g;
|
||||
H5_DLLVAR hid_t H5P_CLS_LINK_ACCESS_ID_g;
|
||||
H5_DLLVAR hid_t H5P_CLS_VOL_INITIALIZE_ID_g;
|
||||
|
||||
/* Default roperty list IDs */
|
||||
/* (Internal to library, do not use! Use macros above) */
|
||||
@ -213,6 +216,7 @@ H5_DLLVAR hid_t H5P_LST_ATTRIBUTE_ACCESS_ID_g;
|
||||
H5_DLLVAR hid_t H5P_LST_OBJECT_COPY_ID_g;
|
||||
H5_DLLVAR hid_t H5P_LST_LINK_CREATE_ID_g;
|
||||
H5_DLLVAR hid_t H5P_LST_LINK_ACCESS_ID_g;
|
||||
H5_DLLVAR hid_t H5P_LST_VOL_INITIALIZE_ID_g;
|
||||
|
||||
/*********************/
|
||||
/* Public Prototypes */
|
||||
|
22
src/H5VL.c
22
src/H5VL.c
@ -31,6 +31,7 @@
|
||||
#include "H5private.h" /* Generic Functions */
|
||||
#include "H5Eprivate.h" /* Error handling */
|
||||
#include "H5Iprivate.h" /* IDs */
|
||||
#include "H5Pprivate.h" /* Property lists */
|
||||
#include "H5VLpkg.h" /* Virtual Object Layer */
|
||||
|
||||
/* VOL connectors */
|
||||
@ -101,6 +102,13 @@ H5VLregister_connector(const H5VL_class_t *cls, hid_t vipl_id)
|
||||
if (cls->wrap_cls.get_wrap_ctx && !cls->wrap_cls.free_wrap_ctx)
|
||||
HGOTO_ERROR(H5E_VOL, H5E_CANTREGISTER, H5I_INVALID_HID, "VOL connector must provide free callback for object wrapping contexts when a get callback is provided")
|
||||
|
||||
/* Check VOL initialization property list */
|
||||
if(H5P_DEFAULT == vipl_id)
|
||||
vipl_id = H5P_VOL_INITIALIZE_DEFAULT;
|
||||
else
|
||||
if(TRUE != H5P_isa_class(vipl_id, H5P_VOL_INITIALIZE))
|
||||
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, H5I_INVALID_HID, "not a VOL initialize property list")
|
||||
|
||||
/* Register connector */
|
||||
if((ret_value = H5VL__register_connector(cls, TRUE, vipl_id)) < 0)
|
||||
HGOTO_ERROR(H5E_VOL, H5E_CANTREGISTER, H5I_INVALID_HID, "unable to register VOL connector")
|
||||
@ -138,6 +146,13 @@ H5VLregister_connector_by_name(const char *name, hid_t vipl_id)
|
||||
if (0 == HDstrlen(name))
|
||||
HGOTO_ERROR(H5E_ARGS, H5E_UNINITIALIZED, H5I_INVALID_HID, "zero-length VOL connector name is disallowed")
|
||||
|
||||
/* Check VOL initialization property list */
|
||||
if(H5P_DEFAULT == vipl_id)
|
||||
vipl_id = H5P_VOL_INITIALIZE_DEFAULT;
|
||||
else
|
||||
if(TRUE != H5P_isa_class(vipl_id, H5P_VOL_INITIALIZE))
|
||||
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, H5I_INVALID_HID, "not a VOL initialize property list")
|
||||
|
||||
/* Register connector */
|
||||
if((ret_value = H5VL__register_connector_by_name(name, TRUE, vipl_id)) < 0)
|
||||
HGOTO_ERROR(H5E_VOL, H5E_CANTREGISTER, H5I_INVALID_HID, "unable to register VOL connector")
|
||||
@ -173,6 +188,13 @@ H5VLregister_connector_by_value(H5VL_class_value_t value, hid_t vipl_id)
|
||||
if(value < 0)
|
||||
HGOTO_ERROR(H5E_ARGS, H5E_UNINITIALIZED, H5I_INVALID_HID, "negative VOL connector value is disallowed")
|
||||
|
||||
/* Check VOL initialization property list */
|
||||
if(H5P_DEFAULT == vipl_id)
|
||||
vipl_id = H5P_VOL_INITIALIZE_DEFAULT;
|
||||
else
|
||||
if(TRUE != H5P_isa_class(vipl_id, H5P_VOL_INITIALIZE))
|
||||
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, H5I_INVALID_HID, "not a VOL initialize property list")
|
||||
|
||||
/* Register connector */
|
||||
if((ret_value = H5VL__register_connector_by_value(value, TRUE, vipl_id)) < 0)
|
||||
HGOTO_ERROR(H5E_VOL, H5E_CANTREGISTER, H5I_INVALID_HID, "unable to register VOL connector")
|
||||
|
51
test/vol.c
51
test/vol.c
@ -11,7 +11,7 @@
|
||||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
/*
|
||||
* Purpose: Tests the virtual object layer (H5VL)
|
||||
* Purpose: Tests the virtual object layer (H5VL)
|
||||
*
|
||||
* This is a minimal test to ensure VOL usage (setting a VOL, etc.)
|
||||
* works as expected. Actual VOL functionality is tested using
|
||||
@ -149,6 +149,8 @@ static herr_t
|
||||
test_vol_registration(void)
|
||||
{
|
||||
hid_t native_id = H5I_INVALID_HID;
|
||||
hid_t lapl_id = H5I_INVALID_HID;
|
||||
hid_t vipl_id = H5I_INVALID_HID;
|
||||
herr_t ret = SUCCEED;
|
||||
htri_t is_registered = FAIL;
|
||||
hid_t vol_id = H5I_INVALID_HID;
|
||||
@ -158,47 +160,66 @@ test_vol_registration(void)
|
||||
|
||||
/* The test/fake VOL connector should not be registered at the start of the test */
|
||||
if ((is_registered = H5VLis_connector_registered(FAKE_VOL_NAME)) < 0)
|
||||
FAIL_STACK_ERROR;
|
||||
TEST_ERROR;
|
||||
if (is_registered > 0)
|
||||
FAIL_PUTS_ERROR("VOL connector is inappropriately registered");
|
||||
|
||||
/* Load a VOL interface */
|
||||
if ((vol_id = H5VLregister_connector(&fake_vol_g, H5P_DEFAULT)) < 0)
|
||||
FAIL_STACK_ERROR;
|
||||
/* Test registering a connector with an incorrect property list (SHOULD FAIL) */
|
||||
if ((lapl_id = H5Pcreate(H5P_LINK_ACCESS)) < 0)
|
||||
TEST_ERROR;
|
||||
H5E_BEGIN_TRY {
|
||||
vol_id = H5VLregister_connector(&fake_vol_g, lapl_id);
|
||||
} H5E_END_TRY;
|
||||
if (H5I_INVALID_HID != vol_id)
|
||||
FAIL_PUTS_ERROR("should not be able to register a connector with an incorrect property list");
|
||||
if (H5Pclose(lapl_id) < 0)
|
||||
TEST_ERROR;
|
||||
|
||||
/* Load a VOL interface
|
||||
* The vipl_id does nothing without a VOL that needs it, but we do need to
|
||||
* test creating a property list of that class and passing it along as a
|
||||
* smoke check.
|
||||
*/
|
||||
if ((vipl_id = H5Pcreate(H5P_VOL_INITIALIZE)) < 0)
|
||||
TEST_ERROR;
|
||||
if ((vol_id = H5VLregister_connector(&fake_vol_g, vipl_id)) < 0)
|
||||
TEST_ERROR;
|
||||
if (H5Pclose(vipl_id) < 0)
|
||||
TEST_ERROR;
|
||||
|
||||
/* The test/fake VOL connector should be registered now */
|
||||
if ((is_registered = H5VLis_connector_registered(FAKE_VOL_NAME)) < 0)
|
||||
FAIL_STACK_ERROR;
|
||||
TEST_ERROR;
|
||||
if (0 == is_registered)
|
||||
FAIL_PUTS_ERROR("VOL connector is un-registered");
|
||||
|
||||
/* Re-register a VOL connector */
|
||||
if ((vol_id2 = H5VLregister_connector(&fake_vol_g, H5P_DEFAULT)) < 0)
|
||||
FAIL_STACK_ERROR;
|
||||
TEST_ERROR;
|
||||
|
||||
/* The test/fake VOL connector should still be registered now */
|
||||
if ((is_registered = H5VLis_connector_registered(FAKE_VOL_NAME)) < 0)
|
||||
FAIL_STACK_ERROR;
|
||||
TEST_ERROR;
|
||||
if (0 == is_registered)
|
||||
FAIL_PUTS_ERROR("VOL connector is un-registered");
|
||||
|
||||
/* Unregister the second test/fake VOL ID */
|
||||
if (H5VLunregister_connector(vol_id2) < 0)
|
||||
FAIL_STACK_ERROR;
|
||||
TEST_ERROR;
|
||||
|
||||
/* The test/fake VOL connector should still be registered now */
|
||||
if ((is_registered = H5VLis_connector_registered(FAKE_VOL_NAME)) < 0)
|
||||
FAIL_STACK_ERROR;
|
||||
TEST_ERROR;
|
||||
if (0 == is_registered)
|
||||
FAIL_PUTS_ERROR("VOL connector is un-registered");
|
||||
|
||||
/* Unregister the original test/fake VOL ID */
|
||||
if (H5VLunregister_connector(vol_id) < 0)
|
||||
FAIL_STACK_ERROR;
|
||||
TEST_ERROR;
|
||||
|
||||
/* Try to unregister the native VOL connector (should fail) */
|
||||
if (H5I_INVALID_HID == (native_id = H5VLget_connector_id(H5VL_NATIVE_NAME)))
|
||||
FAIL_STACK_ERROR;
|
||||
TEST_ERROR;
|
||||
H5E_BEGIN_TRY {
|
||||
ret = H5VLunregister_connector(native_id);
|
||||
} H5E_END_TRY;
|
||||
@ -211,6 +232,8 @@ test_vol_registration(void)
|
||||
error:
|
||||
H5E_BEGIN_TRY {
|
||||
H5VLunregister_connector(vol_id);
|
||||
H5Pclose(lapl_id);
|
||||
H5Pclose(vipl_id);
|
||||
} H5E_END_TRY;
|
||||
return FAIL;
|
||||
|
||||
@ -235,7 +258,7 @@ test_native_vol_init(void)
|
||||
|
||||
/* The native VOL connector should always be registered */
|
||||
if ((is_registered = H5VLis_connector_registered(H5VL_NATIVE_NAME)) < 0)
|
||||
FAIL_STACK_ERROR;
|
||||
TEST_ERROR;
|
||||
if (0 == is_registered)
|
||||
FAIL_PUTS_ERROR("native VOL connector is un-registered");
|
||||
|
||||
@ -293,7 +316,7 @@ test_basic_file_operation(const char *env_h5_drvr)
|
||||
if(H5Pset_fclose_degree(fapl_id, H5F_CLOSE_SEMI) < 0)
|
||||
TEST_ERROR;
|
||||
if(H5Pset_metadata_read_attempts(fapl_id, 9) < 0)
|
||||
FAIL_STACK_ERROR
|
||||
TEST_ERROR
|
||||
|
||||
/* H5Fcreate */
|
||||
if ((fid = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl_id)) < 0)
|
||||
|
Loading…
Reference in New Issue
Block a user