summaryrefslogtreecommitdiffstats
path: root/tools/lib/h5trav.c
diff options
context:
space:
mode:
authorPedro Vicente Nunes <pvn@hdfgroup.org>2006-11-20 21:31:06 (GMT)
committerPedro Vicente Nunes <pvn@hdfgroup.org>2006-11-20 21:31:06 (GMT)
commit51da322882c72fa1c9e5c173b6e60ec283f7b4a1 (patch)
tree4f84f3d6894c1277fa70d954e3230f66e00c478c /tools/lib/h5trav.c
parent335978f235277f12a87fb198a5fd1a0e43ce5734 (diff)
downloadhdf5-51da322882c72fa1c9e5c173b6e60ec283f7b4a1.zip
hdf5-51da322882c72fa1c9e5c173b6e60ec283f7b4a1.tar.gz
hdf5-51da322882c72fa1c9e5c173b6e60ec283f7b4a1.tar.bz2
[svn-r12953] h5repack code revision, avoid one unnecessary call to file open/close in the cheking of objects when there are none requested by the user
Diffstat (limited to 'tools/lib/h5trav.c')
-rw-r--r--tools/lib/h5trav.c402
1 files changed, 207 insertions, 195 deletions
diff --git a/tools/lib/h5trav.c b/tools/lib/h5trav.c
index 4ef495d..3da1ee0 100644
--- a/tools/lib/h5trav.c
+++ b/tools/lib/h5trav.c
@@ -16,22 +16,31 @@
#include "h5trav.h"
#include "H5private.h"
-/* functions for traversal */
+/*-------------------------------------------------------------------------
+ * local functions
+ *-------------------------------------------------------------------------
+ */
static int traverse( hid_t loc_id,
- const char *group_name,
- trav_table_t *table,
- trav_info_t *info,
- int *idx,
- int print);
+ const char *group_name,
+ trav_table_t *table,
+ trav_info_t *info,
+ int *idx,
+ int print);
static hssize_t get_nnames( hid_t loc_id,
- const char *group_name );
+ const char *group_name );
-herr_t get_name_type( hid_t loc_id,
- const char *group_name,
- int idx,
- char **name,
- H5G_obj_t *type );
+static herr_t get_name_type( hid_t loc_id,
+ const char *group_name,
+ int idx,
+ char **name,
+ H5G_obj_t *type );
+
+
+/*-------------------------------------------------------------------------
+ * "h5trav info" public functions. used in h5diff
+ *-------------------------------------------------------------------------
+ */
/*-------------------------------------------------------------------------
* Function: h5trav_getinfo
@@ -67,37 +76,8 @@ int h5trav_getinfo(hid_t file_id,
trav_table_free( table );
return nnames;
-
}
-
-/*-------------------------------------------------------------------------
- * Function: h5trav_gettable
- *
- * Purpose: get the trav_table_t struct
- *
- * Return: 0, -1 on error
- *
- * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
- *
- * Date: December 17, 2003
- *
- *-------------------------------------------------------------------------
- */
-
-int h5trav_gettable(hid_t fid, trav_table_t *travt)
-{
- int nnames=0;
-
- /* iterate starting on the root group */
- if (( nnames = traverse(fid,"/",travt,NULL,&nnames,0))<0)
- return -1;
-
- return 0;
-
-}
-
-
/*-------------------------------------------------------------------------
* Function: h5trav_getindex
*
@@ -133,8 +113,6 @@ int h5trav_getindex( const char *obj, int nobjs, trav_info_t *info )
return -1;
}
-
-
/*-------------------------------------------------------------------------
* Function: h5trav_freeinfo
*
@@ -157,6 +135,182 @@ void h5trav_freeinfo( trav_info_t *info, int nobjs )
}
}
+/*-------------------------------------------------------------------------
+ * Function: h5trav_printinfo
+ *
+ * Purpose: print list of names in file
+ *
+ * Return: void
+ *
+ * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
+ *
+ * Date: May 9, 2003
+ *
+ *-------------------------------------------------------------------------
+ */
+void h5trav_printinfo(int nobjs, trav_info_t *travi)
+{
+ int i;
+ for ( i = 0; i < nobjs; i++)
+ {
+ switch ( travi[i].type )
+ {
+ case H5G_GROUP:
+ printf(" %-10s %s\n", "group", travi[i].name );
+ break;
+ case H5G_DATASET:
+ printf(" %-10s %s\n", "dataset", travi[i].name );
+ break;
+ case H5G_TYPE:
+ printf(" %-10s %s\n", "datatype", travi[i].name );
+ break;
+ case H5G_LINK:
+ printf(" %-10s %s\n", "link", travi[i].name );
+ break;
+ case H5G_UDLINK:
+ printf(" %-10s %s\n", "User defined link", travi[i].name );
+ break;
+ default:
+ printf(" %-10s %s\n", "User defined object", travi[i].name );
+ break;
+ }
+ }
+}
+
+/*-------------------------------------------------------------------------
+ * "h5trav table" public functions. used in h5repack
+ *-------------------------------------------------------------------------
+ */
+
+/*-------------------------------------------------------------------------
+ * Function: h5trav_getindext
+ *
+ * Purpose: get index of NAME in list
+ *
+ * Return: index, -1 if not found
+ *
+ * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
+ *
+ * Date: December 18, 2003
+ *
+ *-------------------------------------------------------------------------
+ */
+
+int h5trav_getindext(const char *name, trav_table_t *table)
+{
+ char *pdest;
+ int result;
+ unsigned int i, j;
+
+ for ( i = 0; i < table->nobjs; i++)
+ {
+ if ( strcmp(name,table->objs[i].name)==0 )
+ return i;
+
+ pdest = strstr( table->objs[i].name, name );
+ result = (int)(pdest - table->objs[i].name);
+
+ /* found at position 1, meaning without '/' */
+ if( pdest != NULL && result==1 && strlen(table->objs[i].name)-1==strlen(name))
+ return i;
+
+ /* search also in the list of links */
+ if (table->objs[i].nlinks)
+ {
+ for ( j=0; j<table->objs[i].nlinks; j++)
+ {
+ if ( strcmp(name,table->objs[i].links[j].new_name)==0 )
+ return i;
+
+ pdest = strstr( table->objs[i].links[j].new_name, name );
+ result = (int)(pdest - table->objs[i].links[j].new_name);
+
+ /* found at position 1, meaning without '/' */
+ if( pdest != NULL && result==1 )
+ return i;
+
+ }
+ }
+
+ }
+ return -1;
+}
+
+/*-------------------------------------------------------------------------
+ * Function: h5trav_gettable
+ *
+ * Purpose: get the trav_table_t struct
+ *
+ * Return: 0, -1 on error
+ *
+ * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
+ *
+ * Date: December 17, 2003
+ *
+ *-------------------------------------------------------------------------
+ */
+
+int h5trav_gettable(hid_t fid, trav_table_t *travt)
+{
+ int nnames=0;
+
+ /* iterate starting on the root group */
+ if (( nnames = traverse(fid,"/",travt,NULL,&nnames,0))<0)
+ return -1;
+
+ return 0;
+
+}
+
+/*-------------------------------------------------------------------------
+ * Function: h5trav_printtable
+ *
+ * Purpose: print list of objects in file
+ *
+ * Return: void
+ *
+ * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
+ *
+ * Date: May 9, 2003
+ *
+ *-------------------------------------------------------------------------
+ */
+void h5trav_printtable(trav_table_t *table)
+{
+ unsigned int i, j;
+
+ for ( i = 0; i < table->nobjs; i++)
+ {
+ switch ( table->objs[i].type )
+ {
+ case H5G_GROUP:
+ printf(" %-10s %s\n", "group", table->objs[i].name );
+ break;
+ case H5G_DATASET:
+ printf(" %-10s %s\n", "dataset", table->objs[i].name );
+ break;
+ case H5G_TYPE:
+ printf(" %-10s %s\n", "datatype", table->objs[i].name );
+ break;
+ case H5G_LINK:
+ printf(" %-10s %s\n", "link", table->objs[i].name );
+ break;
+ default:
+ printf(" %-10s %s\n", "User defined object", table->objs[i].name );
+ break;
+ }
+
+ if (table->objs[i].nlinks)
+ {
+ for ( j=0; j<table->objs[i].nlinks; j++)
+ {
+ printf(" %-10s %s\n", " hardlink", table->objs[i].links[j].new_name );
+ }
+ }
+
+ }
+}
+
/*-------------------------------------------------------------------------
* Function: get_nnames
@@ -253,11 +407,11 @@ static herr_t opget_info( hid_t loc_id, const char *name, void *op_data)
*-------------------------------------------------------------------------
*/
-herr_t get_name_type( hid_t loc_id,
- const char *group_name,
- int idx,
- char **name,
- H5G_obj_t *type )
+static herr_t get_name_type( hid_t loc_id,
+ const char *group_name,
+ int idx,
+ char **name,
+ H5G_obj_t *type )
{
trav_info_t info;
@@ -286,11 +440,11 @@ herr_t get_name_type( hid_t loc_id,
*/
static int traverse( hid_t loc_id,
- const char *group_name,
- trav_table_t *table,
- trav_info_t *info,
- int *idx,
- int print)
+ const char *group_name,
+ trav_table_t *table,
+ trav_info_t *info,
+ int *idx,
+ int print)
{
haddr_t objno; /* Compact form of object's location */
char *name=NULL;
@@ -566,151 +720,9 @@ static int traverse( hid_t loc_id,
-/*-------------------------------------------------------------------------
- * Function: h5trav_printinfo
- *
- * Purpose: print list of names in file
- *
- * Return: void
- *
- * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
- *
- * Date: May 9, 2003
- *
- *-------------------------------------------------------------------------
- */
-void h5trav_printinfo(int nobjs, trav_info_t *travi)
-{
- int i;
- for ( i = 0; i < nobjs; i++)
- {
- switch ( travi[i].type )
- {
- case H5G_GROUP:
- printf(" %-10s %s\n", "group", travi[i].name );
- break;
- case H5G_DATASET:
- printf(" %-10s %s\n", "dataset", travi[i].name );
- break;
- case H5G_TYPE:
- printf(" %-10s %s\n", "datatype", travi[i].name );
- break;
- case H5G_LINK:
- printf(" %-10s %s\n", "link", travi[i].name );
- break;
- case H5G_UDLINK:
- printf(" %-10s %s\n", "User defined link", travi[i].name );
- break;
- default:
- printf(" %-10s %s\n", "User defined object", travi[i].name );
- break;
- }
- }
-}
-
-
-
-/*-------------------------------------------------------------------------
- * Function: h5trav_printtable
- *
- * Purpose: print list of objects in file
- *
- * Return: void
- *
- * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
- *
- * Date: May 9, 2003
- *
- *-------------------------------------------------------------------------
- */
-void h5trav_printtable(trav_table_t *table)
-{
- unsigned int i, j;
-
- for ( i = 0; i < table->nobjs; i++)
- {
- switch ( table->objs[i].type )
- {
- case H5G_GROUP:
- printf(" %-10s %s\n", "group", table->objs[i].name );
- break;
- case H5G_DATASET:
- printf(" %-10s %s\n", "dataset", table->objs[i].name );
- break;
- case H5G_TYPE:
- printf(" %-10s %s\n", "datatype", table->objs[i].name );
- break;
- case H5G_LINK:
- printf(" %-10s %s\n", "link", table->objs[i].name );
- break;
- default:
- printf(" %-10s %s\n", "User defined object", table->objs[i].name );
- break;
- }
-
- if (table->objs[i].nlinks)
- {
- for ( j=0; j<table->objs[i].nlinks; j++)
- {
- printf(" %-10s %s\n", " hardlink", table->objs[i].links[j].new_name );
- }
- }
-
- }
-}
-
-
-/*-------------------------------------------------------------------------
- * Function: h5trav_getindext
- *
- * Purpose: get index of NAME in list
- *
- * Return: index, -1 if not found
- *
- * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
- *
- * Date: December 18, 2003
- *
- *-------------------------------------------------------------------------
- */
-
-int h5trav_getindext(const char *name, trav_table_t *table)
-{
- char *pdest;
- int result;
- unsigned int i, j;
-
- for ( i = 0; i < table->nobjs; i++)
- {
- if ( strcmp(name,table->objs[i].name)==0 )
- return i;
-
- pdest = strstr( table->objs[i].name, name );
- result = (int)(pdest - table->objs[i].name);
-
- /* found at position 1, meaning without '/' */
- if( pdest != NULL && result==1 && strlen(table->objs[i].name)-1==strlen(name))
- return i;
- /* search also in the list of links */
- if (table->objs[i].nlinks)
- {
- for ( j=0; j<table->objs[i].nlinks; j++)
- {
- if ( strcmp(name,table->objs[i].links[j].new_name)==0 )
- return i;
- pdest = strstr( table->objs[i].links[j].new_name, name );
- result = (int)(pdest - table->objs[i].links[j].new_name);
- /* found at position 1, meaning without '/' */
- if( pdest != NULL && result==1 )
- return i;
- }
- }
- }
- return -1;
-}