summaryrefslogtreecommitdiffstats
path: root/src/H5Goh.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/H5Goh.c')
-rw-r--r--src/H5Goh.c88
1 files changed, 86 insertions, 2 deletions
diff --git a/src/H5Goh.c b/src/H5Goh.c
index c51a493..d1d25b3 100644
--- a/src/H5Goh.c
+++ b/src/H5Goh.c
@@ -23,29 +23,37 @@
/***********/
#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_group_isa(H5O_t *loc);
+static hid_t H5O_group_open(H5G_loc_t *obj_loc, hid_t dxpl_id);
+static H5O_loc_t *H5O_group_get_oloc(hid_t obj_id);
/*********************/
/* Package Variables */
/*********************/
+
/*****************************/
/* Library Private Variables */
/*****************************/
+
/*******************/
/* Local Variables */
/*******************/
@@ -56,7 +64,9 @@ const H5O_obj_class_t H5O_OBJ_GROUP[1] = {{
"group", /* object name, for debugging */
NULL, /* get 'copy file' user data */
NULL, /* free 'copy file' user data */
- H5O_group_isa /* "isa" message */
+ H5O_group_isa, /* "isa" message */
+ H5O_group_open, /* open an object of this class */
+ H5O_group_get_oloc /* get an object header location for an object */
}};
@@ -77,7 +87,7 @@ const H5O_obj_class_t H5O_OBJ_GROUP[1] = {{
*
*-------------------------------------------------------------------------
*/
-htri_t
+static htri_t
H5O_group_isa(struct H5O_t *oh)
{
htri_t stab_exists; /* Whether the 'stab' message is in the object header */
@@ -100,3 +110,77 @@ done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5O_group_isa() */
+
+/*-------------------------------------------------------------------------
+ * Function: H5O_group_open
+ *
+ * Purpose: Open a group at a particular location
+ *
+ * Return: Success: Open object identifier
+ * Failure: Negative
+ *
+ * Programmer: Quincey Koziol
+ * Monday, November 6, 2006
+ *
+ *-------------------------------------------------------------------------
+ */
+static hid_t
+H5O_group_open(H5G_loc_t *obj_loc, hid_t dxpl_id)
+{
+ H5G_t *grp = NULL; /* Group opened */
+ hid_t ret_value; /* Return value */
+
+ FUNC_ENTER_NOAPI_NOINIT(H5O_group_open)
+
+ HDassert(obj_loc);
+
+ /* Open the group */
+ if((grp = H5G_open(obj_loc, dxpl_id)) == NULL)
+ HGOTO_ERROR(H5E_SYM, H5E_CANTOPENOBJ, FAIL, "unable to open group")
+
+ /* Register an ID for the group */
+ if((ret_value = H5I_register(H5I_GROUP, grp)) < 0)
+ HGOTO_ERROR(H5E_ATOM, H5E_CANTREGISTER, FAIL, "unable to register group")
+
+done:
+ if(ret_value < 0)
+ if(grp != NULL)
+ H5G_close(grp);
+
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5O_group_open() */
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5O_group_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_group_get_oloc(hid_t obj_id)
+{
+ H5G_t *grp; /* Group opened */
+ H5O_loc_t *ret_value; /* Return value */
+
+ FUNC_ENTER_NOAPI_NOINIT(H5O_group_get_oloc)
+
+ /* Get the group */
+ if((grp = H5I_object(obj_id)) == NULL)
+ HGOTO_ERROR(H5E_OHDR, H5E_BADATOM, NULL, "couldn't get object from ID")
+
+ /* Get the group's object header location */
+ if((ret_value = H5G_oloc(grp)) == NULL)
+ HGOTO_ERROR(H5E_OHDR, H5E_CANTGET, NULL, "unable to get object location from object")
+
+done:
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5O_group_get_oloc() */
+