summaryrefslogtreecommitdiffstats
path: root/src/H5Olayout.c
diff options
context:
space:
mode:
authorQuincey Koziol <koziol@hdfgroup.org>2015-08-31 20:14:57 (GMT)
committerQuincey Koziol <koziol@hdfgroup.org>2015-08-31 20:14:57 (GMT)
commit2c91cbecc6460d1a319bfb2303e228ea6f6d6e4d (patch)
tree3d69591861803060012eed0be300427f4c261fc8 /src/H5Olayout.c
parent1d3a7ec6515f26f13cb5d8e5c65fd848fd235d8f (diff)
parent81ca9e4c79a125cfcea9e426e1e91d94cdf6a2aa (diff)
downloadhdf5-2c91cbecc6460d1a319bfb2303e228ea6f6d6e4d.zip
hdf5-2c91cbecc6460d1a319bfb2303e228ea6f6d6e4d.tar.gz
hdf5-2c91cbecc6460d1a319bfb2303e228ea6f6d6e4d.tar.bz2
[svn-r27630] Description:
Bring in changes from the trunk, through r27628. Tested on: MacOSX/64 10.10.5 (amazon) w/serial (h5committest not required on this branch)
Diffstat (limited to 'src/H5Olayout.c')
-rw-r--r--src/H5Olayout.c48
1 files changed, 32 insertions, 16 deletions
diff --git a/src/H5Olayout.c b/src/H5Olayout.c
index 6018539..dae43f3 100644
--- a/src/H5Olayout.c
+++ b/src/H5Olayout.c
@@ -632,24 +632,40 @@ H5O_layout_copy(const void *_mesg, void *_dest)
/* copy */
*dest = *mesg;
- /* Deep copy the buffer for compact datasets also */
- if(mesg->type == H5D_COMPACT && mesg->storage.u.compact.size > 0) {
- /* Allocate memory for the raw data */
- if(NULL == (dest->storage.u.compact.buf = H5MM_malloc(dest->storage.u.compact.size)))
- HGOTO_ERROR(H5E_OHDR, H5E_NOSPACE, NULL, "unable to allocate memory for compact dataset")
-
- /* Copy over the raw data */
- HDmemcpy(dest->storage.u.compact.buf, mesg->storage.u.compact.buf, dest->storage.u.compact.size);
- } /* end if */
+ /* Special actions for each type of layout */
+ switch(mesg->type) {
+ case H5D_COMPACT:
+ /* Deep copy the buffer for compact datasets also */
+ if(mesg->storage.u.compact.size > 0) {
+ /* Allocate memory for the raw data */
+ if(NULL == (dest->storage.u.compact.buf = H5MM_malloc(dest->storage.u.compact.size)))
+ HGOTO_ERROR(H5E_OHDR, H5E_NOSPACE, NULL, "unable to allocate memory for compact dataset")
+
+ /* Copy over the raw data */
+ HDmemcpy(dest->storage.u.compact.buf, mesg->storage.u.compact.buf, dest->storage.u.compact.size);
+ } /* end if */
+ break;
+
+ case H5D_CONTIGUOUS:
+ /* Nothing required */
+ break;
- /* Reset the pointer of the chunked storage index but not the address */
- if(dest->type == H5D_CHUNKED && dest->storage.u.chunk.ops)
- H5D_chunk_idx_reset(&dest->storage.u.chunk, FALSE);
+ case H5D_CHUNKED:
+ /* Reset the pointer of the chunked storage index but not the address */
+ if(dest->storage.u.chunk.ops)
+ H5D_chunk_idx_reset(&dest->storage.u.chunk, FALSE);
+ break;
+
+ case H5D_VIRTUAL:
+ if(H5D__virtual_copy_layout(dest) < 0)
+ HGOTO_ERROR(H5E_OHDR, H5E_CANTCOPY, NULL, "unable to copy virtual layout")
+ break;
- /* Deep copy the entry list for virtual datasets */
- if(mesg->type == H5D_VIRTUAL)
- if(H5D__virtual_copy_layout(dest) < 0)
- HGOTO_ERROR(H5E_OHDR, H5E_CANTCOPY, NULL, "unable to copy virtual layout")
+ case H5D_LAYOUT_ERROR:
+ case H5D_NLAYOUTS:
+ default:
+ HGOTO_ERROR(H5E_OHDR, H5E_CANTENCODE, NULL, "Invalid layout class")
+ } /* end switch */
/* Set return value */
ret_value = dest;