diff options
author | Pedro Vicente Nunes <pvn@hdfgroup.org> | 2006-11-20 21:31:06 (GMT) |
---|---|---|
committer | Pedro Vicente Nunes <pvn@hdfgroup.org> | 2006-11-20 21:31:06 (GMT) |
commit | 51da322882c72fa1c9e5c173b6e60ec283f7b4a1 (patch) | |
tree | 4f84f3d6894c1277fa70d954e3230f66e00c478c /tools/h5repack | |
parent | 335978f235277f12a87fb198a5fd1a0e43ce5734 (diff) | |
download | hdf5-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/h5repack')
-rw-r--r-- | tools/h5repack/h5repack_list.c | 285 |
1 files changed, 144 insertions, 141 deletions
diff --git a/tools/h5repack/h5repack_list.c b/tools/h5repack/h5repack_list.c index cb9cad9..71c1798 100644 --- a/tools/h5repack/h5repack_list.c +++ b/tools/h5repack/h5repack_list.c @@ -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; + } + } } |