2016-12-18 16:42:15 +08:00
|
|
|
|
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
|
|
|
|
* Copyright by the Board of Trustees of the University of Illinois. *
|
|
|
|
|
* All rights reserved. *
|
|
|
|
|
* *
|
|
|
|
|
* This file is part of HDF5. The full HDF5 copyright notice, including *
|
|
|
|
|
* terms governing use, modification, and redistribution, is contained in *
|
2017-04-18 03:32:16 +08:00
|
|
|
|
* the COPYING file, which can be found at the root of the source code *
|
|
|
|
|
* distribution tree, or in https://support.hdfgroup.org/ftp/HDF5/releases. *
|
|
|
|
|
* If you do not have access to either file, you may request a copy from *
|
|
|
|
|
* help@hdfgroup.org. *
|
2016-12-18 16:42:15 +08:00
|
|
|
|
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
|
|
|
|
#include "h5test.h"
|
|
|
|
|
|
|
|
|
|
#define H5F_FRIEND /*suppress error about including H5Fpkg */
|
|
|
|
|
#define H5FD_FRIEND /*suppress error about including H5FDpkg */
|
|
|
|
|
#define H5FD_TESTING
|
|
|
|
|
|
|
|
|
|
#include "H5Fpkg.h"
|
|
|
|
|
#include "H5FDpkg.h"
|
2018-03-16 05:54:30 +08:00
|
|
|
|
|
|
|
|
|
#include "H5CXprivate.h" /* API Contexts */
|
2016-12-18 16:42:15 +08:00
|
|
|
|
#include "H5Iprivate.h"
|
2018-10-10 23:10:15 +08:00
|
|
|
|
#include "H5VLprivate.h" /* Virtual Object Layer */
|
2016-12-18 16:42:15 +08:00
|
|
|
|
|
|
|
|
|
/* Filename: this is the same as the define in accum.c used by test_swmr_write_big() */
|
2019-01-06 13:06:45 +08:00
|
|
|
|
const char *FILENAME[] = {
|
|
|
|
|
"accum",
|
|
|
|
|
"accum_swmr_big",
|
|
|
|
|
NULL
|
|
|
|
|
};
|
|
|
|
|
|
2016-12-18 16:42:15 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*-------------------------------------------------------------------------
|
|
|
|
|
* Function: main
|
|
|
|
|
*
|
|
|
|
|
* Purpose: This is the reader forked/execved by "test_swmr_write_big()"
|
|
|
|
|
* test in accum.c. The reader reads at address 1024 from the file
|
|
|
|
|
* and verifies that the metadata in the accumulator at address
|
|
|
|
|
* 1024 does get written to disk.
|
|
|
|
|
*
|
|
|
|
|
* Return: Success: EXIT_SUCCESS
|
|
|
|
|
* Failure: EXIT_FAILURE
|
|
|
|
|
*
|
|
|
|
|
* Programmer: Vailin Choi; June 2013
|
|
|
|
|
*
|
|
|
|
|
*-------------------------------------------------------------------------
|
|
|
|
|
*/
|
|
|
|
|
int
|
|
|
|
|
main(void)
|
|
|
|
|
{
|
|
|
|
|
hid_t fid = -1; /* File ID */
|
|
|
|
|
hid_t fapl = -1; /* file access property list ID */
|
|
|
|
|
H5F_t *f = NULL; /* File pointer */
|
2019-01-06 13:06:45 +08:00
|
|
|
|
char filename[1024];
|
2016-12-18 16:42:15 +08:00
|
|
|
|
unsigned u; /* Local index variable */
|
|
|
|
|
uint8_t rbuf[1024]; /* Buffer for reading */
|
|
|
|
|
uint8_t buf[1024]; /* Buffer for holding the expected data */
|
|
|
|
|
char *driver = NULL; /* VFD string (from env variable) */
|
2018-03-19 11:51:19 +08:00
|
|
|
|
hbool_t api_ctx_pushed = FALSE; /* Whether API context pushed */
|
2016-12-18 16:42:15 +08:00
|
|
|
|
|
|
|
|
|
/* Skip this test if SWMR I/O is not supported for the VFD specified
|
|
|
|
|
* by the environment variable.
|
|
|
|
|
*/
|
|
|
|
|
driver = HDgetenv("HDF5_DRIVER");
|
2018-09-19 13:57:37 +08:00
|
|
|
|
if(!H5FD__supports_swmr_test(driver))
|
2016-12-18 16:42:15 +08:00
|
|
|
|
return EXIT_SUCCESS;
|
|
|
|
|
|
|
|
|
|
/* Initialize buffers */
|
|
|
|
|
for(u = 0; u < 1024; u++) {
|
|
|
|
|
rbuf[u] = 0; /* The buffer for reading */
|
|
|
|
|
buf[u] = 1; /* The expected data should be all 1s */
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if((fapl = h5_fileaccess()) < 0)
|
|
|
|
|
FAIL_STACK_ERROR
|
2019-01-06 13:06:45 +08:00
|
|
|
|
h5_fixname(FILENAME[1], fapl, filename, sizeof filename);
|
2016-12-18 16:42:15 +08:00
|
|
|
|
|
|
|
|
|
/* Open the file with SWMR_READ */
|
2019-01-06 13:06:45 +08:00
|
|
|
|
if((fid = H5Fopen(filename, H5F_ACC_RDONLY | H5F_ACC_SWMR_READ, fapl)) < 0)
|
|
|
|
|
FAIL_STACK_ERROR
|
2018-03-19 11:51:19 +08:00
|
|
|
|
|
|
|
|
|
/* Push API context */
|
|
|
|
|
if(H5CX_push() < 0) FAIL_STACK_ERROR
|
|
|
|
|
api_ctx_pushed = TRUE;
|
2016-12-18 16:42:15 +08:00
|
|
|
|
|
|
|
|
|
/* Get H5F_t * to internal file structure */
|
2018-10-10 23:10:15 +08:00
|
|
|
|
if(NULL == (f = (H5F_t *)H5VL_object(fid)))
|
2019-01-06 13:06:45 +08:00
|
|
|
|
FAIL_STACK_ERROR
|
2016-12-18 16:42:15 +08:00
|
|
|
|
|
|
|
|
|
/* Should read in [1024, 2024] with buf data */
|
2018-03-16 05:54:30 +08:00
|
|
|
|
if(H5F_block_read(f, H5FD_MEM_DEFAULT, (haddr_t)1024, (size_t)1024, rbuf) < 0)
|
2019-01-06 13:06:45 +08:00
|
|
|
|
FAIL_STACK_ERROR;
|
2016-12-18 16:42:15 +08:00
|
|
|
|
|
|
|
|
|
/* Verify the data read is correct */
|
|
|
|
|
if(HDmemcmp(buf, rbuf, (size_t)1024) != 0)
|
2019-01-06 13:06:45 +08:00
|
|
|
|
TEST_ERROR;
|
2016-12-18 16:42:15 +08:00
|
|
|
|
|
|
|
|
|
/* CLose the file */
|
|
|
|
|
if(H5Pclose(fapl) < 0)
|
2019-01-06 13:06:45 +08:00
|
|
|
|
FAIL_STACK_ERROR;
|
2016-12-18 16:42:15 +08:00
|
|
|
|
if(H5Fclose(fid) < 0)
|
2019-01-06 13:06:45 +08:00
|
|
|
|
FAIL_STACK_ERROR;
|
2018-03-19 11:51:19 +08:00
|
|
|
|
|
|
|
|
|
/* Pop API context */
|
|
|
|
|
if(api_ctx_pushed && H5CX_pop() < 0) FAIL_STACK_ERROR
|
|
|
|
|
api_ctx_pushed = FALSE;
|
2016-12-18 16:42:15 +08:00
|
|
|
|
|
|
|
|
|
return EXIT_SUCCESS;
|
|
|
|
|
|
2018-09-19 13:57:37 +08:00
|
|
|
|
error:
|
|
|
|
|
H5E_BEGIN_TRY {
|
|
|
|
|
H5Pclose(fapl);
|
|
|
|
|
H5Fclose(fid);
|
|
|
|
|
} H5E_END_TRY;
|
2018-03-19 11:51:19 +08:00
|
|
|
|
|
|
|
|
|
if(api_ctx_pushed) H5CX_pop();
|
|
|
|
|
|
2016-12-18 16:42:15 +08:00
|
|
|
|
return EXIT_FAILURE;
|
|
|
|
|
} /* end main() */
|
|
|
|
|
|