From b58192dfe739118385748c776e8a99c16b82bb03 Mon Sep 17 00:00:00 2001
From: Raymond Lu <songyulu@hdfgroup.org>
Date: Tue, 29 Apr 2003 14:49:48 -0500
Subject: [svn-r6779] Purpose: Backward compatibility change

Description: 1.4 compatibility for H5G_obj_t type and H5Zregister test.

Solution: use macro H5_WANT_H5_V1_4_COMPAT

Platforms tested: h5committest
---
 c++/test/dsets.cpp |  6 +++++-
 perform/chunk.c    |  4 ++++
 src/H5G.c          | 44 +++++++++++++++++++++++++++++++++++++-------
 src/H5Gpkg.h       |  2 +-
 src/H5Gprivate.h   |  8 ++++----
 src/H5Gpublic.h    | 20 ++++++++++++++++++++
 src/H5R.c          | 18 +++++++++---------
 test/dsets.c       |  8 ++++++++
 test/titerate.c    |  4 ++--
 9 files changed, 90 insertions(+), 24 deletions(-)

diff --git a/c++/test/dsets.cpp b/c++/test/dsets.cpp
index 8a2d77e..4ccbac2 100644
--- a/c++/test/dsets.cpp
+++ b/c++/test/dsets.cpp
@@ -650,7 +650,11 @@ test_compression(H5File& file)
 	TESTING("compression (app-defined method)");
 
 	// BMR: not sure how to handle this yet
-	if (H5Zregister (H5Z_BOGUS)<0) goto error;
+#ifdef H5_WANT_H5_V1_4_COMPAT
+        if (H5Zregister (H5Z_FILTER_BOGUS, "bogus", bogus)<0) goto error;
+#else /* H5_WANT_H5_V1_4_COMPAT */
+        if (H5Zregister (H5Z_BOGUS)<0) goto error;
+#endif /* H5_WANT_H5_V1_4_COMPAT */
 	if (H5Pset_filter (dscreatplist.getId(), H5Z_FILTER_BOGUS, 0, 0, NULL)<0) goto error;
 	dscreatplist.setFilter (H5Z_FILTER_BOGUS, 0, 0, NULL);
 
diff --git a/perform/chunk.c b/perform/chunk.c
index 46fb37d..0348e6d 100644
--- a/perform/chunk.c
+++ b/perform/chunk.c
@@ -152,7 +152,11 @@ create_dataset (void)
     dcpl = H5Pcreate (H5P_DATASET_CREATE);
     size[0] = size[1] = CH_SIZE;
     H5Pset_chunk (dcpl, 2, size);
+#ifdef H5_WANT_H5_V1_4_COMPAT
+    H5Zregister (FILTER_COUNTER, "counter", counter);
+#else /* H5_WANT_H5_V1_4_COMPAT */
     H5Zregister (H5Z_COUNTER);
+#endif /* H5_WANT_H5_V1_4_COMPAT */
     H5Pset_filter (dcpl, FILTER_COUNTER, 0, 0, NULL);
         
     /* The dataset */
diff --git a/src/H5G.c b/src/H5G.c
index fb11f8d..0b71257 100644
--- a/src/H5G.c
+++ b/src/H5G.c
@@ -156,7 +156,7 @@ static herr_t H5G_move(H5G_entry_t *src_loc, const char *src_name,
 static herr_t H5G_unlink(H5G_entry_t *loc, const char *name, hid_t dxpl_id);
 static herr_t H5G_get_num_objs(H5G_t *grp, hsize_t *num_objs, hid_t dxpl_id);
 static ssize_t H5G_get_objname_by_idx(H5G_t *grp, hsize_t idx, char* name, size_t size, hid_t dxpl_id);
-static H5G_obj_t H5G_get_objtype_by_idx(H5G_t *grp, hsize_t idx, hid_t dxpl_id);
+static int H5G_get_objtype_by_idx(H5G_t *grp, hsize_t idx, hid_t dxpl_id);
 static herr_t H5G_replace_ent(void *obj_ptr, hid_t obj_id, const void *key);
 static herr_t H5G_traverse_slink(H5G_entry_t *grp_ent/*in,out*/,
                   H5G_entry_t *obj_ent/*in,out*/, int *nlinks/*in,out*/, hid_t dxpl_id);
@@ -511,6 +511,35 @@ done:
  *
  *-------------------------------------------------------------------------
  */
+#ifdef H5_WANT_H5_V1_4_COMPAT
+int
+H5Gget_objtype_by_idx(hid_t group_id, hsize_t idx)
+{
+    H5G_t		*group = NULL;
+    hsize_t             num_objs;
+    int 		ret_value = H5G_UNKNOWN;
+    
+    FUNC_ENTER_API(H5Gget_objtype_by_idx, FAIL);
+    H5TRACE2("Is","ih",group_id,idx);
+
+    /* Check args */
+    if (NULL==(group = H5I_object_verify(group_id,H5I_GROUP)))
+	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a group");
+        
+    if (H5G_get_num_objs(group, &num_objs, H5AC_ind_dxpl_id)<0)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "unable to retrieve number of members");
+    if(idx >= num_objs)    
+	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "index out of bound");
+        
+    /*call private function*/
+    ret_value = H5G_get_objtype_by_idx(group, idx, H5AC_ind_dxpl_id);
+
+done:
+    FUNC_LEAVE_API(ret_value);
+
+}
+
+#else /*H5_WANT_H5_V1_4_COMPAT*/
 H5G_obj_t
 H5Gget_objtype_by_idx(hid_t group_id, hsize_t idx)
 {
@@ -531,12 +560,13 @@ H5Gget_objtype_by_idx(hid_t group_id, hsize_t idx)
 	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "index out of bound");
         
     /*call private function*/
-    ret_value = H5G_get_objtype_by_idx(group, idx, H5AC_ind_dxpl_id);
+    ret_value = (H5G_obj_t)H5G_get_objtype_by_idx(group, idx, H5AC_ind_dxpl_id);
 
 done:
     FUNC_LEAVE_API(ret_value);
 
 }
+#endif /*H5_WANT_H5_V1_4_COMPAT*/
 
 
 /*-------------------------------------------------------------------------
@@ -1003,7 +1033,7 @@ H5G_term_interface(void)
  *-------------------------------------------------------------------------
  */
 herr_t
-H5G_register_type(H5G_obj_t type, htri_t(*isa)(H5G_entry_t*, hid_t), const char *_desc)
+H5G_register_type(int type, htri_t(*isa)(H5G_entry_t*, hid_t), const char *_desc)
 {
     char	*desc = NULL;
     size_t	i;
@@ -2298,7 +2328,7 @@ done:
  *
  *-------------------------------------------------------------------------
  */
-H5G_obj_t
+int
 H5G_get_type(H5G_entry_t *ent, hid_t dxpl_id)
 {
     htri_t	isa;
@@ -2521,10 +2551,10 @@ done:
  *
  *-------------------------------------------------------------------------
  */
-static H5G_obj_t 
+static int 
 H5G_get_objtype_by_idx(H5G_t *grp, hsize_t idx, hid_t dxpl_id)
 {
-    H5G_obj_t		ret_value = H5G_UNKNOWN;
+    int		        ret_value = H5G_UNKNOWN;
     H5G_bt_ud3_t	udata;
     
     FUNC_ENTER_NOAPI(H5G_get_objtype_by_idx, FAIL);
@@ -3057,7 +3087,7 @@ done:
  *-------------------------------------------------------------------------
  */
 herr_t
-H5G_replace_name(H5G_obj_t type, H5G_entry_t *loc,
+H5G_replace_name(int type, H5G_entry_t *loc,
     H5RS_str_t *src_name, H5G_entry_t *src_loc,
     H5RS_str_t *dst_name, H5G_entry_t *dst_loc, H5G_names_op_t op )
 {
diff --git a/src/H5Gpkg.h b/src/H5Gpkg.h
index 53e8a31..5f9adfb 100644
--- a/src/H5Gpkg.h
+++ b/src/H5Gpkg.h
@@ -126,7 +126,7 @@ typedef struct H5G_bt_ud3_t {
     hsize_t      idx;           /*index of group member to be querried       */
     char         *name;         /*member name to be returned                 */
     hsize_t      num_objs;      /*the number of objects having been traversed*/
-    H5G_obj_t    type;          /*member type to be returned                 */
+    int          type;          /*member type to be returned                 */
 } H5G_bt_ud3_t;
 
 /*
diff --git a/src/H5Gprivate.h b/src/H5Gprivate.h
index 66fd86e..64b7689 100644
--- a/src/H5Gprivate.h
+++ b/src/H5Gprivate.h
@@ -120,7 +120,7 @@ typedef struct H5G_t H5G_t;
  * is allocated dynamically.
  */
 typedef struct H5G_typeinfo_t {
-    H5G_obj_t	type;			        /*one of the public H5G_* types	     */
+    int 	type;			        /*one of the public H5G_* types	     */
     htri_t	(*isa)(H5G_entry_t*, hid_t);	/*function to determine type	     */
     char	*desc;			        /*description of object type	     */
 } H5G_typeinfo_t;
@@ -148,7 +148,7 @@ struct H5O_stab_t;
  * Library prototypes...  These are the ones that other packages routinely
  * call.
  */
-H5_DLL herr_t H5G_register_type(H5G_obj_t type, htri_t(*isa)(H5G_entry_t*, hid_t),
+H5_DLL herr_t H5G_register_type(int type, htri_t(*isa)(H5G_entry_t*, hid_t),
 				 const char *desc);
 H5_DLL H5G_entry_t *H5G_loc(hid_t loc_id);
 H5_DLL herr_t H5G_mkroot(H5F_t *f, hid_t dxpl_id, H5G_entry_t *root_entry);
@@ -158,7 +158,7 @@ H5_DLL H5G_t *H5G_open(H5G_entry_t *loc, const char *name, hid_t dxpl_id);
 H5_DLL H5G_t *H5G_open_oid(H5G_entry_t *ent, hid_t dxpl_id);
 H5_DLL herr_t H5G_close(H5G_t *grp);
 H5_DLL H5G_t *H5G_rootof(H5F_t *f);
-H5_DLL H5G_obj_t H5G_get_type(H5G_entry_t *ent, hid_t dxpl_id);
+H5_DLL int H5G_get_type(H5G_entry_t *ent, hid_t dxpl_id);
 H5_DLL herr_t H5G_get_objinfo(H5G_entry_t *loc, const char *name,
 			       hbool_t follow_link,
 			       H5G_stat_t *statbuf/*out*/, hid_t dxpl_id);
@@ -167,7 +167,7 @@ H5_DLL herr_t H5G_insert(H5G_entry_t *loc, const char *name,
 H5_DLL herr_t H5G_find(H5G_entry_t *loc, const char *name,
 			H5G_entry_t *grp_ent/*out*/, H5G_entry_t *ent/*out*/, hid_t dxpl_id);
 H5_DLL H5F_t *H5G_insertion_file(H5G_entry_t *loc, const char *name, hid_t dxpl_id);
-H5_DLL  herr_t H5G_replace_name(H5G_obj_t type, H5G_entry_t *loc,
+H5_DLL  herr_t H5G_replace_name(int type, H5G_entry_t *loc,
         H5RS_str_t *src_name, H5G_entry_t *src_loc,
         H5RS_str_t *dst_name, H5G_entry_t *dst_loc, H5G_names_op_t op);
 H5_DLL  herr_t H5G_free_grp_name(H5G_t *grp);
diff --git a/src/H5Gpublic.h b/src/H5Gpublic.h
index 88b6c45..5a48e30 100644
--- a/src/H5Gpublic.h
+++ b/src/H5Gpublic.h
@@ -52,6 +52,17 @@ typedef enum H5G_link_t {
  * application is running.  An object may satisfy the `isa' function for more
  * than one type.
  */
+#ifdef H5_WANT_H5_V1_4_COMPAT
+#define    H5G_UNKNOWN          -1		/* Unknown object type		*/
+#define    H5G_LINK             0		/* Object is a symbolic link	*/
+#define    H5G_GROUP            1		/* Object is a group		*/
+#define    H5G_DATASET          2		/* Object is a dataset		*/
+#define    H5G_TYPE             3		/* Object is a named data type	*/
+#define    H5G_RESERVED_4       4		/* Reserved for future use	*/
+#define    H5G_RESERVED_5       5		/* Reserved for future use	*/
+#define    H5G_RESERVED_6       6		/* Reserved for future use	*/
+#define    H5G_RESERVED_7       7		/* Reserved for future use	*/
+#else /*H5_WANT_H5_V1_4_COMPAT*/
 typedef enum H5G_obj_t {
     H5G_UNKNOWN = -1,		/* Unknown object type		*/
     H5G_LINK,		        /* Object is a symbolic link	*/
@@ -63,6 +74,7 @@ typedef enum H5G_obj_t {
     H5G_RESERVED_6,		/* Reserved for future use	*/
     H5G_RESERVED_7		/* Reserved for future use	*/
 } H5G_obj_t;    
+#endif /*H5_WANT_H5_V1_4_COMPAT*/
 
 #define H5G_NTYPES	256		/* Max possible number of types	*/
 #define H5G_NLIBTYPES	8		/* Number of internal types	*/
@@ -74,7 +86,11 @@ typedef struct H5G_stat_t {
     unsigned long 	fileno[2];	/*file number			*/
     unsigned long 	objno[2];	/*object number			*/
     unsigned 		nlink;		/*number of hard links to object*/
+#ifdef H5_WANT_H5_V1_4_COMPAT
+    int 		type;		/*basic object type		*/
+#else /*H5_WANT_H5_V1_4_COMPAT*/
     H5G_obj_t 		type;		/*basic object type		*/
+#endif /*H5_WANT_H5_V1_4_COMPAT*/
     time_t		mtime;		/*modification time		*/
     size_t		linklen;	/*symbolic link value length	*/
 } H5G_stat_t;
@@ -95,7 +111,11 @@ H5_DLL herr_t H5Giterate(hid_t loc_id, const char *name, int *idx,
 			  H5G_iterate_t op, void *op_data);
 H5_DLL herr_t H5Gget_num_objs(hid_t loc_id, hsize_t *num_objs);
 H5_DLL ssize_t H5Gget_objname_by_idx(hid_t group_id, hsize_t idx, char* name, size_t size);
+#ifdef H5_WANT_H5_V1_4_COMPAT
+H5_DLL int H5Gget_objtype_by_idx(hid_t group_id, hsize_t idx);
+#else /*H5_WANT_H5_V1_4_COMPAT*/
 H5_DLL H5G_obj_t H5Gget_objtype_by_idx(hid_t group_id, hsize_t idx);
+#endif /*H5_WANT_H5_V1_4_COMPAT*/
 H5_DLL herr_t H5Gmove2(hid_t src_loc, const char *src, hid_t dst_loc, 
 			const char *dst);
 H5_DLL herr_t H5Glink2(hid_t src_loc, const char *cur_name, H5G_link_t type,
diff --git a/src/H5R.c b/src/H5R.c
index ee1c7e4..a085995 100644
--- a/src/H5R.c
+++ b/src/H5R.c
@@ -40,7 +40,7 @@ static herr_t H5R_create(void *ref, H5G_entry_t *loc, const char *name,
         H5R_type_t ref_type, H5S_t *space, hid_t dxpl_id);
 static hid_t H5R_dereference(H5F_t *file, hid_t dxpl_id, H5R_type_t ref_type, void *_ref);
 static H5S_t * H5R_get_region(H5F_t *file, hid_t dxpl_id, H5R_type_t ref_type, void *_ref);
-static H5G_obj_t H5R_get_obj_type(H5F_t *file, hid_t dxpl_id, H5R_type_t ref_type, void *_ref);
+static int H5R_get_obj_type(H5F_t *file, hid_t dxpl_id, H5R_type_t ref_type, void *_ref);
 
 
 /*--------------------------------------------------------------------------
@@ -337,7 +337,7 @@ H5R_dereference(H5F_t *file, hid_t dxpl_id, H5R_type_t ref_type, void *_ref)
     H5T_t *datatype;            /* Pointer to datatype to open */
     H5G_entry_t ent;            /* Symbol table entry */
     uint8_t *p;                 /* Pointer to OID to store */
-    H5G_obj_t oid_type;         /* type of object being dereferenced */
+    int oid_type;         /* type of object being dereferenced */
     hid_t ret_value;
 
     FUNC_ENTER_NOINIT(H5R_dereference);
@@ -647,13 +647,13 @@ done:
  EXAMPLES
  REVISION LOG
 --------------------------------------------------------------------------*/
-static H5G_obj_t
-H5R_get_object_type(H5F_t *file, void *_ref)
+static int 
+H5R_get_object_type(H5F_t *file, hid_t dxpl_id, void *_ref)
 {
     H5G_entry_t ent;            /* Symbol table entry */
     hobj_ref_t *ref=(hobj_ref_t *)_ref; /* Only object references currently supported */
     uint8_t *p;                 /* Pointer to OID to store */
-    H5G_obj_t ret_value;
+    int ret_value;
 
     FUNC_ENTER_NOINIT(H5R_get_object_type);
 
@@ -670,7 +670,7 @@ H5R_get_object_type(H5F_t *file, void *_ref)
     H5F_addr_decode(ent.file,(const uint8_t **)&p,&(ent.header));
 
     /* Get the OID type */
-    ret_value=H5G_get_type(&ent);
+    ret_value=H5G_get_type(&ent, dxpl_id);
 
 #ifdef LATER
 done:
@@ -721,7 +721,7 @@ H5Rget_object_type(hid_t id, void *_ref)
     file=loc->file;
 
     /* Get the object information */
-    if ((ret_value=H5R_get_object_type(file,_ref))<0)
+    if ((ret_value=H5R_get_object_type(file,H5AC_ind_dxpl_id,_ref))<0)
 	HGOTO_ERROR(H5E_REFERENCE, H5E_CANTINIT, H5G_UNKNOWN, "unable to determine object type");
     
 done:
@@ -752,12 +752,12 @@ done:
  EXAMPLES
  REVISION LOG
 --------------------------------------------------------------------------*/
-static H5G_obj_t
+static int
 H5R_get_obj_type(H5F_t *file, hid_t dxpl_id, H5R_type_t ref_type, void *_ref)
 {
     H5G_entry_t ent;            /* Symbol table entry */
     uint8_t *p;                 /* Pointer to OID to store */
-    H5G_obj_t ret_value;
+    int ret_value;
 
     FUNC_ENTER_NOINIT(H5R_get_obj_type);
 
diff --git a/test/dsets.c b/test/dsets.c
index ee54058..c229e13 100644
--- a/test/dsets.c
+++ b/test/dsets.c
@@ -2253,7 +2253,11 @@ test_can_apply(hid_t file)
         printf("    Line %d: Can't set chunk sizes\n",__LINE__);
         goto error;
     } /* end if */
+#ifdef H5_WANT_H5_V1_4_COMPAT
+    if(H5Zregister (H5Z_FILTER_BOGUS, "bogus", filter_bogus)<0) {
+#else /* H5_WANT_H5_V1_4_COMPAT */
     if(H5Zregister (H5Z_CAN_APPLY)<0) {
+#endif /* H5_WANT_H5_V1_4_COMPAT */
         H5_FAILED();
         printf("    Line %d: Can't register 'can apply' filter\n",__LINE__);
         goto error;
@@ -2555,7 +2559,11 @@ test_set_local(const char *filename, hid_t fapl)
         printf("    Line %d: Can't set chunk sizes\n",__LINE__);
         goto error;
     } /* end if */
+#ifdef H5_WANT_H5_V1_4_COMPAT
+    if(H5Zregister (H5Z_FILTER_BOGUS2, "bogus2", filter_bogus2)<0) {
+#else /* H5_WANT_H5_V1_4_COMPAT */
     if(H5Zregister (H5Z_SET_LOCAL)<0) {
+#endif /* H5_WANT_H5_V1_4_COMPAT */
         H5_FAILED();
         printf("    Line %d: Can't register 'set local' filter\n",__LINE__);
         goto error;
diff --git a/test/titerate.c b/test/titerate.c
index ebe12ec..63c6281 100644
--- a/test/titerate.c
+++ b/test/titerate.c
@@ -671,8 +671,8 @@ static void test_grp_memb_funcs(void)
         obj_names[i]=HDstrdup(dataset_name);
         CHECK(dnames[i], NULL, "strdup");           
         
-        ret = H5Gget_objtype_by_idx(root_group, (hsize_t)i);
-        CHECK(ret, H5G_UNKNOWN, "H5Gget_objsname_by_idx");
+        ret = (herr_t)H5Gget_objtype_by_idx(root_group, (hsize_t)i);
+        CHECK(ret, FAIL, "H5Gget_objsname_by_idx");
 
         if(!HDstrcmp(dataset_name, "grp"))
             VERIFY(ret, H5G_GROUP, "H5Gget_objsname_by_idx");
-- 
cgit v0.12