summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/H5B.c2
-rw-r--r--src/H5B2.c2
-rw-r--r--src/H5B2int.c10
-rw-r--r--src/H5Omessage.c272
-rw-r--r--src/H5Oshared.c36
5 files changed, 96 insertions, 226 deletions
diff --git a/src/H5B.c b/src/H5B.c
index 68827c0..0ad1de0 100644
--- a/src/H5B.c
+++ b/src/H5B.c
@@ -1248,7 +1248,7 @@ H5B_iterate (H5F_t *f, hid_t dxpl_id, const H5B_class_t *type, H5B_operator_t op
ret_value = (*op)(f, dxpl_id, key + (u * type->sizeof_nkey),
child[u], key + ((u + 1) * type->sizeof_nkey), udata);
if(ret_value < 0)
- HGOTO_ERROR(H5E_BTREE, H5E_CANTINIT, FAIL, "iterator function failed")
+ HERROR(H5E_BTREE, H5E_CANTLIST, "iterator function failed");
} /* end for */
} /* end for */
} /* end else */
diff --git a/src/H5B2.c b/src/H5B2.c
index c98e66e..dd95858 100644
--- a/src/H5B2.c
+++ b/src/H5B2.c
@@ -289,7 +289,7 @@ H5B2_iterate(H5F_t *f, hid_t dxpl_id, const H5B2_class_t *type, haddr_t addr,
if(root_ptr.node_nrec > 0) {
/* Iterate through nodes */
if((ret_value = H5B2_iterate_node(f, dxpl_id, bt2_shared, depth, &root_ptr, op, op_data)) < 0)
- HGOTO_ERROR(H5E_BTREE, H5E_CANTLIST, FAIL, "node iteration failed")
+ HERROR(H5E_BTREE, H5E_CANTLIST, "node iteration failed");
} /* end if */
done:
diff --git a/src/H5B2int.c b/src/H5B2int.c
index 186d40e..7dc463e 100644
--- a/src/H5B2int.c
+++ b/src/H5B2int.c
@@ -2170,14 +2170,14 @@ H5B2_iterate_node(H5F_t *f, hid_t dxpl_id, H5RC_t *bt2_shared, unsigned depth,
/* Allocate space for the native keys in memory */
if((native = H5FL_FAC_MALLOC(shared->node_info[depth].nat_rec_fac)) == NULL)
- HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed for B-tree internal native keys")
+ HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed for B-tree internal native keys")
/* Copy the native keys */
HDmemcpy(native, node_native, (shared->type->nrec_size * curr_node->node_nrec));
/* Unlock the node */
if(H5AC_unprotect(f, dxpl_id, curr_node_class, curr_node->addr, node, H5AC__NO_FLAGS_SET) < 0)
- HDONE_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, FAIL, "unable to release B-tree node")
+ HGOTO_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, FAIL, "unable to release B-tree node")
node = NULL;
/* Iterate through records, in order */
@@ -2185,20 +2185,20 @@ H5B2_iterate_node(H5F_t *f, hid_t dxpl_id, H5RC_t *bt2_shared, unsigned depth,
/* Descend into child node, if current node is an internal node */
if(depth > 0) {
if((ret_value = H5B2_iterate_node(f, dxpl_id, bt2_shared, (depth - 1), &(node_ptrs[u]), op, op_data)) < 0)
- HGOTO_ERROR(H5E_BTREE, H5E_CANTLIST, FAIL, "node iteration failed")
+ HERROR(H5E_BTREE, H5E_CANTLIST, "node iteration failed");
} /* end if */
/* Make callback for current record */
if(!ret_value) {
if((ret_value = (op)(H5B2_NAT_NREC(native, shared, u), op_data)) < 0)
- HGOTO_ERROR(H5E_BTREE, H5E_CANTLIST, FAIL, "iterator function failed")
+ HERROR(H5E_BTREE, H5E_CANTLIST, "iterator function failed");
} /* end if */
} /* end for */
/* Descend into last child node, if current node is an internal node */
if(!ret_value && depth > 0) {
if((ret_value = H5B2_iterate_node(f, dxpl_id, bt2_shared, (depth - 1), &(node_ptrs[u]), op, op_data)) < 0)
- HGOTO_ERROR(H5E_BTREE, H5E_CANTLIST, FAIL, "node iteration failed")
+ HERROR(H5E_BTREE, H5E_CANTLIST, "node iteration failed");
} /* end if */
done:
diff --git a/src/H5Omessage.c b/src/H5Omessage.c
index 27c0c02..208d078 100644
--- a/src/H5Omessage.c
+++ b/src/H5Omessage.c
@@ -80,12 +80,9 @@ typedef union {
/* Local Prototypes */
/********************/
-static herr_t H5O_msg_append_real(H5F_t *f, hid_t dxpl_id, H5O_t *oh,
- const H5O_msg_class_t *type, unsigned mesg_flags, unsigned update_flags,
- const void *mesg, unsigned * oh_flags_ptr);
-static herr_t H5O_msg_write_real(H5O_loc_t *loc, const H5O_msg_class_t *type,
- unsigned overwrite, unsigned flags, unsigned update_flags, const void *mesg,
- hid_t dxpl_id);
+static herr_t H5O_msg_write_real(H5F_t *f, H5O_t *oh, const H5O_msg_class_t *type,
+ unsigned overwrite, unsigned mesg_flags, unsigned update_flags,
+ const void *mesg, unsigned *oh_flags_ptr, hid_t dxpl_id);
static herr_t H5O_msg_reset_real(const H5O_msg_class_t *type, void *native);
static void *H5O_msg_copy_real(const H5O_msg_class_t *type, const void *mesg,
void *dst);
@@ -95,15 +92,13 @@ static herr_t H5O_msg_remove_cb(H5O_t *oh, H5O_mesg_t *mesg/*in,out*/,
unsigned sequence, unsigned *oh_flags_ptr, void *_udata/*in,out*/);
static herr_t H5O_msg_iterate_real(const H5O_loc_t *loc, const H5O_msg_class_t *type,
H5AC_protect_t prot, hbool_t internal, H5O_mesg_operator_t op, void *op_data, hid_t dxpl_id);
-static unsigned H5O_find_in_ohdr(H5F_t *f, hid_t dxpl_id, H5O_t *oh,
- const H5O_msg_class_t **type_p, int sequence);
static unsigned H5O_new_mesg(H5F_t *f, H5O_t *oh, unsigned *flags,
const H5O_msg_class_t *orig_type, const void *orig_mesg, H5O_shared_t *sh_mesg,
const H5O_msg_class_t **new_type, const void **new_mesg, hid_t dxpl_id,
- unsigned * oh_flags_ptr);
+ unsigned *oh_flags_ptr);
static herr_t H5O_write_mesg(H5F_t *f, hid_t dxpl_id, H5O_t *oh, unsigned idx,
const H5O_msg_class_t *type, const void *mesg, unsigned flags,
- unsigned update_flags, unsigned * oh_flags_ptr);
+ unsigned update_flags, unsigned *oh_flags_ptr);
/*********************/
@@ -193,10 +188,15 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5O_msg_append(H5F_t *f, hid_t dxpl_id, H5O_t *oh, unsigned type_id, unsigned mesg_flags,
- unsigned update_flags, void *mesg, unsigned * oh_flags_ptr)
+H5O_msg_append(H5F_t *f, hid_t dxpl_id, H5O_t *oh, unsigned type_id,
+ unsigned mesg_flags, unsigned update_flags, void *mesg,
+ unsigned *oh_flags_ptr)
{
- const H5O_msg_class_t *type; /* Actual H5O class type for the ID */
+ const H5O_msg_class_t *new_type; /* Actual H5O class type for the ID */
+ const void *new_mesg; /* Actual message to write */
+ const H5O_msg_class_t *type; /* Original H5O class type for the ID */
+ H5O_shared_t sh_mesg; /* Shared object header info */
+ unsigned idx; /* Index of message to modify */
htri_t shared_mesg; /* Should this message be stored in the Shared Message table? */
herr_t ret_value = SUCCEED; /* Return value */
@@ -219,56 +219,12 @@ H5O_msg_append(H5F_t *f, hid_t dxpl_id, H5O_t *oh, unsigned type_id, unsigned me
else if(shared_mesg < 0)
HGOTO_ERROR(H5E_OHDR, H5E_WRITEERROR, FAIL, "error determining if message should be shared")
- if(H5O_msg_append_real(f, dxpl_id, oh, type, mesg_flags, update_flags, mesg, oh_flags_ptr) < 0)
- HGOTO_ERROR(H5E_OHDR, H5E_WRITEERROR, FAIL, "unable to append to object header")
-
-done:
- FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5O_msg_append() */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5O_msg_append_real
- *
- * Purpose: Simplified version of H5O_msg_create, used when creating a new
- * object header message (usually during object creation) and
- * several messages will be added to the object header at once.
- *
- * Return: Success: The sequence number of the message that
- * was created.
- *
- * Failure: Negative
- *
- * Programmer: Quincey Koziol
- * koziol@ncsa.uiuc.edu
- * Dec 31 2002
- *
- *-------------------------------------------------------------------------
- */
-static herr_t
-H5O_msg_append_real(H5F_t *f, hid_t dxpl_id, H5O_t *oh, const H5O_msg_class_t *type,
- unsigned mesg_flags, unsigned update_flags, const void *mesg, unsigned * oh_flags_ptr)
-{
- unsigned idx; /* Index of message to modify */
- H5O_shared_t sh_mesg;
- herr_t ret_value = SUCCEED; /* Return value */
-
- FUNC_ENTER_NOAPI_NOINIT(H5O_msg_append_real)
-
- /* check args */
- HDassert(f);
- HDassert(oh);
- HDassert(type);
- HDassert(0 == (mesg_flags & ~H5O_MSG_FLAG_BITS));
- HDassert(mesg);
- HDassert(oh_flags_ptr);
-
/* Create a new message */
- if((idx = H5O_new_mesg(f, oh, &mesg_flags, type, mesg, &sh_mesg, &type, &mesg, dxpl_id, oh_flags_ptr)) == UFAIL)
+ if((idx = H5O_new_mesg(f, oh, &mesg_flags, type, mesg, &sh_mesg, &new_type, &new_mesg, dxpl_id, oh_flags_ptr)) == UFAIL)
HGOTO_ERROR(H5E_OHDR, H5E_CANTINIT, FAIL, "unable to create new message")
/* Write the information to the message */
- if(H5O_write_mesg(f, dxpl_id, oh, idx, type, mesg, mesg_flags, update_flags, oh_flags_ptr) < 0)
+ if(H5O_write_mesg(f, dxpl_id, oh, idx, new_type, new_mesg, mesg_flags, update_flags, oh_flags_ptr) < 0)
HGOTO_ERROR(H5E_OHDR, H5E_CANTINIT, FAIL, "unable to write message")
#ifdef H5O_DEBUG
H5O_assert(oh);
@@ -276,7 +232,7 @@ H5O_assert(oh);
done:
FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5O_msg_append_real () */
+} /* end H5O_msg_append() */
/*-------------------------------------------------------------------------
@@ -310,6 +266,8 @@ herr_t
H5O_msg_write(H5O_loc_t *loc, unsigned type_id, unsigned overwrite,
unsigned mesg_flags, unsigned update_flags, void *mesg, hid_t dxpl_id)
{
+ H5O_t *oh = NULL; /* Object header to use */
+ unsigned oh_flags = H5AC__NO_FLAGS_SET; /* Flags to unprotect object header */
const H5O_msg_class_t *type; /* Actual H5O class type for the ID */
htri_t shared_mesg; /* Whether the message should be shared */
herr_t ret_value = SUCCEED; /* Return value */
@@ -326,6 +284,10 @@ H5O_msg_write(H5O_loc_t *loc, unsigned type_id, unsigned overwrite,
HDassert(mesg);
HDassert(0 == (mesg_flags & ~H5O_MSG_FLAG_BITS));
+ /* Check for write access on the file */
+ if(0 == (H5F_INTENT(loc->file) & H5F_ACC_RDWR))
+ HGOTO_ERROR(H5E_OHDR, H5E_WRITEERROR, FAIL, "no write intent on file")
+
/* Should this message be written as a SOHM? */
if((shared_mesg = H5SM_try_share(loc->file, dxpl_id, type_id, mesg)) > 0)
/* Mark the message as shared */
@@ -333,11 +295,18 @@ H5O_msg_write(H5O_loc_t *loc, unsigned type_id, unsigned overwrite,
else if(shared_mesg < 0)
HGOTO_ERROR(H5E_OHDR, H5E_BADMESG, FAIL, "error while trying to share message")
+ /* Protect the object header */
+ if(NULL == (oh = H5AC_protect(loc->file, dxpl_id, H5AC_OHDR, loc->addr, NULL, NULL, H5AC_WRITE)))
+ HGOTO_ERROR(H5E_OHDR, H5E_CANTLOAD, FAIL, "unable to load object header")
+
/* Call the "real" modify routine */
- if(H5O_msg_write_real(loc, type, overwrite, mesg_flags, update_flags, mesg, dxpl_id) < 0)
+ if(H5O_msg_write_real(loc->file, oh, type, overwrite, mesg_flags, update_flags, mesg, &oh_flags, dxpl_id) < 0)
HGOTO_ERROR(H5E_OHDR, H5E_WRITEERROR, FAIL, "unable to write object header message")
done:
+ if(oh && H5AC_unprotect(loc->file, dxpl_id, H5AC_OHDR, loc->addr, oh, oh_flags) < 0)
+ HDONE_ERROR(H5E_OHDR, H5E_PROTECT, FAIL, "unable to release object header")
+
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5O_msg_write() */
@@ -368,11 +337,10 @@ done:
*-------------------------------------------------------------------------
*/
static herr_t
-H5O_msg_write_real(H5O_loc_t *loc, const H5O_msg_class_t *type, unsigned overwrite,
- unsigned mesg_flags, unsigned update_flags, const void *mesg, hid_t dxpl_id)
+H5O_msg_write_real(H5F_t *f, H5O_t *oh, const H5O_msg_class_t *type,
+ unsigned overwrite, unsigned mesg_flags, unsigned update_flags,
+ const void *mesg, unsigned *oh_flags_ptr, hid_t dxpl_id)
{
- H5O_t *oh = NULL;
- unsigned oh_flags = H5AC__NO_FLAGS_SET;
int sequence; /* Sequence # of message type to modify */
unsigned idx; /* Index of message to modify */
H5O_mesg_t *idx_msg; /* Pointer to message to modify */
@@ -384,20 +352,12 @@ H5O_msg_write_real(H5O_loc_t *loc, const H5O_msg_class_t *type, unsigned overwri
FUNC_ENTER_NOAPI_NOINIT(H5O_msg_write_real)
/* check args */
- HDassert(loc);
- HDassert(loc->file);
- HDassert(H5F_addr_defined(loc->addr));
+ HDassert(f);
+ HDassert(oh);
HDassert(type);
HDassert(mesg);
HDassert(0 == (mesg_flags & ~H5O_MSG_FLAG_BITS));
-
- /* Check for write access on the file */
- if(0 == (H5F_INTENT(loc->file) & H5F_ACC_RDWR))
- HGOTO_ERROR(H5E_OHDR, H5E_WRITEERROR, FAIL, "no write intent on file")
-
- /* Protect the object header */
- if(NULL == (oh = H5AC_protect(loc->file, dxpl_id, H5AC_OHDR, loc->addr, NULL, NULL, H5AC_WRITE)))
- HGOTO_ERROR(H5E_OHDR, H5E_CANTLOAD, FAIL, "unable to load object header")
+ HDassert(oh_flags_ptr);
/* Count similar messages */
for(idx = 0, sequence = -1, idx_msg = &oh->mesg[0]; idx < oh->nmesgs; idx++, idx_msg++) {
@@ -424,7 +384,7 @@ H5O_msg_write_real(H5O_loc_t *loc, const H5O_msg_class_t *type, unsigned overwri
HGOTO_ERROR(H5E_OHDR, H5E_WRITEERROR, FAIL, "unable to modify committed message")
/* Remove the old message from the SOHM index */
- if(H5SM_try_delete(loc->file, dxpl_id, oh->mesg[idx].type->id, oh->mesg[idx].native) < 0)
+ if(H5SM_try_delete(f, dxpl_id, oh->mesg[idx].type->id, oh->mesg[idx].native) < 0)
HGOTO_ERROR (H5E_OHDR, H5E_CANTFREE, FAIL, "unable to delete message from SOHM table")
/* Now this message is no longer shared and we can safely overwrite it.
@@ -438,6 +398,7 @@ H5O_msg_write_real(H5O_loc_t *loc, const H5O_msg_class_t *type, unsigned overwri
HDassert(H5O_msg_is_shared(type->id, mesg) > 0); /* JAMES: this should work with
* replacement messages that aren't shared, too. */
+ /* Extract shared message info from current message */
if(H5O_msg_get_share(type->id, mesg, &sh_mesg) < 0)
HGOTO_ERROR (H5E_OHDR, H5E_BADMESG, FAIL, "can't get shared message")
@@ -447,16 +408,13 @@ H5O_msg_write_real(H5O_loc_t *loc, const H5O_msg_class_t *type, unsigned overwri
} /* end if */
/* Write the information to the message */
- if(H5O_write_mesg(loc->file, dxpl_id, oh, idx, write_type, write_mesg, mesg_flags, update_flags, &oh_flags) < 0)
+ if(H5O_write_mesg(f, dxpl_id, oh, idx, write_type, write_mesg, mesg_flags, update_flags, oh_flags_ptr) < 0)
HGOTO_ERROR(H5E_OHDR, H5E_CANTINIT, FAIL, "unable to write message")
#ifdef H5O_DEBUG
H5O_assert(oh);
#endif /* H5O_DEBUG */
done:
- if(oh && H5AC_unprotect(loc->file, dxpl_id, H5AC_OHDR, loc->addr, oh, oh_flags) < 0)
- HDONE_ERROR(H5E_OHDR, H5E_PROTECT, FAIL, "unable to release object header")
-
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5O_msg_write_real() */
@@ -539,10 +497,11 @@ done:
*-------------------------------------------------------------------------
*/
void *
-H5O_msg_read_real(H5F_t *f, H5O_t *oh, unsigned type_id, int sequence, void *mesg, hid_t dxpl_id)
+H5O_msg_read_real(H5F_t *f, H5O_t *oh, unsigned type_id, int sequence,
+ void *mesg, hid_t dxpl_id)
{
const H5O_msg_class_t *type; /* Actual H5O class type for the ID */
- int idx;
+ unsigned idx; /* Message's index in object header */
void *ret_value = NULL;
FUNC_ENTER_NOAPI_NOINIT(H5O_msg_read_real)
@@ -555,20 +514,31 @@ H5O_msg_read_real(H5F_t *f, H5O_t *oh, unsigned type_id, int sequence, void *mes
HDassert(type);
HDassert(sequence >= 0);
- /* can we get it from the object header? */
- if((idx = H5O_find_in_ohdr(f, dxpl_id, oh, &type, sequence)) < 0)
- HGOTO_ERROR(H5E_OHDR, H5E_NOTFOUND, NULL, "unable to find message in object header")
+ /* Scan through the messages looking for the right one */
+ for(idx = 0; idx < oh->nmesgs; idx++) {
+ if(type_id != oh->mesg[idx].type->id)
+ continue;
+ if(--sequence < 0)
+ break;
+ } /* end for */
+ if(sequence >= 0)
+ HGOTO_ERROR(H5E_OHDR, H5E_NOTFOUND, NULL, "unable to find object header message")
+
+ /*
+ * Decode the message if necessary. If the message is shared then decode
+ * a shared message, ignoring the message type.
+ */
+ H5O_LOAD_NATIVE(f, dxpl_id, &(oh->mesg[idx]), NULL)
+ /* Read the message in */
if(oh->mesg[idx].flags & H5O_MSG_FLAG_SHARED) {
/*
* If the message is shared then then the native pointer points to an
* H5O_MSG_SHARED message. We use that information to look up the real
* message in the global heap or some other object header.
*/
- H5O_shared_t *shared;
-
- shared = (H5O_shared_t *)(oh->mesg[idx].native);
- ret_value = H5O_shared_read(f, dxpl_id, shared, type, mesg);
+ if(NULL == (ret_value = H5O_shared_read(f, dxpl_id, oh->mesg[idx].native, type, mesg)))
+ HGOTO_ERROR(H5E_OHDR, H5E_CANTINIT, NULL, "unable to copy message to user space")
} else {
/*
* The message is not shared, but rather exists in the object
@@ -598,12 +568,6 @@ done:
* matzke@llnl.gov
* Aug 12 1997
*
- * Modifications:
- * Changed to use IDs for types, instead of type objects, then
- * call "real" routine.
- * Quincey Koziol
- * Feb 14 2003
- *
*-------------------------------------------------------------------------
*/
herr_t
@@ -679,8 +643,6 @@ done:
* Programmer: Robb Matzke
* Thursday, May 21, 1998
*
- * Modifications:
- *
*-------------------------------------------------------------------------
*/
void *
@@ -781,12 +743,6 @@ H5O_msg_free_real(const H5O_msg_class_t *type, void *msg_native)
* Programmer: Robb Matzke
* Thursday, May 21, 1998
*
- * Modifications:
- * Changed to use IDs for types, instead of type objects, then
- * call "real" routine.
- * Quincey Koziol
- * Feb 14 2003
- *
*-------------------------------------------------------------------------
*/
void *
@@ -1013,16 +969,6 @@ H5O_msg_exists_oh(H5O_t *oh, unsigned type_id, int sequence)
* matzke@llnl.gov
* Aug 28 1997
*
- * Modifications:
- *
- * Robb Matzke, 7 Jan 1998
- * Does not remove constant messages.
- *
- * Changed to use IDs for types, instead of type objects, then
- * call "real" routine.
- * Quincey Koziol
- * Feb 14 2003
- *
*-------------------------------------------------------------------------
*/
herr_t
@@ -1310,8 +1256,6 @@ done:
* C. Negative causes the iterator to immediately return that value,
* indicating failure.
*
- * Modifications:
- *
*-------------------------------------------------------------------------
*/
static herr_t
@@ -1364,10 +1308,9 @@ H5O_msg_iterate_real(const H5O_loc_t *loc, const H5O_msg_class_t *type, H5AC_pro
idx_msg->native, idx_msg->type, NULL)))
HGOTO_ERROR(H5E_OHDR, H5E_BADMESG, FAIL, "unable to read shared message")
native_mesg_alloc = TRUE;
- }
- else {
+ } /* end if */
+ else
native_mesg = idx_msg->native;
- }
/* Call the iterator callback */
if((ret_value = (op.app_op)(native_mesg, sequence, op_data)) != 0)
@@ -1377,25 +1320,24 @@ H5O_msg_iterate_real(const H5O_loc_t *loc, const H5O_msg_class_t *type, H5AC_pro
if(native_mesg_alloc) {
H5O_msg_free(idx_msg->type->id, native_mesg);
native_mesg_alloc = FALSE;
- }
+ } /* end if */
} /* end else */
- /* Check for error from iterator */
- if(ret_value < 0)
- HGOTO_ERROR(H5E_OHDR, H5E_CANTINIT, FAIL, "iterator function failed")
-
/* Increment sequence value for message type */
sequence++;
} /* end if */
} /* end for */
+ /* Check for error from iterator */
+ if(ret_value < 0)
+ HERROR(H5E_OHDR, H5E_CANTLIST, "iterator function failed");
+
done:
/* Free the native message if it was allocated */
- if(native_mesg_alloc) {
+ if(native_mesg_alloc)
H5O_msg_free(idx_msg->type->id, native_mesg);
- native_mesg_alloc = FALSE;
- }
+ /* Object header cleanup */
if(oh) {
/* Check if object header was modified */
if(oh_flags & H5AC__DIRTIED_FLAG) {
@@ -1410,7 +1352,8 @@ done:
if(H5O_condense_header(loc->file, oh, dxpl_id) < 0)
HDONE_ERROR(H5E_OHDR, H5E_CANTPACK, FAIL, "can't pack object header")
- H5O_touch_oh(loc->file, dxpl_id, oh, FALSE, &oh_flags);
+ if(H5O_touch_oh(loc->file, dxpl_id, oh, FALSE, &oh_flags) < 0)
+ HDONE_ERROR(H5E_OHDR, H5E_CANTUPDATE, FAIL, "unable to update time on object")
} /* end if */
if(H5AC_unprotect(loc->file, dxpl_id, H5AC_OHDR, loc->addr, oh, oh_flags) < 0)
@@ -1802,72 +1745,6 @@ done:
/*-------------------------------------------------------------------------
- * Function: H5O_find_in_ohdr
- *
- * Purpose: Find a message in the object header without consulting
- * a symbol table entry.
- *
- * Return: Success: Index number of message.
- * Failure: Negative
- *
- * Programmer: Robb Matzke
- * matzke@llnl.gov
- * Aug 6 1997
- *
- * Modifications:
- * Robb Matzke, 1999-07-28
- * The ADDR argument is passed by value.
- *
- * Bill Wendling, 2003-09-30
- * Modified so that the object header needs to be AC_protected
- * before calling this function.
- *-------------------------------------------------------------------------
- */
-static unsigned
-H5O_find_in_ohdr(H5F_t *f, hid_t dxpl_id, H5O_t *oh, const H5O_msg_class_t **type_p, int sequence)
-{
- unsigned u;
- unsigned ret_value;
-
- FUNC_ENTER_NOAPI_NOINIT(H5O_find_in_ohdr)
-
- /* Check args */
- HDassert(f);
- HDassert(oh);
- HDassert(type_p);
-
- /* Scan through the messages looking for the right one */
- for(u = 0; u < oh->nmesgs; u++) {
- if(*type_p && (*type_p)->id != oh->mesg[u].type->id)
- continue;
- if(--sequence < 0)
- break;
- } /* end for */
-
- if(sequence >= 0)
- HGOTO_ERROR(H5E_OHDR, H5E_NOTFOUND, UFAIL, "unable to find object header message")
-
- /*
- * Decode the message if necessary. If the message is shared then decode
- * a shared message, ignoring the message type.
- */
- H5O_LOAD_NATIVE(f, dxpl_id, &(oh->mesg[u]), UFAIL)
-
- /*
- * Return the message type. If this is a shared message then return the
- * pointed-to type.
- */
- *type_p = oh->mesg[u].type;
-
- /* Set return value */
- ret_value = u;
-
-done:
- FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5O_find_in_ohdr() */
-
-
-/*-------------------------------------------------------------------------
* Function: H5O_new_mesg
*
* Purpose: Create a new message in an object header
@@ -1883,7 +1760,7 @@ done:
static unsigned
H5O_new_mesg(H5F_t *f, H5O_t *oh, unsigned *mesg_flags, const H5O_msg_class_t *orig_type,
const void *orig_mesg, H5O_shared_t *sh_mesg, const H5O_msg_class_t **new_type,
- const void **new_mesg, hid_t dxpl_id, unsigned * oh_flags_ptr)
+ const void **new_mesg, hid_t dxpl_id, unsigned *oh_flags_ptr)
{
size_t size; /* Size of space allocated for object header */
htri_t is_shared; /* Is this a shared message? */
@@ -1898,8 +1775,8 @@ H5O_new_mesg(H5F_t *f, H5O_t *oh, unsigned *mesg_flags, const H5O_msg_class_t *o
HDassert(orig_type);
HDassert(orig_mesg);
HDassert(sh_mesg);
- HDassert(new_mesg);
HDassert(new_type);
+ HDassert(new_mesg);
HDassert(oh_flags_ptr);
/* Check for shared message */
@@ -1995,7 +1872,8 @@ H5O_write_mesg(H5F_t *f, hid_t dxpl_id, H5O_t *oh, unsigned idx,
/* Update the modification time message if any */
if(update_flags & H5O_UPDATE_TIME)
- H5O_touch_oh(f, dxpl_id, oh, FALSE, oh_flags_ptr);
+ if(H5O_touch_oh(f, dxpl_id, oh, FALSE, oh_flags_ptr) < 0)
+ HGOTO_ERROR(H5E_OHDR, H5E_CANTUPDATE, FAIL, "unable to update time on object")
/* Mark the object header as modified */
*oh_flags_ptr |= H5AC__DIRTIED_FLAG;
diff --git a/src/H5Oshared.c b/src/H5Oshared.c
index f84fde6..18d67b7 100644
--- a/src/H5Oshared.c
+++ b/src/H5Oshared.c
@@ -33,9 +33,9 @@
#include "H5Eprivate.h" /* Error handling */
#include "H5Fpkg.h" /* File access */
#include "H5Gprivate.h" /* Groups */
+#include "H5HFprivate.h" /* Fractal heap */
#include "H5MMprivate.h" /* Memory management */
#include "H5Opkg.h" /* Object headers */
-#include "H5HFprivate.h" /* Fractal heap */
#include "H5SMprivate.h" /*JAMES: for H5SM_get_fheap_addr. Change this? */
static void *H5O_shared_decode(H5F_t*, hid_t dxpl_id, const uint8_t*);
@@ -143,7 +143,7 @@ H5O_shared_read(H5F_t *f, hid_t dxpl_id, const H5O_shared_t *shared,
HGOTO_ERROR(H5E_HEAP, H5E_CANTGET, NULL, "can't get message size from fractal heap.")
/* Allocate buffer */
- if(NULL == (buf = HDmalloc(buf_size)))
+ if(NULL == (buf = H5MM_malloc(buf_size)))
HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed")
/* Retrieve the message from the heap */
@@ -155,7 +155,7 @@ H5O_shared_read(H5F_t *f, hid_t dxpl_id, const H5O_shared_t *shared,
HGOTO_ERROR(H5E_OHDR, H5E_CANTDECODE, NULL, "can't decode shared message.")
/* Copy this message to the user's buffer */
- if(NULL == (ret_value = (type->copy) (native_mesg, mesg, 0)))
+ if(NULL == (ret_value = (type->copy)(native_mesg, mesg, 0)))
HGOTO_ERROR(H5E_OHDR, H5E_CANTINIT, NULL, "unable to copy message to user space")
} /* end if */
else {
@@ -172,14 +172,13 @@ H5O_shared_read(H5F_t *f, hid_t dxpl_id, const H5O_shared_t *shared,
done:
if(buf)
- HDfree(buf);
+ H5MM_xfree(buf);
if(native_mesg)
H5O_msg_free(type->id, native_mesg);
- if(fheap)
- if(H5HF_close(fheap, dxpl_id) < 0)
- HGOTO_ERROR(H5E_HEAP, H5E_CANTFREE, NULL, "can't close fractal heap")
+ if(fheap && H5HF_close(fheap, dxpl_id) < 0)
+ HDONE_ERROR(H5E_HEAP, H5E_CANTFREE, NULL, "can't close fractal heap")
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5O_shared_read() */
@@ -418,8 +417,6 @@ H5O_shared_encode (H5F_t *f, uint8_t *buf/*out*/, const void *_mesg)
* koziol@ncsa.uiuc.edu
* Sep 26 2003
*
- * Modifications:
- *
*-------------------------------------------------------------------------
*/
static void *
@@ -429,33 +426,28 @@ H5O_shared_copy(const void *_mesg, void *_dest, unsigned UNUSED update_flags)
H5O_shared_t *dest = (H5O_shared_t *) _dest;
void *ret_value; /* Return value */
- FUNC_ENTER_NOAPI_NOINIT(H5O_shared_copy);
+ FUNC_ENTER_NOAPI_NOINIT(H5O_shared_copy)
/* check args */
- assert(mesg);
- if (!dest && NULL==(dest = H5MM_malloc (sizeof(H5O_shared_t))))
- HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed");
+ HDassert(mesg);
+ if(!dest && NULL == (dest = H5MM_malloc(sizeof(H5O_shared_t))))
+ HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed")
/* copy */
dest->flags = mesg->flags;
if(mesg->flags & H5O_COMMITTED_FLAG)
- {
H5O_loc_copy(&(dest->u.oloc), &(mesg->u.oloc), H5_COPY_DEEP);
- }
else if(mesg->flags & H5O_SHARED_IN_HEAP_FLAG)
- {
- dest->u.heap_id= mesg->u.heap_id;
- } else
- {
+ dest->u.heap_id = mesg->u.heap_id;
+ else
/* This message's sharing information is being reset */
HDassert(mesg->flags == H5O_NOT_SHARED);
- }
/* Set return value */
- ret_value=dest;
+ ret_value = dest;
done:
- FUNC_LEAVE_NOAPI(ret_value);
+ FUNC_LEAVE_NOAPI(ret_value)
} /* end H5O_shared_copy() */