mirror of
https://github.com/HDFGroup/hdf5.git
synced 2025-01-30 15:32:37 +08:00
Fix H5VL_token_t type and fix H5VL_loc_by_token to use H5VL_token_t *
This commit is contained in:
parent
60756183d9
commit
7b03a1c036
@ -290,11 +290,11 @@ H5Oopen_by_addr(hid_t loc_id, haddr_t addr)
|
||||
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, H5I_INVALID_HID, "invalid VOL object")
|
||||
|
||||
/* This is a native specific routine that requires serialization of the token */
|
||||
p = obj_token;
|
||||
p = (uint8_t *)&obj_token;
|
||||
H5F_addr_encode(f, &p, addr);
|
||||
|
||||
loc_params.type = H5VL_OBJECT_BY_TOKEN;
|
||||
loc_params.loc_data.loc_by_token.token = obj_token;
|
||||
loc_params.loc_data.loc_by_token.token = &obj_token;
|
||||
loc_params.obj_type = vol_obj_type;
|
||||
|
||||
/* Open the object */
|
||||
|
@ -185,7 +185,7 @@ H5O__copy_expand_ref_object1(H5O_loc_t *src_oloc, const void *buf_src,
|
||||
/* Set up for the object copy for the reference */
|
||||
if(H5R__decode_token_obj_compat(src_buf, &buf_size, &tmp_token, token_size) < 0)
|
||||
HGOTO_ERROR(H5E_OHDR, H5E_CANTDECODE, FAIL, "unable to decode src object address")
|
||||
p = tmp_token;
|
||||
p = (uint8_t *)&tmp_token;
|
||||
H5F_addr_decode(src_oloc->file, (const uint8_t **)&p, &src_oloc->addr);
|
||||
if(!H5F_addr_defined(src_oloc->addr) || src_oloc->addr == 0)
|
||||
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "undefined reference pointer")
|
||||
@ -196,7 +196,7 @@ H5O__copy_expand_ref_object1(H5O_loc_t *src_oloc, const void *buf_src,
|
||||
HGOTO_ERROR(H5E_OHDR, H5E_CANTCOPY, FAIL, "unable to copy object")
|
||||
|
||||
/* Set the object reference info for the destination file */
|
||||
p = tmp_token;
|
||||
p = (uint8_t *)&tmp_token;
|
||||
H5F_addr_encode(dst_oloc->file, &p, dst_oloc->addr);
|
||||
if(H5R__encode_token_obj_compat((const H5VL_token_t *)&tmp_token, token_size, dst_buf, &buf_size) < 0)
|
||||
HGOTO_ERROR(H5E_OHDR, H5E_CANTDECODE, FAIL, "unable to encode dst object address")
|
||||
@ -371,7 +371,7 @@ H5O__copy_expand_ref_object2(H5O_loc_t *src_oloc, hid_t tid_src, H5T_t *dt_src,
|
||||
/* Get src object address */
|
||||
if(H5R__get_obj_token(ref, &tmp_token, &token_size) < 0)
|
||||
HGOTO_ERROR(H5E_OHDR, H5E_CANTGET, FAIL, "unable to get object token")
|
||||
p = tmp_token;
|
||||
p = (uint8_t *)&tmp_token;
|
||||
H5F_addr_decode(src_oloc->file, (const uint8_t **)&p, &src_oloc->addr);
|
||||
|
||||
/* Attempt to copy object from source to destination file */
|
||||
@ -379,7 +379,7 @@ H5O__copy_expand_ref_object2(H5O_loc_t *src_oloc, hid_t tid_src, H5T_t *dt_src,
|
||||
HGOTO_ERROR(H5E_OHDR, H5E_CANTCOPY, FAIL, "unable to copy object")
|
||||
|
||||
/* Set dst object address */
|
||||
p = tmp_token;
|
||||
p = (uint8_t *)&tmp_token;
|
||||
H5F_addr_encode(dst_oloc->file, &p, dst_oloc->addr);
|
||||
if(H5R__set_obj_token(ref, (const H5VL_token_t *)&tmp_token, token_size) < 0)
|
||||
HGOTO_ERROR(H5E_OHDR, H5E_CANTSET, FAIL, "unable to set object token")
|
||||
|
16
src/H5R.c
16
src/H5R.c
@ -130,7 +130,7 @@ H5Rcreate_object(hid_t loc_id, const char *name, hid_t oapl_id, H5R_ref_t *ref_p
|
||||
loc_params.obj_type = obj_type;
|
||||
|
||||
/* Get the object token */
|
||||
if(H5VL_object_specific(vol_obj, &loc_params, H5VL_OBJECT_LOOKUP, H5P_DATASET_XFER_DEFAULT, H5_REQUEST_NULL, obj_token) < 0)
|
||||
if(H5VL_object_specific(vol_obj, &loc_params, H5VL_OBJECT_LOOKUP, H5P_DATASET_XFER_DEFAULT, H5_REQUEST_NULL, &obj_token) < 0)
|
||||
HGOTO_ERROR(H5E_REFERENCE, H5E_CANTGET, FAIL, "unable to retrieve object token")
|
||||
|
||||
/* Create the reference (do not pass filename, since file_id is attached) */
|
||||
@ -223,7 +223,7 @@ H5Rcreate_region(hid_t loc_id, const char *name, hid_t space_id,
|
||||
loc_params.obj_type = obj_type;
|
||||
|
||||
/* Get the object token */
|
||||
if(H5VL_object_specific(vol_obj, &loc_params, H5VL_OBJECT_LOOKUP, H5P_DATASET_XFER_DEFAULT, H5_REQUEST_NULL, obj_token) < 0)
|
||||
if(H5VL_object_specific(vol_obj, &loc_params, H5VL_OBJECT_LOOKUP, H5P_DATASET_XFER_DEFAULT, H5_REQUEST_NULL, &obj_token) < 0)
|
||||
HGOTO_ERROR(H5E_REFERENCE, H5E_CANTGET, FAIL, "unable to retrieve object token")
|
||||
|
||||
/* Create the reference (do not pass filename, since file_id is attached) */
|
||||
@ -312,7 +312,7 @@ H5Rcreate_attr(hid_t loc_id, const char *name, const char *attr_name,
|
||||
loc_params.obj_type = obj_type;
|
||||
|
||||
/* Get the object token */
|
||||
if(H5VL_object_specific(vol_obj, &loc_params, H5VL_OBJECT_LOOKUP, H5P_DATASET_XFER_DEFAULT, H5_REQUEST_NULL, obj_token) < 0)
|
||||
if(H5VL_object_specific(vol_obj, &loc_params, H5VL_OBJECT_LOOKUP, H5P_DATASET_XFER_DEFAULT, H5_REQUEST_NULL, &obj_token) < 0)
|
||||
HGOTO_ERROR(H5E_REFERENCE, H5E_CANTGET, FAIL, "unable to retrieve object token")
|
||||
|
||||
/* Create the reference (do not pass filename, since file_id is attached) */
|
||||
@ -511,7 +511,7 @@ H5Ropen_object(const H5R_ref_t *ref_ptr, hid_t rapl_id, hid_t oapl_id)
|
||||
|
||||
/* Set location parameters */
|
||||
loc_params.type = H5VL_OBJECT_BY_TOKEN;
|
||||
loc_params.loc_data.loc_by_token.token = obj_token;
|
||||
loc_params.loc_data.loc_by_token.token = &obj_token;
|
||||
loc_params.obj_type = H5I_get_type(loc_id);
|
||||
|
||||
/* Open object by token */
|
||||
@ -583,7 +583,7 @@ H5Ropen_region(const H5R_ref_t *ref_ptr, hid_t rapl_id, hid_t oapl_id)
|
||||
|
||||
/* Set location parameters */
|
||||
loc_params.type = H5VL_OBJECT_BY_TOKEN;
|
||||
loc_params.loc_data.loc_by_token.token = obj_token;
|
||||
loc_params.loc_data.loc_by_token.token = &obj_token;
|
||||
loc_params.obj_type = H5I_get_type(loc_id);
|
||||
|
||||
/* Open object by token */
|
||||
@ -675,7 +675,7 @@ H5Ropen_attr(const H5R_ref_t *ref_ptr, hid_t rapl_id, hid_t aapl_id)
|
||||
|
||||
/* Set location parameters */
|
||||
loc_params.type = H5VL_OBJECT_BY_TOKEN;
|
||||
loc_params.loc_data.loc_by_token.token = obj_token;
|
||||
loc_params.loc_data.loc_by_token.token = &obj_token;
|
||||
loc_params.obj_type = H5I_get_type(loc_id);
|
||||
|
||||
/* Open object by token */
|
||||
@ -765,7 +765,7 @@ H5Rget_obj_type3(const H5R_ref_t *ref_ptr, hid_t rapl_id, H5O_type_t *obj_type)
|
||||
|
||||
/* Set location parameters */
|
||||
loc_params.type = H5VL_OBJECT_BY_TOKEN;
|
||||
loc_params.loc_data.loc_by_token.token = obj_token;
|
||||
loc_params.loc_data.loc_by_token.token = &obj_token;
|
||||
loc_params.obj_type = H5I_get_type(loc_id);
|
||||
|
||||
/* Retrieve object's type */
|
||||
@ -873,7 +873,7 @@ H5Rget_obj_name(const H5R_ref_t *ref_ptr, hid_t rapl_id, char *buf, size_t size)
|
||||
|
||||
/* Set location parameters */
|
||||
loc_params.type = H5VL_OBJECT_BY_TOKEN;
|
||||
loc_params.loc_data.loc_by_token.token = obj_token;
|
||||
loc_params.loc_data.loc_by_token.token = &obj_token;
|
||||
loc_params.obj_type = H5I_get_type(loc_id);
|
||||
|
||||
/* Retrieve object's name */
|
||||
|
@ -128,7 +128,7 @@ H5Rget_obj_type1(hid_t id, H5R_type_t ref_type, const void *ref)
|
||||
|
||||
/* Set location parameters */
|
||||
loc_params.type = H5VL_OBJECT_BY_TOKEN;
|
||||
loc_params.loc_data.loc_by_token.token = obj_token;
|
||||
loc_params.loc_data.loc_by_token.token = &obj_token;
|
||||
loc_params.obj_type = vol_obj_type;
|
||||
|
||||
/* Retrieve object's type */
|
||||
@ -188,7 +188,7 @@ H5Rdereference1(hid_t obj_id, H5R_type_t ref_type, const void *ref)
|
||||
|
||||
/* Set location parameters */
|
||||
loc_params.type = H5VL_OBJECT_BY_TOKEN;
|
||||
loc_params.loc_data.loc_by_token.token = obj_token;
|
||||
loc_params.loc_data.loc_by_token.token = &obj_token;
|
||||
loc_params.obj_type = vol_obj_type;
|
||||
|
||||
/* Dereference */
|
||||
@ -262,7 +262,7 @@ H5Rcreate(void *ref, hid_t loc_id, const char *name, H5R_type_t ref_type,
|
||||
loc_params.obj_type = vol_obj_type;
|
||||
|
||||
/* Get the object token */
|
||||
if(H5VL_object_specific(vol_obj, &loc_params, H5VL_OBJECT_LOOKUP, H5P_DATASET_XFER_DEFAULT, H5_REQUEST_NULL, obj_token) < 0)
|
||||
if(H5VL_object_specific(vol_obj, &loc_params, H5VL_OBJECT_LOOKUP, H5P_DATASET_XFER_DEFAULT, H5_REQUEST_NULL, &obj_token) < 0)
|
||||
HGOTO_ERROR(H5E_REFERENCE, H5E_CANTGET, FAIL, "unable to retrieve object token")
|
||||
|
||||
/* Get the file for the object */
|
||||
@ -357,7 +357,7 @@ H5Rget_obj_type2(hid_t id, H5R_type_t ref_type, const void *ref,
|
||||
|
||||
/* Set location parameters */
|
||||
loc_params.type = H5VL_OBJECT_BY_TOKEN;
|
||||
loc_params.loc_data.loc_by_token.token = obj_token;
|
||||
loc_params.loc_data.loc_by_token.token = &obj_token;
|
||||
loc_params.obj_type = vol_obj_type;
|
||||
|
||||
/* Retrieve object's type */
|
||||
@ -421,7 +421,7 @@ H5Rdereference2(hid_t obj_id, hid_t oapl_id, H5R_type_t ref_type,
|
||||
|
||||
/* Set location parameters */
|
||||
loc_params.type = H5VL_OBJECT_BY_TOKEN;
|
||||
loc_params.loc_data.loc_by_token.token = obj_token;
|
||||
loc_params.loc_data.loc_by_token.token = &obj_token;
|
||||
loc_params.obj_type = vol_obj_type;
|
||||
|
||||
/* Open object by token */
|
||||
@ -554,7 +554,7 @@ H5Rget_name(hid_t id, H5R_type_t ref_type, const void *ref, char *name,
|
||||
|
||||
/* Set location parameters */
|
||||
loc_params.type = H5VL_OBJECT_BY_TOKEN;
|
||||
loc_params.loc_data.loc_by_token.token = obj_token;
|
||||
loc_params.loc_data.loc_by_token.token = &obj_token;
|
||||
loc_params.obj_type = vol_obj_type;
|
||||
|
||||
/* Retrieve object's name */
|
||||
|
20
src/H5Rint.c
20
src/H5Rint.c
@ -258,7 +258,7 @@ H5R__create_object(const H5VL_token_t *obj_token, size_t token_size,
|
||||
HDassert(ref);
|
||||
|
||||
/* Create new reference */
|
||||
H5MM_memcpy(ref->ref.obj.token, obj_token, token_size);
|
||||
H5MM_memcpy(&ref->ref.obj.token, obj_token, token_size);
|
||||
ref->ref.obj.filename = NULL;
|
||||
ref->loc_id = H5I_INVALID_HID;
|
||||
ref->type = (uint8_t)H5R_OBJECT2;
|
||||
@ -300,7 +300,7 @@ H5R__create_region(const H5VL_token_t *obj_token, size_t token_size,
|
||||
HDassert(ref);
|
||||
|
||||
/* Create new reference */
|
||||
H5MM_memcpy(ref->ref.obj.token, obj_token, token_size);
|
||||
H5MM_memcpy(&ref->ref.obj.token, obj_token, token_size);
|
||||
ref->ref.obj.filename = NULL;
|
||||
if(NULL == (ref->ref.reg.space = H5S_copy(space, FALSE, TRUE)))
|
||||
HGOTO_ERROR(H5E_REFERENCE, H5E_CANTCOPY, FAIL, "unable to copy dataspace")
|
||||
@ -355,7 +355,7 @@ H5R__create_attr(const H5VL_token_t *obj_token, size_t token_size,
|
||||
HGOTO_ERROR(H5E_REFERENCE, H5E_ARGS, FAIL, "attribute name too long (%d > %d)", (int)HDstrlen(attr_name), H5R_MAX_STRING_LEN)
|
||||
|
||||
/* Create new reference */
|
||||
H5MM_memcpy(ref->ref.obj.token, obj_token, token_size);
|
||||
H5MM_memcpy(&ref->ref.obj.token, obj_token, token_size);
|
||||
ref->ref.obj.filename = NULL;
|
||||
if(NULL == (ref->ref.attr.name = HDstrdup(attr_name)))
|
||||
HGOTO_ERROR(H5E_REFERENCE, H5E_CANTCOPY, FAIL, "Cannot copy attribute name")
|
||||
@ -602,7 +602,7 @@ H5R__equal(const H5R_ref_priv_t *ref1, const H5R_ref_priv_t *ref2)
|
||||
/* Compare object addresses */
|
||||
if(ref1->token_size != ref2->token_size)
|
||||
HGOTO_DONE(FALSE);
|
||||
if(0 != HDmemcmp(ref1->ref.obj.token, ref2->ref.obj.token, ref1->token_size))
|
||||
if(0 != HDmemcmp(&ref1->ref.obj.token, &ref2->ref.obj.token, ref1->token_size))
|
||||
HGOTO_DONE(FALSE);
|
||||
|
||||
/* Compare filenames */
|
||||
@ -659,7 +659,7 @@ H5R__copy(const H5R_ref_priv_t *src_ref, H5R_ref_priv_t *dst_ref)
|
||||
|
||||
HDassert((src_ref != NULL) && (dst_ref != NULL));
|
||||
|
||||
H5MM_memcpy(dst_ref->ref.obj.token, src_ref->ref.obj.token, src_ref->token_size);
|
||||
H5MM_memcpy(&dst_ref->ref.obj.token, &src_ref->ref.obj.token, src_ref->token_size);
|
||||
dst_ref->encode_size = src_ref->encode_size;
|
||||
dst_ref->type = src_ref->type;
|
||||
dst_ref->token_size = src_ref->token_size;
|
||||
@ -729,7 +729,7 @@ H5R__get_obj_token(const H5R_ref_priv_t *ref, H5VL_token_t *obj_token,
|
||||
if(obj_token) {
|
||||
if(0 == ref->token_size)
|
||||
HGOTO_ERROR(H5E_REFERENCE, H5E_CANTCOPY, FAIL, "NULL token size")
|
||||
H5MM_memcpy(obj_token, ref->ref.obj.token, ref->token_size);
|
||||
H5MM_memcpy(obj_token, &ref->ref.obj.token, ref->token_size);
|
||||
}
|
||||
if(token_size)
|
||||
*token_size = ref->token_size;
|
||||
@ -761,7 +761,7 @@ H5R__set_obj_token(H5R_ref_priv_t *ref, const H5VL_token_t *obj_token,
|
||||
HDassert(token_size);
|
||||
HDassert(token_size <= H5VL_MAX_TOKEN_SIZE);
|
||||
|
||||
H5MM_memcpy(ref->ref.obj.token, obj_token, ref->token_size);
|
||||
H5MM_memcpy(&ref->ref.obj.token, obj_token, ref->token_size);
|
||||
ref->token_size = token_size;
|
||||
|
||||
FUNC_LEAVE_NOAPI(ret_value)
|
||||
@ -1702,13 +1702,13 @@ H5R__decode_token_region_compat(H5F_t *f, const unsigned char *buf,
|
||||
|
||||
/* Get object address */
|
||||
p = (const uint8_t *)data;
|
||||
H5MM_memcpy(token, p, token_size);
|
||||
H5MM_memcpy(&token, p, token_size);
|
||||
p += token_size;
|
||||
|
||||
if(space_ptr) {
|
||||
H5O_loc_t oloc; /* Object location */
|
||||
H5S_t *space = NULL;
|
||||
const uint8_t *q = token;
|
||||
const uint8_t *q = (const uint8_t *)&token;
|
||||
|
||||
/* Initialize the object location */
|
||||
H5O_loc_reset(&oloc);
|
||||
@ -1726,7 +1726,7 @@ H5R__decode_token_region_compat(H5F_t *f, const unsigned char *buf,
|
||||
*space_ptr = space;
|
||||
}
|
||||
if(obj_token)
|
||||
H5MM_memcpy(obj_token, token, token_size);
|
||||
H5MM_memcpy(obj_token, &token, token_size);
|
||||
|
||||
done:
|
||||
H5MM_free(data);
|
||||
|
@ -52,7 +52,9 @@
|
||||
|
||||
/* type for tokens. Token are unique and permanent identifiers that are
|
||||
* used to reference HDF5 objects. */
|
||||
typedef unsigned char H5VL_token_t[H5VL_MAX_TOKEN_SIZE];
|
||||
typedef struct {
|
||||
char __data[H5VL_MAX_TOKEN_SIZE];
|
||||
} H5VL_token_t;
|
||||
|
||||
/* types for attribute GET callback */
|
||||
typedef enum H5VL_attr_get_t {
|
||||
@ -213,7 +215,7 @@ typedef struct H5VL_loc_by_idx {
|
||||
} H5VL_loc_by_idx_t;
|
||||
|
||||
typedef struct H5VL_loc_by_token {
|
||||
void *token;
|
||||
H5VL_token_t *token;
|
||||
} H5VL_loc_by_token_t;
|
||||
|
||||
/* Structure to hold parameters for object locations.
|
||||
|
@ -287,7 +287,7 @@ H5VL__native_object_specific(void *obj, const H5VL_loc_params_t *loc_params, H5V
|
||||
/* Lookup object */
|
||||
case H5VL_OBJECT_LOOKUP:
|
||||
{
|
||||
void *token = va_arg(arguments, void *);
|
||||
H5VL_token_t *token = va_arg(arguments, H5VL_token_t *);
|
||||
|
||||
HDassert(token);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user