summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorQuincey Koziol <koziol@hdfgroup.org>2009-01-31 18:19:49 (GMT)
committerQuincey Koziol <koziol@hdfgroup.org>2009-01-31 18:19:49 (GMT)
commit2d74d46d3fe259ed51b2b996b56559563999e852 (patch)
treefaff172323e140a2446f90e935589708f9bd0830
parent7191f26717255667e86c86559ffc316f73f4c1bd (diff)
downloadhdf5-2d74d46d3fe259ed51b2b996b56559563999e852.zip
hdf5-2d74d46d3fe259ed51b2b996b56559563999e852.tar.gz
hdf5-2d74d46d3fe259ed51b2b996b56559563999e852.tar.bz2
[svn-r16392] Description:
Bring r16367:16391 back from trunk into revise_chunks branch. Tested on: FreeBSD 6.3/32 (duty) (h5committest not required on this branch)
-rw-r--r--release_docs/RELEASE.txt3
-rw-r--r--src/H5Aint.c537
-rw-r--r--src/H5Apkg.h9
-rw-r--r--src/H5EA.c30
-rw-r--r--src/H5EAcache.c30
-rw-r--r--src/H5EAdblock.c24
-rw-r--r--src/H5EAhdr.c4
-rw-r--r--src/H5EAiblock.c25
-rw-r--r--src/H5EApkg.h13
-rw-r--r--src/H5EAprivate.h10
-rw-r--r--src/H5EAsblock.c23
-rw-r--r--src/H5FDcore.c12
-rw-r--r--src/H5O.c3
-rw-r--r--src/H5Oainfo.c66
-rw-r--r--src/H5Oattr.c286
-rw-r--r--src/H5Oattribute.c2
-rw-r--r--src/H5Ocache.c18
-rw-r--r--src/H5Ocopy.c3
-rw-r--r--src/H5Omessage.c12
-rw-r--r--src/H5Opkg.h17
-rw-r--r--test/Makefile.am2
-rw-r--r--test/cmpd_dset.c82
-rw-r--r--test/earray.c72
-rw-r--r--test/fillval.c2
-rwxr-xr-xtest/objcopy.c189
-rw-r--r--test/set_extent.c19
-rw-r--r--tools/lib/h5diff.c20
-rw-r--r--tools/lib/h5diff_array.c1
-rw-r--r--tools/lib/h5diff_attr.c2
-rw-r--r--tools/lib/h5diff_dset.c46
-rw-r--r--vms/build.com2
-rw-r--r--vms/make.com10
-rw-r--r--vms/src/h5pubconf.h334
-rw-r--r--vms/src/make.com73
-rw-r--r--vms/test/check.com234
-rw-r--r--vms/test/make.com266
36 files changed, 1609 insertions, 872 deletions
diff --git a/release_docs/RELEASE.txt b/release_docs/RELEASE.txt
index 4e35418..7ca6ecf 100644
--- a/release_docs/RELEASE.txt
+++ b/release_docs/RELEASE.txt
@@ -51,6 +51,7 @@ New Features
Library:
--------
+ - Added support for dense attributes to H5Ocopy. (XCao/NAF - 2009/01/29)
- Added H5Pset_elink_cb and H5Pget_elink_cb functions to support a
user-defined callback function for external link traversal.
(NAF - 2009/01/08)
@@ -141,6 +142,8 @@ Bug Fixes since HDF5-1.8.0 release
Library
-------
+ - Fixed a bug that could cause problems when copying an object with a shared
+ message in its own object header. (NAF - 2009/01/29)
- Changed H5Tset_order to properly reject H5T_ORDER_NONE for most
datatypes. (NAF - 2009/01/27)
- Fixed a bug where H5Tpack wouldn't remove trailing space from an
diff --git a/src/H5Aint.c b/src/H5Aint.c
index aadf79c..a47c5c3 100644
--- a/src/H5Aint.c
+++ b/src/H5Aint.c
@@ -37,9 +37,12 @@
/***********/
#include "H5private.h" /* Generic Functions */
#include "H5Apkg.h" /* Attributes */
+#include "H5Dprivate.h" /* Datasets */
#include "H5Eprivate.h" /* Error handling */
+#include "H5Iprivate.h" /* IDs */
#include "H5MMprivate.h" /* Memory management */
#include "H5Opkg.h" /* Object headers */
+#include "H5SMprivate.h" /* Shared Object Header Messages */
/****************/
@@ -66,6 +69,17 @@ typedef struct {
size_t curr_attr; /* Current attribute to operate on */
} H5A_dense_bt_ud_t;
+/* Data exchange structure to use when copying an attribute from _SRC to _DST */
+typedef struct {
+ const H5O_ainfo_t *ainfo; /* dense information */
+ H5F_t *file; /* file */
+ hbool_t *recompute_size; /* Flag to indicate if size changed */
+ H5O_copy_t *cpy_info; /* Information on copying options */
+ hid_t dxpl_id; /* DXPL for operation */
+ const H5O_loc_t *oloc_src;
+ H5O_loc_t *oloc_dst;
+} H5A_dense_file_cp_ud_t;
+
/********************/
/* Package Typedefs */
@@ -765,3 +779,526 @@ H5A_set_version(const H5F_t *f, H5A_t *attr)
FUNC_LEAVE_NOAPI(SUCCEED)
} /* end H5A_set_version() */
+
+/*-------------------------------------------------------------------------
+ * Function: H5A_attr_copy_file
+ *
+ * Purpose: Copies a message from _MESG to _DEST in file
+ *
+ * Return: Success: Ptr to _DEST
+ *
+ * Failure: NULL
+ *
+ * Programmer: Quincey Koziol
+ * November 1, 2005
+ *
+ *-------------------------------------------------------------------------
+ */
+H5A_t *
+H5A_attr_copy_file(const H5A_t *attr_src, H5F_t *file_dst, hbool_t *recompute_size,
+ H5O_copy_t *cpy_info, hid_t dxpl_id)
+{
+ H5A_t *attr_dst = NULL;
+
+ /* for dataype conversion */
+ hid_t tid_src = -1; /* Datatype ID for source datatype */
+ hid_t tid_dst = -1; /* Datatype ID for destination datatype */
+ hid_t tid_mem = -1; /* Datatype ID for memory datatype */
+ void *buf = NULL; /* Buffer for copying data */
+ void *reclaim_buf = NULL; /* Buffer for reclaiming data */
+ hid_t buf_sid = -1; /* ID for buffer dataspace */
+
+ H5A_t *ret_value; /* Return value */
+
+ FUNC_ENTER_NOAPI_NOINIT(H5A_attr_copy_file)
+
+ /* check args */
+ HDassert(attr_src);
+ HDassert(file_dst);
+ HDassert(cpy_info);
+ HDassert(!cpy_info->copy_without_attr);
+
+ /* Allocate space for the destination message */
+ if(NULL == (attr_dst = H5FL_CALLOC(H5A_t)))
+ HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed")
+
+ /* Copy the top level of the attribute */
+ *attr_dst = *attr_src;
+
+ if(NULL == (attr_dst->shared = H5FL_CALLOC(H5A_shared_t)))
+ HGOTO_ERROR(H5E_FILE, H5E_NOSPACE, NULL, "can't allocate shared attr structure")
+
+ /* Don't have an opened group location for copy */
+ H5O_loc_reset(&(attr_dst->shared->oloc));
+ H5G_name_reset(&(attr_dst->path));
+ attr_dst->obj_opened = FALSE;
+
+ /* Reference count for the header message in the cache */
+ attr_dst->shared->nrefs = 1;
+
+ /* Copy attribute's name */
+ attr_dst->shared->name = H5MM_strdup(attr_src->shared->name);
+ HDassert(attr_dst->shared->name);
+
+ /* Copy attribute's datatype */
+ /* (Start destination datatype as transient, even if source is named) */
+ if(NULL == (attr_dst->shared->dt = H5T_copy(attr_src->shared->dt, H5T_COPY_ALL)))
+ HGOTO_ERROR(H5E_OHDR, H5E_CANTCOPY, NULL, "cannot copy datatype")
+
+ /* Set the location of the destination datatype */
+ if(H5T_set_loc(attr_dst->shared->dt, file_dst, H5T_LOC_DISK) < 0)
+ HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, NULL, "cannot mark datatype on disk")
+
+ /* Check for named datatype being copied */
+ if(H5T_committed(attr_src->shared->dt)) {
+ H5O_loc_t *src_oloc; /* Pointer to source datatype's object location */
+ H5O_loc_t *dst_oloc; /* Pointer to dest. datatype's object location */
+
+ /* Get group entries for source & destination */
+ src_oloc = H5T_oloc(attr_src->shared->dt);
+ HDassert(src_oloc);
+ dst_oloc = H5T_oloc(attr_dst->shared->dt);
+ HDassert(dst_oloc);
+
+ /* Reset object location for new object */
+ H5O_loc_reset(dst_oloc);
+ dst_oloc->file = file_dst;
+
+ /* Copy the shared object from source to destination */
+ if(H5O_copy_header_map(src_oloc, dst_oloc, dxpl_id, cpy_info, FALSE) < 0)
+ HGOTO_ERROR(H5E_OHDR, H5E_CANTCOPY, NULL, "unable to copy object")
+
+ /* Update shared message info from named datatype info */
+ H5T_update_shared(attr_dst->shared->dt);
+ } /* end if */
+ else {
+ /* If the datatype is not named, it may have been shared in the
+ * source file's heap. Un-share it for now. We'll try to shared
+ * it in the destination file below.
+ */
+ if(H5O_msg_reset_share(H5O_DTYPE_ID, attr_dst->shared->dt) < 0)
+ HGOTO_ERROR(H5E_OHDR, H5E_CANTINIT, NULL, "unable to reset datatype sharing")
+ } /* end else */
+
+ /* Copy the dataspace for the attribute */
+ attr_dst->shared->ds = H5S_copy(attr_src->shared->ds, FALSE, FALSE);
+ HDassert(attr_dst->shared->ds);
+
+ /* Reset the dataspace's sharing in the source file before trying to share
+ * it in the destination.
+ */
+ if(H5O_msg_reset_share(H5O_SDSPACE_ID, attr_dst->shared->ds) < 0)
+ HGOTO_ERROR(H5E_OHDR, H5E_CANTINIT, NULL, "unable to reset dataspace sharing")
+
+
+ /* Try to share both the datatype and dataset. This does nothing if the
+ * datatype is committed or sharing is disabled.
+ */
+ if(H5SM_try_share(file_dst, dxpl_id, NULL, H5O_DTYPE_ID, attr_dst->shared->dt, NULL) < 0)
+ HGOTO_ERROR(H5E_OHDR, H5E_WRITEERROR, NULL, "can't share attribute datatype")
+ if(H5SM_try_share(file_dst, dxpl_id, NULL, H5O_SDSPACE_ID, attr_dst->shared->ds, NULL) < 0)
+ HGOTO_ERROR(H5E_OHDR, H5E_WRITEERROR, NULL, "can't share attribute dataspace")
+
+ /* Compute the sizes of the datatype and dataspace. This is their raw
+ * size unless they're shared.
+ */
+ attr_dst->shared->dt_size = H5O_msg_raw_size(file_dst, H5O_DTYPE_ID, FALSE, attr_dst->shared->dt);
+ HDassert(attr_dst->shared->dt_size > 0);
+ attr_dst->shared->ds_size = H5O_msg_raw_size(file_dst, H5O_SDSPACE_ID, FALSE, attr_dst->shared->ds);
+ HDassert(attr_dst->shared->ds_size > 0);
+
+ /* Check whether to recompute the size of the attribute */
+ /* (happens when the datatype or dataspace changes sharing status) */
+ if(attr_dst->shared->dt_size != attr_src->shared->dt_size || attr_dst->shared->ds_size != attr_src->shared->ds_size)
+ *recompute_size = TRUE;
+
+ /* Compute the size of the data */
+ H5_ASSIGN_OVERFLOW(attr_dst->shared->data_size, H5S_GET_EXTENT_NPOINTS(attr_dst->shared->ds) * H5T_get_size(attr_dst->shared->dt), hsize_t, size_t);
+
+ /* Copy (& convert) the data, if necessary */
+ if(attr_src->shared->data) {
+ if(NULL == (attr_dst->shared->data = H5FL_BLK_MALLOC(attr_buf, attr_dst->shared->data_size)))
+ HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed")
+
+ /* Check if we need to convert data */
+ if(H5T_detect_class(attr_src->shared->dt, H5T_VLEN) > 0) {
+ H5T_path_t *tpath_src_mem, *tpath_mem_dst; /* Datatype conversion paths */
+ H5T_t *dt_mem; /* Memory datatype */
+ size_t src_dt_size; /* Source datatype size */
+ size_t tmp_dt_size; /* Temp. datatype size */
+ size_t max_dt_size; /* Max atatype size */
+ H5S_t *buf_space; /* Dataspace describing buffer */
+ hsize_t buf_dim; /* Dimension for buffer */
+ size_t nelmts; /* Number of elements in buffer */
+ size_t buf_size; /* Size of copy buffer */
+
+ /* Create datatype ID for src datatype */
+ if((tid_src = H5I_register(H5I_DATATYPE, attr_src->shared->dt, FALSE)) < 0)
+ HGOTO_ERROR(H5E_DATATYPE, H5E_CANTREGISTER, NULL, "unable to register source file datatype")
+
+ /* create a memory copy of the variable-length datatype */
+ if(NULL == (dt_mem = H5T_copy(attr_src->shared->dt, H5T_COPY_TRANSIENT)))
+ HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, NULL, "unable to copy")
+ if((tid_mem = H5I_register(H5I_DATATYPE, dt_mem, FALSE)) < 0)
+ HGOTO_ERROR(H5E_DATATYPE, H5E_CANTREGISTER, NULL, "unable to register memory datatype")
+
+ /* create variable-length datatype at the destinaton file */
+ if((tid_dst = H5I_register(H5I_DATATYPE, attr_dst->shared->dt, FALSE)) < 0)
+ HGOTO_ERROR(H5E_DATATYPE, H5E_CANTREGISTER, NULL, "unable to register destination file datatype")
+
+ /* Set up the conversion functions */
+ if(NULL == (tpath_src_mem = H5T_path_find(attr_src->shared->dt, dt_mem, NULL, NULL, dxpl_id, FALSE)))
+ HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, NULL, "unable to convert between src and mem datatypes")
+ if(NULL == (tpath_mem_dst = H5T_path_find(dt_mem, attr_dst->shared->dt, NULL, NULL, dxpl_id, FALSE)))
+ HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, NULL, "unable to convert between mem and dst datatypes")
+
+ /* Determine largest datatype size */
+ if(0 == (src_dt_size = H5T_get_size(attr_src->shared->dt)))
+ HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, NULL, "unable to determine datatype size")
+ if(0 == (tmp_dt_size = H5T_get_size(dt_mem)))
+ HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, NULL, "unable to determine datatype size")
+ max_dt_size = MAX(src_dt_size, tmp_dt_size);
+ if(0 == (tmp_dt_size = H5T_get_size(attr_dst->shared->dt)))
+ HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, NULL, "unable to determine datatype size")
+ max_dt_size = MAX(max_dt_size, tmp_dt_size);
+
+ /* Set number of whole elements that fit in buffer */
+ if(0 == (nelmts = attr_src->shared->data_size / src_dt_size))
+ HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, NULL, "element size too large")
+
+ /* Set up number of bytes to copy, and initial buffer size */
+ buf_size = nelmts * max_dt_size;
+
+ /* Create dataspace for number of elements in buffer */
+ buf_dim = nelmts;
+
+ /* Create the space and set the initial extent */
+ if(NULL == (buf_space = H5S_create_simple((unsigned)1, &buf_dim, NULL)))
+ HGOTO_ERROR(H5E_DATASPACE, H5E_CANTCREATE, NULL, "can't create simple dataspace")
+
+ /* Atomize */
+ if((buf_sid = H5I_register(H5I_DATASPACE, buf_space, FALSE)) < 0) {
+ H5S_close(buf_space);
+ HGOTO_ERROR(H5E_ATOM, H5E_CANTREGISTER, NULL, "unable to register dataspace ID")
+ } /* end if */
+
+ /* Allocate memory for recclaim buf */
+ if(NULL == (reclaim_buf = H5FL_BLK_MALLOC(attr_buf, buf_size)))
+ HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation NULLed for raw data chunk")
+
+ /* Allocate memory for copying the chunk */
+ if(NULL == (buf = H5FL_BLK_MALLOC(attr_buf, buf_size)))
+ HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation NULLed for raw data chunk")
+
+ HDmemcpy(buf, attr_src->shared->data, attr_src->shared->data_size);
+
+ /* Convert from source file to memory */
+ if(H5T_convert(tpath_src_mem, tid_src, tid_mem, nelmts, (size_t)0, (size_t)0, buf, NULL, dxpl_id) < 0)
+ HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, NULL, "datatype conversion NULLed")
+
+ HDmemcpy(reclaim_buf, buf, buf_size);
+
+ /* Convert from memory to destination file */
+ if(H5T_convert(tpath_mem_dst, tid_mem, tid_dst, nelmts, (size_t)0, (size_t)0, buf, NULL, dxpl_id) < 0)
+ HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, NULL, "datatype conversion NULLed")
+
+ HDmemcpy(attr_dst->shared->data, buf, attr_dst->shared->data_size);
+
+ if(H5D_vlen_reclaim(tid_mem, buf_space, H5P_DATASET_XFER_DEFAULT, reclaim_buf) < 0)
+ HGOTO_ERROR(H5E_DATASET, H5E_BADITER, NULL, "unable to reclaim variable-length data")
+ } /* end if */
+ else {
+ HDassert(attr_dst->shared->data_size == attr_src->shared->data_size);
+ HDmemcpy(attr_dst->shared->data, attr_src->shared->data, attr_src->shared->data_size);
+ } /* end else */
+ } /* end if(attr_src->shared->data) */
+
+ /* Recompute the version to encode the destination attribute */
+ if(H5A_set_version(file_dst, attr_dst) < 0)
+ HGOTO_ERROR(H5E_ATTR, H5E_CANTSET, NULL, "unable to update attribute version")
+
+ /* Indicate that the fill values aren't to be written out */
+ attr_dst->shared->initialized = TRUE;
+
+ /* Set return value */
+ ret_value = attr_dst;
+
+done:
+ if(buf_sid > 0)
+ if(H5I_dec_ref(buf_sid, FALSE) < 0)
+ HDONE_ERROR(H5E_ATTR, H5E_CANTFREE, NULL, "Can't decrement temporary dataspace ID")
+ if(tid_src > 0)
+ /* Don't decrement ID, we want to keep underlying datatype */
+ if(H5I_remove(tid_src) == NULL)
+ HDONE_ERROR(H5E_ATTR, H5E_CANTFREE, NULL, "Can't decrement temporary datatype ID")
+ if(tid_dst > 0)
+ /* Don't decrement ID, we want to keep underlying datatype */
+ if(H5I_remove(tid_dst) == NULL)
+ HDONE_ERROR(H5E_ATTR, H5E_CANTFREE, NULL, "Can't decrement temporary datatype ID")
+ if(tid_mem > 0)
+ /* Decrement the memory datatype ID, it's transient */
+ if(H5I_dec_ref(tid_mem, FALSE) < 0)
+ HDONE_ERROR(H5E_ATTR, H5E_CANTFREE, NULL, "Can't decrement temporary datatype ID")
+ if(buf)
+ buf = H5FL_BLK_FREE(attr_buf, buf);
+ if(reclaim_buf)
+ reclaim_buf = H5FL_BLK_FREE(attr_buf, reclaim_buf);
+
+ /* Release destination attribute information on failure */
+ if(!ret_value && attr_dst && H5A_close(attr_dst) < 0)
+ HDONE_ERROR(H5E_ATTR, H5E_CANTFREE, NULL, "can't close attribute")
+
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* H5A_attr_copy_file() */
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5A_attr_post_copy_file
+ *
+ * Purpose: Finish copying a message from between files.
+ * We have to copy the values of a reference attribute in the
+ * post copy because H5O_post_copy_file() fails at the case that
+ * an object may have a reference attribute that points to the
+ * object itself.
+ *
+ * Return: Non-negative on success/Negative on failure
+ *
+ * Programmer: Peter Cao
+ * March 6, 2005
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5A_attr_post_copy_file(const H5O_loc_t *src_oloc, const H5A_t UNUSED *attr_src,
+ H5O_loc_t *dst_oloc, const H5A_t *attr_dst, hid_t dxpl_id, H5O_copy_t *cpy_info)
+{
+ H5F_t *file_src = src_oloc->file;
+ H5F_t *file_dst = dst_oloc->file;
+ herr_t ret_value = SUCCEED; /* Return value */
+
+
+ FUNC_ENTER_NOAPI_NOINIT(H5A_attr_post_copy_file)
+
+ /* check args */
+ HDassert(attr_dst);
+ HDassert(file_dst);
+
+
+ /* Only need to fix reference attribute with real data being copied to
+ * another file.
+ */
+ if((NULL != attr_dst->shared->data) && (H5T_get_class(attr_dst->shared->dt, FALSE) == H5T_REFERENCE) ) {
+
+ /* copy object pointed by reference. The current implementation does not
+ * deal with nested reference such as reference in a compound structure
+ */
+
+ /* Check for expanding references */
+ if(cpy_info->expand_ref) {
+ size_t ref_count;
+
+ /* Determine # of reference elements to copy */
+ ref_count = attr_dst->shared->data_size / H5T_get_size(attr_dst->shared->dt);
+
+ /* Copy objects referenced in source buffer to destination file and set destination elements */
+ if(H5O_copy_expand_ref(file_src, attr_dst->shared->data, dxpl_id,
+ file_dst, attr_dst->shared->data, ref_count, H5T_get_ref_type(attr_dst->shared->dt), cpy_info) < 0)
+ HGOTO_ERROR(H5E_ATTR, H5E_CANTCOPY, FAIL, "unable to copy reference attribute")
+ } /* end if */
+ else
+ /* Reset value to zero */
+ HDmemset(attr_dst->shared->data, 0, attr_dst->shared->data_size);
+ } /* end if */
+
+done:
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* H5A_attr_post_copy_file() */
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5A_dense_copy_file_cb
+ *
+ * Purpose: Callback routine for copying a dense attribute from SRC to DST.
+ *
+ * Return: Success: Non-negative
+ * Failure: Negative
+ *
+ * Programmer: Peter Cao
+ * xcao@hdfgroup.org
+ * July 20, 2007
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5A_dense_copy_file_cb(const H5A_t *attr_src, void *_udata)
+{
+ H5A_dense_file_cp_ud_t *udata = (H5A_dense_file_cp_ud_t *)_udata;
+ H5A_t *attr_dst = NULL;
+ herr_t ret_value = H5_ITER_CONT; /* Return value */
+
+ FUNC_ENTER_NOAPI_NOINIT(H5A_dense_copy_file_cb)
+
+ /* check arguments */
+ HDassert(attr_src);
+ HDassert(udata);
+ HDassert(udata->ainfo);
+ HDassert(udata->file);
+ HDassert(udata->cpy_info);
+
+ if ( NULL == (attr_dst=H5A_attr_copy_file(attr_src, udata->file,
+ udata->recompute_size, udata->cpy_info, udata->dxpl_id)))
+ HGOTO_ERROR(H5E_ATTR, H5E_CANTCOPY, H5_ITER_ERROR, "can't copy attribute")
+
+ /* Reset shared location information */
+ if(H5O_msg_reset_share(H5O_ATTR_ID, attr_dst) < 0)
+ HGOTO_ERROR(H5E_OHDR, H5E_CANTINIT, FAIL, "unable to reset attribute sharing")
+
+ /* Insert attribute into dense storage */
+ if(H5A_dense_insert(udata->file, udata->dxpl_id, udata->ainfo, attr_dst) < 0)
+ HGOTO_ERROR(H5E_OHDR, H5E_CANTINSERT, H5_ITER_ERROR, "unable to add to dense storage")
+
+done:
+ if (attr_dst) {
+ (void)H5A_free(attr_dst);
+ (void)H5FL_FREE(H5A_t, attr_dst);
+ }
+
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5A_dense_copy_file_cb() */
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5A_dense_copy_file_all
+ *
+ * Purpose: Copy all dense attributes from SRC to DST.
+ *
+ * Return: Success: Non-negative
+ * Failure: Negative
+ *
+ * Programmer: Peter Cao
+ * xcao@hdfgroup.org
+ * July 20, 2007
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5A_dense_copy_file_all(H5F_t *file_src, H5O_ainfo_t *ainfo_src, H5F_t *file_dst,
+ const H5O_ainfo_t *ainfo_dst, hbool_t *recompute_size, H5O_copy_t *cpy_info, hid_t dxpl_id)
+{
+ H5A_dense_file_cp_ud_t udata; /* User data for iteration callback */
+ H5A_attr_iter_op_t attr_op; /* Attribute operator */
+ herr_t ret_value = SUCCEED; /* Return value */
+
+ FUNC_ENTER_NOAPI_NOINIT(H5A_dense_copy_file_all)
+
+ /* check arguments */
+ HDassert(ainfo_src);
+ HDassert(ainfo_dst);
+
+ udata.ainfo = ainfo_dst; /* Destination dense information */
+ udata.file = file_dst; /* Destination file */
+ udata.recompute_size = recompute_size; /* Flag to indicate if size changed */
+ udata.cpy_info = cpy_info; /* Information on copying options */
+ udata.dxpl_id = dxpl_id; /* DXPL for operation */
+
+ attr_op.op_type = H5A_ATTR_OP_LIB;
+ attr_op.u.lib_op = H5A_dense_copy_file_cb;
+
+ if(H5A_dense_iterate(file_src, dxpl_id, (hid_t)0, ainfo_src, H5_INDEX_NAME,
+ H5_ITER_NATIVE, (hsize_t)0, NULL, &attr_op, &udata) < 0)
+ HGOTO_ERROR(H5E_ATTR, H5E_CANTINIT, FAIL, "error building attribute table")
+
+done:
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5A_dense_copy_file_all */
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5A_dense_post_copy_file_cb
+ *
+ * Purpose: Callback routine to perfom post copy for a dense attribute.
+ *
+ * Return: Success: Non-negative
+ * Failure: Negative
+ *
+ * Programmer: Peter Cao
+ * xcao@hdfgroup.org
+ * July 25, 2007
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5A_dense_post_copy_file_cb(const H5A_t *attr_dst, void *_udata)
+{
+ H5A_dense_file_cp_ud_t *udata = (H5A_dense_file_cp_ud_t *)_udata;
+ herr_t ret_value = H5_ITER_CONT; /* Return value */
+
+ FUNC_ENTER_NOAPI_NOINIT(H5A_dense_post_copy_file_cb)
+
+ /* check arguments */
+ HDassert(attr_dst);
+ HDassert(udata);
+ HDassert(udata->ainfo);
+ HDassert(udata->file);
+ HDassert(udata->cpy_info);
+
+ if ( H5A_attr_post_copy_file(udata->oloc_src, NULL,
+ udata->oloc_dst, attr_dst, udata->dxpl_id, udata->cpy_info) < 0)
+ HGOTO_ERROR(H5E_ATTR, H5E_CANTCOPY, H5_ITER_ERROR, "can't copy attribute")
+
+done:
+
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5A_dense_post_copy_file_cb() */
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5A_dense_post_copy_file_all
+ *
+ * Purpose: Do post copy for all dense attributes.
+ *
+ * Return: Success: Non-negative
+ * Failure: Negative
+ *
+ * Programmer: Peter Cao
+ * xcao@hdfgroup.org
+ * July 25, 2007
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5A_dense_post_copy_file_all(const H5O_loc_t *src_oloc, const H5O_ainfo_t *ainfo_src,
+ H5O_loc_t *dst_oloc, H5O_ainfo_t *ainfo_dst, hid_t dxpl_id, H5O_copy_t *cpy_info)
+{
+ H5A_dense_file_cp_ud_t udata; /* User data for iteration callback */
+ H5A_attr_iter_op_t attr_op; /* Attribute operator */
+ herr_t ret_value = SUCCEED; /* Return value */
+
+ FUNC_ENTER_NOAPI_NOINIT(H5A_dense_post_copy_file_all)
+
+ /* check arguments */
+ HDassert(ainfo_src);
+ HDassert(ainfo_dst);
+ HDassert(src_oloc);
+ HDassert(dst_oloc);
+ HDassert(src_oloc->file);
+ HDassert(dst_oloc->file);
+
+ udata.ainfo = ainfo_src;
+ udata.file = src_oloc->file;
+ udata.cpy_info = cpy_info; /* Information on copying options */
+ udata.dxpl_id = dxpl_id; /* DXPL for operation */
+ udata.oloc_src = src_oloc;
+ udata.oloc_dst = dst_oloc;
+
+ attr_op.op_type = H5A_ATTR_OP_LIB;
+ attr_op.u.lib_op = H5A_dense_post_copy_file_cb;
+
+ if(H5A_dense_iterate(dst_oloc->file, dxpl_id, (hid_t)0, ainfo_dst, H5_INDEX_NAME,
+ H5_ITER_NATIVE, (hsize_t)0, NULL, &attr_op, &udata) < 0)
+ HGOTO_ERROR(H5E_ATTR, H5E_CANTINIT, FAIL, "error building attribute table")
+
+done:
+ FUNC_LEAVE_NOAPI(ret_value)
+}
+
diff --git a/src/H5Apkg.h b/src/H5Apkg.h
index a1b5e62..9027864 100644
--- a/src/H5Apkg.h
+++ b/src/H5Apkg.h
@@ -279,6 +279,15 @@ H5_DLL htri_t H5O_attr_exists(const H5O_loc_t *loc, const char *name, hid_t dxpl
#ifndef H5_NO_DEPRECATED_SYMBOLS
H5_DLL int H5O_attr_count(const H5O_loc_t *loc, hid_t dxpl_id);
#endif /* H5_NO_DEPRECATED_SYMBOLS */
+H5_DLL H5A_t *H5A_attr_copy_file(const H5A_t *attr_src, H5F_t *file_dst, hbool_t *recompute_size,
+ H5O_copy_t *cpy_info, hid_t dxpl_id);
+H5_DLL herr_t H5A_attr_post_copy_file(const H5O_loc_t *src_oloc, const H5A_t *mesg_src,
+ H5O_loc_t *dst_oloc, const H5A_t *mesg_dst, hid_t dxpl_id, H5O_copy_t *cpy_info);
+H5_DLL herr_t H5A_dense_copy_file_all(H5F_t *file_src, H5O_ainfo_t *ainfo_src, H5F_t *file_dst,
+ const H5O_ainfo_t *ainfo_dst, hbool_t *recompute_size, H5O_copy_t *cpy_info, hid_t dxpl_id);
+H5_DLL herr_t H5A_dense_post_copy_file_all(const H5O_loc_t *src_oloc, const H5O_ainfo_t * ainfo_src,
+ H5O_loc_t *dst_oloc, H5O_ainfo_t *ainfo_dst, hid_t dxpl_id, H5O_copy_t *cpy_info);
+
/* Testing functions */
#ifdef H5A_TESTING
diff --git a/src/H5EA.c b/src/H5EA.c
index aa65da7..86c54fd 100644
--- a/src/H5EA.c
+++ b/src/H5EA.c
@@ -355,15 +355,9 @@ HDfprintf(stderr, "%s: Index %Hu\n", FUNC, idx);
HDfprintf(stderr, "%s: Index block address not defined!\n", FUNC, idx);
#endif /* QAK */
/* Create the index block */
- hdr->idx_blk_addr = H5EA__iblock_create(hdr, dxpl_id);
+ hdr->idx_blk_addr = H5EA__iblock_create(hdr, dxpl_id, &hdr_dirty);
if(!H5F_addr_defined(hdr->idx_blk_addr))
H5E_THROW(H5E_CANTCREATE, "unable to create index block")
-
- /* Increment count of elements "realized" */
- hdr->stats.nelmts += hdr->cparam.idx_blk_elmts;
-
- /* Mark the header dirty */
- hdr_dirty = TRUE;
} /* end if */
#ifdef QAK
HDfprintf(stderr, "%s: Index block address is: %a\n", FUNC, hdr->idx_blk_addr);
@@ -415,18 +409,13 @@ HDfprintf(stderr, "%s: dblk_idx = %u, iblock->ndblk_addrs = %Zu\n", FUNC, dblk_i
/* Create data block */
dblk_off = hdr->sblk_info[sblk_idx].start_idx + (dblk_idx * hdr->sblk_info[sblk_idx].dblk_nelmts);
- dblk_addr = H5EA__dblock_create(hdr, dxpl_id, dblk_off, hdr->sblk_info[sblk_idx].dblk_nelmts);
+ dblk_addr = H5EA__dblock_create(hdr, dxpl_id, &hdr_dirty, dblk_off, hdr->sblk_info[sblk_idx].dblk_nelmts);
if(!H5F_addr_defined(dblk_addr))
H5E_THROW(H5E_CANTCREATE, "unable to create extensible array data block")
/* Set data block address in index block */
iblock->dblk_addrs[dblk_idx] = dblk_addr;
iblock_cache_flags |= H5AC__DIRTIED_FLAG;
-
- /* Increment count of elements "realized" and actual data blocks created */
- hdr->stats.ndata_blks++;
- hdr->stats.nelmts += hdr->sblk_info[sblk_idx].dblk_nelmts;
- hdr_dirty = TRUE;
} /* end if */
/* Protect data block */
@@ -452,7 +441,7 @@ HDfprintf(stderr, "%s: dblk_idx = %u, iblock->ndblk_addrs = %Zu\n", FUNC, dblk_i
haddr_t sblk_addr; /* Address of data block created */
/* Create super block */
- sblk_addr = H5EA__sblock_create(hdr, dxpl_id, sblk_idx);
+ sblk_addr = H5EA__sblock_create(hdr, dxpl_id, &hdr_dirty, sblk_idx);
#ifdef QAK
HDfprintf(stderr, "%s: New super block address is: %a\n", FUNC, sblk_addr);
#endif /* QAK */
@@ -462,10 +451,6 @@ HDfprintf(stderr, "%s: New super block address is: %a\n", FUNC, sblk_addr);
/* Set super block address in index block */
iblock->sblk_addrs[sblk_off] = sblk_addr;
iblock_cache_flags |= H5AC__DIRTIED_FLAG;
-
- /* Increment count of actual super blocks created */
- hdr->stats.nsuper_blks++;
- hdr_dirty = TRUE;
} /* end if */
/* Protect super block */
@@ -486,18 +471,13 @@ HDfprintf(stderr, "%s: dblk_idx = %u, sblock->ndblks = %Zu\n", FUNC, dblk_idx, s
/* Create data block */
dblk_off = hdr->sblk_info[sblk_idx].start_idx + (dblk_idx * hdr->sblk_info[sblk_idx].dblk_nelmts);
- dblk_addr = H5EA__dblock_create(hdr, dxpl_id, dblk_off, sblock->dblk_nelmts);
+ dblk_addr = H5EA__dblock_create(hdr, dxpl_id, &hdr_dirty, dblk_off, sblock->dblk_nelmts);
if(!H5F_addr_defined(dblk_addr))
H5E_THROW(H5E_CANTCREATE, "unable to create extensible array data block")
/* Set data block address in index block */
sblock->dblk_addrs[dblk_idx] = dblk_addr;
sblock_cache_flags |= H5AC__DIRTIED_FLAG;
-
- /* Increment count of elements "realized" and actual data blocks created */
- hdr->stats.ndata_blks++;
- hdr->stats.nelmts += hdr->sblk_info[sblk_idx].dblk_nelmts;
- hdr_dirty = TRUE;
} /* end if */
#ifdef QAK
@@ -832,7 +812,7 @@ CATCH
if(dblk_page && H5EA__dblk_page_unprotect(dblk_page, dxpl_id, H5AC__NO_FLAGS_SET) < 0)
H5E_THROW(H5E_CANTUNPROTECT, "unable to release extensible array data block page")
-END_FUNC(PRIV) /* end H5EA_set() */
+END_FUNC(PRIV) /* end H5EA_get() */
/*-------------------------------------------------------------------------
diff --git a/src/H5EAcache.c b/src/H5EAcache.c
index bf2bf43..286c6a5 100644
--- a/src/H5EAcache.c
+++ b/src/H5EAcache.c
@@ -254,14 +254,38 @@ H5EA__cache_hdr_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, const void *_cls,
hdr->cparam.max_dblk_page_nelmts_bits = *p++; /* Log2(Max. # of elements in data block page) - i.e. # of bits needed to store max. # of elements in data block page */
/* Array statistics */
- H5F_DECODE_LENGTH(f, p, hdr->stats.max_idx_set); /* Max. index set (+1) */
+ hdr->stats.hdr_size = size; /* Size of header in file */
H5F_DECODE_LENGTH(f, p, hdr->stats.nsuper_blks); /* Number of super blocks created */
+ H5F_DECODE_LENGTH(f, p, hdr->stats.super_blk_size); /* Size of super blocks created */
H5F_DECODE_LENGTH(f, p, hdr->stats.ndata_blks); /* Number of data blocks created */
+ H5F_DECODE_LENGTH(f, p, hdr->stats.data_blk_size); /* Size of data blocks created */
+ H5F_DECODE_LENGTH(f, p, hdr->stats.max_idx_set); /* Max. index set (+1) */
H5F_DECODE_LENGTH(f, p, hdr->stats.nelmts); /* Number of elements 'realized' */
/* Internal information */
H5F_addr_decode(f, &p, &hdr->idx_blk_addr); /* Address of index block */
+ /* Index block statistics */
+ if(H5F_addr_defined(hdr->idx_blk_addr)) {
+ H5EA_iblock_t iblock; /* Fake index block for computing size */
+
+ /* Set index block count for file */
+ hdr->stats.nindex_blks = 1;
+
+ /* Set up fake index block for computing size on disk */
+ iblock.hdr = hdr;
+ iblock.nsblks = H5EA_SBLK_FIRST_IDX(hdr->cparam.sup_blk_min_data_ptrs);
+ iblock.ndblk_addrs = 2 * ((size_t)hdr->cparam.sup_blk_min_data_ptrs - 1);
+ iblock.nsblk_addrs = hdr->nsblks - iblock.nsblks;
+
+ /* Compute size of index block in file */
+ hdr->stats.index_blk_size = H5EA_IBLOCK_SIZE(&iblock);
+ } /* end if */
+ else {
+ hdr->stats.nindex_blks = 0; /* Number of index blocks in file */
+ hdr->stats.index_blk_size = 0; /* Size of index blocks in file */
+ } /* end else */
+
/* Sanity check */
/* (allow for checksum not decoded yet) */
HDassert((size_t)(p - buf) == (size - H5EA_SIZEOF_CHKSUM));
@@ -365,9 +389,11 @@ H5EA__cache_hdr_flush(H5F_t *f, hid_t dxpl_id, hbool_t destroy, haddr_t addr,
*p++ = hdr->cparam.max_dblk_page_nelmts_bits; /* Log2(Max. # of elements in data block page) - i.e. # of bits needed to store max. # of elements in data block page */
/* Array statistics */
- H5F_ENCODE_LENGTH(f, p, hdr->stats.max_idx_set); /* Max. index set (+1) */
H5F_ENCODE_LENGTH(f, p, hdr->stats.nsuper_blks); /* Number of super blocks created */
+ H5F_ENCODE_LENGTH(f, p, hdr->stats.super_blk_size); /* Size of super blocks created */
H5F_ENCODE_LENGTH(f, p, hdr->stats.ndata_blks); /* Number of data blocks created */
+ H5F_ENCODE_LENGTH(f, p, hdr->stats.data_blk_size); /* Size of data blocks created */
+ H5F_ENCODE_LENGTH(f, p, hdr->stats.max_idx_set); /* Max. index set (+1) */
H5F_ENCODE_LENGTH(f, p, hdr->stats.nelmts); /* Number of elements 'realized' */
/* Internal information */
diff --git a/src/H5EAdblock.c b/src/H5EAdblock.c
index b64cb7d..aec5af2 100644
--- a/src/H5EAdblock.c
+++ b/src/H5EAdblock.c
@@ -160,10 +160,12 @@ END_FUNC(PKG) /* end H5EA__dblock_alloc() */
*/
BEGIN_FUNC(PKG, ERR,
haddr_t, HADDR_UNDEF, HADDR_UNDEF,
-H5EA__dblock_create(H5EA_hdr_t *hdr, hid_t dxpl_id, hsize_t dblk_off, size_t nelmts))
+H5EA__dblock_create(H5EA_hdr_t *hdr, hid_t dxpl_id, hbool_t *hdr_dirty,
+ hsize_t dblk_off, size_t nelmts))
/* Local variables */
- H5EA_dblock_t *dblock = NULL; /* Extensible array data block */
+ H5EA_dblock_t *dblock = NULL; /* Extensible array data block */
+ haddr_t dblock_addr; /* Extensible array data block address */
#ifdef QAK
HDfprintf(stderr, "%s: Called, hdr->dblk_page_nelmts = %Zu, nelmts = %Zu\n", FUNC, hdr->dblk_page_nelmts, nelmts);
@@ -171,6 +173,7 @@ HDfprintf(stderr, "%s: Called, hdr->dblk_page_nelmts = %Zu, nelmts = %Zu\n", FUN
/* Sanity check */
HDassert(hdr);
+ HDassert(hdr_dirty);
HDassert(nelmts > 0);
/* Allocate the data block */
@@ -190,8 +193,9 @@ HDfprintf(stderr, "%s: dblock->block_off = %Hu\n", FUNC, dblock->block_off);
#endif /* QAK */
/* Allocate space for the data block on disk */
- if(HADDR_UNDEF == (dblock->addr = H5MF_alloc(hdr->f, H5FD_MEM_EARRAY_DBLOCK, dxpl_id, (hsize_t)dblock->size)))
+ if(HADDR_UNDEF == (dblock_addr = H5MF_alloc(hdr->f, H5FD_MEM_EARRAY_DBLOCK, dxpl_id, (hsize_t)dblock->size)))
H5E_THROW(H5E_CANTALLOC, "file allocation failed for extensible array data block")
+ dblock->addr = dblock_addr;
/* Don't initialize elements if paged */
if(!dblock->npages)
@@ -200,11 +204,21 @@ HDfprintf(stderr, "%s: dblock->block_off = %Hu\n", FUNC, dblock->block_off);
H5E_THROW(H5E_CANTSET, "can't set extensible array data block elements to class's fill value")
/* Cache the new extensible array data block */
- if(H5AC_set(hdr->f, dxpl_id, H5AC_EARRAY_DBLOCK, dblock->addr, dblock, H5AC__NO_FLAGS_SET) < 0)
+ if(H5AC_set(hdr->f, dxpl_id, H5AC_EARRAY_DBLOCK, dblock_addr, dblock, H5AC__NO_FLAGS_SET) < 0)
H5E_THROW(H5E_CANTINSERT, "can't add extensible array data block to cache")
+ /* Update extensible array data block statistics */
+ hdr->stats.ndata_blks++;
+ hdr->stats.data_blk_size += dblock->size;
+
+ /* Increment count of elements "realized" */
+ hdr->stats.nelmts += nelmts;
+
+ /* Mark the header dirty (for updating statistics) */
+ *hdr_dirty = TRUE;
+
/* Set address of data block to return */
- ret_value = dblock->addr;
+ ret_value = dblock_addr;
CATCH
if(!H5F_addr_defined(ret_value))
diff --git a/src/H5EAhdr.c b/src/H5EAhdr.c
index 349dceb..998e169 100644
--- a/src/H5EAhdr.c
+++ b/src/H5EAhdr.c
@@ -235,8 +235,8 @@ HDfprintf(stderr, "%s: hdr->sblk_info[%Zu] = {%Zu, %Zu, %Hu, %Hu}\n", FUNC, u, h
start_dblk += (hsize_t)hdr->sblk_info[u].ndblks;
} /* end for */
- /* Set size of header on disk */
- hdr->size = H5EA_HEADER_SIZE(hdr);
+ /* Set size of header on disk (locally and in statistics) */
+ hdr->stats.hdr_size = hdr->size = H5EA_HEADER_SIZE(hdr);
CATCH
diff --git a/src/H5EAiblock.c b/src/H5EAiblock.c
index dcb75d1..6fd6f2a 100644
--- a/src/H5EAiblock.c
+++ b/src/H5EAiblock.c
@@ -178,10 +178,11 @@ END_FUNC(PKG) /* end H5EA__iblock_alloc() */
*/
BEGIN_FUNC(PKG, ERR,
haddr_t, HADDR_UNDEF, HADDR_UNDEF,
-H5EA__iblock_create(H5EA_hdr_t *hdr, hid_t dxpl_id))
+H5EA__iblock_create(H5EA_hdr_t *hdr, hid_t dxpl_id, hbool_t *hdr_dirty))
/* Local variables */
- H5EA_iblock_t *iblock = NULL; /* Extensible array index block */
+ H5EA_iblock_t *iblock = NULL; /* Extensible array index block */
+ haddr_t iblock_addr; /* Extensible array index block address */
#ifdef QAK
HDfprintf(stderr, "%s: Called\n", FUNC);
@@ -189,6 +190,7 @@ HDfprintf(stderr, "%s: Called\n", FUNC);
/* Sanity check */
HDassert(hdr);
+ HDassert(hdr_dirty);
/* Allocate the index block */
if(NULL == (iblock = H5EA__iblock_alloc(hdr)))
@@ -201,8 +203,9 @@ HDfprintf(stderr, "%s: iblock->size = %Zu\n", FUNC, iblock->size);
#endif /* QAK */
/* Allocate space for the index block on disk */
- if(HADDR_UNDEF == (iblock->addr = H5MF_alloc(hdr->f, H5FD_MEM_EARRAY_IBLOCK, dxpl_id, (hsize_t)iblock->size)))
+ if(HADDR_UNDEF == (iblock_addr = H5MF_alloc(hdr->f, H5FD_MEM_EARRAY_IBLOCK, dxpl_id, (hsize_t)iblock->size)))
H5E_THROW(H5E_CANTALLOC, "file allocation failed for extensible array index block")
+ iblock->addr = iblock_addr;
/* Clear any elements in index block to fill value */
if(hdr->cparam.idx_blk_elmts > 0) {
@@ -228,11 +231,23 @@ HDfprintf(stderr, "%s: iblock->size = %Zu\n", FUNC, iblock->size);
} /* end if */
/* Cache the new extensible array index block */
- if(H5AC_set(hdr->f, dxpl_id, H5AC_EARRAY_IBLOCK, iblock->addr, iblock, H5AC__NO_FLAGS_SET) < 0)
+ if(H5AC_set(hdr->f, dxpl_id, H5AC_EARRAY_IBLOCK, iblock_addr, iblock, H5AC__NO_FLAGS_SET) < 0)
H5E_THROW(H5E_CANTINSERT, "can't add extensible array index block to cache")
+ /* Update extensible array index block statistics */
+ HDassert(0 == hdr->stats.nindex_blks);
+ HDassert(0 == hdr->stats.index_blk_size);
+ hdr->stats.nindex_blks = 1;
+ hdr->stats.index_blk_size = iblock->size;
+
+ /* Increment count of elements "realized" */
+ hdr->stats.nelmts += hdr->cparam.idx_blk_elmts;
+
+ /* Mark the header dirty (for updating statistics) */
+ *hdr_dirty = TRUE;
+
/* Set address of index block to return */
- ret_value = iblock->addr;
+ ret_value = iblock_addr;
CATCH
if(!H5F_addr_defined(ret_value))
diff --git a/src/H5EApkg.h b/src/H5EApkg.h
index 7ac5be6..e374d3a 100644
--- a/src/H5EApkg.h
+++ b/src/H5EApkg.h
@@ -372,9 +372,11 @@ func_init_failed: \
+ 1 /* Log2(Max. # of elements in data block page) - i.e. # of bits needed to store max. # of elements in data block page */ \
\
/* Extensible Array Header statistics fields */ \
- + (h)->sizeof_size /* Max. index set */ \
+ (h)->sizeof_size /* Number of super blocks created */ \
+ + (h)->sizeof_size /* Size of super blocks created */ \
+ (h)->sizeof_size /* Number of data blocks created */ \
+ + (h)->sizeof_size /* Size of data blocks created */ \
+ + (h)->sizeof_size /* Max. index set */ \
+ (h)->sizeof_size /* Number of elements 'realized' */ \
\
/* Extensible Array Header specific fields */ \
@@ -471,6 +473,7 @@ typedef struct H5EA_hdr_t {
haddr_t idx_blk_addr; /* Address of index block in header */
/* Statistics for array (stored in header) */
+ /* (header and index number/size fields not stored) */
H5EA_stat_t stats; /* Statistics for extensible array */
/* Data block element buffer factory info (not stored in header) */
@@ -636,7 +639,8 @@ H5_DLL herr_t H5EA__hdr_dest(H5EA_hdr_t *hdr);
/* Index block routines */
H5_DLL H5EA_iblock_t *H5EA__iblock_alloc(H5EA_hdr_t *hdr);
-H5_DLL haddr_t H5EA__iblock_create(H5EA_hdr_t *hdr, hid_t dxpl_id);
+H5_DLL haddr_t H5EA__iblock_create(H5EA_hdr_t *hdr, hid_t dxpl_id,
+ hbool_t *hdr_dirty);
H5_DLL H5EA_iblock_t *H5EA__iblock_protect(H5EA_hdr_t *hdr, hid_t dxpl_id,
H5AC_protect_t rw);
H5_DLL herr_t H5EA__iblock_unprotect(H5EA_iblock_t *iblock, hid_t dxpl_id,
@@ -646,7 +650,8 @@ H5_DLL herr_t H5EA__iblock_dest(H5F_t *f, H5EA_iblock_t *iblock);
/* Super block routines */
H5_DLL H5EA_sblock_t *H5EA__sblock_alloc(H5EA_hdr_t *hdr, unsigned sblk_idx);
-H5_DLL haddr_t H5EA__sblock_create(H5EA_hdr_t *hdr, hid_t dxpl_id, unsigned sblk_idx);
+H5_DLL haddr_t H5EA__sblock_create(H5EA_hdr_t *hdr, hid_t dxpl_id, hbool_t *hdr_dirty,
+ unsigned sblk_idx);
H5_DLL H5EA_sblock_t *H5EA__sblock_protect(H5EA_hdr_t *hdr, hid_t dxpl_id,
haddr_t sblk_addr, unsigned sblk_idx, H5AC_protect_t rw);
H5_DLL herr_t H5EA__sblock_unprotect(H5EA_sblock_t *sblock, hid_t dxpl_id,
@@ -657,7 +662,7 @@ H5_DLL herr_t H5EA__sblock_dest(H5F_t *f, H5EA_sblock_t *sblock);
/* Data block routines */
H5_DLL H5EA_dblock_t *H5EA__dblock_alloc(H5EA_hdr_t *hdr, size_t nelmts);
-H5_DLL haddr_t H5EA__dblock_create(H5EA_hdr_t *hdr, hid_t dxpl_id,
+H5_DLL haddr_t H5EA__dblock_create(H5EA_hdr_t *hdr, hid_t dxpl_id, hbool_t *hdr_dirty,
hsize_t dblk_off, size_t nelmts);
H5_DLL unsigned H5EA__dblock_sblk_idx(const H5EA_hdr_t *hdr, hsize_t idx);
H5_DLL H5EA_dblock_t *H5EA__dblock_protect(H5EA_hdr_t *hdr, hid_t dxpl_id,
diff --git a/src/H5EAprivate.h b/src/H5EAprivate.h
index 3b9ba4d..f44d046 100644
--- a/src/H5EAprivate.h
+++ b/src/H5EAprivate.h
@@ -83,9 +83,17 @@ typedef struct H5EA_create_t {
/* Extensible array metadata statistics info */
typedef struct H5EA_stat_t {
- hsize_t max_idx_set; /* Highest element index stored (+1 - i.e. if element 0 has been set, this value with be '1', if no elements have been stored, this value will be '0') */
+ /* Non-stored (i.e. computed) fields */
+ hsize_t hdr_size; /* Size of header */
+ hsize_t nindex_blks; /* # of index blocks (should be 0 or 1) */
+ hsize_t index_blk_size; /* Size of index blocks allocated */
+
+ /* Stored fields */
hsize_t nsuper_blks; /* # of super blocks */
+ hsize_t super_blk_size; /* Size of super blocks allocated */
hsize_t ndata_blks; /* # of data blocks */
+ hsize_t data_blk_size; /* Size of data blocks allocated */
+ hsize_t max_idx_set; /* Highest element index stored (+1 - i.e. if element 0 has been set, this value with be '1', if no elements have been stored, this value will be '0') */
hsize_t nelmts; /* # of elements "realized" */
} H5EA_stat_t;
diff --git a/src/H5EAsblock.c b/src/H5EAsblock.c
index 3d3d4e3..4ad83b0 100644
--- a/src/H5EAsblock.c
+++ b/src/H5EAsblock.c
@@ -190,11 +190,13 @@ END_FUNC(PKG) /* end H5EA__sblock_alloc() */
*/
BEGIN_FUNC(PKG, ERR,
haddr_t, HADDR_UNDEF, HADDR_UNDEF,
-H5EA__sblock_create(H5EA_hdr_t *hdr, hid_t dxpl_id, unsigned sblk_idx))
+H5EA__sblock_create(H5EA_hdr_t *hdr, hid_t dxpl_id, hbool_t *hdr_dirty,
+ unsigned sblk_idx))
/* Local variables */
- H5EA_sblock_t *sblock = NULL; /* Extensible array super block */
- haddr_t tmp_addr = HADDR_UNDEF; /* Address value to fill data block addresses with */
+ H5EA_sblock_t *sblock = NULL; /* Extensible array super block */
+ haddr_t sblock_addr; /* Extensible array super block address */
+ haddr_t tmp_addr = HADDR_UNDEF; /* Address value to fill data block addresses with */
#ifdef QAK
HDfprintf(stderr, "%s: Called\n", FUNC);
@@ -202,6 +204,7 @@ HDfprintf(stderr, "%s: Called\n", FUNC);
/* Sanity check */
HDassert(hdr);
+ HDassert(hdr_dirty);
/* Allocate the super block */
if(NULL == (sblock = H5EA__sblock_alloc(hdr, sblk_idx)))
@@ -220,18 +223,26 @@ HDfprintf(stderr, "%s: sblock->block_off = %Hu\n", FUNC, sblock->block_off);
#endif /* QAK */
/* Allocate space for the super block on disk */
- if(HADDR_UNDEF == (sblock->addr = H5MF_alloc(hdr->f, H5FD_MEM_EARRAY_SBLOCK, dxpl_id, (hsize_t)sblock->size)))
+ if(HADDR_UNDEF == (sblock_addr = H5MF_alloc(hdr->f, H5FD_MEM_EARRAY_SBLOCK, dxpl_id, (hsize_t)sblock->size)))
H5E_THROW(H5E_CANTALLOC, "file allocation failed for extensible array super block")
+ sblock->addr = sblock_addr;
/* Reset data block addresses to "undefined" address value */
H5V_array_fill(sblock->dblk_addrs, &tmp_addr, sizeof(haddr_t), sblock->ndblks);
/* Cache the new extensible array super block */
- if(H5AC_set(hdr->f, dxpl_id, H5AC_EARRAY_SBLOCK, sblock->addr, sblock, H5AC__NO_FLAGS_SET) < 0)
+ if(H5AC_set(hdr->f, dxpl_id, H5AC_EARRAY_SBLOCK, sblock_addr, sblock, H5AC__NO_FLAGS_SET) < 0)
H5E_THROW(H5E_CANTINSERT, "can't add extensible array super block to cache")
+ /* Update extensible array super block statistics */
+ hdr->stats.nsuper_blks++;
+ hdr->stats.super_blk_size += sblock->size;
+
+ /* Mark the header dirty (for updating statistics) */
+ *hdr_dirty = TRUE;
+
/* Set address of super block to return */
- ret_value = sblock->addr;
+ ret_value = sblock_addr;
CATCH
if(!H5F_addr_defined(ret_value))
diff --git a/src/H5FDcore.c b/src/H5FDcore.c
index cda7308..1e30ace 100644
--- a/src/H5FDcore.c
+++ b/src/H5FDcore.c
@@ -378,6 +378,9 @@ done:
* Raymond Lu, 2006-11-30
* Enabled the driver to read an existing file depending on
* the setting of the backing_store and file open flags.
+ *
+ * Allen Byrne, 2008-1-23
+ * changed if of fapl_id to assert
*-------------------------------------------------------------------------
*/
static H5FD_t *
@@ -401,11 +404,10 @@ H5FD_core_open(const char *name, unsigned flags, hid_t fapl_id,
HGOTO_ERROR(H5E_ARGS, H5E_BADRANGE, NULL, "bogus maxaddr")
if(ADDR_OVERFLOW(maxaddr))
HGOTO_ERROR(H5E_ARGS, H5E_OVERFLOW, NULL, "maxaddr overflow")
- if(H5P_DEFAULT != fapl_id) {
- if(NULL == (plist = (H5P_genplist_t *)H5I_object(fapl_id)))
- HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "not a file access property list")
- fa = (H5FD_core_fapl_t *)H5P_get_driver_info(plist);
- } /* end if */
+ assert(H5P_DEFAULT != fapl_id);
+ if(NULL == (plist = (H5P_genplist_t *)H5I_object(fapl_id)))
+ HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "not a file access property list")
+ fa = (H5FD_core_fapl_t *)H5P_get_driver_info(plist);
/* Build the open flags */
o_flags = (H5F_ACC_RDWR & flags) ? O_RDWR : O_RDONLY;
diff --git a/src/H5O.c b/src/H5O.c
index 52338cc..1d640fa 100644
--- a/src/H5O.c
+++ b/src/H5O.c
@@ -2273,8 +2273,7 @@ H5O_get_info(H5O_loc_t *oloc, hid_t dxpl_id, hbool_t want_ih_info, H5O_info_t *o
HDassert(oinfo);
/* Get the object header */
- if(NULL == (oh = (H5O_t *)H5AC_protect(oloc->file, dxpl_id, H5AC_OHDR, oloc->addr, NULL, NULL,
- (H5F_get_intent(oloc->file) & H5F_ACC_RDWR) ? H5AC_WRITE : H5AC_READ)))
+ if(NULL == (oh = (H5O_t *)H5AC_protect(oloc->file, dxpl_id, H5AC_OHDR, oloc->addr, NULL, NULL, H5AC_READ)))
HGOTO_ERROR(H5E_OHDR, H5E_CANTLOAD, FAIL, "unable to load object header")
/* Reset the object info structure */
diff --git a/src/H5Oainfo.c b/src/H5Oainfo.c
index 2a9d403..7f6a55d 100644
--- a/src/H5Oainfo.c
+++ b/src/H5Oainfo.c
@@ -48,6 +48,9 @@ static herr_t H5O_ainfo_pre_copy_file(H5F_t *file_src, const void *mesg_src,
static void *H5O_ainfo_copy_file(H5F_t *file_src, void *mesg_src,
H5F_t *file_dst, hbool_t *recompute_size, H5O_copy_t *cpy_info, void *udata,
hid_t dxpl_id);
+static herr_t H5O_ainfo_post_copy_file(const H5O_loc_t *src_oloc,
+ const void *mesg_src, H5O_loc_t *dst_oloc, void *mesg_dst, hid_t dxpl_id,
+ H5O_copy_t *cpy_info);
static herr_t H5O_ainfo_debug(H5F_t *f, hid_t dxpl_id, const void *_mesg,
FILE * stream, int indent, int fwidth);
@@ -69,7 +72,7 @@ const H5O_msg_class_t H5O_MSG_AINFO[1] = {{
NULL, /*can share method */
H5O_ainfo_pre_copy_file, /* pre copy native value to file */
H5O_ainfo_copy_file, /* copy native value to file */
- NULL, /* post copy native value to file */
+ H5O_ainfo_post_copy_file, /* post copy native value to file */
NULL, /* get creation index */
NULL, /* set creation index */
H5O_ainfo_debug /*debug the message */
@@ -393,15 +396,14 @@ H5O_ainfo_pre_copy_file(H5F_t UNUSED *file_src, const void UNUSED *native_src,
* Return: Success: Ptr to _DEST
* Failure: NULL
*
- * Programmer: Quincey Koziol
- * March 9, 2007
+ * Programmer: Peter Cao
+ * July 18, 2007
*
*-------------------------------------------------------------------------
*/
static void *
-H5O_ainfo_copy_file(H5F_t UNUSED *file_src, void *mesg_src,
- H5F_t UNUSED *file_dst, hbool_t UNUSED *recompute_size,
- H5O_copy_t UNUSED *cpy_info, void UNUSED *udata, hid_t UNUSED dxpl_id)
+H5O_ainfo_copy_file(H5F_t *file_src, void *mesg_src, H5F_t *file_dst,
+ hbool_t *recompute_size, H5O_copy_t *cpy_info, void *udata, hid_t dxpl_id)
{
H5O_ainfo_t *ainfo_src = (H5O_ainfo_t *)mesg_src;
H5O_ainfo_t *ainfo_dst = NULL;
@@ -416,10 +418,6 @@ H5O_ainfo_copy_file(H5F_t UNUSED *file_src, void *mesg_src,
HDassert(cpy_info);
HDassert(!cpy_info->copy_without_attr);
-/* XXX: Bail out for now, if the source object has densely stored attributes */
- if(H5F_addr_defined(ainfo_src->fheap_addr))
- HGOTO_ERROR(H5E_OHDR, H5E_UNSUPPORTED, NULL, "densely stored attributes not supported yet")
-
/* Allocate space for the destination message */
if(NULL == (ainfo_dst = H5FL_MALLOC(H5O_ainfo_t)))
HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed")
@@ -427,6 +425,16 @@ H5O_ainfo_copy_file(H5F_t UNUSED *file_src, void *mesg_src,
/* Copy the top level of the information */
*ainfo_dst = *ainfo_src;
+ if(H5F_addr_defined(ainfo_src->fheap_addr)) {
+ /* copy dense attribute */
+
+ if(H5A_dense_create(file_dst, dxpl_id, ainfo_dst) < 0)
+ HGOTO_ERROR(H5E_OHDR, H5E_CANTINIT, NULL, "unable to create dense storage for attributes")
+
+ if ( (H5A_dense_copy_file_all(file_src, ainfo_src, file_dst, ainfo_dst, recompute_size, cpy_info, dxpl_id)) <0)
+ HGOTO_ERROR(H5E_OHDR, H5E_CANTINIT, NULL, "unable to create dense storage for attributes")
+ }
+
/* Set return value */
ret_value = ainfo_dst;
@@ -440,6 +448,44 @@ done:
/*-------------------------------------------------------------------------
+ * Function: H5O_ainfo_post_copy_file
+ *
+ * Purpose: Finish copying a message from between files.
+ * We have to copy the values of a reference attribute in the
+ * post copy because H5O_post_copy_file() fails at the case that
+ * an object may have a reference attribute that points to the
+ * object itself.
+ *
+ * Return: Non-negative on success/Negative on failure
+ *
+ * Programmer: Peter Cao
+ * July 25, 2007
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5O_ainfo_post_copy_file(const H5O_loc_t *src_oloc, const void *mesg_src,
+ H5O_loc_t *dst_oloc, void *mesg_dst, hid_t dxpl_id, H5O_copy_t *cpy_info)
+{
+ H5O_ainfo_t *ainfo_src = (const H5O_ainfo_t *)mesg_src;
+ herr_t ret_value = SUCCEED; /* Return value */
+
+ FUNC_ENTER_NOAPI_NOINIT(H5O_ainfo_post_copy_file)
+
+ HDassert(ainfo_src);
+
+ if(H5F_addr_defined(ainfo_src->fheap_addr)) {
+ if ( H5A_dense_post_copy_file_all(src_oloc, ainfo_src, dst_oloc,
+ (H5O_ainfo_t *)mesg_dst, dxpl_id, cpy_info) < 0)
+ HGOTO_ERROR(H5E_ATTR, H5E_CANTCOPY, FAIL, "can't copy attribute")
+ }
+
+done:
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* H5O_ainfo_post_copy_file() */
+
+
+/*-------------------------------------------------------------------------
* Function: H5O_ainfo_debug
*
* Purpose: Prints debugging info for a message.
diff --git a/src/H5Oattr.c b/src/H5Oattr.c
index 85b1ef3..b875d02 100644
--- a/src/H5Oattr.c
+++ b/src/H5Oattr.c
@@ -20,13 +20,10 @@
#include "H5private.h" /* Generic Functions */
#include "H5Apkg.h" /* Attributes */
-#include "H5Dprivate.h" /* Datasets */
#include "H5Eprivate.h" /* Error handling */
-#include "H5Iprivate.h" /* IDs */
#include "H5MMprivate.h" /* Memory management */
#include "H5Opkg.h" /* Object headers */
#include "H5Spkg.h" /* Dataspaces */
-#include "H5SMprivate.h" /* Shared Object Header Messages */
/* PRIVATE PROTOTYPES */
static herr_t H5O_attr_encode(H5F_t *f, uint8_t *p, const void *mesg);
@@ -641,257 +638,20 @@ H5O_attr_copy_file(H5F_t UNUSED *file_src, const H5O_msg_class_t UNUSED *mesg_ty
void *native_src, H5F_t *file_dst, hbool_t *recompute_size,
H5O_copy_t *cpy_info, void UNUSED *udata, hid_t dxpl_id)
{
- H5A_t *attr_src = (H5A_t *)native_src;
- H5A_t *attr_dst = NULL;
-
- /* for dataype conversion */
- hid_t tid_src = -1; /* Datatype ID for source datatype */
- hid_t tid_dst = -1; /* Datatype ID for destination datatype */
- hid_t tid_mem = -1; /* Datatype ID for memory datatype */
- void *buf = NULL; /* Buffer for copying data */
- void *reclaim_buf = NULL; /* Buffer for reclaiming data */
- hid_t buf_sid = -1; /* ID for buffer dataspace */
-
void *ret_value; /* Return value */
FUNC_ENTER_NOAPI_NOINIT(H5O_attr_copy_file)
/* check args */
- HDassert(attr_src);
+ HDassert(native_src);
HDassert(file_dst);
HDassert(cpy_info);
HDassert(!cpy_info->copy_without_attr);
- /* Allocate space for the destination message */
- if(NULL == (attr_dst = H5FL_CALLOC(H5A_t)))
- HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed")
-
- /* Copy the top level of the attribute */
- *attr_dst = *attr_src;
-
- if(NULL == (attr_dst->shared = H5FL_CALLOC(H5A_shared_t)))
- HGOTO_ERROR(H5E_FILE, H5E_NOSPACE, NULL, "can't allocate shared attr structure")
-
- /* Don't have an opened group location for copy */
- H5O_loc_reset(&(attr_dst->shared->oloc));
- H5G_name_reset(&(attr_dst->path));
- attr_dst->obj_opened = FALSE;
-
- /* Reference count for the header message in the cache */
- attr_dst->shared->nrefs = 1;
-
- /* Copy attribute's name */
- attr_dst->shared->name = H5MM_strdup(attr_src->shared->name);
- HDassert(attr_dst->shared->name);
-
- /* Copy attribute's datatype */
- /* (Start destination datatype as transient, even if source is named) */
- if(NULL == (attr_dst->shared->dt = H5T_copy(attr_src->shared->dt, H5T_COPY_ALL)))
- HGOTO_ERROR(H5E_OHDR, H5E_CANTCOPY, NULL, "cannot copy datatype")
-
- /* Set the location of the destination datatype */
- if(H5T_set_loc(attr_dst->shared->dt, file_dst, H5T_LOC_DISK) < 0)
- HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, NULL, "cannot mark datatype on disk")
-
- /* Check for named datatype being copied */
- if(H5T_committed(attr_src->shared->dt)) {
- H5O_loc_t *src_oloc; /* Pointer to source datatype's object location */
- H5O_loc_t *dst_oloc; /* Pointer to dest. datatype's object location */
-
- /* Get group entries for source & destination */
- src_oloc = H5T_oloc(attr_src->shared->dt);
- HDassert(src_oloc);
- dst_oloc = H5T_oloc(attr_dst->shared->dt);
- HDassert(dst_oloc);
-
- /* Reset object location for new object */
- H5O_loc_reset(dst_oloc);
- dst_oloc->file = file_dst;
-
- /* Copy the shared object from source to destination */
- if(H5O_copy_header_map(src_oloc, dst_oloc, dxpl_id, cpy_info, FALSE) < 0)
- HGOTO_ERROR(H5E_OHDR, H5E_CANTCOPY, NULL, "unable to copy object")
-
- /* Update shared message info from named datatype info */
- H5T_update_shared(attr_dst->shared->dt);
- } /* end if */
- else {
- /* If the datatype is not named, it may have been shared in the
- * source file's heap. Un-share it for now. We'll try to shared
- * it in the destination file below.
- */
- if(H5O_msg_reset_share(H5O_DTYPE_ID, attr_dst->shared->dt) < 0)
- HGOTO_ERROR(H5E_OHDR, H5E_CANTINIT, NULL, "unable to reset datatype sharing")
- } /* end else */
-
- /* Copy the dataspace for the attribute */
- attr_dst->shared->ds = H5S_copy(attr_src->shared->ds, FALSE, FALSE);
- HDassert(attr_dst->shared->ds);
-
- /* Reset the dataspace's sharing in the source file before trying to share
- * it in the destination.
- */
- if(H5O_msg_reset_share(H5O_SDSPACE_ID, attr_dst->shared->ds) < 0)
- HGOTO_ERROR(H5E_OHDR, H5E_CANTINIT, NULL, "unable to reset dataspace sharing")
-
-
- /* Try to share both the datatype and dataset. This does nothing if the
- * datatype is committed or sharing is disabled.
- */
- if(H5SM_try_share(file_dst, dxpl_id, NULL, H5O_DTYPE_ID, attr_dst->shared->dt, NULL) < 0)
- HGOTO_ERROR(H5E_OHDR, H5E_WRITEERROR, NULL, "can't share attribute datatype")
- if(H5SM_try_share(file_dst, dxpl_id, NULL, H5O_SDSPACE_ID, attr_dst->shared->ds, NULL) < 0)
- HGOTO_ERROR(H5E_OHDR, H5E_WRITEERROR, NULL, "can't share attribute dataspace")
-
- /* Compute the sizes of the datatype and dataspace. This is their raw
- * size unless they're shared.
- */
- attr_dst->shared->dt_size = H5O_msg_raw_size(file_dst, H5O_DTYPE_ID, FALSE, attr_dst->shared->dt);
- HDassert(attr_dst->shared->dt_size > 0);
- attr_dst->shared->ds_size = H5O_msg_raw_size(file_dst, H5O_SDSPACE_ID, FALSE, attr_dst->shared->ds);
- HDassert(attr_dst->shared->ds_size > 0);
-
- /* Check whether to recompute the size of the attribute */
- /* (happens when the datatype or dataspace changes sharing status) */
- if(attr_dst->shared->dt_size != attr_src->shared->dt_size || attr_dst->shared->ds_size != attr_src->shared->ds_size)
- *recompute_size = TRUE;
-
- /* Compute the size of the data */
- H5_ASSIGN_OVERFLOW(attr_dst->shared->data_size, H5S_GET_EXTENT_NPOINTS(attr_dst->shared->ds) * H5T_get_size(attr_dst->shared->dt), hsize_t, size_t);
-
- /* Copy (& convert) the data, if necessary */
- if(attr_src->shared->data) {
- if(NULL == (attr_dst->shared->data = H5FL_BLK_MALLOC(attr_buf, attr_dst->shared->data_size)))
- HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed")
-
- /* Check if we need to convert data */
- if(H5T_detect_class(attr_src->shared->dt, H5T_VLEN) > 0) {
- H5T_path_t *tpath_src_mem, *tpath_mem_dst; /* Datatype conversion paths */
- H5T_t *dt_mem; /* Memory datatype */
- size_t src_dt_size; /* Source datatype size */
- size_t tmp_dt_size; /* Temp. datatype size */
- size_t max_dt_size; /* Max atatype size */
- H5S_t *buf_space; /* Dataspace describing buffer */
- hsize_t buf_dim; /* Dimension for buffer */
- size_t nelmts; /* Number of elements in buffer */
- size_t buf_size; /* Size of copy buffer */
-
- /* Create datatype ID for src datatype */
- if((tid_src = H5I_register(H5I_DATATYPE, attr_src->shared->dt, FALSE)) < 0)
- HGOTO_ERROR(H5E_DATATYPE, H5E_CANTREGISTER, NULL, "unable to register source file datatype")
-
- /* create a memory copy of the variable-length datatype */
- if(NULL == (dt_mem = H5T_copy(attr_src->shared->dt, H5T_COPY_TRANSIENT)))
- HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, NULL, "unable to copy")
- if((tid_mem = H5I_register(H5I_DATATYPE, dt_mem, FALSE)) < 0)
- HGOTO_ERROR(H5E_DATATYPE, H5E_CANTREGISTER, NULL, "unable to register memory datatype")
-
- /* create variable-length datatype at the destinaton file */
- if((tid_dst = H5I_register(H5I_DATATYPE, attr_dst->shared->dt, FALSE)) < 0)
- HGOTO_ERROR(H5E_DATATYPE, H5E_CANTREGISTER, NULL, "unable to register destination file datatype")
-
- /* Set up the conversion functions */
- if(NULL == (tpath_src_mem = H5T_path_find(attr_src->shared->dt, dt_mem, NULL, NULL, dxpl_id, FALSE)))
- HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, NULL, "unable to convert between src and mem datatypes")
- if(NULL == (tpath_mem_dst = H5T_path_find(dt_mem, attr_dst->shared->dt, NULL, NULL, dxpl_id, FALSE)))
- HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, NULL, "unable to convert between mem and dst datatypes")
-
- /* Determine largest datatype size */
- if(0 == (src_dt_size = H5T_get_size(attr_src->shared->dt)))
- HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, NULL, "unable to determine datatype size")
- if(0 == (tmp_dt_size = H5T_get_size(dt_mem)))
- HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, NULL, "unable to determine datatype size")
- max_dt_size = MAX(src_dt_size, tmp_dt_size);
- if(0 == (tmp_dt_size = H5T_get_size(attr_dst->shared->dt)))
- HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, NULL, "unable to determine datatype size")
- max_dt_size = MAX(max_dt_size, tmp_dt_size);
-
- /* Set number of whole elements that fit in buffer */
- if(0 == (nelmts = attr_src->shared->data_size / src_dt_size))
- HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, NULL, "element size too large")
-
- /* Set up number of bytes to copy, and initial buffer size */
- buf_size = nelmts * max_dt_size;
-
- /* Create dataspace for number of elements in buffer */
- buf_dim = nelmts;
-
- /* Create the space and set the initial extent */
- if(NULL == (buf_space = H5S_create_simple((unsigned)1, &buf_dim, NULL)))
- HGOTO_ERROR(H5E_DATASPACE, H5E_CANTCREATE, NULL, "can't create simple dataspace")
-
- /* Atomize */
- if((buf_sid = H5I_register(H5I_DATASPACE, buf_space, FALSE)) < 0) {
- H5S_close(buf_space);
- HGOTO_ERROR(H5E_ATOM, H5E_CANTREGISTER, NULL, "unable to register dataspace ID")
- } /* end if */
-
- /* Allocate memory for recclaim buf */
- if(NULL == (reclaim_buf = H5FL_BLK_MALLOC(attr_buf, buf_size)))
- HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation NULLed for raw data chunk")
-
- /* Allocate memory for copying the chunk */
- if(NULL == (buf = H5FL_BLK_MALLOC(attr_buf, buf_size)))
- HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation NULLed for raw data chunk")
-
- HDmemcpy(buf, attr_src->shared->data, attr_src->shared->data_size);
-
- /* Convert from source file to memory */
- if(H5T_convert(tpath_src_mem, tid_src, tid_mem, nelmts, (size_t)0, (size_t)0, buf, NULL, dxpl_id) < 0)
- HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, NULL, "datatype conversion NULLed")
-
- HDmemcpy(reclaim_buf, buf, buf_size);
-
- /* Convert from memory to destination file */
- if(H5T_convert(tpath_mem_dst, tid_mem, tid_dst, nelmts, (size_t)0, (size_t)0, buf, NULL, dxpl_id) < 0)
- HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, NULL, "datatype conversion NULLed")
-
- HDmemcpy(attr_dst->shared->data, buf, attr_dst->shared->data_size);
-
- if(H5D_vlen_reclaim(tid_mem, buf_space, H5P_DATASET_XFER_DEFAULT, reclaim_buf) < 0)
- HGOTO_ERROR(H5E_DATASET, H5E_BADITER, NULL, "unable to reclaim variable-length data")
- } /* end if */
- else {
- HDassert(attr_dst->shared->data_size == attr_src->shared->data_size);
- HDmemcpy(attr_dst->shared->data, attr_src->shared->data, attr_src->shared->data_size);
- } /* end else */
- } /* end if(attr_src->shared->data) */
-
- /* Recompute the version to encode the destination attribute */
- if(H5A_set_version(file_dst, attr_dst) < 0)
- HGOTO_ERROR(H5E_ATTR, H5E_CANTSET, NULL, "unable to update attribute version")
-
- /* Indicate that the fill values aren't to be written out */
- attr_dst->shared->initialized = TRUE;
-
- /* Set return value */
- ret_value = attr_dst;
+ if ( NULL == (ret_value=H5A_attr_copy_file((H5A_t *)native_src, file_dst, recompute_size, cpy_info, dxpl_id)))
+ HGOTO_ERROR(H5E_ATTR, H5E_CANTCOPY, NULL, "can't copy attribute")
done:
- if(buf_sid > 0)
- if(H5I_dec_ref(buf_sid, FALSE) < 0)
- HDONE_ERROR(H5E_ATTR, H5E_CANTFREE, NULL, "Can't decrement temporary dataspace ID")
- if(tid_src > 0)
- /* Don't decrement ID, we want to keep underlying datatype */
- if(H5I_remove(tid_src) == NULL)
- HDONE_ERROR(H5E_ATTR, H5E_CANTFREE, NULL, "Can't decrement temporary datatype ID")
- if(tid_dst > 0)
- /* Don't decrement ID, we want to keep underlying datatype */
- if(H5I_remove(tid_dst) == NULL)
- HDONE_ERROR(H5E_ATTR, H5E_CANTFREE, NULL, "Can't decrement temporary datatype ID")
- if(tid_mem > 0)
- /* Decrement the memory datatype ID, it's transient */
- if(H5I_dec_ref(tid_mem, FALSE) < 0)
- HDONE_ERROR(H5E_ATTR, H5E_CANTFREE, NULL, "Can't decrement temporary datatype ID")
- if(buf)
- buf = H5FL_BLK_FREE(attr_buf, buf);
- if(reclaim_buf)
- reclaim_buf = H5FL_BLK_FREE(attr_buf, reclaim_buf);
-
- /* Release destination attribute information on failure */
- if(!ret_value && attr_dst && H5A_close(attr_dst) < 0)
- HDONE_ERROR(H5E_ATTR, H5E_CANTFREE, NULL, "can't close attribute")
-
FUNC_LEAVE_NOAPI(ret_value)
} /* H5O_attr_copy_file() */
@@ -916,48 +676,14 @@ static herr_t
H5O_attr_post_copy_file(const H5O_loc_t *src_oloc, const void *mesg_src,
H5O_loc_t *dst_oloc, void *mesg_dst, hid_t dxpl_id, H5O_copy_t *cpy_info)
{
- const H5A_t *attr_src = (const H5A_t *)mesg_src;
- H5A_t *attr_dst = (H5A_t *)mesg_dst;
- H5F_t *file_src = src_oloc->file;
- H5F_t *file_dst = dst_oloc->file;
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_NOAPI_NOINIT(H5O_attr_post_copy_file)
- /* check args */
- HDassert(attr_src);
- HDassert(file_src);
- HDassert(attr_dst);
- HDassert(file_dst);
-
- /* Only need to fix reference attribute with real data being copied to
- * another file.
- */
- if((NULL != attr_src->shared->data) &&
- (H5T_get_class(attr_src->shared->dt, FALSE) == H5T_REFERENCE) &&
- (file_src != file_dst)) {
-
- /* copy object pointed by reference. The current implementation does not
- * deal with nested reference such as reference in a compound structure
- */
-
- /* Check for expanding references */
- if(cpy_info->expand_ref) {
- size_t ref_count;
-
- /* Determine # of reference elements to copy */
- ref_count = attr_dst->shared->data_size / H5T_get_size(attr_dst->shared->dt);
-
- /* Copy objects referenced in source buffer to destination file and set destination elements */
- if(H5O_copy_expand_ref(file_src, attr_src->shared->data, dxpl_id,
- file_dst, attr_dst->shared->data, ref_count, H5T_get_ref_type(attr_src->shared->dt), cpy_info) < 0)
- HGOTO_ERROR(H5E_ATTR, H5E_CANTCOPY, FAIL, "unable to copy reference attribute")
- } /* end if */
- else
- /* Reset value to zero */
- HDmemset(attr_dst->shared->data, 0, attr_dst->shared->data_size);
- } /* end if */
+ if ( H5A_attr_post_copy_file(src_oloc, (const H5A_t *)mesg_src,
+ dst_oloc, (H5A_t *)mesg_dst, dxpl_id, cpy_info) < 0)
+ HGOTO_ERROR(H5E_ATTR, H5E_CANTCOPY, FAIL, "can't copy attribute")
done:
FUNC_LEAVE_NOAPI(ret_value)
diff --git a/src/H5Oattribute.c b/src/H5Oattribute.c
index 846d2ec..ea9a7f5 100644
--- a/src/H5Oattribute.c
+++ b/src/H5Oattribute.c
@@ -1207,7 +1207,7 @@ H5O_attr_iterate_real(hid_t loc_id, const H5O_loc_t *loc, hid_t dxpl_id,
/* Protect the object header to iterate over */
if(NULL == (oh = (H5O_t *)H5AC_protect(loc->file, dxpl_id, H5AC_OHDR, loc->addr,
- NULL, NULL, (H5F_get_intent(loc->file) & H5F_ACC_RDWR) ? H5AC_WRITE : H5AC_READ)))
+ NULL, NULL, H5AC_READ)))
HGOTO_ERROR(H5E_ATTR, H5E_CANTLOAD, FAIL, "unable to load object header")
/* Check for attribute info stored */
diff --git a/src/H5Ocache.c b/src/H5Ocache.c
index e5a772f..db093a4 100644
--- a/src/H5Ocache.c
+++ b/src/H5Ocache.c
@@ -880,12 +880,21 @@ HDfprintf(stderr, "%s: oh->cache_info.free_file_space_on_destroy = %t\n", FUNC,
/* destroy messages */
if(oh->mesg) {
for(u = 0; u < oh->nmesgs; u++) {
- /* Verify that message is clean */
- HDassert(oh->mesg[u].dirty == 0);
+ /* Verify that message is clean, unless it could have been marked
+ * dirty by decoding */
+#ifndef NDEBUG
+ if(oh->ndecode_dirtied && oh->mesg[u].dirty)
+ oh->ndecode_dirtied--;
+ else
+ HDassert(oh->mesg[u].dirty == 0);
+#endif /* NDEBUG */
H5O_msg_free_mesg(&oh->mesg[u]);
} /* end for */
+ /* Make sure we accounted for all the messages dirtied by decoding */
+ HDassert(!oh->ndecode_dirtied);
+
oh->mesg = (H5O_mesg_t *)H5FL_SEQ_FREE(H5O_mesg_t, oh->mesg);
} /* end if */
@@ -929,6 +938,11 @@ H5O_clear(H5F_t *f, H5O_t *oh, hbool_t destroy)
for(u = 0; u < oh->nmesgs; u++)
oh->mesg[u].dirty = FALSE;
+#ifndef NDEBUG
+ /* Reset the number of messages dirtied by decoding */
+ oh->ndecode_dirtied = 0;
+#endif /* NDEBUG */
+
/* Mark whole header as clean */
oh->cache_info.is_dirty = FALSE;
diff --git a/src/H5Ocopy.c b/src/H5Ocopy.c
index 9a905d2..5334539 100644
--- a/src/H5Ocopy.c
+++ b/src/H5Ocopy.c
@@ -315,8 +315,7 @@ H5O_copy_header_real(const H5O_loc_t *oloc_src, H5O_loc_t *oloc_dst /*out */,
HDassert(cpy_info);
/* Get source object header */
- if(NULL == (oh_src = (H5O_t *)H5AC_protect(oloc_src->file, dxpl_id, H5AC_OHDR, oloc_src->addr, NULL, NULL,
- (H5F_get_intent(oloc_src->file) & H5F_ACC_RDWR) ? H5AC_WRITE : H5AC_READ)))
+ if(NULL == (oh_src = (H5O_t *)H5AC_protect(oloc_src->file, dxpl_id, H5AC_OHDR, oloc_src->addr, NULL, NULL, H5AC_READ)))
HGOTO_ERROR(H5E_OHDR, H5E_CANTLOAD, FAIL, "unable to load object header")
/* Get pointer to object class for this object */
diff --git a/src/H5Omessage.c b/src/H5Omessage.c
index 1682117..5a0577a 100644
--- a/src/H5Omessage.c
+++ b/src/H5Omessage.c
@@ -484,8 +484,7 @@ H5O_msg_read(const H5O_loc_t *loc, unsigned type_id, void *mesg,
HDassert(type_id < NELMTS(H5O_msg_class_g));
/* Get the object header */
- if(NULL == (oh = (H5O_t *)H5AC_protect(loc->file, dxpl_id, H5AC_OHDR, loc->addr, NULL, NULL,
- (H5F_get_intent(loc->file) & H5F_ACC_RDWR) ? H5AC_WRITE : H5AC_READ)))
+ if(NULL == (oh = (H5O_t *)H5AC_protect(loc->file, dxpl_id, H5AC_OHDR, loc->addr, NULL, NULL, H5AC_READ)))
HGOTO_ERROR(H5E_OHDR, H5E_CANTLOAD, NULL, "unable to load object header")
/* Call the "real" read routine */
@@ -1231,8 +1230,7 @@ H5O_msg_iterate(const H5O_loc_t *loc, unsigned type_id,
HDassert(op);
/* Protect the object header to iterate over */
- if(NULL == (oh = (H5O_t *)H5AC_protect(loc->file, dxpl_id, H5AC_OHDR, loc->addr, NULL, NULL,
- (H5F_get_intent(loc->file) & H5F_ACC_RDWR) ? H5AC_WRITE : H5AC_READ)))
+ if(NULL == (oh = (H5O_t *)H5AC_protect(loc->file, dxpl_id, H5AC_OHDR, loc->addr, NULL, NULL, H5AC_READ)))
HGOTO_ERROR(H5E_OHDR, H5E_CANTLOAD, FAIL, "unable to load object header")
/* Call the "real" iterate routine */
@@ -2229,6 +2227,12 @@ H5O_flush_msgs(H5F_t *f, H5O_t *oh)
if(oh->nmesgs != u)
HGOTO_ERROR(H5E_OHDR, H5E_CANTFLUSH, FAIL, "corrupt object header - too few messages")
+#ifndef NDEBUG
+ /* Reset the number of messages dirtied by decoding, as they have all
+ * been flushed */
+ oh->ndecode_dirtied = 0;
+#endif /* NDEBUG */
+
done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5O_flush_msgs() */
diff --git a/src/H5Opkg.h b/src/H5Opkg.h
index f15198e..b7d4202 100644
--- a/src/H5Opkg.h
+++ b/src/H5Opkg.h
@@ -171,6 +171,13 @@
#define H5O_DECODEIO_NOCHANGE 0x01u /* IN: do not modify values */
#define H5O_DECODEIO_DIRTY 0x02u /* OUT: message has been changed */
+/* Macro to incremend ndecode_dirtied (only if we are debugging) */
+#ifndef NDEBUG
+#define INCR_NDECODE_DIRTIED(OH) (OH)->ndecode_dirtied++;
+#else /* NDEBUG */
+#define INCR_NDECODE_DIRTIED(OH) ;
+#endif /* NDEBUG */
+
/* Load native information for a message, if it's not already present */
/* (Only works for messages with decode callback) */
#define H5O_LOAD_NATIVE(F, DXPL, IOF, OH, MSG, ERR) \
@@ -183,11 +190,12 @@
if(NULL == ((MSG)->native = (msg_type->decode)((F), (DXPL), (MSG)->flags, &ioflags, (MSG)->raw))) \
HGOTO_ERROR(H5E_OHDR, H5E_CANTDECODE, ERR, "unable to decode message") \
\
- /* Mark the object header dirty if the message was changed by decoding */ \
+ /* Mark the message dirty if it was changed by decoding */ \
if((ioflags & H5O_DECODEIO_DIRTY) && (H5F_get_intent((F)) & H5F_ACC_RDWR)) { \
(MSG)->dirty = TRUE; \
- if(H5AC_mark_pinned_or_protected_entry_dirty((F), (OH)) < 0) \
- HGOTO_ERROR(H5E_OHDR, H5E_CANTMARKDIRTY, ERR, "unable to mark object header as dirty") \
+ /* Increment the count of messages dirtied by decoding, but */ \
+ /* only ifndef NDEBUG */ \
+ INCR_NDECODE_DIRTIED(OH) \
} \
\
/* Set the message's "shared info", if it's shareable */ \
@@ -264,6 +272,9 @@ struct H5O_t {
* versions of the library)
*/
#endif /* H5O_ENABLE_BAD_MESG_COUNT */
+#ifndef NDEBUG
+ size_t ndecode_dirtied; /* Number of messages dirtied by decoding */
+#endif /* NDEBUG */
/* Object information (stored) */
hbool_t has_refcount_msg; /* Whether the object has a ref. count message */
diff --git a/test/Makefile.am b/test/Makefile.am
index 817829a..1709d44 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -114,7 +114,7 @@ CHECK_CLEANFILES+=cmpd_dset.h5 compact_dataset.h5 dataset.h5 dset_offset.h5 \
fillval_[0-9].h5 fillval.raw mount_[0-9].h5 testmeta.h5 ttime.h5 \
trefer[1-3].h5 tvltypes.h5 tvlstr.h5 tvlstr2.h5 flush.h5 \
enum1.h5 titerate.h5 ttsafe.h5 tarray1.h5 tgenprop.h5 \
- tmisc[0-9]*.h5 set_extent_read.h5 set_extent_create.h5 \
+ tmisc[0-9]*.h5 set_extent[1-5].h5 ext[12].bin \
getname.h5 getname[1-3].h5 sec2_file.h5 direct_file.h5 \
family_file000[0-3][0-9].h5 multi_file-[rs].h5 core_file \
new_move_[ab].h5 ntypes.h5 dangle.h5 error_test.h5 err_compat.h5 \
diff --git a/test/cmpd_dset.c b/test/cmpd_dset.c
index c05844e..d1f317f 100644
--- a/test/cmpd_dset.c
+++ b/test/cmpd_dset.c
@@ -1840,117 +1840,109 @@ test_pack_ooo(void)
PASSED();
- /* Change to reverse ordering, insert compound last */
- for(i=0; i<PACK_NMEMBS; i++)
- order[i] = PACK_NMEMBS - i - 1;
- sub_cmpd_order = PACK_NMEMBS - 1;
-
TESTING("reverse member insertion with empty compound subtype");
/* Create inner compound type. It will be empty for the first run */
- if((sub_cmpd = H5Tcreate(H5T_COMPOUND, 4)) < 0) TEST_ERROR
+ if((sub_cmpd = H5Tcreate(H5T_COMPOUND, 4)) < 0) PACK_OOO_ERROR
/* Create main compound type, with extra space at the end */
- if((cmpd = H5Tcreate(H5T_COMPOUND, (4 * PACK_NMEMBS) + 1)) < 0) TEST_ERROR
+ if((cmpd = H5Tcreate(H5T_COMPOUND, (4 * PACK_NMEMBS) + 1)) < 0) PACK_OOO_ERROR
- /* Insert the compound members in the reverse order previously generated */
+ /* Insert the compound members in reverse order, with compound last */
for(i=0; i<PACK_NMEMBS; i++) {
sprintf(name, "%05d", i);
- if(i == sub_cmpd_order) {
- if(H5Tinsert(cmpd, name, 4 * order[i], sub_cmpd) < 0) TEST_ERROR
+ if(i == PACK_NMEMBS - 1) {
+ if(H5Tinsert(cmpd, name, 4 * (PACK_NMEMBS - i - 1), sub_cmpd) < 0) PACK_OOO_ERROR
} else
- if(H5Tinsert(cmpd, name, 4 * order[i], H5T_STD_I32BE) < 0) TEST_ERROR
+ if(H5Tinsert(cmpd, name, 4 * (PACK_NMEMBS - i - 1), H5T_STD_I32BE) < 0) PACK_OOO_ERROR
} /* end for */
/* Verify that the compound is not packed */
- if(NULL == (dt = (H5T_t *) H5I_object_verify(cmpd, H5I_DATATYPE))) TEST_ERROR
- if(dt->shared->u.compnd.packed) TEST_ERROR
+ if(NULL == (dt = (H5T_t *) H5I_object_verify(cmpd, H5I_DATATYPE))) PACK_OOO_ERROR
+ if(dt->shared->u.compnd.packed) PACK_OOO_ERROR
/* Close the main compound */
- if(H5Tclose(cmpd) < 0) TEST_ERROR
+ if(H5Tclose(cmpd) < 0) PACK_OOO_ERROR
PASSED();
TESTING("reverse member insertion with full compound subtype");
/* Complete the inner compound type */
- if(H5Tinsert(sub_cmpd, "int", 0, H5T_STD_I32LE) < 0) TEST_ERROR
+ if(H5Tinsert(sub_cmpd, "int", 0, H5T_STD_I32LE) < 0) PACK_OOO_ERROR
/* Recreate main compound type */
- if((cmpd = H5Tcreate(H5T_COMPOUND, (4 * PACK_NMEMBS) + 1)) < 0) TEST_ERROR
+ if((cmpd = H5Tcreate(H5T_COMPOUND, (4 * PACK_NMEMBS) + 1)) < 0) PACK_OOO_ERROR
- /* Insert the compound members in the reverse order previously generated */
+ /* Insert the compound members in reverse order, with compound last */
for(i=0; i<PACK_NMEMBS; i++) {
sprintf(name, "%05d", i);
- if(i == sub_cmpd_order) {
- if(H5Tinsert(cmpd, name, 4 * order[i], sub_cmpd) < 0) TEST_ERROR
+ if(i == PACK_NMEMBS - 1) {
+ if(H5Tinsert(cmpd, name, 4 * (PACK_NMEMBS - i - 1), sub_cmpd) < 0) PACK_OOO_ERROR
} else
- if(H5Tinsert(cmpd, name, 4 * order[i], H5T_STD_I32BE) < 0) TEST_ERROR
+ if(H5Tinsert(cmpd, name, 4 * (PACK_NMEMBS - i - 1), H5T_STD_I32BE) < 0) PACK_OOO_ERROR
} /* end for */
/* Verify that the compound is packed */
- if(NULL == (dt = (H5T_t *) H5I_object_verify(cmpd, H5I_DATATYPE))) TEST_ERROR
- if(!dt->shared->u.compnd.packed) TEST_ERROR
+ if(NULL == (dt = (H5T_t *) H5I_object_verify(cmpd, H5I_DATATYPE))) PACK_OOO_ERROR
+ if(!dt->shared->u.compnd.packed) PACK_OOO_ERROR
/* Close */
- if(H5Tclose(cmpd) < 0) TEST_ERROR
- if(H5Tclose(sub_cmpd) < 0) TEST_ERROR
+ if(H5Tclose(cmpd) < 0) PACK_OOO_ERROR
+ if(H5Tclose(sub_cmpd) < 0) PACK_OOO_ERROR
PASSED();
- /* Change to forward ordering, insert compound first */
- sub_cmpd_order = 0;
-
TESTING("forward member insertion with empty compound subtype");
/* Create inner compound type. It will be empty for the first run */
- if((sub_cmpd = H5Tcreate(H5T_COMPOUND, 4)) < 0) TEST_ERROR
+ if((sub_cmpd = H5Tcreate(H5T_COMPOUND, 4)) < 0) PACK_OOO_ERROR
/* Create main compound type, with extra space at the end */
- if((cmpd = H5Tcreate(H5T_COMPOUND, (4 * PACK_NMEMBS) + 1)) < 0) TEST_ERROR
+ if((cmpd = H5Tcreate(H5T_COMPOUND, (4 * PACK_NMEMBS) + 1)) < 0) PACK_OOO_ERROR
- /* Insert the compound members in forward order */
+ /* Insert the compound members in forward order, with compound first */
for(i=0; i<PACK_NMEMBS; i++) {
sprintf(name, "%05d", i);
- if(i == sub_cmpd_order) {
- if(H5Tinsert(cmpd, name, 4 * i, sub_cmpd) < 0) TEST_ERROR
+ if(i == 0) {
+ if(H5Tinsert(cmpd, name, 4 * i, sub_cmpd) < 0) PACK_OOO_ERROR
} else
- if(H5Tinsert(cmpd, name, 4 * i, H5T_STD_I32BE) < 0) TEST_ERROR
+ if(H5Tinsert(cmpd, name, 4 * i, H5T_STD_I32BE) < 0) PACK_OOO_ERROR
} /* end for */
/* Verify that the compound is not packed */
- if(NULL == (dt = (H5T_t *) H5I_object_verify(cmpd, H5I_DATATYPE))) TEST_ERROR
- if(dt->shared->u.compnd.packed) TEST_ERROR
+ if(NULL == (dt = (H5T_t *) H5I_object_verify(cmpd, H5I_DATATYPE))) PACK_OOO_ERROR
+ if(dt->shared->u.compnd.packed) PACK_OOO_ERROR
/* Close the main compound */
- if(H5Tclose(cmpd) < 0) TEST_ERROR
+ if(H5Tclose(cmpd) < 0) PACK_OOO_ERROR
PASSED();
TESTING("forward member insertion with full compound subtype");
/* Complete the inner compound type */
- if(H5Tinsert(sub_cmpd, "int", 0, H5T_STD_I32LE) < 0) TEST_ERROR
+ if(H5Tinsert(sub_cmpd, "int", 0, H5T_STD_I32LE) < 0) PACK_OOO_ERROR
/* Recreate main compound type */
- if((cmpd = H5Tcreate(H5T_COMPOUND, (4 * PACK_NMEMBS) + 1)) < 0) TEST_ERROR
+ if((cmpd = H5Tcreate(H5T_COMPOUND, (4 * PACK_NMEMBS) + 1)) < 0) PACK_OOO_ERROR
/* Insert the compound members in forward order */
for(i=0; i<PACK_NMEMBS; i++) {
sprintf(name, "%05d", i);
- if(i == sub_cmpd_order) {
- if(H5Tinsert(cmpd, name, 4 * i, sub_cmpd) < 0) TEST_ERROR
+ if(i == 0) {
+ if(H5Tinsert(cmpd, name, 4 * i, sub_cmpd) < 0) PACK_OOO_ERROR
} else
- if(H5Tinsert(cmpd, name, 4 * i, H5T_STD_I32BE) < 0) TEST_ERROR
+ if(H5Tinsert(cmpd, name, 4 * i, H5T_STD_I32BE) < 0) PACK_OOO_ERROR
} /* end for */
/* Verify that the compound is packed */
- if(NULL == (dt = (H5T_t *) H5I_object_verify(cmpd, H5I_DATATYPE))) TEST_ERROR
- if(!dt->shared->u.compnd.packed) TEST_ERROR
+ if(NULL == (dt = (H5T_t *) H5I_object_verify(cmpd, H5I_DATATYPE))) PACK_OOO_ERROR
+ if(!dt->shared->u.compnd.packed) PACK_OOO_ERROR
/* Close */
- if(H5Tclose(cmpd) < 0) TEST_ERROR
- if(H5Tclose(sub_cmpd) < 0) TEST_ERROR
+ if(H5Tclose(cmpd) < 0) PACK_OOO_ERROR
+ if(H5Tclose(sub_cmpd) < 0) PACK_OOO_ERROR
PASSED();
diff --git a/test/earray.c b/test/earray.c
index c80352d..6935a15 100644
--- a/test/earray.c
+++ b/test/earray.c
@@ -45,6 +45,8 @@
#define MAX_DBLOCK_PAGE_NELMTS_BITS 10 /* i.e. 1024 elements per data block page */
/* Convenience macros for computing earray state */
+#define EA_HDR_SIZE 72 /* (hard-coded, current size) */
+#define EA_IBLOCK_SIZE 298 /* (hard-coded, current size) */
#define EA_NELMTS(cparam, tparam, idx, sblk_idx) \
(hsize_t)(cparam->idx_blk_elmts + \
tparam->sblk_info[sblk_idx].start_idx + \
@@ -97,9 +99,14 @@ typedef enum {
/* Extensible array state information */
typedef struct earray_state_t {
- hsize_t max_idx_set; /* Highest element index stored (+1 - i.e. if element 0 has been set, this value with be '1', if no elements have been stored, this value will be '0') */
+ hsize_t hdr_size; /* Size of header */
+ hsize_t nindex_blks; /* # of index blocks */
+ hsize_t index_blk_size; /* Size of index blocks */
hsize_t nsuper_blks; /* # of super blocks */
+ hsize_t super_blk_size; /* Size of super blocks */
hsize_t ndata_blks; /* # of data blocks */
+ hsize_t data_blk_size; /* Size of data blocks */
+ hsize_t max_idx_set; /* Highest element index stored (+1 - i.e. if element 0 has been set, this value with be '1', if no elements have been stored, this value will be '0') */
hsize_t nelmts; /* # of elements "realized" */
} earray_state_t;
@@ -111,7 +118,7 @@ typedef struct earray_iter_t {
void *(*init)(const H5EA_create_t *cparam, const earray_test_param_t *tparam,
hsize_t cnt); /* Initialize/allocate iterator private info */
hssize_t (*next)(void *info); /* Get the next element to test */
- hssize_t (*max)(const void *info); /* Get the max. element set */
+ hssize_t (*max_elem)(const void *info); /* Get the max. element set */
int (*state)(void *_eiter, const H5EA_create_t *cparam,
const earray_test_param_t *tparam, earray_state_t *state, hsize_t idx); /* Get the state of the extensible array */
herr_t (*term)(void *info); /* Shutdown/free iterator private info */
@@ -313,14 +320,44 @@ check_stats(const H5EA_t *ea, const earray_state_t *state)
HDfprintf(stdout, "earray_stats.nelmts = %Hu, state->nelmts = %Hu\n", earray_stats.nelmts, state->nelmts);
TEST_ERROR
} /* end if */
+ if(earray_stats.hdr_size != state->hdr_size) {
+ HDfprintf(stdout, "earray_stats.hdr_size = %Hu, state->hdr_size = %Hu\n", earray_stats.hdr_size, state->hdr_size);
+ TEST_ERROR
+ } /* end if */
+ if(earray_stats.nindex_blks != state->nindex_blks) {
+ HDfprintf(stdout, "earray_stats.nindex_blks = %Hu, state->nindex_blks = %Hu\n", earray_stats.nindex_blks, state->nindex_blks);
+ TEST_ERROR
+ } /* end if */
+ if(earray_stats.index_blk_size != state->index_blk_size) {
+ HDfprintf(stdout, "earray_stats.index_blk_size = %Hu, state->index_blk_size = %Hu\n", earray_stats.index_blk_size, state->index_blk_size);
+ TEST_ERROR
+ } /* end if */
if(earray_stats.ndata_blks != state->ndata_blks) {
HDfprintf(stdout, "earray_stats.ndata_blks = %Hu, state->ndata_blks = %Hu\n", earray_stats.ndata_blks, state->ndata_blks);
TEST_ERROR
} /* end if */
+/* Don't compare this currently, it's very hard to compute */
+#ifdef NOT_YET
+ if(earray_stats.data_blk_size != state->data_blk_size) {
+ HDfprintf(stdout, "earray_stats.data_blk_size = %Hu, state->data_blk_size = %Hu\n", earray_stats.data_blk_size, state->data_blk_size);
+ TEST_ERROR
+ } /* end if */
+#endif /* NOT_YET */
if(earray_stats.nsuper_blks != state->nsuper_blks) {
HDfprintf(stdout, "earray_stats.nsuper_blks = %Hu, state->nsuper_blks = %Hu\n", earray_stats.nsuper_blks, state->nsuper_blks);
TEST_ERROR
} /* end if */
+/* Don't compare this currently, it's very hard to compute */
+#ifdef NOT_YET
+ if(earray_stats.super_blk_size != state->super_blk_size) {
+ HDfprintf(stdout, "earray_stats.super_blk_size = %Hu, state->super_blk_size = %Hu\n", earray_stats.super_blk_size, state->super_blk_size);
+ TEST_ERROR
+ } /* end if */
+#endif /* NOT_YET */
+#ifdef QAK
+HDfprintf(stderr, "nelmts = %Hu, total EA size = %Hu\n", earray_stats.nelmts,
+ (earray_stats.hdr_size + earray_stats.index_blk_size + earray_stats.super_blk_size + earray_stats.data_blk_size));
+#endif /* QAK */
/* All tests passed */
return(0);
@@ -422,6 +459,7 @@ create_array(H5F_t *f, hid_t dxpl, const H5EA_create_t *cparam,
if(!H5F_addr_defined(*ea_addr))
TEST_ERROR
HDmemset(&state, 0, sizeof(state));
+ state.hdr_size = EA_HDR_SIZE;
if(check_stats(*ea, &state))
TEST_ERROR
@@ -1059,7 +1097,7 @@ typedef struct eiter_fw_t {
*-------------------------------------------------------------------------
*/
static void *
-eiter_fw_init(const H5EA_create_t UNUSED *cparam, const earray_test_param_t UNUSED *tparam,
+eiter_fw_init(const H5EA_create_t UNUSED *cparam, const earray_test_param_t UNUSED *tparam,
hsize_t UNUSED cnt)
{
eiter_fw_t *eiter; /* Forward element iteration object */
@@ -1131,7 +1169,7 @@ eiter_fw_max(const void *_eiter)
return((hssize_t)(eiter->idx - 1));
} /* end eiter_fw_max() */
-
+
/*-------------------------------------------------------------------------
* Function: eiter_fw_state
*
@@ -1158,10 +1196,14 @@ eiter_fw_state(void *_eiter, const H5EA_create_t *cparam,
HDassert(state);
/* Compute the state of the extensible array */
+ state->hdr_size = EA_HDR_SIZE;
+ state->nindex_blks = 1;
+ state->index_blk_size = 298;
state->max_idx_set = idx + 1;
if(idx < cparam->idx_blk_elmts) {
state->nelmts = (hsize_t)cparam->idx_blk_elmts;
state->nsuper_blks = state->ndata_blks = (hsize_t)0;
+ state->super_blk_size = state->data_blk_size = (hsize_t)0;
} /* end if */
else {
unsigned sblk_idx; /* Which superblock does this index fall in? */
@@ -1261,7 +1303,7 @@ typedef struct eiter_rv_t {
*-------------------------------------------------------------------------
*/
static void *
-eiter_rv_init(const H5EA_create_t *cparam, const earray_test_param_t *tparam,
+eiter_rv_init(const H5EA_create_t *cparam, const earray_test_param_t *tparam,
hsize_t cnt)
{
eiter_rv_t *eiter; /* Reverse element iteration object */
@@ -1372,6 +1414,9 @@ eiter_rv_state(void *_eiter, const H5EA_create_t *cparam,
HDassert(state);
/* Compute the state of the extensible array */
+ state->hdr_size = EA_HDR_SIZE;
+ state->nindex_blks = 1;
+ state->index_blk_size = 298;
state->max_idx_set = eiter->max + 1;
if(eiter->max < cparam->idx_blk_elmts) {
state->nelmts = (hsize_t)cparam->idx_blk_elmts;
@@ -1497,7 +1542,7 @@ typedef struct eiter_rnd_t {
*-------------------------------------------------------------------------
*/
static void *
-eiter_rnd_init(const H5EA_create_t UNUSED *cparam, const earray_test_param_t UNUSED *tparam,
+eiter_rnd_init(const H5EA_create_t UNUSED *cparam, const earray_test_param_t UNUSED *tparam,
hsize_t cnt)
{
eiter_rnd_t *eiter; /* Random element iteration object */
@@ -1650,7 +1695,7 @@ static const earray_iter_t ea_iter_rnd = {
*-------------------------------------------------------------------------
*/
static void *
-eiter_rnd2_init(const H5EA_create_t UNUSED *cparam, const earray_test_param_t UNUSED *tparam,
+eiter_rnd2_init(const H5EA_create_t UNUSED *cparam, const earray_test_param_t UNUSED *tparam,
hsize_t cnt)
{
eiter_rnd_t *eiter; /* Random element iteration object */
@@ -1734,7 +1779,7 @@ typedef struct eiter_cyc_t {
*-------------------------------------------------------------------------
*/
static void *
-eiter_cyc_init(const H5EA_create_t UNUSED *cparam, const earray_test_param_t UNUSED *tparam,
+eiter_cyc_init(const H5EA_create_t UNUSED *cparam, const earray_test_param_t UNUSED *tparam,
hsize_t cnt)
{
eiter_cyc_t *eiter; /* Cyclic element iteration object */
@@ -1915,6 +1960,7 @@ test_set_elmts(hid_t fapl, H5EA_create_t *cparam, earray_test_param_t *tparam,
/* Verify array state */
HDmemset(&state, 0, sizeof(state));
+ state.hdr_size = EA_HDR_SIZE;
if(check_stats(ea, &state))
TEST_ERROR
@@ -1974,7 +2020,7 @@ test_set_elmts(hid_t fapl, H5EA_create_t *cparam, earray_test_param_t *tparam,
FAIL_STACK_ERROR
/* Get the max. array index */
- if((smax = tparam->eiter->max(eiter_info)) < 0)
+ if((smax = tparam->eiter->max_elem(eiter_info)) < 0)
TEST_ERROR
max = (hsize_t)smax;
@@ -2088,6 +2134,7 @@ test_skip_elmts(hid_t fapl, H5EA_create_t *cparam, earray_test_param_t *tparam,
/* Verify array state */
HDmemset(&state, 0, sizeof(state));
+ state.hdr_size = EA_HDR_SIZE;
if(check_stats(ea, &state))
TEST_ERROR
@@ -2117,6 +2164,9 @@ test_skip_elmts(hid_t fapl, H5EA_create_t *cparam, earray_test_param_t *tparam,
/* Set array state */
HDmemset(&state, 0, sizeof(state));
+ state.hdr_size = EA_HDR_SIZE;
+ state.nindex_blks = 1;
+ state.index_blk_size = EA_IBLOCK_SIZE;
state.max_idx_set = idx + 1;
if(1 == skip_elmts) {
state.nelmts = (hsize_t)cparam->idx_blk_elmts;
@@ -2328,14 +2378,14 @@ main(void)
for(sblk = 0; sblk < 9; sblk++) {
for(dblk = 0; dblk < tparam.sblk_info[sblk].ndblks; dblk ++) {
/* Test first element in data block */
- nelmts = (hsize_t)(1 + cparam.idx_blk_elmts +
+ nelmts = (hsize_t)(1 + cparam.idx_blk_elmts +
tparam.sblk_info[sblk].start_idx +
(tparam.sblk_info[sblk].dblk_nelmts * dblk));
sprintf(test_str, "setting first element of array's data block #%llu", (unsigned long_long)ndblks);
nerrors += test_set_elmts(fapl, &cparam, &tparam, nelmts, test_str);
/* Test all elements in data block */
- nelmts = (hsize_t)(cparam.idx_blk_elmts +
+ nelmts = (hsize_t)(cparam.idx_blk_elmts +
tparam.sblk_info[sblk].start_idx +
(tparam.sblk_info[sblk].dblk_nelmts * (dblk + 1)));
sprintf(test_str, "setting all elements of array's data block #%llu", (unsigned long_long)ndblks);
diff --git a/test/fillval.c b/test/fillval.c
index 00e06ea..5bf5c03 100644
--- a/test/fillval.c
+++ b/test/fillval.c
@@ -2188,7 +2188,7 @@ main(int argc, char *argv[])
puts("All fill value tests passed.");
if(h5_cleanup(FILENAME, fapl))
- remove(FILE_NAME_RAW);
+ HDremove(FILE_NAME_RAW);
return 0;
diff --git a/test/objcopy.c b/test/objcopy.c
index aca041f..61963b5 100755
--- a/test/objcopy.c
+++ b/test/objcopy.c
@@ -55,7 +55,8 @@ const char *FILENAME[] = {
#define CONFIG_SHARE_SRC 1
#define CONFIG_SHARE_DST 2
#define CONFIG_NEW_FORMAT 4
-#define MAX_CONFIGURATION 7
+#define CONFIG_DENSE 8
+#define MAX_CONFIGURATION 15
#define FILE_EXT "objcopy_ext.dat"
/* The fill_old.h5 is generated from gen_old_fill.c in HDF5 'test' directory
@@ -69,6 +70,7 @@ const char *FILENAME[] = {
#define NAME_DATATYPE_VL "vlen of int"
#define NAME_DATATYPE_VL_VL "vlen of vlen of int"
#define NAME_DATASET_SIMPLE "dataset_simple"
+#define NAME_DATASET_SIMPLE2 "dataset_simple_copy"
#define NAME_DATASET_COMPOUND "dataset_compound"
#define NAME_DATASET_CHUNKED "dataset_chunked"
#define NAME_DATASET_COMPACT "dataset_compact"
@@ -104,7 +106,6 @@ const char *FILENAME[] = {
#define NAME_OLD_FORMAT "/dset1"
#define NAME_BUF_SIZE 1024
-#define NUM_ATTRIBUTES 4
#define ATTR_NAME_LEN 80
#define DIM_SIZE_1 12
#define DIM_SIZE_2 6
@@ -116,6 +117,8 @@ const char *FILENAME[] = {
char src_obj_full_name[215]; /* the full path + name of the object to be copied */
+int num_attributes_g; /* Number of attributes created */
+
/* Table containing object id and object name */
/* (Used for detecting duplicate objects when comparing groups */
static struct {
@@ -535,7 +538,7 @@ test_copy_attach_attributes(hid_t loc_id, hid_t type_id)
if((sid = H5Screate_simple(1, &dim1, NULL)) < 0 )
goto done;
- for (i=0; i<NUM_ATTRIBUTES; i++) {
+ for (i=0; i<num_attributes_g; i++) {
sprintf(attr_name, "%d attr", i);
/* Set attribute data */
@@ -588,7 +591,7 @@ test_copy_attach_paired_attributes(hid_t loc_id, hid_t loc_id2, hid_t type_id)
if((sid = H5Screate_simple(1, &dim1, NULL)) < 0 ) goto done;
- for (i=0; i<NUM_ATTRIBUTES; i++) {
+ for (i=0; i<num_attributes_g; i++) {
sprintf(attr_name, "%d attr", i);
/* Set attribute data */
@@ -1779,6 +1782,112 @@ error:
/*-------------------------------------------------------------------------
+ * Function: test_copy_dataset_simple_samefile
+ *
+ * Purpose: Create a simple dataset in SRC file and copy it to SRC file
+ *
+ * Return: Success: 0
+ * Failure: number of errors
+ *
+ * Programmer: Neil Fortner
+ * Thursday, January 15, 2009
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_copy_dataset_simple_samefile(hid_t fcpl, hid_t fapl, int config)
+{
+ hid_t fid = -1; /* File ID */
+ hid_t sid = -1; /* Dataspace ID */
+ hid_t did = -1, did2 = -1; /* Dataset IDs */
+ int buf[DIM_SIZE_1][DIM_SIZE_2]; /* Buffer for writing data */
+ hsize_t dim2d[2]; /* Dataset dimensions */
+ int i, j; /* local index variables */
+ char filename[NAME_BUF_SIZE];
+
+ TESTING("H5Ocopy(): simple dataset within the same file");
+
+ /* Initialize write buffer */
+ for (i=0; i<DIM_SIZE_1; i++)
+ for (j=0; j<DIM_SIZE_2; j++)
+ buf[i][j] = 10000 + 100*i+j;
+
+ /* Initialize the filenames */
+ h5_fixname(FILENAME[0], fapl, filename, sizeof filename);
+
+ /* Reset file address checking info */
+ addr_reset();
+
+ /* create source file */
+ if((fid = H5Fcreate(filename, H5F_ACC_TRUNC, fcpl, fapl)) < 0) TEST_ERROR
+
+ /* Set dataspace dimensions */
+ dim2d[0] = DIM_SIZE_1;
+ dim2d[1] = DIM_SIZE_2;
+
+ /* create 2D dataspace */
+ if((sid = H5Screate_simple(2, dim2d, NULL)) < 0) TEST_ERROR
+
+ /* create 2D int dataset at SRC file */
+ if((did = H5Dcreate2(fid, NAME_DATASET_SIMPLE, H5T_NATIVE_INT, sid, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR
+
+ /* write data into file */
+ if(H5Dwrite(did, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf) < 0) TEST_ERROR
+
+ /* close dataspace */
+ if(H5Sclose(sid) < 0) TEST_ERROR
+
+ /* attach attributes to the dataset */
+ if(test_copy_attach_attributes(did, H5T_NATIVE_INT) < 0) TEST_ERROR
+
+ /* close the dataset */
+ if(H5Dclose(did) < 0) TEST_ERROR
+
+ /* close the SRC file */
+ if(H5Fclose(fid) < 0) TEST_ERROR
+
+
+ /* open the source file with read-write */
+ if((fid = H5Fopen(filename, H5F_ACC_RDWR, fapl)) < 0) TEST_ERROR
+
+ /* copy the dataset from SRC to DST */
+ if(H5Ocopy(fid, NAME_DATASET_SIMPLE, fid, NAME_DATASET_SIMPLE2, H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR
+
+ /* open the dataset for copy */
+ if((did = H5Dopen2(fid, NAME_DATASET_SIMPLE, H5P_DEFAULT)) < 0) TEST_ERROR
+
+ /* open the destination dataset */
+ if((did2 = H5Dopen2(fid, NAME_DATASET_SIMPLE2, H5P_DEFAULT)) < 0) TEST_ERROR
+
+ /* Check if the datasets are equal */
+ if(compare_datasets(did, did2, H5P_DEFAULT, buf) != TRUE) TEST_ERROR
+
+ /* close the destination dataset */
+ if(H5Dclose(did2) < 0) TEST_ERROR
+
+ /* close the source dataset */
+ if(H5Dclose(did) < 0) TEST_ERROR
+
+ /* close the SRC file */
+ if(H5Fclose(fid) < 0) TEST_ERROR
+
+ PASSED();
+ return 0;
+
+error:
+ H5E_BEGIN_TRY {
+ H5Dclose(did2);
+ H5Dclose(did);
+ H5Sclose(sid);
+ H5Fclose(fid);
+ } H5E_END_TRY;
+ return 1;
+} /* end test_copy_dataset_simple_samefile */
+
+
+/*-------------------------------------------------------------------------
* Function: test_copy_dataset_simple_empty
*
* Purpose: Create a simple dataset in SRC file and copy it to DST file
@@ -7150,7 +7259,8 @@ main(void)
{
int nerrors = 0;
hid_t fapl, fapl2;
- hid_t fcpl_shared;
+ hid_t fcpl_shared, ocpl;
+ unsigned max_compact, min_dense;
int configuration; /* Configuration of tests. */
int ExpressMode;
@@ -7173,6 +7283,11 @@ main(void)
if(H5Pset_shared_mesg_nindexes(fcpl_shared, 1) < 0) TEST_ERROR
if(H5Pset_shared_mesg_index(fcpl_shared, 0, H5O_SHMESG_ALL_FLAG, (size_t) 10) < 0) TEST_ERROR
+ /* Obtain the default attribute storage phase change values */
+ if((ocpl = H5Pcreate(H5P_OBJECT_CREATE)) < 0) TEST_ERROR
+ if(H5Pget_attr_phase_change(ocpl, &max_compact, &min_dense) < 0) TEST_ERROR
+ if(H5Pclose(ocpl) < 0) TEST_ERROR
+
/* Test in all configurations */
for(configuration = 0; configuration <= MAX_CONFIGURATION; configuration++) {
hid_t my_fapl;
@@ -7207,40 +7322,29 @@ main(void)
my_fapl = fapl;
} /* end else */
+ /* Test with and without dense attributes */
+ if(configuration & CONFIG_DENSE) {
+ puts("Testing with dense attributes:");
+ num_attributes_g = max_compact + 1;
+ }
+ else {
+ puts("Testing without dense attributes:");
+ num_attributes_g = MAX(min_dense, 2) - 1;
+ }
/* The tests... */
- nerrors += test_copy_named_datatype(fcpl_src, fcpl_dst, my_fapl);
- nerrors += test_copy_named_datatype_vl(fcpl_src, fcpl_dst, my_fapl);
- nerrors += test_copy_named_datatype_vl_vl(fcpl_src, fcpl_dst, my_fapl);
nerrors += test_copy_dataset_simple(fcpl_src, fcpl_dst, my_fapl);
+ nerrors += test_copy_dataset_simple_samefile(fcpl_src, my_fapl, configuration);
nerrors += test_copy_dataset_simple_empty(fcpl_src, fcpl_dst, my_fapl);
nerrors += test_copy_dataset_compound(fcpl_src, fcpl_dst, my_fapl);
nerrors += test_copy_dataset_chunked(fcpl_src, fcpl_dst, my_fapl);
-
nerrors += test_copy_dataset_chunked_empty(fcpl_src, fcpl_dst, my_fapl);
nerrors += test_copy_dataset_chunked_sparse(fcpl_src, fcpl_dst, my_fapl);
nerrors += test_copy_dataset_compressed(fcpl_src, fcpl_dst, my_fapl);
nerrors += test_copy_dataset_compact(fcpl_src, fcpl_dst, my_fapl);
- nerrors += test_copy_dataset_external(fcpl_src, fcpl_dst, my_fapl);
- nerrors += test_copy_dataset_named_dtype(fcpl_src, fcpl_dst, my_fapl);
- nerrors += test_copy_dataset_named_dtype_hier(fcpl_src, fcpl_dst, my_fapl);
- nerrors += test_copy_dataset_named_dtype_hier_outside(fcpl_src, fcpl_dst, my_fapl);
nerrors += test_copy_dataset_multi_ohdr_chunks(fcpl_src, fcpl_dst, my_fapl);
nerrors += test_copy_dataset_attr_named_dtype(fcpl_src, fcpl_dst, my_fapl);
- nerrors += test_copy_dataset_contig_vl(fcpl_src, fcpl_dst, my_fapl);
- nerrors += test_copy_dataset_chunked_vl(fcpl_src, fcpl_dst, my_fapl);
- nerrors += test_copy_dataset_compact_vl(fcpl_src, fcpl_dst, my_fapl);
- nerrors += test_copy_dataset_compressed_vl(fcpl_src, fcpl_dst, my_fapl);
- nerrors += test_copy_attribute_vl(fcpl_src, fcpl_dst, my_fapl);
- nerrors += test_copy_dataset_compact_named_vl(fcpl_src, fcpl_dst, my_fapl);
- nerrors += test_copy_dataset_contig_named_vl(fcpl_src, fcpl_dst, my_fapl);
- nerrors += test_copy_dataset_chunked_named_vl(fcpl_src, fcpl_dst, my_fapl);
- nerrors += test_copy_dataset_compressed_named_vl(fcpl_src, fcpl_dst, my_fapl);
- nerrors += test_copy_dataset_compact_vl_vl(fcpl_src, fcpl_dst, my_fapl);
- nerrors += test_copy_dataset_contig_vl_vl(fcpl_src, fcpl_dst, my_fapl);
- nerrors += test_copy_dataset_chunked_vl_vl(fcpl_src, fcpl_dst, my_fapl);
- nerrors += test_copy_dataset_compressed_vl_vl(fcpl_src, fcpl_dst, my_fapl);
nerrors += test_copy_group_empty(fcpl_src, fcpl_dst, my_fapl);
nerrors += test_copy_root_group(fcpl_src, fcpl_dst, my_fapl);
nerrors += test_copy_group(fcpl_src, fcpl_dst, my_fapl);
@@ -7254,8 +7358,7 @@ main(void)
#endif /* H5_CANNOT_OPEN_TWICE */
nerrors += test_copy_exist(fcpl_src, fcpl_dst, my_fapl);
nerrors += test_copy_path(fcpl_src, fcpl_dst, my_fapl);
- nerrors += test_copy_same_file_named_datatype(fcpl_src, my_fapl);
- nerrors += test_copy_old_layout(fcpl_dst, my_fapl);
+
nerrors += test_copy_option(fcpl_src, fcpl_dst, my_fapl, H5O_COPY_WITHOUT_ATTR_FLAG,
FALSE, "H5Ocopy(): without attributes");
nerrors += test_copy_option(fcpl_src, fcpl_dst, my_fapl, 0, TRUE,
@@ -7271,6 +7374,36 @@ main(void)
nerrors += test_copy_option(fcpl_src, fcpl_dst, my_fapl, H5O_COPY_WITHOUT_ATTR_FLAG |
H5O_COPY_PRESERVE_NULL_FLAG, TRUE, "H5Ocopy(): preserve NULL messages");
+ /* Tests that do not use attributes and do not need to be tested
+ * multiple times for different attribute configurations */
+ if(configuration < CONFIG_DENSE) {
+ nerrors += test_copy_named_datatype(fcpl_src, fcpl_dst, my_fapl);
+ nerrors += test_copy_named_datatype_vl(fcpl_src, fcpl_dst, my_fapl);
+ nerrors += test_copy_named_datatype_vl_vl(fcpl_src, fcpl_dst, my_fapl);
+
+ nerrors += test_copy_dataset_external(fcpl_src, fcpl_dst, my_fapl);
+ nerrors += test_copy_dataset_named_dtype(fcpl_src, fcpl_dst, my_fapl);
+ nerrors += test_copy_dataset_named_dtype_hier(fcpl_src, fcpl_dst, my_fapl);
+ nerrors += test_copy_dataset_named_dtype_hier_outside(fcpl_src, fcpl_dst, my_fapl);
+
+ nerrors += test_copy_dataset_contig_vl(fcpl_src, fcpl_dst, my_fapl);
+ nerrors += test_copy_dataset_chunked_vl(fcpl_src, fcpl_dst, my_fapl);
+ nerrors += test_copy_dataset_compact_vl(fcpl_src, fcpl_dst, my_fapl);
+ nerrors += test_copy_dataset_compressed_vl(fcpl_src, fcpl_dst, my_fapl);
+ nerrors += test_copy_attribute_vl(fcpl_src, fcpl_dst, my_fapl);
+ nerrors += test_copy_dataset_compact_named_vl(fcpl_src, fcpl_dst, my_fapl);
+ nerrors += test_copy_dataset_contig_named_vl(fcpl_src, fcpl_dst, my_fapl);
+ nerrors += test_copy_dataset_chunked_named_vl(fcpl_src, fcpl_dst, my_fapl);
+ nerrors += test_copy_dataset_compressed_named_vl(fcpl_src, fcpl_dst, my_fapl);
+ nerrors += test_copy_dataset_compact_vl_vl(fcpl_src, fcpl_dst, my_fapl);
+ nerrors += test_copy_dataset_contig_vl_vl(fcpl_src, fcpl_dst, my_fapl);
+ nerrors += test_copy_dataset_chunked_vl_vl(fcpl_src, fcpl_dst, my_fapl);
+ nerrors += test_copy_dataset_compressed_vl_vl(fcpl_src, fcpl_dst, my_fapl);
+
+ nerrors += test_copy_same_file_named_datatype(fcpl_src, my_fapl);
+ nerrors += test_copy_old_layout(fcpl_dst, my_fapl);
+ }
+
/* TODO: not implemented
nerrors += test_copy_option(my_fapl, H5O_COPY_EXPAND_EXT_LINK_FLAG, FALSE, "H5Ocopy: expand external link");
nerrors += test_copy_mount(my_fapl);
diff --git a/test/set_extent.c b/test/set_extent.c
index 47a6ce5..b16bbd0 100644
--- a/test/set_extent.c
+++ b/test/set_extent.c
@@ -36,6 +36,8 @@
#define FILE_NAME3 "set_extent3.h5"
#define FILE_NAME4 "set_extent4.h5"
#define FILE_NAME5 "set_extent5.h5"
+#define EXT_FILE_NAME1 "ext1.bin"
+#define EXT_FILE_NAME2 "ext2.bin"
#define RANK1 1
#define RANK2 2
@@ -94,9 +96,17 @@ int main( void )
puts("All set_extent tests passed.");
+
+ HDremove(FILE_NAME1);
+ HDremove(FILE_NAME2);
+ HDremove(FILE_NAME3);
+ HDremove(FILE_NAME4);
+ HDremove(FILE_NAME5);
+ HDremove(EXT_FILE_NAME1);
+ HDremove(EXT_FILE_NAME2);
+
return 0;
-
error:
H5_FAILED();
return 1;
@@ -2044,12 +2054,12 @@ static int test_external( void )
goto error;
}
- if(H5Pset_external(dcpl, "ext1.bin", (off_t)0, size) < 0)
+ if(H5Pset_external(dcpl, EXT_FILE_NAME1, (off_t)0, size) < 0)
{
goto error;
}
- if(H5Pset_external(dcpl, "ext2.bin", (off_t)0, size) < 0)
+ if(H5Pset_external(dcpl, EXT_FILE_NAME2, (off_t)0, size) < 0)
{
goto error;
}
@@ -2617,6 +2627,3 @@ error:
}
-
-
-
diff --git a/tools/lib/h5diff.c b/tools/lib/h5diff.c
index 38c5f54..432dd95 100644
--- a/tools/lib/h5diff.c
+++ b/tools/lib/h5diff.c
@@ -197,7 +197,7 @@ hsize_t h5diff(const char *fname1,
if(options->m_quiet && (options->m_verbose || options->m_report))
{
- printf("Error: -q (quiet mode) cannot be added to verbose or report modes\n");
+ parallel_print("Error: -q (quiet mode) cannot be added to verbose or report modes\n");
options->err_stat=1;
return 0;
} /* end if */
@@ -213,7 +213,7 @@ hsize_t h5diff(const char *fname1,
/* open the files */
if((file1_id = H5Fopen(fname1, H5F_ACC_RDONLY, H5P_DEFAULT)) < 0)
{
- printf("h5diff: <%s>: unable to open file\n", fname1);
+ parallel_print("h5diff: <%s>: unable to open file\n", fname1);
options->err_stat = 1;
#ifdef H5_HAVE_PARALLEL
@@ -225,7 +225,7 @@ hsize_t h5diff(const char *fname1,
} /* end if */
if((file2_id = H5Fopen(fname2, H5F_ACC_RDONLY, H5P_DEFAULT)) < 0)
{
- printf("h5diff: <%s>: unable to open file\n", fname2);
+ parallel_print("h5diff: <%s>: unable to open file\n", fname2);
options->err_stat = 1;
#ifdef H5_HAVE_PARALLEL
@@ -250,7 +250,7 @@ hsize_t h5diff(const char *fname1,
*-------------------------------------------------------------------------
*/
if(h5trav_getinfo(file1_id, info1) < 0 || h5trav_getinfo(file2_id, info2) < 0) {
- printf("Error: Could not get file contents\n");
+ parallel_print("Error: Could not get file contents\n");
options->err_stat = 1;
#ifdef H5_HAVE_PARALLEL
if(g_Parallel)
@@ -431,17 +431,17 @@ hsize_t diff_match(hid_t file1_id,
*/
if(options->m_verbose)
{
- printf("\n");
- printf("file1 file2\n");
- printf("---------------------------------------\n");
+ parallel_print("\n");
+ parallel_print("file1 file2\n");
+ parallel_print("---------------------------------------\n");
for(i = 0; i < table->nobjs; i++) {
char c1, c2;
c1 = (table->objs[i].flags[0]) ? 'x' : ' ';
c2 = (table->objs[i].flags[1]) ? 'x' : ' ';
- printf("%5c %6c %-15s\n", c1, c2, table->objs[i].name);
+ parallel_print("%5c %6c %-15s\n", c1, c2, table->objs[i].name);
} /* end for */
- printf ("\n");
+ parallel_print ("\n");
} /* end if */
@@ -1143,7 +1143,7 @@ hsize_t diff(hid_t file1_id,
default:
if(options->m_verbose)
- printf("Comparison not supported: <%s> and <%s> are of type %s\n",
+ parallel_print("Comparison not supported: <%s> and <%s> are of type %s\n",
path1, path2, get_type(type) );
options->not_cmp = 1;
break;
diff --git a/tools/lib/h5diff_array.c b/tools/lib/h5diff_array.c
index 8d733b3..f9c6261 100644
--- a/tools/lib/h5diff_array.c
+++ b/tools/lib/h5diff_array.c
@@ -5397,7 +5397,6 @@ my_isnan(dtype_t type, void *val)
double x;
HDmemcpy(&x, val, sizeof(double));
retval = (x!=x);
- //printf("x=%g retval =%d\n", x,retval);
#if H5_SIZEOF_LONG_DOUBLE!=H5_SIZEOF_DOUBLE && H5_SIZEOF_LONG_DOUBLE!=0
}
diff --git a/tools/lib/h5diff_attr.c b/tools/lib/h5diff_attr.c
index 747b12c..c527310 100644
--- a/tools/lib/h5diff_attr.c
+++ b/tools/lib/h5diff_attr.c
@@ -185,7 +185,7 @@ hsize_t diff_attr(hid_t loc1_id,
buf1=(void *) HDmalloc((unsigned)(nelmts1*msize1));
buf2=(void *) HDmalloc((unsigned)(nelmts1*msize2));
if ( buf1==NULL || buf2==NULL){
- printf( "cannot read into memory\n" );
+ parallel_print( "cannot read into memory\n" );
goto error;
}
if (H5Aread(attr1_id,mtype1_id,buf1)<0)
diff --git a/tools/lib/h5diff_dset.c b/tools/lib/h5diff_dset.c
index 1a5778a..9710419 100644
--- a/tools/lib/h5diff_dset.c
+++ b/tools/lib/h5diff_dset.c
@@ -55,12 +55,12 @@ hsize_t diff_dataset( hid_t file1_id,
/* Open the datasets */
if((did1 = H5Dopen2(file1_id, obj1_name, H5P_DEFAULT)) < 0)
{
- printf("Cannot open dataset <%s>\n", obj1_name);
+ parallel_print("Cannot open dataset <%s>\n", obj1_name);
goto error;
}
if((did2 = H5Dopen2(file2_id, obj2_name, H5P_DEFAULT)) < 0)
{
- printf("Cannot open dataset <%s>\n", obj2_name);
+ parallel_print("Cannot open dataset <%s>\n", obj2_name);
goto error;
}
/* enable error reporting */
@@ -880,33 +880,33 @@ void print_sizes( const char *obj1,
m_size1 = H5Tget_size( m_tid1 );
m_size2 = H5Tget_size( m_tid2 );
- printf("\n");
- printf("------------------\n");
- printf("sizeof(char) %u\n", sizeof(char) );
- printf("sizeof(short) %u\n", sizeof(short) );
- printf("sizeof(int) %u\n", sizeof(int) );
- printf("sizeof(long) %u\n", sizeof(long) );
- printf("<%s> ------------------\n", obj1);
- printf("type on file ");
+ parallel_print("\n");
+ parallel_print("------------------\n");
+ parallel_print("sizeof(char) %u\n", sizeof(char) );
+ parallel_print("sizeof(short) %u\n", sizeof(short) );
+ parallel_print("sizeof(int) %u\n", sizeof(int) );
+ parallel_print("sizeof(long) %u\n", sizeof(long) );
+ parallel_print("<%s> ------------------\n", obj1);
+ parallel_print("type on file ");
print_type(f_tid1);
- printf("\n");
- printf("size on file %u\n", f_size1 );
+ parallel_print("\n");
+ parallel_print("size on file %u\n", f_size1 );
- printf("type on memory ");
+ parallel_print("type on memory ");
print_type(m_tid1);
- printf("\n");
- printf("size on memory %u\n", m_size1 );
+ parallel_print("\n");
+ parallel_print("size on memory %u\n", m_size1 );
- printf("<%s> ------------------\n", obj2);
- printf("type on file ");
+ parallel_print("<%s> ------------------\n", obj2);
+ parallel_print("type on file ");
print_type(f_tid2);
- printf("\n");
- printf("size on file %u\n", f_size2 );
+ parallel_print("\n");
+ parallel_print("size on file %u\n", f_size2 );
- printf("type on memory ");
+ parallel_print("type on memory ");
print_type(m_tid2);
- printf("\n");
- printf("size on memory %u\n", m_size2 );
- printf("\n");
+ parallel_print("\n");
+ parallel_print("size on memory %u\n", m_size2 );
+ parallel_print("\n");
}
#endif /* H5DIFF_DEBUG */
diff --git a/vms/build.com b/vms/build.com
index f65a45b..c1de293 100644
--- a/vms/build.com
+++ b/vms/build.com
@@ -17,7 +17,7 @@ $!
$! This file builds C, Frtran, C++ HDF5 librraies and runs the tests
$! Specify location of the top HDF5 source directory
$
-$ hdf5top == "sys$sysusers:[pourmale.hdf5]"
+$ hdf5top == "sys$sysusers:[pourmal.hdf5]"
$ len = F$LENGTH(hdf5top)
$ tmp = F$EXTRACT(0, len-1, hdf5top)
$ hdf5vms = tmp + ".VMS]"
diff --git a/vms/make.com b/vms/make.com
index 224e095..a5d0f10 100644
--- a/vms/make.com
+++ b/vms/make.com
@@ -36,15 +36,15 @@ $ copy [.tools.testfiles]*.ddl [-.tools.testfiles]
$!
$! Define location of ZLIB library. If you do not have it on your system, download
$! source code from http://www.zlib.net/, build and install on your system
-$ define zlib_dir sys$sysusers:[pourmale.zlib-1_2_3]
-$! define zlib_dir sys$sysusers:[pourmale.zlib-1_2_3-ieee]
+$ define zlib_dir sys$sysusers:[pourmal.zlib-1_2_3]
+$! define zlib_dir sys$sysusers:[pourmal.zlib-1_2_3-ieee]
$!
$! Set up compilation flags here
$! Do not remove define=H5_VMS and standard=strict_ansi qualifiers.
$!
-$ ccopt == "/float=ieee_float/define=H5_VMS/debug/nooptimize/include=zlib_dir"
-$ fcopt == "/float=ieee_float/define=H5_VMS/debug/nooptimize/include=zlib_dir"
-$ cxxopt == "/float=ieee_float/define=H5_VMS/debug/nooptimize/"+-
+$ ccopt == "/float=ieee_float/define=(_LARGEFILE,H5_VMS)/debug/nooptimize/include=zlib_dir"
+$ fcopt == "/float=ieee_float/define=(_LARGEFILE,H5_VMS)/debug/nooptimize/include=zlib_dir"
+$ cxxopt == "/float=ieee_float/define=(_LARGEFILE,H5_VMS)/debug/nooptimize/"+-
"standard=strict_ansi/include=zlib_dir"
$!
$!
diff --git a/vms/src/h5pubconf.h b/vms/src/h5pubconf.h
index fd9393e..3991ad3 100644
--- a/vms/src/h5pubconf.h
+++ b/vms/src/h5pubconf.h
@@ -12,16 +12,25 @@
* http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have *
* access to either file, you may request a copy from help@hdfgroup.org. *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-/* src/H5config.h. Generated by configure. */
+/* src/H5config.h. Generated from H5config.h.in by configure. */
/* src/H5config.h.in. Generated from configure.in by autoheader. */
+/* Define if your system generates wrong code for log2 routine. */
+/* #undef H5_BAD_LOG2_CODE_GENERATED */
+
+/* Define if the memory buffers being written to disk should be cleared before
+ writing. */
+#define H5_CLEAR_MEMORY 1
+
/* Define if your system can handle converting denormalized floating-point
values. */
#define H5_CONVERT_DENORMAL_FLOAT 1
-/* Define if your system can convert long double to unsigned int values
- correctly. */
-#define H5_CV_LDOUBLE_TO_UINT_WORKS 1
+/* Define if C++ compiler recognizes offsetof */
+#define H5_CXX_HAVE_OFFSETOF 1
+
+/* Define the default virtual file driver to compile */
+#define H5_DEFAULT_VFD H5FD_SEC2
/* Define if `dev_t' is a scalar */
#define H5_DEV_T_IS_SCALAR 1
@@ -40,9 +49,13 @@
/* As FC_FUNC, but for C identifiers containing underscores. */
/* #undef H5_FC_FUNC_ */
-/* Define if your system roundup accurately convert floating-point to unsigned
- long long values. */
-#define H5_FP_TO_ULLONG_BOTTOM_BIT_WORKS 1
+/* Define if your system can handle overflow converting floating-point to
+ integer values. */
+#define H5_FP_TO_INTEGER_OVERFLOW_WORKS 1
+
+/* Define if your system roundup accurately converting floating-point to
+ unsigned long long values. */
+#define H5_FP_TO_ULLONG_ACCURATE 1
/* Define if your system has right maximum convert floating-point to unsigned
long long values. */
@@ -51,15 +64,35 @@
/* Define if gettimeofday() populates the tz pointer passed in */
#define H5_GETTIMEOFDAY_GIVES_TZ 1
+/* Define to 1 if you have the `alarm' function. */
+#define H5_HAVE_ALARM 1
+
/* Define if the __attribute__(()) extension is present */
-/*#define H5_HAVE_ATTRIBUTE a 1 */
+/* #define H5_HAVE_ATTRIBUTE 1 */
/* Define to 1 if you have the `BSDgettimeofday' function. */
/* #undef H5_HAVE_BSDGETTIMEOFDAY */
+/* Define if the compiler understands C99 designated initialization of structs
+ and unions */
+#define H5_HAVE_C99_DESIGNATED_INITIALIZER 1
+
+/* Define if the compiler understands the __func__ keyword */
+#define H5_HAVE_C99_FUNC 1
+
+/* Define if the function stack tracing code is to be compiled in */
+/* #undef H5_HAVE_CODESTACK */
+
+/* Define to 1 if you have the declaration of `tzname', and to 0 if you don't.
+ */
+/* #undef H5_HAVE_DECL_TZNAME */
+
/* Define to 1 if you have the `difftime' function. */
#define H5_HAVE_DIFFTIME 1
+/* Define if the direct I/O virtual file driver should be compiled */
+/* #undef H5_HAVE_DIRECT */
+
/* Define to 1 if you have the <dlfcn.h> header file. */
#define H5_HAVE_DLFCN_H 1
@@ -67,7 +100,7 @@
/* #undef H5_HAVE_DMALLOC_H */
/* Define to 1 if you have the <features.h> header file. */
-/*EIP #define H5_HAVE_FEATURES_H */
+/* #define H5_HAVE_FEATURES_H 1 */
/* Define if support for deflate (zlib) filter is enabled */
#define H5_HAVE_FILTER_DEFLATE 1
@@ -88,7 +121,7 @@
/* #undef H5_HAVE_FILTER_SZIP */
/* Define to 1 if you have the `fork' function. */
-/*#undefine H5_HAVE_FORK */
+/* #define H5_HAVE_FORK 1 */
/* Define to 1 if you have the `frexpf' function. */
#define H5_HAVE_FREXPF 1
@@ -99,18 +132,20 @@
/* Define to 1 if you have the `fseek64' function. */
/* #undef H5_HAVE_FSEEK64 */
-/* Define if the compiler understands C99 designated initialization of structs
- and unions */
-#define H5_HAVE_C99_DESIGNATED_INITIALIZER 1
+/* Define to 1 if you have the `fseeko' function. */
+#define H5_HAVE_FSEEKO 1
-/* Define if the compiler understands the __func__ keyword */
-#define H5_HAVE_C99_FUNC 1
+/* Define to 1 if you have the `fstat64' function. */
+/* #define H5_HAVE_FSTAT64 1 */
-/* Define if the function stack tracing code is to be compiled in */
-/*#define H5_HAVE_CODESTACK 1*/
+/* Define to 1 if you have the `ftello' function. */
+#define H5_HAVE_FTELLO 1
-/* Define if the compiler understand the __FUNCTION__ keyword */
-/* EIP #define H5_HAVE_FUNCTION 1*/
+/* Define to 1 if you have the `ftruncate64' function. */
+/* #define H5_HAVE_FTRUNCATE64 1 */
+
+/* Define if the compiler understands the __FUNCTION__ keyword */
+/* #define H5_HAVE_FUNCTION 1 */
/* Define to 1 if you have the `GetConsoleScreenBufferInfo' function. */
/* #undef H5_HAVE_GETCONSOLESCREENBUFFERINFO */
@@ -119,10 +154,10 @@
#define H5_HAVE_GETHOSTNAME 1
/* Define to 1 if you have the `getpwuid' function. */
-/*#define H5_HAVE_GETPWUID 1*/
+/* #define H5_HAVE_GETPWUID 1 */
/* Define to 1 if you have the `getrusage' function. */
-/*EIP #define H5_HAVE_GETRUSAGE 1*/
+/* #define H5_HAVE_GETRUSAGE 1 */
/* Define to 1 if you have the `gettextinfo' function. */
/* #undef H5_HAVE_GETTEXTINFO */
@@ -167,32 +202,32 @@
/* Define to 1 if you have the `mpi' library (-lmpi). */
/* #undef H5_HAVE_LIBMPI */
+/* Define to 1 if you have the `mpich' library (-lmpich). */
+/* #undef H5_HAVE_LIBMPICH */
+
/* Define to 1 if you have the `mpio' library (-lmpio). */
/* #undef H5_HAVE_LIBMPIO */
/* Define to 1 if you have the `nsl' library (-lnsl). */
/* #undef H5_HAVE_LIBNSL */
-/* Define to 1 if you have the `pdb' library (-lpdb). */
-/* #undef H5_HAVE_LIBPDB */
-
/* Define to 1 if you have the `pthread' library (-lpthread). */
/* #undef H5_HAVE_LIBPTHREAD */
-/* Define to 1 if you have the `silo' library (-lsilo). */
-/* #undef H5_HAVE_LIBSILO */
+/* Define to 1 if you have the `socket' library (-lsocket). */
+/* #undef H5_HAVE_LIBSOCKET */
/* Define to 1 if you have the `sz' library (-lsz). */
/* #undef H5_HAVE_LIBSZ */
/* Define to 1 if you have the `z' library (-lz). */
-/* #undefine H5_HAVE_LIBZ*/
+/* #define H5_HAVE_LIBZ 1 */
/* Define to 1 if you have the `longjmp' function. */
#define H5_HAVE_LONGJMP 1
/* Define to 1 if you have the `lseek64' function. */
-/*#define H5_HAVE_LSEEK64 1*/
+/* #define H5_HAVE_LSEEK64 1 */
/* Define to 1 if you have the <memory.h> header file. */
#define H5_HAVE_MEMORY_H 1
@@ -203,27 +238,27 @@
/* Define to 1 if you have the <mpe.h> header file. */
/* #undef H5_HAVE_MPE_H */
+/* Define if MPI_File_get_size works correctly */
+/* #undef H5_HAVE_MPI_GET_SIZE */
+
/* Define if `MPI_Comm_c2f' and `MPI_Comm_f2c' exists */
/* #undef H5_HAVE_MPI_MULTI_LANG_Comm */
/* Define if `MPI_Info_c2f' and `MPI_Info_f2c' exists */
/* #undef H5_HAVE_MPI_MULTI_LANG_Info */
-/* Define to 1 if you have the <netinet/tcp.h> header file. */
-#define H5_HAVE_NETINET_TCP_H 1
-
/* Define if we have parallel support */
/* #undef H5_HAVE_PARALLEL */
-/* Define to 1 if you have the <pdb.h> header file. */
-/* #undef H5_HAVE_PDB_H */
-
/* Define to 1 if you have the <pthread.h> header file. */
/* #undef H5_HAVE_PTHREAD_H */
/* Define to 1 if you have the `random' function. */
#define H5_HAVE_RANDOM 1
+/* Define to 1 if you have the `rand_r' function. */
+/* #define H5_HAVE_RAND_R 1 */
+
/* Define to 1 if you have the <setjmp.h> header file. */
#define H5_HAVE_SETJMP_H 1
@@ -233,26 +268,29 @@
/* Define to 1 if you have the `sigaction' function. */
#define H5_HAVE_SIGACTION 1
+/* Define to 1 if you have the `siglongjmp' function. */
+#define H5_HAVE_SIGLONGJMP 1
+
/* Define to 1 if you have the `signal' function. */
#define H5_HAVE_SIGNAL 1
/* Define to 1 if you have the `snprintf' function. */
#define H5_HAVE_SNPRINTF 1
-/* Define if `socklen_t' is defined */
-#define H5_HAVE_SOCKLEN_T 1
-
/* Define to 1 if you have the `srandom' function. */
#define H5_HAVE_SRANDOM 1
+/* Define to 1 if you have the `stat64' function. */
+/* #define H5_HAVE_STAT64 1 */
+
/* Define if `struct stat' has the `st_blocks' field */
-/* #undef H5_HAVE_STAT_ST_BLOCKS */
+/* #define H5_HAVE_STAT_ST_BLOCKS 1 */
/* Define to 1 if you have the <stddef.h> header file. */
#define H5_HAVE_STDDEF_H 1
/* Define to 1 if you have the <stdint.h> header file. */
-/*EIP #define H5_HAVE_STDINT_H 1 */
+/* #define H5_HAVE_STDINT_H 1 */
/* Define to 1 if you have the <stdlib.h> header file. */
#define H5_HAVE_STDLIB_H 1
@@ -260,9 +298,6 @@
/* Define to 1 if you have the `strdup' function. */
#define H5_HAVE_STRDUP 1
-/* Define if the stream virtual file driver should be compiled */
-/*#define H5_HAVE_STREAM 1*/
-
/* Define to 1 if you have the <strings.h> header file. */
#define H5_HAVE_STRINGS_H 1
@@ -284,9 +319,6 @@
/* Define to 1 if you have the `system' function. */
#define H5_HAVE_SYSTEM 1
-/* Define to 1 if you have the <sys/filio.h> header file. */
-/* #undef H5_HAVE_SYS_FILIO_H */
-
/* Define to 1 if you have the <sys/fpu.h> header file. */
/* #undef H5_HAVE_SYS_FPU_H */
@@ -324,14 +356,17 @@
/* #undef H5_HAVE_THREADSAFE */
/* Define if `timezone' is a global variable */
-/* #undef H5_HAVE_TIMEZONE */
#define H5_HAVE_TIMEZONE 1
+
/* Define if the ioctl TIOCGETD is defined */
#define H5_HAVE_TIOCGETD 1
/* Define if the ioctl TIOGWINSZ is defined */
#define H5_HAVE_TIOCGWINSZ 1
+/* Define to 1 if you have the `tmpfile' function. */
+#define H5_HAVE_TMPFILE 1
+
/* Define if `tm_gmtoff' is a member of `struct tm' */
#define H5_HAVE_TM_GMTOFF 1
@@ -347,17 +382,20 @@
#define H5_HAVE_UNISTD_H 1
/* Define to 1 if you have the `vasprintf' function. */
-/*#undefine H5_HAVE_VASPRINTF*/
+/* #define H5_HAVE_VASPRINTF 1 */
/* Define to 1 if you have the `vsnprintf' function. */
#define H5_HAVE_VSNPRINTF 1
/* Define to 1 if you have the `waitpid' function. */
-/*#undefine H5_HAVE_WAITPID */
+#define H5_HAVE_WAITPID 1
/* Define if your system has OpenVMS path name. This macro is added by hand. */
#define H5_HAVE_VMS_PATH 1
+/* Define if your system has window style path name. */
+/* #undef H5_HAVE_WINDOW_PATH */
+
/* Define to 1 if you have the <winsock.h> header file. */
/* #undef H5_HAVE_WINSOCK_H */
@@ -373,9 +411,45 @@
/* Define if `__tm_gmtoff' is a member of `struct tm' */
/* #undef H5_HAVE___TM_GMTOFF */
+/* Define if your system can't handle converting floating-point values to long
+ long. */
+/* #define H5_HW_FP_TO_LLONG_NOT_WORKS 1 */
+
+/* Define if HDF5's high-level library headers should be included in hdf5.h */
+#define H5_INCLUDE_HL 1
+
+/* Define if your system can accurately convert from integers to long double
+ values. */
+#define H5_INTEGER_TO_LDOUBLE_ACCURATE 1
+
+/* Define if your system can convert long double to integers accurately. */
+#define H5_LDOUBLE_TO_INTEGER_ACCURATE 1
+
+/* Define if your system can convert from long double to integer values. */
+#define H5_LDOUBLE_TO_INTEGER_WORKS 1
+
+/* Define if your system can convert long double to (unsigned) long long
+ values correctly. */
+#define H5_LDOUBLE_TO_LLONG_ACCURATE 1
+
+/* Define if your system can convert long double to unsigned int values
+ correctly. */
+#define H5_LDOUBLE_TO_UINT_ACCURATE 1
+
/* Define if your system can compile long long to floating-point casts. */
#define H5_LLONG_TO_FP_CAST_WORKS 1
+/* Define if your system can convert (unsigned) long long to long double
+ values correctly. */
+#define H5_LLONG_TO_LDOUBLE_CORRECT 1
+
+/* Define to the sub-directory in which libtool stores uninstalled libraries.
+ */
+#define H5_LT_OBJDIR ".libs/"
+
+/* Define if the metadata trace file code is to be compiled in */
+/* #undef H5_METADATA_TRACE_FILE */
+
/* Define if your system can handle complicated MPI derived datatype
correctly. */
/* #undef H5_MPI_COMPLEX_DERIVED_DATATYPE_WORKS */
@@ -384,11 +458,17 @@
2GB. */
/* #undef H5_MPI_FILE_SET_SIZE_BIG */
+/* Define if your system can handle special collective IO properly. */
+/* #undef H5_MPI_SPECIAL_COLLECTIVE_IO_WORKS */
+
/* Define if we can violate pointer alignment restrictions */
-/* #undef H5_NO_ALIGNMENT_RESTRICTIONS */
+#define H5_NO_ALIGNMENT_RESTRICTIONS 1
+
+/* Define if deprecated public API symbols are disabled */
+/* #undef H5_NO_DEPRECATED_SYMBOLS */
/* Define if shared writing must be disabled (CodeWarrior only) */
-#define H5_NO_SHARED_WRITING
+#define H5_NO_SHARED_WRITING 1
/* Name of package */
#define H5_PACKAGE "hdf5"
@@ -411,135 +491,122 @@
/* Width for printf() for type `long long' or `__int64', use `ll' */
#define H5_PRINTF_LL_WIDTH "ll"
-/* The size of a `char', as computed by sizeof. */
+/* The size of `char', as computed by sizeof. */
#define H5_SIZEOF_CHAR 1
-/* The size of a `double', as computed by sizeof. */
+/* The size of `double', as computed by sizeof. */
#define H5_SIZEOF_DOUBLE 8
-/* The size of a `float', as computed by sizeof. */
+/* The size of `float', as computed by sizeof. */
#define H5_SIZEOF_FLOAT 4
-/* The size of a `int', as computed by sizeof. */
+/* The size of `int', as computed by sizeof. */
#define H5_SIZEOF_INT 4
-/* The size of a `int16_t', as computed by sizeof. */
+/* The size of `int16_t', as computed by sizeof. */
#define H5_SIZEOF_INT16_T 2
-/* The size of a `int32_t', as computed by sizeof. */
+/* The size of `int32_t', as computed by sizeof. */
#define H5_SIZEOF_INT32_T 4
-/* The size of a `int64_t', as computed by sizeof. */
+/* The size of `int64_t', as computed by sizeof. */
#define H5_SIZEOF_INT64_T 8
-/* The size of a `int8_t', as computed by sizeof. */
+/* The size of `int8_t', as computed by sizeof. */
#define H5_SIZEOF_INT8_T 1
-/* The size of a `int_fast16_t', as computed by sizeof. */
-/*#define H5_SIZEOF_INT_FAST16_T 4 */
+/* The size of `int_fast16_t', as computed by sizeof. */
+/* #define H5_SIZEOF_INT_FAST16_T 4 */
-/* The size of a `int_fast32_t', as computed by sizeof. */
-/*#define H5_SIZEOF_INT_FAST32_T 4*/
+/* The size of `int_fast32_t', as computed by sizeof. */
+/* #define H5_SIZEOF_INT_FAST32_T 4 */
-/* The size of a `int_fast64_t', as computed by sizeof. */
-/*#define H5_SIZEOF_INT_FAST64_T 8*/
+/* The size of `int_fast64_t', as computed by sizeof. */
+/* #define H5_SIZEOF_INT_FAST64_T 8 */
-/* The size of a `int_fast8_t', as computed by sizeof. */
-/*#define H5_SIZEOF_INT_FAST8_T 1*/
+/* The size of `int_fast8_t', as computed by sizeof. */
+/* #define H5_SIZEOF_INT_FAST8_T 1 */
-/* The size of a `int_least16_t', as computed by sizeof. */
-/*#define H5_SIZEOF_INT_LEAST16_T 2*/
+/* The size of `int_least16_t', as computed by sizeof. */
+/* #define H5_SIZEOF_INT_LEAST16_T 2 */
-/* The size of a `int_least32_t', as computed by sizeof. */
-/*#define H5_SIZEOF_INT_LEAST32_T 4*/
+/* The size of `int_least32_t', as computed by sizeof. */
+/* #define H5_SIZEOF_INT_LEAST32_T 4 */
-/* The size of a `int_least64_t', as computed by sizeof. */
-/*#define H5_SIZEOF_INT_LEAST64_T 8*/
+/* The size of `int_least64_t', as computed by sizeof. */
+/* #define H5_SIZEOF_INT_LEAST64_T 8 */
-/* The size of a `int_least8_t', as computed by sizeof. */
-/*#define H5_SIZEOF_INT_LEAST8_T 1*/
+/* The size of `int_least8_t', as computed by sizeof. */
+/* #define H5_SIZEOF_INT_LEAST8_T 1 */
-/* The size of a `long', as computed by sizeof. */
+/* The size of `long', as computed by sizeof. */
#define H5_SIZEOF_LONG 4
-/* The size of a `long double', as computed by sizeof. */
+/* The size of `long double', as computed by sizeof. */
#define H5_SIZEOF_LONG_DOUBLE 16
-/* The size of a `long long', as computed by sizeof. */
+/* The size of `long long', as computed by sizeof. */
#define H5_SIZEOF_LONG_LONG 8
-/* The size of a `off_t', as computed by sizeof. */
-#define H5_SIZEOF_OFF_T 4
+/* The size of `off64_t', as computed by sizeof. */
+/* #define H5_SIZEOF_OFF64_T 8 */
+
+/* The size of `off_t', as computed by sizeof. */
+#define H5_SIZEOF_OFF_T 8
-/* The size of a `short', as computed by sizeof. */
+/* The size of `short', as computed by sizeof. */
#define H5_SIZEOF_SHORT 2
-/* The size of a `size_t', as computed by sizeof. */
+/* The size of `size_t', as computed by sizeof. */
#define H5_SIZEOF_SIZE_T 4
-/* The size of a `ssize_t', as computed by sizeof. */
+/* The size of `ssize_t', as computed by sizeof. */
#define H5_SIZEOF_SSIZE_T 4
-/* The size of a `uint16_t', as computed by sizeof. */
+/* The size of `uint16_t', as computed by sizeof. */
#define H5_SIZEOF_UINT16_T 2
-/* The size of a `uint32_t', as computed by sizeof. */
-#define H5_SIZEOF_UINT32_T 4
+/* The size of `uint32_t', as computed by sizeof. */
+#define H5_SIZEOF_UINT32_T 4
-/* The size of a `uint64_t', as computed by sizeof. */
+/* The size of `uint64_t', as computed by sizeof. */
#define H5_SIZEOF_UINT64_T 8
-/* The size of a `uint8_t', as computed by sizeof. */
+/* The size of `uint8_t', as computed by sizeof. */
#define H5_SIZEOF_UINT8_T 1
-/* The size of a `uint_fast16_t', as computed by sizeof. */
-/*#define H5_SIZEOF_UINT_FAST16_T 4*/
+/* The size of `uint_fast16_t', as computed by sizeof. */
+/* #define H5_SIZEOF_UINT_FAST16_T 4 */
-/* The size of a `uint_fast32_t', as computed by sizeof. */
-/*#define H5_SIZEOF_UINT_FAST32_T 4*/
+/* The size of `uint_fast32_t', as computed by sizeof. */
+/* #define H5_SIZEOF_UINT_FAST32_T 4 */
-/* The size of a `uint_fast64_t', as computed by sizeof. */
-/*#define H5_SIZEOF_UINT_FAST64_T 8 */
+/* The size of `uint_fast64_t', as computed by sizeof. */
+/* #define H5_SIZEOF_UINT_FAST64_T 8 */
-/* The size of a `uint_fast8_t', as computed by sizeof. */
-/*#define H5_SIZEOF_UINT_FAST8_T 1*/
+/* The size of `uint_fast8_t', as computed by sizeof. */
+/* #define H5_SIZEOF_UINT_FAST8_T 1 */
-/* The size of a `uint_least16_t', as computed by sizeof. */
-/*#define H5_SIZEOF_UINT_LEAST16_T 2 */
+/* The size of `uint_least16_t', as computed by sizeof. */
+/* #define H5_SIZEOF_UINT_LEAST16_T 2 */
-/* The size of a `uint_least32_t', as computed by sizeof. */
-/*#define H5_SIZEOF_UINT_LEAST32_T 4*/
+/* The size of `uint_least32_t', as computed by sizeof. */
+/* #define H5_SIZEOF_UINT_LEAST32_T 4 */
-/* The size of a `uint_least64_t', as computed by sizeof. */
-/*#define H5_SIZEOF_UINT_LEAST64_T 8 */
+/* The size of `uint_least64_t', as computed by sizeof. */
+/* #define H5_SIZEOF_UINT_LEAST64_T 8 */
-/* The size of a `uint_least8_t', as computed by sizeof. */
-/*#define H5_SIZEOF_UINT_LEAST8_T 1*/
+/* The size of `uint_least8_t', as computed by sizeof. */
+/* #define H5_SIZEOF_UINT_LEAST8_T 1 */
-/* The size of a `__int64', as computed by sizeof. */
+/* The size of `__int64', as computed by sizeof. */
#define H5_SIZEOF___INT64 0
/* Define to 1 if you have the ANSI C header files. */
#define H5_STDC_HEADERS 1
-/* Define if your system can accurately convert from integers to long double
- values. */
-#define H5_INTEGER_TO_LDOUBLE_ACCURATE 1
-
-/* Define if your system can convert long double to integers accurately. */
-#define H5_LDOUBLE_TO_INTEGER_ACCURATE 1
-
-/* Define if your system can accurately convert from long double to integer
- values. */
-#define H5_LDOUBLE_TO_INTEGER_WORKS 1
-
-/* Define if your system can convert long double to unsigned int values
- correctly. */
-#define H5_LDOUBLE_TO_UINT_ACCURATE 1
-
-/* Define if your system can accurately convert unsigned (long) long values to
- floating-point values. */
-#define H5_ULONG_TO_FP_BOTTOM_BIT_WORKS 1
+/* Define if strict file format checks are enabled */
+/* #define H5_STRICT_FORMAT_CHECKS 1 */
/* Define if your system supports pthread_attr_setscope(&attribute,
PTHREAD_SCOPE_SYSTEM) call. */
@@ -559,6 +626,18 @@
correct precision. */
#define H5_ULLONG_TO_LDOUBLE_PRECISION 1
+/* Define if your system can accurately convert unsigned (long) long values to
+ floating-point values. */
+#define H5_ULONG_TO_FP_BOTTOM_BIT_ACCURATE 1
+
+/* Define using v1.6 public API symbols by default */
+/* #define H5_USE_16_API_DEFAULT 1 */
+
+/* Define if a memory checking tool will be used on the library, to cause
+ library to be very picky about memory operations and also disable the
+ internal free list manager code. */
+/* #undef H5_USING_MEMCHECKER */
+
/* Version number of package */
#define H5_VERSION "1.9.29"
@@ -566,6 +645,12 @@
don't fit into size allowed */
#define H5_VSNPRINTF_WORKS 1
+/* Data accuracy is prefered to speed during data conversions */
+#define H5_WANT_DATA_ACCURACY 1
+
+/* Check exception handling functions during data conversions */
+#define H5_WANT_DCONV_EXCEPTION 1
+
/* Define to 1 if your processor stores words with the most significant byte
first (like Motorola and SPARC, unlike Intel and VAX). */
/* #undef H5_WORDS_BIGENDIAN */
@@ -579,7 +664,7 @@
/* #undef H5_inline */
#endif
-/* Define to `long' if <sys/types.h> does not define. */
+/* Define to `long int' if <sys/types.h> does not define. */
/* #undef H5_off_t */
/* Define to `unsigned long' if <sys/types.h> does not define. */
@@ -589,6 +674,3 @@
/* #undef H5_ssize_t */
#define H5_HAVE_FILE_VERSIONS 1
#define H5_CANNOT_OPEN_TWICE 1
-#define H5_WANT_DATA_ACCURACY 1
-#define H5_WANT_DCONV_EXCEPTION 1
-#define H5_DEFAULT_VFD H5FD_SEC2
diff --git a/vms/src/make.com b/vms/src/make.com
index abcaf1e..3dcecf1 100644
--- a/vms/src/make.com
+++ b/vms/src/make.com
@@ -2,11 +2,6 @@ $!#
$!# Copyright by The HDF Group.
$!# Copyright by the Board of Trustees of the University of Illinois.
$!# All rights reserved.
-$!#
-$!# This file is part of HDF5. The full HDF5 copyright notice, including
-$!# terms governing use, modification, and redistribution, is contained in
-$!# the files COPYING and Copyright.html. COPYING can be found at the root
-$!# of the source code distribution tree; Copyright.html can be found at the
$!# root level of an installed copy of the electronic HDF5 document set and
$!# is linked from the top-level documents page. It can also be found at
$!# http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have
@@ -16,7 +11,12 @@ $! Makefile for VMS systems.
$!
$! Make HDF5 library
$!
-$! ccopt = "/float=ieee_float/define=H5_VMS"
+$! The next two lines should be uncommented only when building by hand in the
+$! current directory. Use build.com in the vms directory to build
+$! the distribution. Make sure that location of the zlib library is correct.
+$!
+$! define zlib_dir sys$sysusers:[pourmal.zlib-1_2_3]
+$! ccopt = "/float=ieee_float/define=(_LARGEFILE,H5_VMS)/include=zlib_dir"
$ ccc := cc 'ccopt
$ ccc h5detect.c
$ link h5detect
@@ -29,39 +29,34 @@ $ type sys$input
Creating HDF5 library
$!
$ cobj= "H5, H5checksum, H5dbg, H5system, H5timer, H5trace,"+-
- "H5A, H5Abtree2, H5Adense, H5Adeprec, H5Aint, H5Atest, H5AC, H5B, H5B2, H5B2cache,"+-
- "H5Bcache, H5B2dbg, H5B2test, H5B2int, H5B2stat, H5C, H5CS,"+-
- "H5D, H5Dcontig, H5Dcompact, H5Ddbg, H5Ddeprec,"+-
- "H5Defl, H5Dio, H5Dint, H5Distore, H5Dfill, H5Doh, H5Dmpio, H5Dselect, H5Dtest ,"+-
- "H5E, H5Edeprec, H5Eint, H5F, H5Fdbg, H5Fmount, H5Fsfile, H5Fsuper, H5Ftest, H5FD, H5FDcore,"+-
- "H5FDfamily, H5FDlog, H5FDmpi, H5FDmpio,"+-
- "H5FDmpiposix, H5FDmulti, H5FDsec2, H5FDspace, H5FDstdio,"+-
- "H5FDdirect, H5FL, H5FO, H5Ffake,"+-
- "H5FS, H5FScache, H5FSdbg, H5FSsection,"+-
- "H5G, H5Gcompact, H5Gdeprec, H5Gent, H5Gint, H5Glink, H5Gloc, H5Gname, H5Gnode, H5Gstab,"+-
- "H5Gdense, H5Gbtree2,"+-
- "H5Gobj, H5Goh, H5Gtest, H5Gtraverse,"+-
- "H5HF, H5HFbtree2, H5HFcache, H5HFdbg, H5HFman, H5HFtest, H5HFstat,"+-
- "H5HFdblock, H5HFdtable, H5HFhuge, H5HFhdr, H5HFiblock,"+-
- "H5HFiter, H5HFsection, H5HFspace, H5HFtiny,"+-
- "H5HG, H5HGdbg, H5HL, H5HLdbg, H5HP, H5I, H5MF, H5MM,"+-
- "H5MP, H5MPtest,H5L, H5Lexternal, H5O, H5Oalloc, H5Oainfo, H5Oattr, H5Oattribute,"+-
- "H5Obogus, H5Obtreek, H5Odrvinfo, H5Ocache,"+-
- "H5Ocont, H5Ocopy, H5Odbg, H5Odtype, H5Oefl, H5Ofill, H5Oginfo, H5Olayout,"+-
- "H5Olinfo, H5Olink, H5Omessage, H5Oshmesg, H5Omtime"
-$ cobj1= "H5Oname, H5Onull, H5Opline, H5Orefcount, H5Osdspace, H5Oshared, H5Ostab, H5Otest, H5Ounknown,"+-
- "H5P, H5Pint, H5Pacpl, H5Pdeprec, H5Pdcpl, H5Pdxpl, H5Pfapl, H5Pfcpl, H5Pfmpl, H5Pgcpl, H5Plapl,"+-
- "H5Pocpl, H5Pocpypl, H5Ptest, H5Pstrcpl, H5Plcpl,"+-
- "H5R, H5Rdeprec, H5RC,"+-
- "H5RS, H5S, H5Sall, H5Sdbg, H5Shyper, H5Smpio, H5Snone, H5Spoint,"+-
- "H5Sselect, H5Stest,"+-
- "H5SL, H5SM, H5SMbtree2, H5SMcache, H5SMtest," +-
- "H5ST, H5T, H5Tarray, H5Tbit, H5Tcommit,"+-
- "H5Tcompound, H5Tconv, H5Tcset, H5Tdeprec, H5Tenum, H5Tfields, H5Tfixed,"+-
- "H5Tfloat, H5Tinit, H5Tnative, H5Tdbg, H5Toffset, H5Toh, H5Topaque, H5Torder,"+-
- "H5Tpad, H5Tprecis, H5Tstrpad, H5Tvisit, H5Tvlen, H5TS, H5V, H5WB, H5Z,"+-
- "H5Zdeflate, H5Zfletcher32, H5Znbit, H5Zshuffle, H5Zszip,"+-
- "H5Zscaleoffset, H5Ztrans"
+ "H5Abtree2, H5A, H5AC, H5Adense, H5Adeprec, H5Aint, H5Atest, H5B2, H5B2cache,"+-
+ "H5B2dbg, H5B2int, H5B2stat, H5B2test, H5B, H5Bcache, H5Bdbg, H5C, H5CS,"+-
+ "H5Dbtree, H5D, H5Dchunk, H5Dcompact, H5Dcontig, H5Ddbg, H5Ddeprec,"+-
+ "H5Defl, H5Dfill, H5Dint, H5Dio, H5Dmpio, H5Doh, H5Dscatgath, H5Dselect, H5Dtest,"+-
+ "H5EA, H5EAcache, H5EAdbg, H5EAdblkpage, H5EAdblock, H5EAhdr, H5EAiblock, H5EAint,"+-
+ "H5EAsblock, H5EAstat, H5EAtest, H5E, H5Edeprec, H5Eint,"+-
+ "H5Faccum, H5F, H5Fdbg, H5FD, H5FDcore, H5FDdirect, H5FDfamily, H5FDint, H5FDlog, H5FDmpi,"+-
+ "H5FDmpio, H5FDmpiposix, H5FDmulti, H5FDsec2, H5FDspace, H5FDstdio, H5FDwindows,"+-
+ "H5Ffake, H5Fio, H5FL, H5Fmount, H5Fmpi, H5FO, H5Fquery, H5FS, H5FScache, H5FSdbg, H5Fsfile,"+-
+ "H5FSsection, H5FSstat, H5FStest, H5Fsuper, H5Ftest,"+-
+ "H5Gbtree2, H5G, H5Gcache, H5Gcompact, H5Gdense, H5Gdeprec, H5Gent, H5Gint, H5Glink, H5Gloc,"+-
+ "H5Gname, H5Gnode, H5Gobj, H5Goh, H5Gstab, H5Gtest, H5Gtraverse,"+-
+ "H5HFbtree2, H5HF, H5HFcache, H5HFdbg, H5HFdblock, H5HFdtable, H5HFhdr, H5HFhuge, H5HFiblock,"+-
+ "H5HFiter, H5HFman, H5HFsection, H5HFspace, H5HFstat, H5HFtest, H5HFtiny,"+-
+ "H5HG, H5HGcache, H5HGdbg, H5HL, H5HLcache, H5HLdbg, H5HP, H5I, H5L, H5Lexternal"
+$ cobj1= "H5MFaggr, H5MF, H5MFdbg, H5MFsection, H5MM,"+-
+ "H5MP, H5MPtest, H5Oainfo, H5Oalloc, H5Oattr, H5Oattribute, H5Obogus, H5Obtreek,"+-
+ "H5O, H5Ocache, H5Ocont, H5Ocopy, H5Odbg, H5Odrvinfo, H5Odtype, H5Oefl, H5Ofill, H5Oginfo,"+-
+ "H5Olayout, H5Olinfo, H5Olink, H5Omessage, H5Omtime, H5Oname, H5Onull, H5Opline, H5Orefcount,"+-
+ "H5Osdspace, H5Oshared, H5Oshmesg, H5Ostab, H5Otest, H5Ounknown,"+-
+ "H5Pacpl, H5P, H5Pdapl, H5Pdcpl, H5Pdeprec, H5Pdxpl, H5Pfapl, H5Pfcpl, H5Pfmpl, H5Pgcpl, H5Pint,"+-
+ "H5Plapl, H5Plcpl, H5Pocpl, H5Pocpypl, H5Pstrcpl, H5Ptest,"+-
+ "H5R, H5RC, H5Rdeprec, H5RS, H5Sall, H5S, H5Sdbg, H5Shyper, H5SL, H5SMbtree2, H5SM, H5SMcache,"+-
+ "H5Smpio, H5SMtest, H5Snone, H5Spoint, H5Sselect, H5ST, H5Stest,"+-
+ "H5Tarray, H5Tbit, H5T, H5Tcommit, H5Tcompound, H5Tconv, H5Tcset, H5Tdbg, H5Tdeprec, H5Tenum,"+-
+ "H5Tfields, H5Tfixed, H5Tfloat, H5Tinit, H5Tnative, H5Toffset, H5Toh, H5Topaque, H5Torder,"+-
+ "H5Tpad, H5Tprecis, H5TS, H5Tstrpad, H5Tvisit, H5Tvlen, H5V, H5WB, H5Z,"+-
+ "H5Zdeflate, H5Zfletcher32, H5Znbit, H5Zscaleoffset, H5Zshuffle, H5Zszip, H5Ztrans"
$!
$ ccc 'cobj
$ ccc 'cobj1
diff --git a/vms/test/check.com b/vms/test/check.com
index 888cb41..de1ef3c 100644
--- a/vms/test/check.com
+++ b/vms/test/check.com
@@ -24,195 +24,221 @@ $ type sys$input
------- Running testhdf5 -------
$ run testhdf5
$ type sys$input
-
-$ type sys$input
-------- Running lheap -------
-$ run lheap
-$ type sys$input
-
-$! type sys$input
-$!------- Running fheap -------
-$! run fheap
-$! type sys$input
$ type sys$input
-------- Running ohdr -------
-$ run ohdr
+------- Running app_ref -------
+$ run app_ref
$ type sys$input
-
+
$ type sys$input
-------- Running stab -------
-$ run stab
+------- Running big -------
+$ run big
$ type sys$input
-
+
$ type sys$input
-------- Running gheap -------
-$ run gheap
+------- Running bittests -------
+$ run bittests
$ type sys$input
-
+
$ type sys$input
------- Running btree2 -------
$ run btree2
$ type sys$input
-
+
+$ type sys$input
+------- Running cache_api -------
+$ run cache_api
+$ type sys$input
+
$ type sys$input
-------- Running cache -------
+------- Running cache -------
$ run cache
$ type sys$input
-
+
$ type sys$input
-------- Running cache_api -------
-$ run cache_api
+------- Running cache_common -------
+$ run cache_common
$ type sys$input
-
+
$ type sys$input
-------- Running pool -------
-$ run pool
+------- Running chunk_info -------
+$ run chunk_info
$ type sys$input
-
+
$ type sys$input
-------- Running hyperslab -------
-$ run hyperslab
+------- Running cmpd_dset -------
+$ run cmpd_dset
$ type sys$input
-
+
$ type sys$input
-------- Running istore -------
-$ run istore
+------- Running cross_read -------
+$ run cross_read
$ type sys$input
-
+
$ type sys$input
-------- Running bittest -------
-$ run bittests
+------- Running dangle -------
+$ run dangle
$ type sys$input
-
+
+$ type sys$input
+------- Running dsets -------
+$ run dsets
+$ type sys$input
+
$ type sys$input
------- Running dt_arith -------
$ run dt_arith
$ type sys$input
-
+
+$ type sys$input
+------- Running dtransform -------
+$ run dtransform
+$ type sys$input
+
$ type sys$input
------- Running dtypes -------
$ run dtypes
$ type sys$input
-
+
$ type sys$input
-------- Running dsets -------
-$ run dsets
+------- Running earray -------
+$ run earray
$ type sys$input
-
+
$ type sys$input
-------- Running cmpd_dset -------
-$ run cmpd_dset
+------- Running enum -------
+$ run enum
$ type sys$input
-
+
$ type sys$input
------- Running extend -------
$ run extend
$ type sys$input
-
+
$ type sys$input
------- Running external -------
$ run external
$ type sys$input
-
+
$ type sys$input
-------- Running objcopy -------
-$ run objcopy
+------- Running fheap -------
+$ run fheap
$ type sys$input
-
+
$ type sys$input
-------- Running links -------
-$ run links
+------- Running fillval -------
+$ run fillval
$ type sys$input
-
+
$ type sys$input
-------- Running unlink -------
-$ run unlink
+------- Running flush1 -------
+$ run flush1
$ type sys$input
-
+
$ type sys$input
-------- Running big -------
-$ run big
+------- Running flush2 -------
+$ run flush2
$ type sys$input
-
-$! type sys$input
-!------- Running mtime -------
-$! run mtime
-$! type sys$input
-
+
$ type sys$input
-------- Running fillval -------
-$ run fillval
+------- Running freespace -------
+$ run freespace
$ type sys$input
-
+
$ type sys$input
-------- Running fillval -------
-$ run fillval
+------- Running getname -------
+$ run getname
$ type sys$input
-
+
$ type sys$input
-------- Running mount -------
-$ run mount
+------- Running gheap -------
+$ run gheap
$ type sys$input
-
+
$ type sys$input
-------- Running flush1 -------
-$ run flush1
+------- Running hyperslab -------
+$ run hyperslab
$ type sys$input
-
+
$ type sys$input
-------- Running flush2 -------
-$ run flush2
+------- Running istore -------
+$ run istore
$ type sys$input
-
+
$ type sys$input
-------- Running enum -------
-$ run enum
+------- Running lheap -------
+$ run lheap
$ type sys$input
-
+
$ type sys$input
-------- Running set_extent -------
-$ run set_extent
+------- Running links -------
+$ run links
$ type sys$input
-
+
$ type sys$input
-------- Running ttsafe -------
-$ run ttsafe
+------- Running mf -------
+$ run mf
$ type sys$input
-
+
$ type sys$input
-------- Running getname -------
-$ run getname
+------- Running mount -------
+$ run mount
$ type sys$input
-
+
$ type sys$input
-------- Running vfd -------
-$ run vfd
+------- Running mtime -------
+$ run mtime
$ type sys$input
-
+
$ type sys$input
------- Running ntypes -------
$ run ntypes
$ type sys$input
-
+
$ type sys$input
-------- Running dangle -------
-$ run dangle
+------- Running objcopy -------
+$ run objcopy
$ type sys$input
-
+
$ type sys$input
-------- Running dtransform -------
-$ run dtransform
+------- Running ohdr -------
+$ run ohdr
$ type sys$input
-
+
+$ type sys$input
+------- Running pool -------
+$ run pool
+$ type sys$input
+
$ type sys$input
------- Running reserved -------
$ run reserved
$ type sys$input
-
+
$ type sys$input
-------- Running cross_read -------
-$ run cross_read
+------- Running set_extent -------
+$ run set_extent
+$ type sys$input
+
+$ type sys$input
+------- Running space_overflow -------
+$ run space_overflow
+$ type sys$input
+
+$ type sys$input
+------- Running stab -------
+$ run stab
+$ type sys$input
+
+$ type sys$input
+------- Running unlink -------
+$ run unlink
+$ type sys$input
+
$ type sys$input
+------- Running vfd -------
+$ run vfd
+$ type sys$input
+
------- Testing completed -------
$ exit
diff --git a/vms/test/make.com b/vms/test/make.com
index 4a55f1e..998b6f8 100644
--- a/vms/test/make.com
+++ b/vms/test/make.com
@@ -16,62 +16,47 @@ $! Makefile for VMS systems.
$!
$! Make HDF5 library tests
$!
-$! ccopt = "/float=ieee_float/define=H5_VMS"
-$
+$! The next two lines should be uncommented only when building by hand in the
+$! current directory. Use build.com in the vms directory to build
+$! the distribution. Make sure that location of the zlib library is correct.
+$! define zlib_dir sys$sysusers:[pourmal.zlib-1_2_3]
+$! ccopt = "/float=ieee_float/define=(_LARGEFILE,H5_VMS)/include=zlib_dir"
+$!
$ ccc := cc 'ccopt /include=([-.src])
$ type sys$input
Creating testhdf5
-$
-$ cobj= "h5test.c, testframe.c, testhdf5.c, tarray.c, tattr.c, tconfig.c, "+-
- "tchecksum.c,"+-
- "tfile.c, tgenprop.c, th5o.c, th5s.c, tcoords.c, theap.c, tid.c, titerate.c,"+-
- "tmeta.c, tmisc.c, ttime.c, trefer.c, trefstr.c,"+-
- "tselect.c, tsohm.c, tskiplist.c, ttst.c, tunicode.c, tvltypes.c,"+-
- "tvlstr.c, cache_common.c"
+$!
+$ cobj= "h5test.c, testframe.c, testhdf5.c, tarray.c, tattr.c, tchecksum.c, tconfig.c,"+-
+ "tcoords.c, tfile.c, tgenprop.c, th5o.c, th5s.c, theap.c, tid.c,"+-
+ "titerate.c, tmeta.c, tmisc.c, trefer.c, trefstr.c, tselect.c, tskiplist.c,"+-
+ "tsohm.c, ttime.c, ttst.c, tunicode.c, tvlstr.c, tvltypes.c, cache_common.c"
$!
$ ccc 'cobj
$ library/create/replace []libh5test h5test, testframe, cache_common
$ type sys$input
Creating libh5test
$ link testhdf5,tarray,tattr,tchecksum,tconfig, -
- tfile,tgenprop,th5o,th5s,tcoords,theap,tid,titerate, -
- tmeta,tmisc,ttime,trefer,trefstr, -
- tselect,tsohm,tskiplist,ttst,tunicode,tvltypes, -
- tvlstr, -
+ tcoords,tfile,tgenprop,th5o,th5s,theap,tid,titerate, -
+ tmeta,tmisc,trefer,trefstr, -
+ tselect,tskiplist,tsohm,ttime,ttst,tunicode,tvlstr,tvltypes, -
libh5test.olb/lib,[-.src]hdf5.olb/lib,zlib_dir:libz.olb/lib
$
-$!
$ type sys$input
- Creating lheap test
-$
-$ ccc lheap
-$ link lheap, -
+ Creating app_ref test
+$ ccc app_ref
+$ link app_ref, -
libh5test.olb/lib,[-.src]hdf5.olb/lib,zlib_dir:libz.olb/lib
$!
$ type sys$input
- Creating fheap test
-$
-$ ccc fheap
-$ link fheap, -
- libh5test.olb/lib,[-.src]hdf5.olb/lib,zlib_dir:libz.olb/lib
-$!
-$ type sys$input
- Creating ohdr test
-$ ccc ohdr
-
-$ link ohdr, -
- libh5test.olb/lib,[-.src]hdf5.olb/lib,zlib_dir:libz.olb/lib
-$!
-$ type sys$input
- Creating stab test
-$ ccc stab
-$ link stab, -
+ Creating big test
+$ ccc big
+$ link big, -
libh5test.olb/lib,[-.src]hdf5.olb/lib,zlib_dir:libz.olb/lib
$!
$ type sys$input
- Creating gheap test
-$ ccc gheap
-$ link gheap, -
+ Creating bittests test
+$ ccc bittests
+$ link bittests, -
libh5test.olb/lib,[-.src]hdf5.olb/lib,zlib_dir:libz.olb/lib
$!
$ type sys$input
@@ -79,7 +64,12 @@ $ type sys$input
$ ccc btree2
$ link btree2, -
libh5test.olb/lib,[-.src]hdf5.olb/lib,zlib_dir:libz.olb/lib
-
+$!
+$ type sys$input
+ Creating cache_api test
+$ ccc cache_api
+$ link cache_api, -
+ libh5test.olb/lib,[-.src]hdf5.olb/lib,zlib_dir:libz.olb/lib
$!
$ type sys$input
Creating cache test
@@ -88,33 +78,39 @@ $ link cache, -
libh5test.olb/lib,[-.src]hdf5.olb/lib,zlib_dir:libz.olb/lib
$!
$ type sys$input
- Creating cache_api test
-$ ccc cache_api
-$ link cache_api, -
+ Creating cache_common test
+$ ccc cache_common
+$ link cache_common, -
libh5test.olb/lib,[-.src]hdf5.olb/lib,zlib_dir:libz.olb/lib
$!
$ type sys$input
- Creating pool test
-$ ccc pool
-$ link pool, -
+ Creating chunk_info test
+$ ccc chunk_info
+$ link chunk_info, -
libh5test.olb/lib,[-.src]hdf5.olb/lib,zlib_dir:libz.olb/lib
$!
$ type sys$input
- Creating hyperslab test
-$ ccc hyperslab
-$ link hyperslab, -
+ Creating cmpd_dset test
+$ ccc cmpd_dset
+$ link cmpd_dset, -
libh5test.olb/lib,[-.src]hdf5.olb/lib,zlib_dir:libz.olb/lib
$!
$ type sys$input
- Creating istore test
-$ ccc istore
-$ link istore, -
+ Creating cross_read test
+$ ccc cross_read
+$ link cross_read, -
libh5test.olb/lib,[-.src]hdf5.olb/lib,zlib_dir:libz.olb/lib
$!
$ type sys$input
- Creating bittests test
-$ ccc bittests
-$ link bittests, -
+ Creating dangle test
+$ ccc dangle
+$ link dangle, -
+ libh5test.olb/lib,[-.src]hdf5.olb/lib,zlib_dir:libz.olb/lib
+$!
+$ type sys$input
+ Creating dsets tests
+$ ccc dsets
+$ link dsets, -
libh5test.olb/lib,[-.src]hdf5.olb/lib,zlib_dir:libz.olb/lib
$!
$ type sys$input
@@ -124,21 +120,39 @@ $ link dt_arith, -
libh5test.olb/lib,[-.src]hdf5.olb/lib,zlib_dir:libz.olb/lib
$!
$ type sys$input
+ Creating dtransform test
+$ ccc dtransform
+$ link dtransform, -
+ libh5test.olb/lib,[-.src]hdf5.olb/lib,zlib_dir:libz.olb/lib
+$!
+$ type sys$input
Creating dtypes test
$ ccc dtypes
$ link dtypes, -
libh5test.olb/lib,[-.src]hdf5.olb/lib,zlib_dir:libz.olb/lib
$!
$ type sys$input
- Creating dsets tests
-$ ccc dsets
-$ link dsets, -
+ Creating earray test
+$ ccc earray
+$ link earray, -
libh5test.olb/lib,[-.src]hdf5.olb/lib,zlib_dir:libz.olb/lib
$!
$ type sys$input
- Creating cmpd_dset test
-$ ccc cmpd_dset
-$ link cmpd_dset, -
+ Creating enum test
+$ ccc enum
+$ link enum, -
+ libh5test.olb/lib,[-.src]hdf5.olb/lib,zlib_dir:libz.olb/lib
+$!
+$ type sys$input
+ Creating err_compat test
+$ ccc err_compat
+$ link err_compat, -
+ libh5test.olb/lib,[-.src]hdf5.olb/lib,zlib_dir:libz.olb/lib
+$!
+$ type sys$input
+ Creating error_test test
+$ ccc error_test
+$ link error_test, -
libh5test.olb/lib,[-.src]hdf5.olb/lib,zlib_dir:libz.olb/lib
$!
$ type sys$input
@@ -154,87 +168,87 @@ $ link external, -
libh5test.olb/lib,[-.src]hdf5.olb/lib,zlib_dir:libz.olb/lib
$!
$ type sys$input
- Creating objcopy test
-$ ccc objcopy
-$ link objcopy, -
+ Creating fheap test
+$ ccc fheap
+$ link fheap, -
libh5test.olb/lib,[-.src]hdf5.olb/lib,zlib_dir:libz.olb/lib
$!
$ type sys$input
- Creating links test
-$ ccc links
-$ link links, -
+ Creating fillval test
+$ ccc fillval
+$ link fillval, -
libh5test.olb/lib,[-.src]hdf5.olb/lib,zlib_dir:libz.olb/lib
$!
$ type sys$input
- Creating unlink test
-$ ccc unlink
-$ link unlink, -
+ Creating flush1 test
+$ ccc flush1
+$ link flush1, -
libh5test.olb/lib,[-.src]hdf5.olb/lib,zlib_dir:libz.olb/lib
$!
$ type sys$input
- Creating big test
-$ ccc big
-$ link big, -
+ Creating flush2 test
+$ ccc flush2
+$ link flush2, -
libh5test.olb/lib,[-.src]hdf5.olb/lib,zlib_dir:libz.olb/lib
$!
$ type sys$input
- Creating mtime test
-$ ccc mtime
-$ link mtime, -
+ Creating freespace test
+$ ccc freespace
+$ link freespace, -
libh5test.olb/lib,[-.src]hdf5.olb/lib,zlib_dir:libz.olb/lib
$!
$ type sys$input
- Creating fillval test
-$ ccc fillval
-$ link fillval, -
+ Creating getname test
+$ ccc getname
+$ link getname, -
libh5test.olb/lib,[-.src]hdf5.olb/lib,zlib_dir:libz.olb/lib
$!
$ type sys$input
- Creating mount test
-$ ccc mount
-$ link mount, -
+ Creating gheap test
+$ ccc gheap
+$ link gheap, -
libh5test.olb/lib,[-.src]hdf5.olb/lib,zlib_dir:libz.olb/lib
$!
$ type sys$input
- Creating flush1 test
-$ ccc flush1
-$ link flush1, -
+ Creating hyperslab test
+$ ccc hyperslab
+$ link hyperslab, -
libh5test.olb/lib,[-.src]hdf5.olb/lib,zlib_dir:libz.olb/lib
$!
$ type sys$input
- Creating flush2 test
-$ ccc flush2
-$ link flush2, -
+ Creating istore test
+$ ccc istore
+$ link istore, -
libh5test.olb/lib,[-.src]hdf5.olb/lib,zlib_dir:libz.olb/lib
$!
$ type sys$input
- Creating enum test
-$ ccc enum
-$ link enum, -
+ Creating lheap test
+$ ccc lheap
+$ link lheap, -
libh5test.olb/lib,[-.src]hdf5.olb/lib,zlib_dir:libz.olb/lib
$!
$ type sys$input
- Creating set_extent test
-$ ccc set_extent
-$ link set_extent, -
+ Creating links test
+$ ccc links
+$ link links, -
libh5test.olb/lib,[-.src]hdf5.olb/lib,zlib_dir:libz.olb/lib
$!
$ type sys$input
- Creating ttsafe test
-$ ccc ttsafe
-$ link ttsafe, -
+ Creating mf test
+$ ccc mf
+$ link mf, -
libh5test.olb/lib,[-.src]hdf5.olb/lib,zlib_dir:libz.olb/lib
$!
$ type sys$input
- Creating getname test
-$ ccc getname
-$ link getname, -
+ Creating mount test
+$ ccc mount
+$ link mount, -
libh5test.olb/lib,[-.src]hdf5.olb/lib,zlib_dir:libz.olb/lib
$!
$ type sys$input
- Creating vfd test
-$ ccc vfd
-$ link vfd, -
+ Creating mtime test
+$ ccc mtime
+$ link mtime, -
libh5test.olb/lib,[-.src]hdf5.olb/lib,zlib_dir:libz.olb/lib
$!
$ type sys$input
@@ -244,15 +258,21 @@ $ link ntypes, -
libh5test.olb/lib,[-.src]hdf5.olb/lib,zlib_dir:libz.olb/lib
$!
$ type sys$input
- Creating dangle test
-$ ccc dangle
-$ link dangle, -
+ Creating objcopy test
+$ ccc objcopy
+$ link objcopy, -
libh5test.olb/lib,[-.src]hdf5.olb/lib,zlib_dir:libz.olb/lib
$!
$ type sys$input
- Creating dtransform test
-$ ccc dtransform
-$ link dtransform, -
+ Creating ohdr test
+$ ccc ohdr
+$ link ohdr, -
+ libh5test.olb/lib,[-.src]hdf5.olb/lib,zlib_dir:libz.olb/lib
+$!
+$ type sys$input
+ Creating pool test
+$ ccc pool
+$ link pool, -
libh5test.olb/lib,[-.src]hdf5.olb/lib,zlib_dir:libz.olb/lib
$!
$ type sys$input
@@ -262,9 +282,33 @@ $ link reserved, -
libh5test.olb/lib,[-.src]hdf5.olb/lib,zlib_dir:libz.olb/lib
$!
$ type sys$input
- Creating cross_read test
-$ ccc cross_read
-$ link cross_read, -
+ Creating set_extent test
+$ ccc set_extent
+$ link set_extent, -
+ libh5test.olb/lib,[-.src]hdf5.olb/lib,zlib_dir:libz.olb/lib
+$!
+$ type sys$input
+ Creating space_overflow test
+$ ccc space_overflow
+$ link space_overflow, -
+ libh5test.olb/lib,[-.src]hdf5.olb/lib,zlib_dir:libz.olb/lib
+$!
+$ type sys$input
+ Creating stab test
+$ ccc stab
+$ link stab, -
+ libh5test.olb/lib,[-.src]hdf5.olb/lib,zlib_dir:libz.olb/lib
+$!
+$ type sys$input
+ Creating unlink test
+$ ccc unlink
+$ link unlink, -
+ libh5test.olb/lib,[-.src]hdf5.olb/lib,zlib_dir:libz.olb/lib
+$!
+$ type sys$input
+ Creating vfd test
+$ ccc vfd
+$ link vfd, -
libh5test.olb/lib,[-.src]hdf5.olb/lib,zlib_dir:libz.olb/lib
$!
$ type sys$input