summaryrefslogtreecommitdiffstats
path: root/src/H5VLnative_blob.c
diff options
context:
space:
mode:
authorJerome Soumagne <jsoumagne@hdfgroup.org>2019-09-19 19:55:03 (GMT)
committerJerome Soumagne <jsoumagne@hdfgroup.org>2019-10-08 19:30:24 (GMT)
commitfa6fdde1bfb8a29cfc86a4b441c49a63f15fd109 (patch)
treef177a35a87255c46747e497c4281d4843967eee6 /src/H5VLnative_blob.c
parenteaa65c862b09b399fc4727e664b56b648cfb37d2 (diff)
downloadhdf5-fa6fdde1bfb8a29cfc86a4b441c49a63f15fd109.zip
hdf5-fa6fdde1bfb8a29cfc86a4b441c49a63f15fd109.tar.gz
hdf5-fa6fdde1bfb8a29cfc86a4b441c49a63f15fd109.tar.bz2
Fix H5VL_blob_get to return size of blob
Fix const in blob API Add H5HG_HEAP_ID_SIZE macro to return native blob size Add maximum size for blobs Fix blob API callbacks to pass VOL file object Add public wrappers for blob VOL API Implement passthrough blob callbacks Update H5Tvlen after callback changes Update trace information for H5VL blob routines Fix public header inclusion in native and passthru headers
Diffstat (limited to 'src/H5VLnative_blob.c')
-rw-r--r--src/H5VLnative_blob.c71
1 files changed, 24 insertions, 47 deletions
diff --git a/src/H5VLnative_blob.c b/src/H5VLnative_blob.c
index 6f2fbe6..b16b407 100644
--- a/src/H5VLnative_blob.c
+++ b/src/H5VLnative_blob.c
@@ -68,22 +68,23 @@
*-------------------------------------------------------------------------
*/
herr_t
-H5VL__native_blob_put(void *blob, size_t size, void *_ctx, void *_id)
+H5VL__native_blob_put(void *obj, const void *buf, size_t size, void *blob_id,
+ void H5_ATTR_UNUSED *ctx)
{
- uint8_t *id = (uint8_t *)_id; /* Pointer to blob ID */
- H5F_t *f = (H5F_t *)_ctx; /* Retrieve file pointer from context */
+ H5F_t *f = (H5F_t *)obj; /* Retrieve file pointer */
+ uint8_t *id = (uint8_t *)blob_id; /* Pointer to blob ID */
H5HG_t hobjid; /* New VL sequence's heap ID */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_PACKAGE
/* Check parameters */
- HDassert(id);
- HDassert(size == 0 || blob);
HDassert(f);
+ HDassert(size == 0 || buf);
+ HDassert(id);
/* Write the VL information to disk (allocates space also) */
- if(H5HG_insert(f, size, blob, &hobjid) < 0)
+ if(H5HG_insert(f, size, (void *)buf, &hobjid) < 0)
HGOTO_ERROR(H5E_VOL, H5E_WRITEERROR, FAIL, "unable to write blob information")
/* Encode the heap information */
@@ -108,18 +109,19 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5VL__native_blob_get(const void *_id, void *_ctx, void *buf)
+H5VL__native_blob_get(void *obj, const void *blob_id, void *buf, size_t *size,
+ void H5_ATTR_UNUSED *ctx)
{
- const uint8_t *id = (const uint8_t *)_id; /* Pointer to the disk blob ID */
- H5F_t *f = (H5F_t *)_ctx; /* Retrieve file pointer from context */
+ H5F_t *f = (H5F_t *)obj; /* Retrieve file pointer */
+ const uint8_t *id = (const uint8_t *)blob_id; /* Pointer to the disk blob ID */
H5HG_t hobjid; /* Global heap ID for sequence */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_PACKAGE
/* Sanity check */
- HDassert(id);
HDassert(f);
+ HDassert(id);
HDassert(buf);
/* Get the heap information */
@@ -129,7 +131,7 @@ H5VL__native_blob_get(const void *_id, void *_ctx, void *buf)
/* Check if this sequence actually has any data */
if(hobjid.addr > 0)
/* Read the VL information from disk */
- if(NULL == H5HG_read(f, &hobjid, buf, NULL))
+ if(NULL == H5HG_read(f, &hobjid, buf, size))
HGOTO_ERROR(H5E_VOL, H5E_READERROR, FAIL, "unable to read VL information")
done:
@@ -150,18 +152,22 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5VL__native_blob_specific(void *_id, H5VL_blob_specific_t specific_type,
- va_list arguments)
+H5VL__native_blob_specific(void *obj, void *blob_id,
+ H5VL_blob_specific_t specific_type, va_list arguments)
{
+ H5F_t *f = (H5F_t *)obj; /* Retrieve file pointer */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_PACKAGE
+ /* Sanity check */
+ HDassert(f);
+ HDassert(blob_id);
+
switch(specific_type) {
case H5VL_BLOB_GETSIZE:
{
- const uint8_t *id = (const uint8_t *)_id; /* Pointer to the blob ID */
- H5F_t *f = HDva_arg(arguments, H5F_t *);
+ const uint8_t *id = (const uint8_t *)blob_id; /* Pointer to the blob ID */
size_t *size = HDva_arg(arguments, size_t *);
H5HG_t hobjid; /* blob's heap ID */
@@ -182,8 +188,7 @@ H5VL__native_blob_specific(void *_id, H5VL_blob_specific_t specific_type,
case H5VL_BLOB_ISNULL:
{
- const uint8_t *id = (const uint8_t *)_id; /* Pointer to the blob ID */
- H5F_t *f = HDva_arg(arguments, H5F_t *);
+ const uint8_t *id = (const uint8_t *)blob_id; /* Pointer to the blob ID */
hbool_t *isnull = HDva_arg(arguments, hbool_t *);
haddr_t addr; /* Sequence's heap address */
@@ -198,9 +203,7 @@ H5VL__native_blob_specific(void *_id, H5VL_blob_specific_t specific_type,
case H5VL_BLOB_SETNULL:
{
- uint8_t *id = (uint8_t *)_id; /* Pointer to the blob ID */
- H5F_t *f = HDva_arg(arguments, H5F_t *);
-
+ uint8_t *id = (uint8_t *)blob_id; /* Pointer to the blob ID */
/* Encode the "nil" heap pointer information */
H5F_addr_encode(f, &id, (haddr_t)0);
UINT32ENCODE(id, 0);
@@ -210,8 +213,7 @@ H5VL__native_blob_specific(void *_id, H5VL_blob_specific_t specific_type,
case H5VL_BLOB_DELETE:
{
- const uint8_t *id = (const uint8_t *)_id; /* Pointer to the blob ID */
- H5F_t *f = HDva_arg(arguments, H5F_t *);
+ const uint8_t *id = (const uint8_t *)blob_id; /* Pointer to the blob ID */
H5HG_t hobjid; /* VL sequence's heap ID */
/* Get heap information */
@@ -233,28 +235,3 @@ H5VL__native_blob_specific(void *_id, H5VL_blob_specific_t specific_type,
done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5VL__native_blob_specific() */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5VL__native_blob_optional
- *
- * Purpose: Handles the blob 'optional' callback
- *
- * Return: SUCCEED / FAIL
- *
- * Programmer: Quincey Koziol
- * Friday, August 15, 2019
- *
- *-------------------------------------------------------------------------
- */
-herr_t
-H5VL__native_blob_optional(void *id, va_list arguments)
-{
- herr_t ret_value = SUCCEED; /* Return value */
-
- FUNC_ENTER_PACKAGE
-
-done:
- FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5VL__native_blob_optional() */
-