mirror of
https://github.com/HDFGroup/hdf5.git
synced 2025-02-05 15:42:32 +08:00
[svn-r30262] Fix for HDFFV-9960: H5DOappend will not fail if a dataset has no append callback registered.
Tested on mayll, platypus, osx1010test, emu, moohan, kituo, ostrich, kite, quail.
This commit is contained in:
parent
a4e4094c76
commit
4d358ef0af
@ -165,7 +165,7 @@ H5DOappend(hid_t dset_id, hid_t dxpl_id, unsigned axis, size_t extension,
|
||||
created_dxpl = TRUE;
|
||||
} /* end if */
|
||||
else if(TRUE != H5Pisa_class(dxpl_id, H5P_DATASET_XFER))
|
||||
goto done;
|
||||
goto done;
|
||||
|
||||
/* Get the dataspace of the dataset */
|
||||
if(FAIL == (space_id = H5Dget_space(dset_id)))
|
||||
@ -219,7 +219,8 @@ H5DOappend(hid_t dset_id, hid_t dxpl_id, unsigned axis, size_t extension,
|
||||
nelmts = (hsize_t)snelmts;
|
||||
|
||||
/* create a memory space */
|
||||
mem_space_id = H5Screate_simple(1, &nelmts, NULL);
|
||||
if(FAIL == (mem_space_id = H5Screate_simple(1, &nelmts, NULL)))
|
||||
goto done;
|
||||
|
||||
/* Write the data */
|
||||
if(H5Dwrite(dset_id, memtype, mem_space_id, new_space_id, dxpl_id, buf) < 0)
|
||||
@ -237,8 +238,10 @@ H5DOappend(hid_t dset_id, hid_t dxpl_id, unsigned axis, size_t extension,
|
||||
goto done;
|
||||
|
||||
/* No boundary for this axis */
|
||||
if(boundary[axis] == 0)
|
||||
if(boundary[axis] == 0) {
|
||||
ret_value = SUCCEED;
|
||||
goto done;
|
||||
}
|
||||
|
||||
/* Determine whether a boundary is hit or not */
|
||||
for(k = start[axis]; k < size[axis]; k++)
|
||||
|
@ -27,6 +27,7 @@
|
||||
#endif
|
||||
|
||||
#define FILE "test_append.h5"
|
||||
#define DNAME_NOTSET "dataset_notset"
|
||||
#define DNAME_UNLIM "dataset_unlim"
|
||||
#define DNAME_LESS "dataset_less"
|
||||
#define DNAME_VARY "dataset_vary"
|
||||
@ -35,6 +36,103 @@
|
||||
#define DBUGNAME1 "dataset_bug1"
|
||||
#define DBUGNAME2 "dataset_bug2"
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: test_dataset_append_notset
|
||||
*
|
||||
* Purpose: Verify that H5DOappend works properly with default dapl.
|
||||
* That is, H5Pset_append_flush() is not used to set boundary
|
||||
* and callback in dapl.
|
||||
*
|
||||
* Return: Success: 0
|
||||
* Failure: 1
|
||||
*
|
||||
* Programmer: Vailin Choi; Aug 2016
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static int
|
||||
test_dataset_append_notset(hid_t fid)
|
||||
{
|
||||
hid_t did = -1; /* Dataset ID */
|
||||
hid_t sid = -1; /* Dataspace ID */
|
||||
hid_t dcpl = -1; /* A copy of dataset creation property */
|
||||
hid_t dapl = -1; /* A copy of dataset access property */
|
||||
hid_t ffapl = -1; /* The file's file access property list */
|
||||
|
||||
hsize_t dims[2] = {0, 10}; /* Current dimension sizes */
|
||||
hsize_t maxdims[2] = {H5S_UNLIMITED, 20}; /* Maximum dimension sizes */
|
||||
hsize_t chunk_dims[2] = {2,5}; /* Chunk dimension sizes */
|
||||
int lbuf[10]; /* The data buffers */
|
||||
hsize_t file_size; /* File size */
|
||||
int i, j; /* Local index variables */
|
||||
h5_stat_t sb1, sb2; /* File info */
|
||||
|
||||
TESTING("Append flush with H5DOappend()--append rows with default dapl");
|
||||
|
||||
/* Get the file's file access property list */
|
||||
if((ffapl = H5Fget_access_plist(fid)) < 0)
|
||||
FAIL_STACK_ERROR;
|
||||
|
||||
/* Set to create a chunked dataset with extendible dimensions */
|
||||
if((sid = H5Screate_simple(2, dims, maxdims)) < 0)
|
||||
FAIL_STACK_ERROR;
|
||||
if((dcpl = H5Pcreate(H5P_DATASET_CREATE)) < 0)
|
||||
FAIL_STACK_ERROR;
|
||||
if(H5Pset_chunk(dcpl, 2, chunk_dims) < 0)
|
||||
FAIL_STACK_ERROR;
|
||||
|
||||
/* Create the dataset */
|
||||
if((did = H5Dcreate2(fid, DNAME_NOTSET, H5T_NATIVE_INT, sid, H5P_DEFAULT, dcpl, H5P_DEFAULT)) < 0)
|
||||
FAIL_STACK_ERROR;
|
||||
|
||||
/* Append 6 rows to the dataset */
|
||||
for(i = 0; i < 6; i++) {
|
||||
for(j = 0; j < 10; j++)
|
||||
lbuf[j] = (i * 10) + (j + 1);
|
||||
/* Append without boundary, callback and flush */
|
||||
if(H5DOappend(did, H5P_DEFAULT, 0, (size_t)1, H5T_NATIVE_INT, lbuf) < 0)
|
||||
FAIL_STACK_ERROR;
|
||||
} /* end for */
|
||||
|
||||
/* File size when not flushed */
|
||||
if(HDstat(FILE, &sb1) < 0)
|
||||
TEST_ERROR;
|
||||
|
||||
/* Close the dataset */
|
||||
if(H5Dclose(did) < 0)
|
||||
FAIL_STACK_ERROR;
|
||||
|
||||
/* File size after flushing */
|
||||
if(HDstat(FILE, &sb2) < 0)
|
||||
TEST_ERROR;
|
||||
|
||||
/* File size before flushing should be less */
|
||||
if(sb1.st_size > sb2.st_size)
|
||||
TEST_ERROR;
|
||||
|
||||
/* Closing */
|
||||
if(H5Sclose(sid) < 0)
|
||||
FAIL_STACK_ERROR;
|
||||
if(H5Pclose(dcpl) < 0)
|
||||
FAIL_STACK_ERROR;
|
||||
if(H5Pclose(ffapl) < 0)
|
||||
FAIL_STACK_ERROR;
|
||||
|
||||
PASSED();
|
||||
|
||||
return 0;
|
||||
|
||||
error:
|
||||
H5E_BEGIN_TRY {
|
||||
H5Pclose(dcpl);
|
||||
H5Pclose(sid);
|
||||
H5Dclose(did);
|
||||
H5Pclose(ffapl);
|
||||
} H5E_END_TRY;
|
||||
|
||||
return 1;
|
||||
} /* test_dataset_append_notset() */
|
||||
|
||||
/* The callback function for the object flush property */
|
||||
static herr_t
|
||||
flush_func(hid_t H5_ATTR_UNUSED obj_id, void *_udata)
|
||||
@ -1150,6 +1248,8 @@ int main(void)
|
||||
if((fid = H5Fcreate(FILE, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0)
|
||||
FAIL_STACK_ERROR;
|
||||
|
||||
nerrors += test_dataset_append_notset(fid);
|
||||
|
||||
nerrors += test_dataset_append_rows(fid);
|
||||
|
||||
flush_ct = 0; /* Reset flush counter */
|
||||
|
Loading…
Reference in New Issue
Block a user