diff options
author | Quincey Koziol <koziol@hdfgroup.org> | 2006-11-06 21:35:44 (GMT) |
---|---|---|
committer | Quincey Koziol <koziol@hdfgroup.org> | 2006-11-06 21:35:44 (GMT) |
commit | 2e8e42d6c9a229d0490cd97e9711fb707ad67578 (patch) | |
tree | 4c221dc336d6ef82cabe6af3c88ceeee15bf3067 /src/H5Toh.c | |
parent | 0a2cdffb0b11b92dc7ebdc6b188f3de10d53d9aa (diff) | |
download | hdf5-2e8e42d6c9a229d0490cd97e9711fb707ad67578.zip hdf5-2e8e42d6c9a229d0490cd97e9711fb707ad67578.tar.gz hdf5-2e8e42d6c9a229d0490cd97e9711fb707ad67578.tar.bz2 |
[svn-r12869] Description:
Rename new H5Gcopy() routine to H5Ocopy() as discussed in last Friday's
design discussion.
Tested on:
Linux/32 2.6 (chicago)
Diffstat (limited to 'src/H5Toh.c')
-rw-r--r-- | src/H5Toh.c | 88 |
1 files changed, 87 insertions, 1 deletions
diff --git a/src/H5Toh.c b/src/H5Toh.c index 5e86c30..bfca641 100644 --- a/src/H5Toh.c +++ b/src/H5Toh.c @@ -23,29 +23,39 @@ /***********/ #include "H5private.h" /* Generic Functions */ #include "H5Eprivate.h" /* Error handling */ +#include "H5Iprivate.h" /* IDs */ #include "H5Opkg.h" /* Object headers */ + /****************/ /* Local Macros */ /****************/ + /******************/ /* Local Typedefs */ /******************/ + /********************/ /* Local Prototypes */ /********************/ + static htri_t H5O_dtype_isa(H5O_t *loc); +static hid_t H5O_dtype_open(H5G_loc_t *obj_loc, hid_t dxpl_id); +static H5O_loc_t *H5O_dtype_get_oloc(hid_t obj_id); + /*********************/ /* Package Variables */ /*********************/ + /*****************************/ /* Library Private Variables */ /*****************************/ + /*******************/ /* Local Variables */ /*******************/ @@ -56,7 +66,9 @@ const H5O_obj_class_t H5O_OBJ_DATATYPE[1] = {{ "named datatype", /* object name, for debugging */ NULL, /* get 'copy file' user data */ NULL, /* free 'copy file' user data */ - H5O_dtype_isa /* "isa" */ + H5O_dtype_isa, /* "isa" */ + H5O_dtype_open, /* open an object of this class */ + H5O_dtype_get_oloc /* get an object header location for an object */ }}; @@ -93,3 +105,77 @@ done: FUNC_LEAVE_NOAPI(ret_value) } /* end H5O_dtype_isa() */ + +/*------------------------------------------------------------------------- + * Function: H5O_dtype_open + * + * Purpose: Open a datatype at a particular location + * + * Return: Success: Open object identifier + * Failure: Negative + * + * Programmer: Quincey Koziol + * Monday, November 6, 2006 + * + *------------------------------------------------------------------------- + */ +static hid_t +H5O_dtype_open(H5G_loc_t *obj_loc, hid_t dxpl_id) +{ + H5T_t *type = NULL; /* Datatype opened */ + hid_t ret_value; /* Return value */ + + FUNC_ENTER_NOAPI_NOINIT(H5O_dtype_open) + + HDassert(obj_loc); + + /* Open the datatype */ + if((type = H5T_open(obj_loc, dxpl_id)) == NULL) + HGOTO_ERROR(H5E_SYM, H5E_CANTOPENOBJ, FAIL, "unable to open datatype") + + /* Register an ID for the datatype */ + if((ret_value = H5I_register(H5I_DATATYPE, type)) < 0) + HGOTO_ERROR(H5E_ATOM, H5E_CANTREGISTER, FAIL, "unable to register datatype") + +done: + if(ret_value < 0) + if(type != NULL) + H5T_close(type); + + FUNC_LEAVE_NOAPI(ret_value) +} /* end H5O_dtype_open() */ + + +/*------------------------------------------------------------------------- + * Function: H5O_dtype_get_oloc + * + * Purpose: Retrieve the object header location for an open object + * + * Return: Success: Pointer to object header location + * Failure: NULL + * + * Programmer: Quincey Koziol + * Monday, November 6, 2006 + * + *------------------------------------------------------------------------- + */ +static H5O_loc_t * +H5O_dtype_get_oloc(hid_t obj_id) +{ + H5T_t *type; /* Datatype opened */ + H5O_loc_t *ret_value; /* Return value */ + + FUNC_ENTER_NOAPI_NOINIT(H5O_dtype_get_oloc) + + /* Get the datatype */ + if((type = H5I_object(obj_id)) == NULL) + HGOTO_ERROR(H5E_OHDR, H5E_BADATOM, NULL, "couldn't get object from ID") + + /* Get the datatype's object header location */ + if((ret_value = H5T_oloc(type)) == NULL) + HGOTO_ERROR(H5E_OHDR, H5E_CANTGET, NULL, "unable to get object location from object") + +done: + FUNC_LEAVE_NOAPI(ret_value) +} /* end H5O_dtype_get_oloc() */ + |