summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorQuincey Koziol <koziol@hdfgroup.org>2000-04-15 20:28:12 (GMT)
committerQuincey Koziol <koziol@hdfgroup.org>2000-04-15 20:28:12 (GMT)
commit2ec6fd667bb4c49539bb820cb2b6f426e6c4c10a (patch)
tree77e150c8e92dcc45e759cf1addc5d3b103401a32 /src
parentf12e3316665d7ac89820cc9ccecfad8e5537ce44 (diff)
downloadhdf5-2ec6fd667bb4c49539bb820cb2b6f426e6c4c10a.zip
hdf5-2ec6fd667bb4c49539bb820cb2b6f426e6c4c10a.tar.gz
hdf5-2ec6fd667bb4c49539bb820cb2b6f426e6c4c10a.tar.bz2
[svn-r2151] Modified H5_term_library to not reported errors when H5Eset_auto(NULL,NULL)
has turned off error reporting in the library. Also, changed the way property lists are managed and closed so that they can be automatically closed when the library terminates.
Diffstat (limited to 'src')
-rw-r--r--src/H5.c11
-rw-r--r--src/H5D.c6
-rw-r--r--src/H5F.c21
-rw-r--r--src/H5Fprivate.h5
-rw-r--r--src/H5P.c451
-rw-r--r--src/H5Pprivate.h18
6 files changed, 255 insertions, 257 deletions
diff --git a/src/H5.c b/src/H5.c
index c1a57c9..e4a6a88 100644
--- a/src/H5.c
+++ b/src/H5.c
@@ -144,10 +144,14 @@ H5_term_library(void)
intn pending, ntries=0, n;
uintn at=0;
char loop[1024];
+ H5E_auto_t func;
/* Don't do anything if the library is already closed */
if (!H5_libinit_g) return;
+ /* Check if we should display error output */
+ H5Eget_auto(&func,NULL);
+
/*
* Terminate each interface. The termination functions return a positive
* value if they do something that might affect some other interface in a
@@ -178,8 +182,11 @@ H5_term_library(void)
pending += DOWN(I);
} while (pending && ntries++<100);
if (pending) {
- fprintf(stderr, "HDF5: infinite loop closing library\n");
- fprintf(stderr, " %s...\n", loop);
+ /* Only display the error message if the user is interested in them. */
+ if (func) {
+ fprintf(stderr, "HDF5: infinite loop closing library\n");
+ fprintf(stderr, " %s...\n", loop);
+ }
}
/* Mark library as closed */
diff --git a/src/H5D.c b/src/H5D.c
index 8951db8..403536d 100644
--- a/src/H5D.c
+++ b/src/H5D.c
@@ -1124,7 +1124,7 @@ H5D_create(H5G_entry_t *loc, const char *name, const H5T_t *type,
if (!ret_value && new_dset) {
if (new_dset->type) H5T_close(new_dset->type);
if (new_dset->create_parms) {
- H5P_close (H5P_DATASET_CREATE, new_dset->create_parms);
+ H5P_close (new_dset->create_parms);
new_dset->create_parms = NULL;
}
if (H5F_addr_defined(new_dset->ent.header)) {
@@ -1384,7 +1384,7 @@ done:
H5T_close(dataset->type);
}
if (dataset->create_parms) {
- H5P_close (H5P_DATASET_CREATE, dataset->create_parms);
+ H5P_close (dataset->create_parms);
}
dataset->ent.file = NULL;
H5FL_FREE(H5D_t,dataset);
@@ -1429,7 +1429,7 @@ H5D_close(H5D_t *dataset)
* can do if one of these fails, so we just continue.
*/
free_failed = (H5T_close(dataset->type) < 0 ||
- H5P_close(H5P_DATASET_CREATE, dataset->create_parms));
+ H5P_close(dataset->create_parms));
/* Close the dataset object */
H5O_close(&(dataset->ent));
diff --git a/src/H5F.c b/src/H5F.c
index b15f3fc..eb60325 100644
--- a/src/H5F.c
+++ b/src/H5F.c
@@ -432,7 +432,7 @@ H5Fget_create_plist(hid_t file_id)
{
H5F_t *file = NULL;
hid_t ret_value = FAIL;
- H5F_create_t *plist = NULL;
+ H5P_t *plist = NULL;
FUNC_ENTER(H5Fget_create_plist, FAIL);
H5TRACE1("i","i",file_id);
@@ -450,8 +450,8 @@ H5Fget_create_plist(hid_t file_id)
/* Create an atom */
if ((ret_value = H5P_create(H5P_FILE_CREATE, plist)) < 0) {
- H5P_close(H5P_FILE_CREATE, plist);
- HRETURN_ERROR(H5E_ATOM, H5E_CANTREGISTER, FAIL,
+ H5P_close(plist);
+ HRETURN_ERROR(H5E_ATOM, H5E_CANTREGISTER, FAIL,
"unable to register property list");
}
@@ -481,7 +481,8 @@ hid_t
H5Fget_access_plist(hid_t file_id)
{
H5F_t *f = NULL;
- H5F_access_t *fapl=NULL, _fapl;
+ H5F_access_t _fapl;
+ H5P_t *plist=NULL;
hid_t ret_value = FAIL;
FUNC_ENTER(H5Fget_access_plist, FAIL);
@@ -505,18 +506,18 @@ H5Fget_access_plist(hid_t file_id)
_fapl.driver_info = NULL; /*just for now */
/* Copy properties */
- if (NULL==(fapl=H5P_copy(H5P_FILE_ACCESS, &_fapl))) {
+ if (NULL==(plist=H5P_copy(H5P_FILE_ACCESS, &_fapl))) {
HRETURN_ERROR(H5E_INTERNAL, H5E_CANTINIT, FAIL,
"unable to copy file access properties");
}
/* Get the properties for the file driver */
- fapl->driver_info = H5FD_fapl_get(f->shared->lf);
+ plist->u.faccess.driver_info = H5FD_fapl_get(f->shared->lf);
/* Create an atom */
- if ((ret_value = H5P_create(H5P_FILE_ACCESS, fapl))<0) {
- H5P_close(H5P_FILE_ACCESS, fapl);
- HRETURN_ERROR(H5E_ATOM, H5E_CANTREGISTER, FAIL,
+ if ((ret_value = H5P_create(H5P_FILE_ACCESS, plist))<0) {
+ H5P_close(plist);
+ HRETURN_ERROR(H5E_ATOM, H5E_CANTREGISTER, FAIL,
"unable to register property list");
}
@@ -834,7 +835,7 @@ H5F_dest(H5F_t *f)
f->shared->cwfs = H5MM_xfree (f->shared->cwfs);
/* Destroy file creation properties */
- H5P_close(H5P_FILE_CREATE, f->shared->fcpl);
+ H5P_close(f->shared->fcpl);
/* Destroy shared file struct */
if (H5FD_close(f->shared->lf)<0) {
diff --git a/src/H5Fprivate.h b/src/H5Fprivate.h
index 5acb280..ea108ac 100644
--- a/src/H5Fprivate.h
+++ b/src/H5Fprivate.h
@@ -312,6 +312,11 @@ typedef struct H5F_file_t {
haddr_t driver_addr; /* File driver information block address*/
struct H5AC_t *cache; /* The object cache */
H5F_create_t *fcpl; /* File-creation property list */
+ /* This actually ends up being a pointer to a */
+ /* H5P_t type, which is returned from H5P_copy */
+ /* But that's ok because we only access it like */
+ /* a H5F_create_t until we pass it back to */
+ /* H5P_close to release it - QAK */
intn mdc_nelmts; /* Size of meta data cache (elements) */
intn rdcc_nelmts; /* Size of raw data chunk cache (elmts) */
size_t rdcc_nbytes; /* Size of raw data chunk cache (bytes) */
diff --git a/src/H5P.c b/src/H5P.c
index 441ab53..a22a679 100644
--- a/src/H5P.c
+++ b/src/H5P.c
@@ -37,20 +37,8 @@ static intn interface_initialize_g = 0;
#define INTERFACE_INIT H5P_init_interface
static herr_t H5P_init_interface(void);
-/* Declare a free list to manage the H5F_create_t struct */
-H5FL_DEFINE_STATIC(H5F_create_t);
-
-/* Declare a free list to manage the H5F_access_t struct */
-H5FL_DEFINE_STATIC(H5F_access_t);
-
-/* Declare a free list to manage the H5D_create_t struct */
-H5FL_DEFINE_STATIC(H5D_create_t);
-
-/* Declare a free list to manage the H5F_xfer_t struct */
-H5FL_DEFINE_STATIC(H5F_xfer_t);
-
-/* Declare a free list to manage the H5F_mprop_t struct */
-H5FL_DEFINE_STATIC(H5F_mprop_t);
+/* Declare a free list to manage the H5P_t struct */
+H5FL_DEFINE_STATIC(H5P_t);
/*--------------------------------------------------------------------------
NAME
@@ -92,7 +80,7 @@ H5P_init_interface(void)
*/
for (i = 0; i < H5P_NCLASSES; i++) {
status = H5I_init_group((H5I_type_t)(H5I_TEMPLATE_0 +i),
- H5I_TEMPID_HASHSIZE, 0, NULL);
+ H5I_TEMPID_HASHSIZE, 0, (H5I_free_t)H5P_close);
if (status < 0) ret_value = FAIL;
}
if (ret_value < 0) {
@@ -167,7 +155,7 @@ H5Pcreate(H5P_class_t type)
{
hid_t ret_value = FAIL;
const void *src = NULL;
- void *new_plist = NULL;
+ H5P_t *new_plist = NULL;
FUNC_ENTER(H5Pcreate, FAIL);
H5TRACE1("i","p",type);
@@ -230,7 +218,7 @@ H5Pcreate(H5P_class_t type)
*-------------------------------------------------------------------------
*/
hid_t
-H5P_create(H5P_class_t type, void *plist)
+H5P_create(H5P_class_t type, H5P_t *plist)
{
hid_t ret_value = FAIL;
@@ -277,19 +265,16 @@ H5Pclose(hid_t plist_id)
H5TRACE1("e","i",plist_id);
/* Check arguments */
- if (plist_id==H5P_DEFAULT) HRETURN(SUCCEED);
+ if (plist_id==H5P_DEFAULT)
+ HRETURN(SUCCEED);
if ((type=H5P_get_class (plist_id))<0 ||
- NULL==(plist=H5I_object (plist_id))) {
+ NULL==(plist=H5I_object (plist_id))) {
HRETURN_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a property list");
}
- /*
- * Chuck the object! When the reference count reaches zero then
- * H5I_dec_ref() removes it from the group and we should free it. The
- * free function is not registered as part of the group because it takes
- * an extra argument.
- */
- if (0==H5I_dec_ref(plist_id)) H5P_close (type, plist);
+ /* When the reference count reaches zero the resources are freed */
+ if (H5I_dec_ref(plist_id) < 0)
+ HRETURN_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "problem freeing property list");
FUNC_LEAVE (SUCCEED);
}
@@ -312,19 +297,21 @@ H5Pclose(hid_t plist_id)
*-------------------------------------------------------------------------
*/
herr_t
-H5P_close(H5P_class_t type, void *plist)
+H5P_close(void *_plist)
{
- H5F_access_t *fa_list = (H5F_access_t*)plist;
- H5F_xfer_t *dx_list = (H5F_xfer_t*)plist;
- H5D_create_t *dc_list = (H5D_create_t*)plist;
+ H5P_t *plist=(H5P_t *)_plist;
+ H5F_access_t *fa_list = &(plist->u.faccess);
+ H5F_xfer_t *dx_list = &(plist->u.dxfer);
+ H5D_create_t *dc_list = &(plist->u.dcreate);
FUNC_ENTER (H5P_close, FAIL);
/* Check args */
- if (!plist) HRETURN (SUCCEED);
+ if (!plist)
+ HRETURN (SUCCEED);
/* Some property lists may need to do special things */
- switch (type) {
+ switch (plist->class) {
case H5P_FILE_ACCESS:
if (fa_list->driver_id>=0) {
H5FD_fapl_free(fa_list->driver_id, fa_list->driver_info);
@@ -332,18 +319,15 @@ H5P_close(H5P_class_t type, void *plist)
fa_list->driver_info = NULL;
fa_list->driver_id = -1;
}
- H5FL_FREE(H5F_access_t,plist);
break;
case H5P_FILE_CREATE:
- H5FL_FREE(H5F_create_t,plist);
break;
case H5P_DATASET_CREATE:
H5O_reset(H5O_FILL, &(dc_list->fill));
H5O_reset(H5O_EFL, &(dc_list->efl));
H5O_reset(H5O_PLINE, &(dc_list->pline));
- H5FL_FREE(H5D_create_t,plist);
break;
case H5P_DATA_XFER:
@@ -353,11 +337,9 @@ H5P_close(H5P_class_t type, void *plist)
dx_list->driver_info = NULL;
dx_list->driver_id = -1;
}
- H5FL_FREE(H5F_xfer_t,plist);
break;
case H5P_MOUNT:
- H5FL_FREE(H5F_mprop_t,plist);
break;
default:
@@ -365,6 +347,9 @@ H5P_close(H5P_class_t type, void *plist)
"unknown property list class");
}
+ /* Return the property list to the free list */
+ H5FL_FREE(H5P_t,plist);
+
FUNC_LEAVE(SUCCEED);
}
@@ -445,6 +430,195 @@ H5P_get_class(hid_t plist_id)
/*-------------------------------------------------------------------------
+ * Function: H5Pcopy
+ *
+ * Purpose: Deep-copies a property list PLIST_ID.
+ *
+ * Return: Success: The ID of the new copy of the property list.
+ * The ID will be different than the input ID
+ * since the new ID refers to a completely
+ * separate copy of the the structure that the
+ * original ID points to.
+ *
+ * Failure: Negative
+ *
+ * Programmer: Unknown
+ *
+ * Modifications:
+ * Robb Matzke, 1999-08-03
+ * If PLIST_ID is H5P_DEFAULT then we return H5P_DEFAULT.
+ *-------------------------------------------------------------------------
+ */
+hid_t
+H5Pcopy(hid_t plist_id)
+{
+ const void *plist = NULL;
+ void *new_plist = NULL;
+ H5P_class_t type;
+ hid_t ret_value = FAIL;
+ H5I_type_t group;
+
+ FUNC_ENTER(H5Pcopy, FAIL);
+ H5TRACE1("i","i",plist_id);
+
+ if (H5P_DEFAULT==plist_id)
+ return H5P_DEFAULT;
+
+ /* Check args */
+ if (NULL == (plist = H5I_object(plist_id)) ||
+ (type = H5P_get_class(plist_id)) < 0 ||
+ (group = H5I_get_type(plist_id)) < 0) {
+ HRETURN_ERROR(H5E_ATOM, H5E_BADATOM, FAIL,
+ "unable to unatomize property list");
+ }
+
+ /* Copy it */
+ if (NULL==(new_plist=H5P_copy (type, plist))) {
+ HRETURN_ERROR (H5E_INTERNAL, H5E_CANTINIT, FAIL,
+ "unable to copy property list");
+ }
+
+ /* Register the atom for the new property list */
+ if ((ret_value = H5I_register(group, new_plist)) < 0) {
+ HRETURN_ERROR(H5E_ATOM, H5E_CANTREGISTER, FAIL,
+ "unable to atomize property list pointer");
+ }
+ FUNC_LEAVE(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5P_copy
+ *
+ * Purpose: Creates a new property list and initializes it with some
+ * other property list.
+ *
+ * Return: Success: Ptr to new property list
+ *
+ * Failure: NULL
+ *
+ * Programmer: Robb Matzke
+ * Tuesday, February 3, 1998
+ *
+ * Modifications:
+ * Robb Matzke, 1999-08-03
+ * Modified to use the virtual file layer.
+ *-------------------------------------------------------------------------
+ */
+void *
+H5P_copy (H5P_class_t type, const void *src)
+{
+ size_t size;
+ H5P_t *dst = NULL;
+ const H5D_create_t *dc_src = NULL;
+ H5D_create_t *dc_dst = NULL;
+ H5F_access_t *fa_dst = NULL;
+ H5F_xfer_t *dx_dst = NULL;
+
+ FUNC_ENTER (H5P_copy, NULL);
+
+ /* How big is the property list */
+ switch (type) {
+ case H5P_FILE_CREATE:
+ size = sizeof(H5F_create_t);
+ break;
+
+ case H5P_FILE_ACCESS:
+ size = sizeof(H5F_access_t);
+ break;
+
+ case H5P_DATASET_CREATE:
+ size = sizeof(H5D_create_t);
+ break;
+
+ case H5P_DATA_XFER:
+ size = sizeof(H5F_xfer_t);
+ break;
+
+ case H5P_MOUNT:
+ size = sizeof(H5F_mprop_t);
+ break;
+
+ default:
+ HRETURN_ERROR(H5E_ARGS, H5E_BADRANGE, NULL,
+ "unknown property list class");
+ }
+
+ /* Create the new property list */
+ if (NULL==(dst = H5FL_ALLOC(H5P_t,0))) {
+ HRETURN_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL,
+ "memory allocation failed");
+ }
+
+ /* Copy into new object */
+ HDmemcpy(dst, src, size);
+
+ /* Set the type of the property list */
+ dst->class=type;
+
+ /* Deep-copy pointers */
+ switch (type) {
+ case H5P_FILE_CREATE:
+ break;
+
+ case H5P_FILE_ACCESS:
+ fa_dst = (H5F_access_t*)dst;
+
+ if (fa_dst->driver_id>=0) {
+ H5I_inc_ref(fa_dst->driver_id);
+ fa_dst->driver_info = H5FD_fapl_copy(fa_dst->driver_id,
+ fa_dst->driver_info);
+ }
+ break;
+
+ case H5P_DATASET_CREATE:
+ dc_src = (const H5D_create_t*)src;
+ dc_dst = (H5D_create_t*)dst;
+
+ /* Copy the fill value */
+ if (NULL==H5O_copy(H5O_FILL, &(dc_src->fill), &(dc_dst->fill))) {
+ HRETURN_ERROR(H5E_PLIST, H5E_CANTINIT, NULL,
+ "unabe to copy fill value message");
+ }
+
+ /* Copy the external file list */
+ HDmemset(&(dc_dst->efl), 0, sizeof(dc_dst->efl));
+ if (NULL==H5O_copy(H5O_EFL, &(dc_src->efl), &(dc_dst->efl))) {
+ HRETURN_ERROR(H5E_PLIST, H5E_CANTINIT, NULL,
+ "unable to copy external file list message");
+ }
+
+ /* Copy the filter pipeline */
+ if (NULL==H5O_copy(H5O_PLINE, &(dc_src->pline), &(dc_dst->pline))) {
+ HRETURN_ERROR(H5E_PLIST, H5E_CANTINIT, NULL,
+ "unable to copy filter pipeline message");
+ }
+ break;
+
+ case H5P_DATA_XFER:
+ dx_dst = (H5F_xfer_t*)dst;
+
+ if (dx_dst->driver_id>=0) {
+ H5I_inc_ref(dx_dst->driver_id);
+ dx_dst->driver_info = H5FD_dxpl_copy(dx_dst->driver_id,
+ dx_dst->driver_info);
+ }
+ break;
+
+ case H5P_MOUNT:
+ /* Nothing to do */
+ break;
+
+ default:
+ HRETURN_ERROR(H5E_ARGS, H5E_BADRANGE, NULL,
+ "unknown property list class");
+ }
+
+ FUNC_LEAVE (dst);
+}
+
+
+/*-------------------------------------------------------------------------
* Function: H5Pget_version
*
* Purpose: Retrieves version information for various parts of a file.
@@ -2541,206 +2715,3 @@ H5Pget_vlen_mem_manager(hid_t plist_id, H5MM_allocate_t *alloc_func/*out*/,
FUNC_LEAVE (SUCCEED);
}
-
-/*-------------------------------------------------------------------------
- * Function: H5Pcopy
- *
- * Purpose: Deep-copies a property list PLIST_ID.
- *
- * Return: Success: The ID of the new copy of the property list.
- * The ID will be different than the input ID
- * since the new ID refers to a completely
- * separate copy of the the structure that the
- * original ID points to.
- *
- * Failure: Negative
- *
- * Programmer: Unknown
- *
- * Modifications:
- * Robb Matzke, 1999-08-03
- * If PLIST_ID is H5P_DEFAULT then we return H5P_DEFAULT.
- *-------------------------------------------------------------------------
- */
-hid_t
-H5Pcopy(hid_t plist_id)
-{
- const void *plist = NULL;
- void *new_plist = NULL;
- H5P_class_t type;
- hid_t ret_value = FAIL;
- H5I_type_t group;
-
- FUNC_ENTER(H5Pcopy, FAIL);
- H5TRACE1("i","i",plist_id);
-
- if (H5P_DEFAULT==plist_id) return H5P_DEFAULT;
-
- /* Check args */
- if (NULL == (plist = H5I_object(plist_id)) ||
- (type = H5P_get_class(plist_id)) < 0 ||
- (group = H5I_get_type(plist_id)) < 0) {
- HRETURN_ERROR(H5E_ATOM, H5E_BADATOM, FAIL,
- "unable to unatomize property list");
- }
-
- /* Copy it */
- if (NULL==(new_plist=H5P_copy (type, plist))) {
- HRETURN_ERROR (H5E_INTERNAL, H5E_CANTINIT, FAIL,
- "unable to copy property list");
- }
-
- /* Register the atom for the new property list */
- if ((ret_value = H5I_register(group, new_plist)) < 0) {
- HRETURN_ERROR(H5E_ATOM, H5E_CANTREGISTER, FAIL,
- "unable to atomize property list pointer");
- }
- FUNC_LEAVE(ret_value);
-}
-
-
-/*-------------------------------------------------------------------------
- * Function: H5P_copy
- *
- * Purpose: Creates a new property list and initializes it with some
- * other property list.
- *
- * Return: Success: Ptr to new property list
- *
- * Failure: NULL
- *
- * Programmer: Robb Matzke
- * Tuesday, February 3, 1998
- *
- * Modifications:
- * Robb Matzke, 1999-08-03
- * Modified to use the virtual file layer.
- *-------------------------------------------------------------------------
- */
-void *
-H5P_copy (H5P_class_t type, const void *src)
-{
- size_t size;
- void *dst = NULL;
- const H5D_create_t *dc_src = NULL;
- H5D_create_t *dc_dst = NULL;
- H5F_access_t *fa_dst = NULL;
- H5F_xfer_t *dx_dst = NULL;
-
- FUNC_ENTER (H5P_copy, NULL);
-
- /* How big is the property list */
- switch (type) {
- case H5P_FILE_CREATE:
- /* Create the new property list */
- if (NULL==(dst = H5FL_ALLOC(H5F_create_t,0))) {
- HRETURN_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL,
- "memory allocation failed");
- }
- size = sizeof(H5F_create_t);
- break;
-
- case H5P_FILE_ACCESS:
- /* Create the new property list */
- if (NULL==(dst = H5FL_ALLOC(H5F_access_t,0))) {
- HRETURN_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL,
- "memory allocation failed");
- }
- size = sizeof(H5F_access_t);
- break;
-
- case H5P_DATASET_CREATE:
- /* Create the new property list */
- if (NULL==(dst = H5FL_ALLOC(H5D_create_t,0))) {
- HRETURN_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL,
- "memory allocation failed");
- }
- size = sizeof(H5D_create_t);
- break;
-
- case H5P_DATA_XFER:
- /* Create the new property list */
- if (NULL==(dst = H5FL_ALLOC(H5F_xfer_t,0))) {
- HRETURN_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL,
- "memory allocation failed");
- }
- size = sizeof(H5F_xfer_t);
- break;
-
- case H5P_MOUNT:
- /* Create the new property list */
- if (NULL==(dst = H5FL_ALLOC(H5F_mprop_t,0))) {
- HRETURN_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL,
- "memory allocation failed");
- }
- size = sizeof(H5F_mprop_t);
- break;
-
- default:
- HRETURN_ERROR(H5E_ARGS, H5E_BADRANGE, NULL,
- "unknown property list class");
- }
-
- /* Copy into new object */
- HDmemcpy(dst, src, size);
-
- /* Deep-copy pointers */
- switch (type) {
- case H5P_FILE_CREATE:
- break;
-
- case H5P_FILE_ACCESS:
- fa_dst = (H5F_access_t*)dst;
-
- if (fa_dst->driver_id>=0) {
- H5I_inc_ref(fa_dst->driver_id);
- fa_dst->driver_info = H5FD_fapl_copy(fa_dst->driver_id,
- fa_dst->driver_info);
- }
- break;
-
- case H5P_DATASET_CREATE:
- dc_src = (const H5D_create_t*)src;
- dc_dst = (H5D_create_t*)dst;
-
- /* Copy the fill value */
- if (NULL==H5O_copy(H5O_FILL, &(dc_src->fill), &(dc_dst->fill))) {
- HRETURN_ERROR(H5E_PLIST, H5E_CANTINIT, NULL,
- "unabe to copy fill value message");
- }
-
- /* Copy the external file list */
- HDmemset(&(dc_dst->efl), 0, sizeof(dc_dst->efl));
- if (NULL==H5O_copy(H5O_EFL, &(dc_src->efl), &(dc_dst->efl))) {
- HRETURN_ERROR(H5E_PLIST, H5E_CANTINIT, NULL,
- "unable to copy external file list message");
- }
-
- /* Copy the filter pipeline */
- if (NULL==H5O_copy(H5O_PLINE, &(dc_src->pline), &(dc_dst->pline))) {
- HRETURN_ERROR(H5E_PLIST, H5E_CANTINIT, NULL,
- "unable to copy filter pipeline message");
- }
- break;
-
- case H5P_DATA_XFER:
- dx_dst = (H5F_xfer_t*)dst;
-
- if (dx_dst->driver_id>=0) {
- H5I_inc_ref(dx_dst->driver_id);
- dx_dst->driver_info = H5FD_dxpl_copy(dx_dst->driver_id,
- dx_dst->driver_info);
- }
- break;
-
- case H5P_MOUNT:
- /* Nothing to do */
- break;
-
- default:
- HRETURN_ERROR(H5E_ARGS, H5E_BADRANGE, NULL,
- "unknown property list class");
- }
-
- FUNC_LEAVE (dst);
-}
diff --git a/src/H5Pprivate.h b/src/H5Pprivate.h
index 8a8bd93..0e66841 100644
--- a/src/H5Pprivate.h
+++ b/src/H5Pprivate.h
@@ -21,10 +21,24 @@
/* Private headers needed by this file */
#include <H5private.h>
#include <H5Fprivate.h>
+#include <H5Dprivate.h>
-__DLL__ hid_t H5P_create(H5P_class_t type, void *tmpl);
+/* Master property list structure */
+typedef struct {
+ /* Union of all the different kinds of property lists */
+ union {
+ H5F_create_t fcreate; /* File creation properties */
+ H5F_access_t faccess; /* File access properties */
+ H5D_create_t dcreate; /* Dataset creation properties */
+ H5F_xfer_t dxfer; /* Data transfer properties */
+ H5F_mprop_t mount; /* Mounting properties */
+ } u;
+ H5P_class_t class; /* Property list class */
+} H5P_t;
+
+__DLL__ hid_t H5P_create(H5P_class_t type, H5P_t *plist);
__DLL__ void *H5P_copy(H5P_class_t type, const void *src);
-__DLL__ herr_t H5P_close(H5P_class_t type, void *tmpl);
+__DLL__ herr_t H5P_close(void *plist);
__DLL__ H5P_class_t H5P_get_class(hid_t tid);
#endif