diff options
author | Quincey Koziol <koziol@hdfgroup.org> | 2004-09-23 03:05:15 (GMT) |
---|---|---|
committer | Quincey Koziol <koziol@hdfgroup.org> | 2004-09-23 03:05:15 (GMT) |
commit | 9fc48a009786e78c1acf3ed7a5c74e1ef73e8b94 (patch) | |
tree | f357807db04a3f9fca8f4a207ab91b6392a24b8f | |
parent | f235187dba7dfbef6a158340e1235c494303a9ad (diff) | |
download | hdf5-9fc48a009786e78c1acf3ed7a5c74e1ef73e8b94.zip hdf5-9fc48a009786e78c1acf3ed7a5c74e1ef73e8b94.tar.gz hdf5-9fc48a009786e78c1acf3ed7a5c74e1ef73e8b94.tar.bz2 |
[svn-r9312] Purpose:
Bug fix.
Description:
Allow I/O to occur on 0 element selections.
Platforms tested:
h5committest
-rw-r--r-- | src/H5Dio.c | 12 | ||||
-rw-r--r-- | test/tselect.c | 7 |
2 files changed, 13 insertions, 6 deletions
diff --git a/src/H5Dio.c b/src/H5Dio.c index b7d9580..6c76b09 100644 --- a/src/H5Dio.c +++ b/src/H5Dio.c @@ -1134,9 +1134,8 @@ H5D_contig_read(hsize_t nelmts, H5D_t *dataset, /* Sanity check dataset, then read it */ assert(((dataset->layout.type==H5D_CONTIGUOUS && H5F_addr_defined(dataset->layout.u.contig.addr)) || (dataset->layout.type==H5D_CHUNKED && H5F_addr_defined(dataset->layout.u.chunk.addr))) - || dataset->efl.nused>0 || - H5S_NULL == H5S_GET_EXTENT_TYPE(file_space) || - dataset->layout.type==H5D_COMPACT); + || dataset->efl.nused>0 || 0 == nelmts + || dataset->layout.type==H5D_COMPACT); H5_CHECK_OVERFLOW(nelmts,hsize_t,size_t); status = (sconv->read)(dataset->ent.file, dxpl_cache, dxpl_id, dataset, (H5D_storage_t *)&(dataset->efl), @@ -1243,8 +1242,8 @@ H5D_contig_read(hsize_t nelmts, H5D_t *dataset, /* Sanity check that space is allocated, then read data from it */ assert(((dataset->layout.type==H5D_CONTIGUOUS && H5F_addr_defined(dataset->layout.u.contig.addr)) || (dataset->layout.type==H5D_CHUNKED && H5F_addr_defined(dataset->layout.u.chunk.addr))) - || dataset->efl.nused>0 || - dataset->layout.type==H5D_COMPACT); + || dataset->efl.nused>0 || 0 == nelmts + || dataset->layout.type==H5D_COMPACT); n = H5S_select_fgath(dataset->ent.file, dxpl_cache, dxpl_id, dataset, (H5D_storage_t *)&(dataset->efl), file_space, &file_iter, smine_nelmts, @@ -1639,7 +1638,8 @@ H5D_chunk_read(hsize_t nelmts, H5D_t *dataset, /* Sanity check dataset, then read it */ assert(((dataset->layout.type==H5D_CONTIGUOUS && H5F_addr_defined(dataset->layout.u.contig.addr)) || (dataset->layout.type==H5D_CHUNKED && H5F_addr_defined(dataset->layout.u.chunk.addr))) - || dataset->efl.nused>0 || dataset->layout.type==H5D_COMPACT); + || dataset->efl.nused>0 || 0 == nelmts + || dataset->layout.type==H5D_COMPACT); /* Get first node in chunk tree */ chunk_node=H5TB_first(fm.fsel->root); diff --git a/test/tselect.c b/test/tselect.c index c1d985f..c4090f8 100644 --- a/test/tselect.c +++ b/test/tselect.c @@ -5374,6 +5374,7 @@ test_select_none(void) hsize_t dims1[] = {SPACE7_DIM1, SPACE7_DIM2}; hsize_t dims2[] = {SPACE7_DIM1, SPACE7_DIM2}; uint8_t *wbuf, /* buffer to write to disk */ + *rbuf, /* buffer to read from disk */ *tbuf; /* temporary buffer pointer */ int i,j; /* Counters */ herr_t ret; /* Generic return value */ @@ -5383,6 +5384,7 @@ test_select_none(void) /* Allocate write & read buffers */ wbuf=malloc(sizeof(uint8_t)*SPACE7_DIM1*SPACE7_DIM2); + rbuf=malloc(sizeof(uint8_t)*SPACE7_DIM1*SPACE7_DIM2); /* Initialize write buffer */ for(i=0, tbuf=wbuf; i<SPACE7_DIM1; i++) @@ -5412,6 +5414,10 @@ test_select_none(void) ret = H5Sselect_none(sid2); CHECK(ret, FAIL, "H5Sselect_none"); + /* Attempt to read "nothing" from disk (before space is allocated) */ + ret=H5Dread(dataset,H5T_NATIVE_UCHAR,sid2,sid1,H5P_DEFAULT,rbuf); + CHECK(ret, FAIL, "H5Dread"); + /* Write "nothing" to disk */ ret=H5Dwrite(dataset,H5T_NATIVE_UCHAR,sid2,sid1,H5P_DEFAULT,wbuf); CHECK(ret, FAIL, "H5Dwrite"); @@ -5446,6 +5452,7 @@ test_select_none(void) /* Free memory buffers */ free(wbuf); + free(rbuf); } /* test_select_none() */ /**************************************************************** |