summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/H5Dint.c6
-rw-r--r--src/H5VL.c37
-rw-r--r--src/H5VLconnector.h18
-rw-r--r--src/H5VLpublic.h20
4 files changed, 58 insertions, 23 deletions
diff --git a/src/H5Dint.c b/src/H5Dint.c
index 954b619..4c6814d 100644
--- a/src/H5Dint.c
+++ b/src/H5Dint.c
@@ -1402,7 +1402,7 @@ H5D__create(H5F_t *file, hid_t type_id, const H5S_t *space, hid_t dcpl_id,
ret_value = new_dset;
done:
- if(!ret_value && new_dset && new_dset->shared) {
+ if(!ret_value && new_dset) {
if(new_dset->shared) {
if(layout_init)
if(new_dset->shared->layout.ops->dest && (new_dset->shared->layout.ops->dest)(new_dset) < 0)
@@ -1425,11 +1425,11 @@ done:
if(new_dset->shared->type) {
if(new_dset->shared->type_id > 0) {
if(H5I_dec_ref(new_dset->shared->type_id) < 0)
- HDONE_ERROR(H5E_DATASET, H5E_CLOSEERROR, FAIL, "unable to release datatype")
+ HDONE_ERROR(H5E_DATASET, H5E_CLOSEERROR, NULL, "unable to release datatype")
} /* end if */
else {
if(H5T_close_real(new_dset->shared->type) < 0)
- HDONE_ERROR(H5E_DATASET, H5E_CLOSEERROR, FAIL, "unable to release datatype")
+ HDONE_ERROR(H5E_DATASET, H5E_CLOSEERROR, NULL, "unable to release datatype")
} /* end else */
} /* end if */
diff --git a/src/H5VL.c b/src/H5VL.c
index f83baf2..c4f38dd 100644
--- a/src/H5VL.c
+++ b/src/H5VL.c
@@ -903,7 +903,7 @@ H5VLfree_lib_state(void *state)
/* Check args */
if(NULL == state)
- HGOTO_ERROR(H5E_VOL, H5E_BADVALUE, FAIL, "invalid state pointer")
+ HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid state pointer")
/* Free the library state */
if(H5VL_free_lib_state(state) < 0)
@@ -913,3 +913,38 @@ done:
FUNC_LEAVE_API(ret_value)
} /* H5VLfree_lib_state() */
+
+/*---------------------------------------------------------------------------
+ * Function: H5VLquery_optional
+ *
+ * Purpose: Determine if a VOL connector supports a particular optional
+ * callback operation.
+ *
+ * Return: Success: Non-negative
+ * Failure: Negative
+ *
+ *---------------------------------------------------------------------------
+ */
+herr_t
+H5VLquery_optional(hid_t obj_id, H5VL_subclass_t subcls, int opt_type, hbool_t *supported)
+{
+ H5VL_object_t *vol_obj = NULL;
+ herr_t ret_value = SUCCEED; /* Return value */
+
+ FUNC_ENTER_API(FAIL)
+ H5TRACE4("e", "iVSIs*b", obj_id, subcls, opt_type, supported);
+
+ /* Check args */
+ if(NULL == supported)
+ HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid supported pointer")
+ if(NULL == (vol_obj = (H5VL_object_t *)H5I_object(obj_id)))
+ HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid object identifier")
+
+ /* Query the connector */
+ if(H5VL_introspect_opt_query(vol_obj, subcls, opt_type, supported) < 0)
+ HGOTO_ERROR(H5E_VOL, H5E_CANTGET, FAIL, "unable to query VOL connector support")
+
+done:
+ FUNC_LEAVE_API(ret_value)
+} /* H5VLquery_optional() */
+
diff --git a/src/H5VLconnector.h b/src/H5VLconnector.h
index 7951a32..4a35f22 100644
--- a/src/H5VLconnector.h
+++ b/src/H5VLconnector.h
@@ -48,24 +48,6 @@
/* Public Typedefs */
/*******************/
-/* Enum type for each VOL subclass */
-/* (Used for various queries, etc) */
-typedef enum H5VL_subclass_t {
- H5VL_SUBCLS_NONE, /* Operations outside of a subclass */
- H5VL_SUBCLS_INFO, /* 'Info' subclass */
- H5VL_SUBCLS_WRAP, /* 'Wrap' subclass */
- H5VL_SUBCLS_ATTR, /* 'Attribute' subclass */
- H5VL_SUBCLS_DATASET, /* 'Dataset' subclass */
- H5VL_SUBCLS_DATATYPE, /* 'Named datatype' subclass */
- H5VL_SUBCLS_FILE, /* 'File' subclass */
- H5VL_SUBCLS_GROUP, /* 'Group' subclass */
- H5VL_SUBCLS_LINK, /* 'Link' subclass */
- H5VL_SUBCLS_OBJECT, /* 'Object' subclass */
- H5VL_SUBCLS_REQUEST, /* 'Request' subclass */
- H5VL_SUBCLS_BLOB, /* 'Blob' subclass */
- H5VL_SUBCLS_TOKEN /* 'Token' subclass */
-} H5VL_subclass_t;
-
/* types for attribute GET callback */
typedef enum H5VL_attr_get_t {
H5VL_ATTR_GET_ACPL, /* creation property list */
diff --git a/src/H5VLpublic.h b/src/H5VLpublic.h
index 006c3ea..8f79adc 100644
--- a/src/H5VLpublic.h
+++ b/src/H5VLpublic.h
@@ -48,6 +48,24 @@
typedef int H5VL_class_value_t;
+/* Enum type for each VOL subclass */
+/* (Used for various queries, etc) */
+typedef enum H5VL_subclass_t {
+ H5VL_SUBCLS_NONE, /* Operations outside of a subclass */
+ H5VL_SUBCLS_INFO, /* 'Info' subclass */
+ H5VL_SUBCLS_WRAP, /* 'Wrap' subclass */
+ H5VL_SUBCLS_ATTR, /* 'Attribute' subclass */
+ H5VL_SUBCLS_DATASET, /* 'Dataset' subclass */
+ H5VL_SUBCLS_DATATYPE, /* 'Named datatype' subclass */
+ H5VL_SUBCLS_FILE, /* 'File' subclass */
+ H5VL_SUBCLS_GROUP, /* 'Group' subclass */
+ H5VL_SUBCLS_LINK, /* 'Link' subclass */
+ H5VL_SUBCLS_OBJECT, /* 'Object' subclass */
+ H5VL_SUBCLS_REQUEST, /* 'Request' subclass */
+ H5VL_SUBCLS_BLOB, /* 'Blob' subclass */
+ H5VL_SUBCLS_TOKEN /* 'Token' subclass */
+} H5VL_subclass_t;
+
/********************/
/* Public Variables */
/********************/
@@ -70,7 +88,7 @@ H5_DLL hid_t H5VLget_connector_id_by_value(H5VL_class_value_t connector_value);
H5_DLL ssize_t H5VLget_connector_name(hid_t id, char *name/*out*/, size_t size);
H5_DLL herr_t H5VLclose(hid_t connector_id);
H5_DLL herr_t H5VLunregister_connector(hid_t connector_id);
-
+H5_DLL herr_t H5VLquery_optional(hid_t obj_id, H5VL_subclass_t subcls, int opt_type, hbool_t *supported);
#ifdef __cplusplus
}