mirror of
https://github.com/HDFGroup/hdf5.git
synced 2025-03-25 17:00:45 +08:00
* Added new public H5FDdriver_query() API call.
* Changed return type of H5FD_driver_query() to herr_t. * Updated swmr.c to use H5FDdriver_query() instead of the private call. * Added some flags tests to vfd.c.
This commit is contained in:
parent
e5a57c97aa
commit
479f326a26
42
src/H5FD.c
42
src/H5FD.c
@ -789,7 +789,8 @@ H5FD_open(const char *name, unsigned flags, hid_t fapl_id, haddr_t maxaddr)
|
||||
HGOTO_ERROR(H5E_VFL, H5E_UNSUPPORTED, NULL, "file driver has no `open' method")
|
||||
|
||||
/* Query driver flag */
|
||||
H5FD_driver_query(driver, &driver_flags);
|
||||
if(H5FD_driver_query(driver, &driver_flags) < 0)
|
||||
HGOTO_ERROR(H5E_VFL, H5E_BADVALUE, NULL, "can't query VFD flags")
|
||||
|
||||
/* Get initial file image info */
|
||||
if(H5P_peek(plist, H5F_ACS_FILE_IMAGE_INFO_NAME, &file_image_info) < 0)
|
||||
@ -2039,3 +2040,42 @@ H5FD_set_paged_aggr(H5FD_t *file, hbool_t paged)
|
||||
|
||||
FUNC_LEAVE_NOAPI(SUCCEED)
|
||||
} /* end H5FD_set_paged_aggr() */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5FDdriver_query
|
||||
*
|
||||
* Purpose: Similar to H5FD_query(), but intended for cases when we don't
|
||||
* have a file available (e.g. before one is opened). Since we
|
||||
* can't use the file to get the driver, the driver ID is passed
|
||||
* in as a parameter.
|
||||
*
|
||||
* Return: SUCCEED/FAIL
|
||||
*
|
||||
* Programmer: Jacob Gruber
|
||||
* Wednesday, August 17, 2011
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
H5FDdriver_query(hid_t driver_id, unsigned long *flags/*out*/)
|
||||
{
|
||||
H5FD_class_t *driver = NULL; /* Pointer to VFD class struct */
|
||||
herr_t ret_value = SUCCEED; /* Return value */
|
||||
|
||||
FUNC_ENTER_API(FAIL)
|
||||
H5TRACE2("e", "ix", driver_id, flags);
|
||||
|
||||
if(NULL == flags)
|
||||
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "flags parameter cannot be NULL")
|
||||
|
||||
/* Check for the driver to query and then query it */
|
||||
if (NULL == (driver = (H5FD_class_t *)H5I_object_verify(driver_id, H5I_VFL)))
|
||||
HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "not a VFL ID")
|
||||
if (H5FD_driver_query(driver, flags) < 0)
|
||||
HGOTO_ERROR(H5E_VFL, H5E_BADVALUE, FAIL, "driver flag query failed")
|
||||
|
||||
done:
|
||||
FUNC_LEAVE_API(ret_value)
|
||||
} /* end H5FDdriver_query() */
|
||||
|
||||
|
@ -442,18 +442,17 @@ done:
|
||||
* can't use the file to get the driver, the driver is passed in
|
||||
* as a parameter.
|
||||
*
|
||||
* Return: Success: non-negative
|
||||
* Failure: negative
|
||||
* Return: SUCCEED/FAIL
|
||||
*
|
||||
* Programmer: Jacob Gruber
|
||||
* Wednesday, August 17, 2011
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
int
|
||||
herr_t
|
||||
H5FD_driver_query(const H5FD_class_t *driver, unsigned long *flags/*out*/)
|
||||
{
|
||||
int ret_value = 0; /* Return value */
|
||||
herr_t ret_value = SUCCEED; /* Return value */
|
||||
|
||||
FUNC_ENTER_NOAPI_NOINIT_NOERR
|
||||
|
||||
@ -469,4 +468,3 @@ H5FD_driver_query(const H5FD_class_t *driver, unsigned long *flags/*out*/)
|
||||
FUNC_LEAVE_NOAPI(ret_value)
|
||||
} /* end H5FD_driver_query() */
|
||||
|
||||
|
||||
|
@ -153,7 +153,7 @@ H5_DLL H5FD_t *H5FD_open(const char *name, unsigned flags, hid_t fapl_id,
|
||||
haddr_t maxaddr);
|
||||
H5_DLL herr_t H5FD_close(H5FD_t *file);
|
||||
H5_DLL int H5FD_cmp(const H5FD_t *f1, const H5FD_t *f2);
|
||||
H5_DLL int H5FD_driver_query(const H5FD_class_t *driver, unsigned long *flags/*out*/);
|
||||
H5_DLL herr_t H5FD_driver_query(const H5FD_class_t *driver, unsigned long *flags/*out*/);
|
||||
H5_DLL haddr_t H5FD_alloc(H5FD_t *file, hid_t dxpl_id, H5FD_mem_t type,
|
||||
struct H5F_t *f, hsize_t size, haddr_t *frag_addr, hsize_t *frag_size);
|
||||
H5_DLL herr_t H5FD_free(H5FD_t *file, hid_t dxpl_id, H5FD_mem_t type, struct H5F_t *f,
|
||||
|
@ -384,6 +384,9 @@ H5_DLL herr_t H5FDtruncate(H5FD_t *file, hid_t dxpl_id, hbool_t closing);
|
||||
H5_DLL herr_t H5FDlock(H5FD_t *file, hbool_t rw);
|
||||
H5_DLL herr_t H5FDunlock(H5FD_t *file);
|
||||
|
||||
/* Allows querying a VFD ID for features before the file is opened */
|
||||
H5_DLL herr_t H5FDdriver_query(hid_t driver_id, unsigned long *flags/*out*/);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
@ -120,7 +120,6 @@ test_metadata_read_attempts(hid_t in_fapl)
|
||||
hid_t file_fapl = -1; /* The file's access property list */
|
||||
hid_t fid = -1, fid1 = -1, fid2 = -1; /* File IDs */
|
||||
hid_t driver_id = -1; /* ID for this VFD */
|
||||
H5FD_class_t *driver = NULL; /* Pointer to VFD class struct */
|
||||
unsigned long driver_flags = 0; /* VFD feature flags */
|
||||
hbool_t compat_w_default_vfd; /* current VFD compat w/ H5P_DEFAULT? */
|
||||
unsigned attempts; /* The # of read attempts */
|
||||
@ -138,9 +137,7 @@ test_metadata_read_attempts(hid_t in_fapl)
|
||||
*/
|
||||
if ((driver_id = H5Pget_driver(in_fapl)) < 0)
|
||||
FAIL_STACK_ERROR
|
||||
if (NULL == (driver = (H5FD_class_t *)H5I_object_verify(driver_id, H5I_VFL)))
|
||||
FAIL_STACK_ERROR
|
||||
if (H5FD_driver_query(driver, &driver_flags) < 0)
|
||||
if (H5FDdriver_query(driver_id, &driver_flags) < 0)
|
||||
FAIL_STACK_ERROR
|
||||
compat_w_default_vfd = (driver_flags & H5FD_FEAT_DEFAULT_VFD_COMPATIBLE) ? TRUE : FALSE;
|
||||
|
||||
|
48
test/vfd.c
48
test/vfd.c
@ -86,6 +86,8 @@ test_sec2(void)
|
||||
hid_t fid = -1; /* file ID */
|
||||
hid_t fapl_id = -1; /* file access property list ID */
|
||||
hid_t fapl_id_out = -1; /* from H5Fget_access_plist */
|
||||
hid_t driver_id = -1; /* ID for this VFD */
|
||||
unsigned long driver_flags = 0; /* VFD feature flags */
|
||||
char filename[1024]; /* filename */
|
||||
void *os_file_handle = NULL; /* OS file handle */
|
||||
hsize_t file_size; /* file size */
|
||||
@ -102,6 +104,28 @@ test_sec2(void)
|
||||
if((fid = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl_id)) < 0)
|
||||
TEST_ERROR;
|
||||
|
||||
/* Check that the VFD feature flags are correct */
|
||||
if ((driver_id = H5Pget_driver(fapl_id)) < 0)
|
||||
TEST_ERROR
|
||||
if (H5FDdriver_query(driver_id, &driver_flags) < 0)
|
||||
TEST_ERROR
|
||||
if(!(driver_flags & H5FD_FEAT_AGGREGATE_METADATA)) TEST_ERROR
|
||||
if(!(driver_flags & H5FD_FEAT_ACCUMULATE_METADATA)) TEST_ERROR
|
||||
if(!(driver_flags & H5FD_FEAT_DATA_SIEVE)) TEST_ERROR
|
||||
if(!(driver_flags & H5FD_FEAT_AGGREGATE_SMALLDATA)) TEST_ERROR
|
||||
if(!(driver_flags & H5FD_FEAT_POSIX_COMPAT_HANDLE)) TEST_ERROR
|
||||
if(!(driver_flags & H5FD_FEAT_SUPPORTS_SWMR_IO)) TEST_ERROR
|
||||
if(!(driver_flags & H5FD_FEAT_DEFAULT_VFD_COMPATIBLE)) TEST_ERROR
|
||||
/* Check for extra flags not accounted for above */
|
||||
if(driver_flags != (H5FD_FEAT_AGGREGATE_METADATA
|
||||
| H5FD_FEAT_ACCUMULATE_METADATA
|
||||
| H5FD_FEAT_DATA_SIEVE
|
||||
| H5FD_FEAT_AGGREGATE_SMALLDATA
|
||||
| H5FD_FEAT_POSIX_COMPAT_HANDLE
|
||||
| H5FD_FEAT_SUPPORTS_SWMR_IO
|
||||
| H5FD_FEAT_DEFAULT_VFD_COMPATIBLE))
|
||||
TEST_ERROR
|
||||
|
||||
/* Retrieve the access property list... */
|
||||
if((fapl_id_out = H5Fget_access_plist(fid)) < 0)
|
||||
TEST_ERROR;
|
||||
@ -174,6 +198,8 @@ test_core(void)
|
||||
hid_t fid = -1; /* file ID */
|
||||
hid_t fapl_id = -1; /* file access property list ID */
|
||||
hid_t fapl_id_out = -1; /* from H5Fget_access_plist */
|
||||
hid_t driver_id = -1; /* ID for this VFD */
|
||||
unsigned long driver_flags = 0; /* VFD feature flags */
|
||||
hid_t did = -1; /* dataset ID */
|
||||
hid_t sid = -1; /* dataspace ID */
|
||||
char filename[1024]; /* filename */
|
||||
@ -219,6 +245,28 @@ test_core(void)
|
||||
if(HDaccess(filename, F_OK) != -1)
|
||||
FAIL_PUTS_ERROR("file created when backing store set to FALSE");
|
||||
|
||||
/* Check that the VFD feature flags are correct.
|
||||
* Note that the H5FDdriver_query() API call does not require a file
|
||||
* so backing-store related flags will not be returned here.
|
||||
*/
|
||||
if ((driver_id = H5Pget_driver(fapl_id)) < 0)
|
||||
TEST_ERROR
|
||||
if (H5FDdriver_query(driver_id, &driver_flags) < 0)
|
||||
TEST_ERROR
|
||||
if(!(driver_flags & H5FD_FEAT_AGGREGATE_METADATA)) TEST_ERROR
|
||||
if(!(driver_flags & H5FD_FEAT_ACCUMULATE_METADATA)) TEST_ERROR
|
||||
if(!(driver_flags & H5FD_FEAT_DATA_SIEVE)) TEST_ERROR
|
||||
if(!(driver_flags & H5FD_FEAT_AGGREGATE_SMALLDATA)) TEST_ERROR
|
||||
if(!(driver_flags & H5FD_FEAT_ALLOW_FILE_IMAGE)) TEST_ERROR
|
||||
if(!(driver_flags & H5FD_FEAT_CAN_USE_FILE_IMAGE_CALLBACKS)) TEST_ERROR
|
||||
/* Check for extra flags not accounted for above */
|
||||
if(driver_flags != (H5FD_FEAT_AGGREGATE_METADATA
|
||||
| H5FD_FEAT_ACCUMULATE_METADATA
|
||||
| H5FD_FEAT_DATA_SIEVE
|
||||
| H5FD_FEAT_AGGREGATE_SMALLDATA
|
||||
| H5FD_FEAT_ALLOW_FILE_IMAGE
|
||||
| H5FD_FEAT_CAN_USE_FILE_IMAGE_CALLBACKS))
|
||||
TEST_ERROR
|
||||
|
||||
/************************************************************************
|
||||
* Check basic core VFD operation and properties. This is done with the
|
||||
|
Loading…
x
Reference in New Issue
Block a user