mirror of
https://github.com/HDFGroup/hdf5.git
synced 2025-04-06 17:20:42 +08:00
[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
This commit is contained in:
parent
335978f235
commit
51da322882
@ -38,125 +38,128 @@ extern char *progname;
|
||||
int check_objects(const char* fname,
|
||||
pack_opt_t *options)
|
||||
{
|
||||
hid_t fid;
|
||||
unsigned int i;
|
||||
trav_table_t *travt=NULL;
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* open the file
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
if ((fid=h5tools_fopen(fname, NULL, NULL, 0))<0){
|
||||
printf("<%s>: %s\n", fname, H5FOPENERROR );
|
||||
return -1;
|
||||
}
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* get the list of objects in the file
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/* init table */
|
||||
trav_table_init(&travt);
|
||||
|
||||
/* get the list of objects in the file */
|
||||
if (h5trav_gettable(fid,travt)<0)
|
||||
goto out;
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* compare with user supplied list
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
if (options->verbose)
|
||||
{
|
||||
printf("Opening file <%s>. Searching for objects to modify...\n",fname);
|
||||
}
|
||||
|
||||
for ( i = 0; i < options->op_tbl->nelems; i++)
|
||||
{
|
||||
char* name=options->op_tbl->objs[i].path;
|
||||
if (options->verbose)
|
||||
printf(" <%s>",name);
|
||||
|
||||
/* the input object names are present in the file and are valid */
|
||||
if (h5trav_getindext(name,travt)<0)
|
||||
{
|
||||
error_msg(progname, "%s Could not find <%s> in file <%s>. Exiting...\n",
|
||||
(options->verbose?"\n":""),name,fname);
|
||||
goto out;
|
||||
}
|
||||
if (options->verbose)
|
||||
printf("...Found\n");
|
||||
|
||||
|
||||
/* check for extra filter conditions */
|
||||
switch (options->op_tbl->objs[i].filter->filtn)
|
||||
{
|
||||
|
||||
/* chunk size must be smaller than pixels per block */
|
||||
case H5Z_FILTER_SZIP:
|
||||
{
|
||||
int j;
|
||||
int csize=1;
|
||||
int ppb=options->op_tbl->objs[i].filter->cd_values[0];
|
||||
hsize_t dims[H5S_MAX_RANK];
|
||||
int rank;
|
||||
hid_t did;
|
||||
hid_t sid;
|
||||
|
||||
if (options->op_tbl->objs[i].chunk.rank>0)
|
||||
{
|
||||
rank=options->op_tbl->objs[i].chunk.rank;
|
||||
for (j=0; j<rank; j++)
|
||||
csize*=(int)options->op_tbl->objs[i].chunk.chunk_lengths[j];
|
||||
hid_t fid;
|
||||
unsigned int i;
|
||||
trav_table_t *travt=NULL;
|
||||
|
||||
/* nothing to do */
|
||||
if (options->op_tbl->nelems==0)
|
||||
return 0;
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* open the file
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
if ((fid=h5tools_fopen(fname, NULL, NULL, 0))<0){
|
||||
printf("<%s>: %s\n", fname, H5FOPENERROR );
|
||||
return -1;
|
||||
}
|
||||
else
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* get the list of objects in the file
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/* init table */
|
||||
trav_table_init(&travt);
|
||||
|
||||
/* get the list of objects in the file */
|
||||
if (h5trav_gettable(fid,travt)<0)
|
||||
goto out;
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* compare with user supplied list
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
if (options->verbose)
|
||||
{
|
||||
if ((did=H5Dopen(fid,travt->objs[i].name))<0)
|
||||
goto out;
|
||||
if ((sid=H5Dget_space(did))<0)
|
||||
goto out;
|
||||
if ( (rank=H5Sget_simple_extent_ndims(sid))<0)
|
||||
goto out;
|
||||
HDmemset(dims, 0, sizeof dims);
|
||||
if ( H5Sget_simple_extent_dims(sid,dims,NULL)<0)
|
||||
goto out;
|
||||
for (j=0; j<rank; j++)
|
||||
csize*=(int)dims[j];
|
||||
if (H5Sclose(sid)<0)
|
||||
goto out;
|
||||
if (H5Dclose(did)<0)
|
||||
goto out;
|
||||
printf("Opening file <%s>. Searching for objects to modify...\n",fname);
|
||||
}
|
||||
|
||||
if (csize < ppb )
|
||||
|
||||
for ( i = 0; i < options->op_tbl->nelems; i++)
|
||||
{
|
||||
printf(" <warning: SZIP settins, chunk size is smaller than pixels per block>\n");
|
||||
goto out;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
} /* i */
|
||||
/*-------------------------------------------------------------------------
|
||||
* close
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
H5Fclose(fid);
|
||||
trav_table_free(travt);
|
||||
return 0;
|
||||
|
||||
char* name=options->op_tbl->objs[i].path;
|
||||
if (options->verbose)
|
||||
printf(" <%s>",name);
|
||||
|
||||
/* the input object names are present in the file and are valid */
|
||||
if (h5trav_getindext(name,travt)<0)
|
||||
{
|
||||
error_msg(progname, "%s Could not find <%s> in file <%s>. Exiting...\n",
|
||||
(options->verbose?"\n":""),name,fname);
|
||||
goto out;
|
||||
}
|
||||
if (options->verbose)
|
||||
printf("...Found\n");
|
||||
|
||||
|
||||
/* check for extra filter conditions */
|
||||
switch (options->op_tbl->objs[i].filter->filtn)
|
||||
{
|
||||
|
||||
/* chunk size must be smaller than pixels per block */
|
||||
case H5Z_FILTER_SZIP:
|
||||
{
|
||||
int j;
|
||||
int csize=1;
|
||||
int ppb=options->op_tbl->objs[i].filter->cd_values[0];
|
||||
hsize_t dims[H5S_MAX_RANK];
|
||||
int rank;
|
||||
hid_t did;
|
||||
hid_t sid;
|
||||
|
||||
if (options->op_tbl->objs[i].chunk.rank>0)
|
||||
{
|
||||
rank=options->op_tbl->objs[i].chunk.rank;
|
||||
for (j=0; j<rank; j++)
|
||||
csize*=(int)options->op_tbl->objs[i].chunk.chunk_lengths[j];
|
||||
}
|
||||
else
|
||||
{
|
||||
if ((did=H5Dopen(fid,travt->objs[i].name))<0)
|
||||
goto out;
|
||||
if ((sid=H5Dget_space(did))<0)
|
||||
goto out;
|
||||
if ( (rank=H5Sget_simple_extent_ndims(sid))<0)
|
||||
goto out;
|
||||
HDmemset(dims, 0, sizeof dims);
|
||||
if ( H5Sget_simple_extent_dims(sid,dims,NULL)<0)
|
||||
goto out;
|
||||
for (j=0; j<rank; j++)
|
||||
csize*=(int)dims[j];
|
||||
if (H5Sclose(sid)<0)
|
||||
goto out;
|
||||
if (H5Dclose(did)<0)
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (csize < ppb )
|
||||
{
|
||||
printf(" <warning: SZIP settins, chunk size is smaller than pixels per block>\n");
|
||||
goto out;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
} /* i */
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* close
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
H5Fclose(fid);
|
||||
trav_table_free(travt);
|
||||
return 0;
|
||||
|
||||
out:
|
||||
H5Fclose(fid);
|
||||
trav_table_free(travt);
|
||||
return -1;
|
||||
H5Fclose(fid);
|
||||
trav_table_free(travt);
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
@ -178,33 +181,33 @@ void print_objlist(const char *filename,
|
||||
int nobjects,
|
||||
trav_info_t *info )
|
||||
{
|
||||
int i;
|
||||
|
||||
printf("File <%s>: # of entries = %d\n", filename, nobjects );
|
||||
for ( i = 0; i < nobjects; i++)
|
||||
{
|
||||
switch ( info[i].type )
|
||||
{
|
||||
case H5G_GROUP:
|
||||
printf(" %-10s %s\n", "group", info[i].name );
|
||||
break;
|
||||
case H5G_DATASET:
|
||||
printf(" %-10s %s\n", "dataset", info[i].name );
|
||||
break;
|
||||
case H5G_TYPE:
|
||||
printf(" %-10s %s\n", "datatype", info[i].name );
|
||||
break;
|
||||
case H5G_LINK:
|
||||
printf(" %-10s %s\n", "link", info[i].name );
|
||||
break;
|
||||
case H5G_UDLINK:
|
||||
printf(" %-10s %s\n", "User defined link", info[i].name );
|
||||
break;
|
||||
default:
|
||||
printf(" %-10s %s\n", "User defined object", info[i].name );
|
||||
break;
|
||||
}
|
||||
}
|
||||
int i;
|
||||
|
||||
printf("File <%s>: # of entries = %d\n", filename, nobjects );
|
||||
for ( i = 0; i < nobjects; i++)
|
||||
{
|
||||
switch ( info[i].type )
|
||||
{
|
||||
case H5G_GROUP:
|
||||
printf(" %-10s %s\n", "group", info[i].name );
|
||||
break;
|
||||
case H5G_DATASET:
|
||||
printf(" %-10s %s\n", "dataset", info[i].name );
|
||||
break;
|
||||
case H5G_TYPE:
|
||||
printf(" %-10s %s\n", "datatype", info[i].name );
|
||||
break;
|
||||
case H5G_LINK:
|
||||
printf(" %-10s %s\n", "link", info[i].name );
|
||||
break;
|
||||
case H5G_UDLINK:
|
||||
printf(" %-10s %s\n", "User defined link", info[i].name );
|
||||
break;
|
||||
default:
|
||||
printf(" %-10s %s\n", "User defined object", info[i].name );
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user