summaryrefslogtreecommitdiffstats
path: root/src/H5Pocpypl.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/H5Pocpypl.c')
-rw-r--r--src/H5Pocpypl.c201
1 files changed, 89 insertions, 112 deletions
diff --git a/src/H5Pocpypl.c b/src/H5Pocpypl.c
index adea906..0ba5625 100644
--- a/src/H5Pocpypl.c
+++ b/src/H5Pocpypl.c
@@ -52,11 +52,14 @@
/* Definitions for merge committed dtype list */
#define H5O_CPY_MERGE_COMM_DT_LIST_SIZE sizeof(char *)
#define H5O_CPY_MERGE_COMM_DT_LIST_DEF NULL
-#define H5O_CPY_MERGE_COMM_DT_LIST_CMP H5P_ocpy_merge_comm_dt_list_cmp
+#define H5O_CPY_MERGE_COMM_DT_LIST_COPY H5P__ocpy_merge_comm_dt_list_copy
+#define H5O_CPY_MERGE_COMM_DT_LIST_CMP H5P__ocpy_merge_comm_dt_list_cmp
+#define H5O_CPY_MERGE_COMM_DT_LIST_CLOSE H5P__ocpy_merge_comm_dt_list_close
/* Definitions for callback function when completing the search for a matching committed datatype from the committed dtype list */
#define H5O_CPY_MCDT_SEARCH_CB_SIZE sizeof(H5O_mcdt_cb_info_t)
#define H5O_CPY_MCDT_SEARCH_CB_DEF {NULL,NULL}
+
/******************/
/* Local Typedefs */
/******************/
@@ -72,16 +75,15 @@
/********************/
/* General routines */
-static H5O_copy_dtype_merge_list_t *H5P_free_merge_comm_dtype_list(H5O_copy_dtype_merge_list_t *dt_list);
+static H5O_copy_dtype_merge_list_t *H5P__free_merge_comm_dtype_list(H5O_copy_dtype_merge_list_t *dt_list);
/* Property class callbacks */
-static herr_t H5P_ocpy_reg_prop(H5P_genclass_t *pclass);
-static herr_t H5P_ocpy_copy(hid_t dst_plist_id, hid_t src_plist_id,
- void *copy_data);
-static herr_t H5P_ocpy_close(hid_t ocpypl_id, void *close_data);
+static herr_t H5P__ocpy_reg_prop(H5P_genclass_t *pclass);
/* Property callbacks */
-static int H5P_ocpy_merge_comm_dt_list_cmp(const void *value1, const void *value2, size_t size);
+static herr_t H5P__ocpy_merge_comm_dt_list_copy(const char* name, size_t size, void* value);
+static int H5P__ocpy_merge_comm_dt_list_cmp(const void *value1, const void *value2, size_t size);
+static herr_t H5P__ocpy_merge_comm_dt_list_close(const char* name, size_t size, void* value);
/*********************/
@@ -95,12 +97,12 @@ const H5P_libclass_t H5P_CLS_OCPY[1] = {{
&H5P_CLS_ROOT_g, /* Parent class ID */
&H5P_CLS_OBJECT_COPY_g, /* Pointer to class ID */
&H5P_LST_OBJECT_COPY_g, /* Pointer to default property list ID */
- H5P_ocpy_reg_prop, /* Default property registration routine */
+ H5P__ocpy_reg_prop, /* Default property registration routine */
NULL, /* Class creation callback */
NULL, /* Class creation callback info */
- H5P_ocpy_copy, /* Class copy callback */
+ NULL, /* Class copy callback */
NULL, /* Class copy callback info */
- H5P_ocpy_close, /* Class close callback */
+ NULL, /* Class close callback */
NULL /* Class close callback info */
}};
@@ -120,7 +122,7 @@ H5FL_DEFINE(H5O_copy_dtype_merge_list_t);
/*-------------------------------------------------------------------------
- * Function: H5P_ocpy_reg_prop
+ * Function: H5P__ocpy_reg_prop
*
* Purpose: Initialize the object copy property list class
*
@@ -131,21 +133,21 @@ H5FL_DEFINE(H5O_copy_dtype_merge_list_t);
*-------------------------------------------------------------------------
*/
static herr_t
-H5P_ocpy_reg_prop(H5P_genclass_t *pclass)
+H5P__ocpy_reg_prop(H5P_genclass_t *pclass)
{
unsigned ocpy_option = H5O_CPY_OPTION_DEF; /* Default object copy flags */
H5O_copy_dtype_merge_list_t *merge_comm_dtype_list = H5O_CPY_MERGE_COMM_DT_LIST_DEF; /* Default merge committed dtype list */
H5O_mcdt_cb_info_t mcdt_cb = H5O_CPY_MCDT_SEARCH_CB_DEF; /* Default callback before searching the global list of committed datatypes at destination */
herr_t ret_value = SUCCEED; /* Return value */
- FUNC_ENTER_NOAPI(FAIL)
+ FUNC_ENTER_STATIC
/* Register copy options property */
if(H5P_register_real(pclass, H5O_CPY_OPTION_NAME, H5O_CPY_OPTION_SIZE, &ocpy_option, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
/* Register merge named dtype list property */
- if(H5P_register_real(pclass, H5O_CPY_MERGE_COMM_DT_LIST_NAME, H5O_CPY_MERGE_COMM_DT_LIST_SIZE, &merge_comm_dtype_list, NULL, NULL, NULL, NULL, NULL, H5O_CPY_MERGE_COMM_DT_LIST_CMP, NULL) < 0)
+ if(H5P_register_real(pclass, H5O_CPY_MERGE_COMM_DT_LIST_NAME, H5O_CPY_MERGE_COMM_DT_LIST_SIZE, &merge_comm_dtype_list, NULL, NULL, NULL, NULL, H5O_CPY_MERGE_COMM_DT_LIST_COPY, H5O_CPY_MERGE_COMM_DT_LIST_CMP, H5O_CPY_MERGE_COMM_DT_LIST_CLOSE) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
/* Register property for callback when completing the search for a matching named datatype from the named dtype list */
@@ -154,47 +156,68 @@ H5P_ocpy_reg_prop(H5P_genclass_t *pclass)
done:
FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5P_ocpy_reg_prop() */
+} /* end H5P__ocpy_reg_prop() */
/*-------------------------------------------------------------------------
- * Function: H5P_ocpy_copy
- *
- * Purpose: Callback routine which is called whenever any object
- * copy property list is copied. This routine copies
- * the properties from the old list to the new list.
+ * Function: H5P__free_merge_comm_dtype_list
*
- * Return: Success: Non-negative
- * Failure: Negative
+ * Purpose: Frees the provided merge named dtype list
*
- * Programmer: Neil Fortner
- * Friday, October 28, 2011
+ * Return: NULL
*
+ * Programmer: Neil Fortner
+ * October 27, 2011
*-------------------------------------------------------------------------
*/
+static H5O_copy_dtype_merge_list_t *
+H5P__free_merge_comm_dtype_list(H5O_copy_dtype_merge_list_t *dt_list)
+{
+ H5O_copy_dtype_merge_list_t *tmp_node;
+
+ FUNC_ENTER_STATIC_NOERR
+
+ /* Free the list */
+ while(dt_list) {
+ tmp_node = dt_list->next;
+ (void)H5MM_xfree(dt_list->path);
+ (void)H5FL_FREE(H5O_copy_dtype_merge_list_t, dt_list);
+ dt_list = tmp_node;
+ } /* end while */
+
+ FUNC_LEAVE_NOAPI(NULL);
+} /* H5P__free_merge_comm_dtype_list */
+
+
+/*--------------------------------------------------------------------------
+ * Function: H5P__ocpy_merge_comm_dt_list_copy
+ *
+ * Purpose: Copy the merge committed datatype list
+ *
+ * Return: Success: Non-negative
+ * Failure: Negative
+ *
+ * Programmer: Quincey Koziol
+ * Friday, August 31, 2012
+ *
+ *--------------------------------------------------------------------------
+ */
/* ARGSUSED */
static herr_t
-H5P_ocpy_copy(hid_t dst_plist_id, hid_t src_plist_id, void UNUSED *copy_data)
+H5P__ocpy_merge_comm_dt_list_copy(const char UNUSED *name, size_t UNUSED size,
+ void *value)
{
- H5O_copy_dtype_merge_list_t *src_dt_list, *dst_dt_list = NULL; /* Source & destination merge named datatype lists */
+ const H5O_copy_dtype_merge_list_t *src_dt_list; /* Source merge named datatype lists */
+ H5O_copy_dtype_merge_list_t *dst_dt_list = NULL; /* Destination merge named datatype lists */
H5O_copy_dtype_merge_list_t *dst_dt_list_tail = NULL, *tmp_dt_list = NULL; /* temporary merge named datatype lists */
- H5P_genplist_t *src_plist; /* Pointer to source property list */
- H5P_genplist_t *dst_plist; /* Pointer to destination property list */
- herr_t ret_value = SUCCEED; /* Return value */
+ herr_t ret_value = SUCCEED;
- FUNC_ENTER_NOAPI_NOINIT
+ FUNC_ENTER_STATIC
- /* Verify property list IDs */
- if(NULL == (dst_plist = (H5P_genplist_t *)H5I_object(dst_plist_id)))
- HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not an object copy property list")
- if(NULL == (src_plist = (H5P_genplist_t *)H5I_object(src_plist_id)))
- HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not an object copy property list")
-
- /* Get the merge committed dtype list property from the old property list */
- if(H5P_get(src_plist, H5O_CPY_MERGE_COMM_DT_LIST_NAME, &src_dt_list) < 0)
- HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't get merge named dtype list")
+ HDassert(value);
/* Make copy of merge committed dtype list */
+ src_dt_list = *(const H5O_copy_dtype_merge_list_t **)value;
while(src_dt_list) {
/* Copy src_dt_list */
if(NULL == (tmp_dt_list = H5FL_CALLOC(H5O_copy_dtype_merge_list_t)))
@@ -217,14 +240,12 @@ H5P_ocpy_copy(hid_t dst_plist_id, hid_t src_plist_id, void UNUSED *copy_data)
src_dt_list = src_dt_list->next;
} /* end while */
- /* Set the merge named dtype list property for the destination property list
- */
- if(H5P_set(dst_plist, H5O_CPY_MERGE_COMM_DT_LIST_NAME, &dst_dt_list) < 0)
- HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set merge committed dtype list")
+ /* Set the merge named dtype list property for the destination property list */
+ *(H5O_copy_dtype_merge_list_t **)value = dst_dt_list;
done:
if(ret_value < 0) {
- dst_dt_list = H5P_free_merge_comm_dtype_list(dst_dt_list);
+ dst_dt_list = H5P__free_merge_comm_dtype_list(dst_dt_list);
if(tmp_dt_list) {
tmp_dt_list->path = (char *)H5MM_xfree(tmp_dt_list->path);
tmp_dt_list = H5FL_FREE(H5O_copy_dtype_merge_list_t, tmp_dt_list);
@@ -232,53 +253,11 @@ done:
} /* end if */
FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5P_ocpy_copy() */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5P_ocpy_close
- *
- * Purpose: Callback routine which is called whenever any object copy
- * property list is closed. This routine performs any generic
- * cleanup needed on the properties the library put into the
- * list.
- *
- * Return: Success: Non-negative
- * Failure: Negative
- *
- * Programmer: Neil Fortner
- * Friday, October 28, 2011
- *
- *-------------------------------------------------------------------------
- */
-/* ARGSUSED */
-static herr_t
-H5P_ocpy_close(hid_t ocpypl_id, void UNUSED *close_data)
-{
- H5O_copy_dtype_merge_list_t *dt_list; /* Merge named datatype list */
- H5P_genplist_t *plist; /* Property list */
- herr_t ret_value = SUCCEED; /* Return value */
-
- FUNC_ENTER_NOAPI_NOINIT
-
- /* Check arguments */
- if(NULL == (plist = (H5P_genplist_t *)H5I_object(ocpypl_id)))
- HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not an object copy property list")
-
- /* Get the merge named dtype list property from the old property list */
- if(H5P_get(plist, H5O_CPY_MERGE_COMM_DT_LIST_NAME, &dt_list) < 0)
- HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't get merge named dtype list")
-
- /* Free the merge named dtype list */
- dt_list = H5P_free_merge_comm_dtype_list(dt_list);
-
-done:
- FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5P_ocpy_close() */
+} /* end H5P__ocpy_merge_comm_dt_list_copy() */
/*-------------------------------------------------------------------------
- * Function: H5P_ocpy_merge_comm_dt_list_cmp
+ * Function: H5P__ocpy_merge_comm_dt_list_cmp
*
* Purpose: Callback routine which is called whenever the merge
* named dtype property in the object copy property list
@@ -294,14 +273,14 @@ done:
*-------------------------------------------------------------------------
*/
static int
-H5P_ocpy_merge_comm_dt_list_cmp(const void *_dt_list1, const void *_dt_list2,
+H5P__ocpy_merge_comm_dt_list_cmp(const void *_dt_list1, const void *_dt_list2,
size_t UNUSED size)
{
const H5O_copy_dtype_merge_list_t *dt_list1 = *(H5O_copy_dtype_merge_list_t * const *)_dt_list1, /* Create local aliases for values */
*dt_list2 = *(H5O_copy_dtype_merge_list_t * const *)_dt_list2;
herr_t ret_value = 0; /* Return value */
- FUNC_ENTER_NOAPI_NOINIT
+ FUNC_ENTER_STATIC_NOERR
/* Sanity check */
HDassert(_dt_list1);
@@ -326,37 +305,35 @@ H5P_ocpy_merge_comm_dt_list_cmp(const void *_dt_list1, const void *_dt_list2,
done:
FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5P_ocpy_merge_comm_dt_list_cmp() */
+} /* end H5P__ocpy_merge_comm_dt_list_cmp() */
-/*-------------------------------------------------------------------------
- * Function: H5P_free_merge_comm_dtype_list
+/*--------------------------------------------------------------------------
+ * Function: H5P__ocpy_merge_comm_dt_list_close
*
- * Purpose: Frees the provided merge named dtype list
+ * Purpose: Close the merge common datatype list property
*
- * Return: NULL
+ * Return: Success: Non-negative
+ * Failure: Negative
*
- * Programmer: Neil Fortner
- * October 27, 2011
- *-------------------------------------------------------------------------
+ * Programmer: Quincey Koziol
+ * Friday, August 31, 2012
+ *
+ *---------------------------------------------------------------------------
*/
-static H5O_copy_dtype_merge_list_t *
-H5P_free_merge_comm_dtype_list(H5O_copy_dtype_merge_list_t *dt_list)
+/* ARGSUSED */
+static herr_t
+H5P__ocpy_merge_comm_dt_list_close(const char UNUSED *name, size_t UNUSED size, void *value)
{
- H5O_copy_dtype_merge_list_t *tmp_node;
+ FUNC_ENTER_STATIC_NOERR
- FUNC_ENTER_NOAPI_NOINIT
+ HDassert(value);
- /* Free the list */
- while(dt_list) {
- tmp_node = dt_list->next;
- (void)H5MM_xfree(dt_list->path);
- (void)H5FL_FREE(H5O_copy_dtype_merge_list_t, dt_list);
- dt_list = tmp_node;
- } /* end while */
+ /* Free the merge named dtype list */
+ H5P__free_merge_comm_dtype_list(*(H5O_copy_dtype_merge_list_t **)value);
- FUNC_LEAVE_NOAPI(NULL);
-} /* H5P_free_merge_comm_dtype_list */
+ FUNC_LEAVE_NOAPI(SUCCEED)
+} /* end H5P__ocpy_merge_comm_dt_list_close() */
/*-------------------------------------------------------------------------
@@ -541,7 +518,7 @@ H5Pfree_merge_committed_dtype_paths(hid_t plist_id)
HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't get merge committed dtype list")
/* Free dtype list */
- dt_list = H5P_free_merge_comm_dtype_list(dt_list);
+ dt_list = H5P__free_merge_comm_dtype_list(dt_list);
/* Update the list stored in the property list (to NULL) */
if(H5P_set(plist, H5O_CPY_MERGE_COMM_DT_LIST_NAME, &dt_list) < 0)