diff options
author | Quincey Koziol <koziol@hdfgroup.org> | 2015-08-31 20:14:57 (GMT) |
---|---|---|
committer | Quincey Koziol <koziol@hdfgroup.org> | 2015-08-31 20:14:57 (GMT) |
commit | 2c91cbecc6460d1a319bfb2303e228ea6f6d6e4d (patch) | |
tree | 3d69591861803060012eed0be300427f4c261fc8 /src/H5Olayout.c | |
parent | 1d3a7ec6515f26f13cb5d8e5c65fd848fd235d8f (diff) | |
parent | 81ca9e4c79a125cfcea9e426e1e91d94cdf6a2aa (diff) | |
download | hdf5-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.c | 48 |
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; |