summaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
Diffstat (limited to 'tools')
-rw-r--r--tools/h5repack/h5repack_copy.c3
-rw-r--r--tools/h5repack/h5repack_filters.c80
-rw-r--r--tools/h5repack/h5repack_verify.c17
-rw-r--r--tools/h5repack/testh5repack_main.c87
-rw-r--r--tools/lib/h5trav.c2
5 files changed, 135 insertions, 54 deletions
diff --git a/tools/h5repack/h5repack_copy.c b/tools/h5repack/h5repack_copy.c
index 2dd1f67..c14d1f0 100644
--- a/tools/h5repack/h5repack_copy.c
+++ b/tools/h5repack/h5repack_copy.c
@@ -168,6 +168,7 @@ int do_copy_objects(hid_t fidin,
for ( i = 0; i < travt->nobjs; i++)
{
+ buf=NULL;
switch ( travt->objs[i].type )
{
/*-------------------------------------------------------------------------
@@ -283,7 +284,7 @@ int do_copy_objects(hid_t fidin,
if (rank)
{
/* filters require CHUNK layout; if we do not have one define a default */
- if (obj.chunk.rank==0)
+ if (obj.chunk.rank<=0)
{
obj.chunk.rank=rank;
for (j=0; j<rank; j++)
diff --git a/tools/h5repack/h5repack_filters.c b/tools/h5repack/h5repack_filters.c
index 8fb45f9..6476595 100644
--- a/tools/h5repack/h5repack_filters.c
+++ b/tools/h5repack/h5repack_filters.c
@@ -155,7 +155,8 @@ int print_filters(hid_t dcpl_id)
* Function: apply_filters
*
* Purpose: apply the filters in the object to the property list;
- * do extra checking in the case of SZIP
+ * do extra checking in the case of SZIP; delete all filters in the case
+ * of H5Z_FILTER_NONE present in the PACK_INFO_T filter array
*
* Return: 0, ok, -1 no
*
@@ -171,55 +172,55 @@ int apply_filters(hid_t dcpl_id,
pack_opt_t *options, /* repack options */
pack_info_t *obj) /* info about object to filter */
{
- int nfilters; /* number of filters */
- unsigned filt_flags; /* filter flags */
- H5Z_filter_t filtn; /* filter identification number */
- unsigned cd_values[20]; /* filter client data values */
- size_t cd_nelmts; /* filter client number of values */
- char f_name[256]; /* filter/file name */
- int i, j;
+ int nfilters; /* number of filters in DCPL */
unsigned aggression; /* the deflate level */
unsigned szip_options_mask=H5_SZIP_NN_OPTION_MASK;
unsigned szip_pixels_per_block;
-
+ int i;
+
/* get information about input filters */
if ((nfilters = H5Pget_nfilters(dcpl_id))<0)
return -1;
- for (i=0; i<nfilters; i++)
+/*-------------------------------------------------------------------------
+ * check if we have the H5Z_FILTER_NONE filter
+ * if so, just delete all filters from the DCPL and exit
+ *-------------------------------------------------------------------------
+ */
+
+ for ( i=0; i<obj->nfilters; i++)
{
- cd_nelmts = NELMTS(cd_values);
- filtn = H5Pget_filter(dcpl_id,
- (unsigned)i,
- &filt_flags,
- &cd_nelmts,
- cd_values,
- sizeof(f_name),
- f_name);
- }
+ if (obj->filter[i].filtn==H5Z_FILTER_NONE)
+ {
+ if (nfilters && H5Pdelete_filter(dcpl_id,H5Z_FILTER_NONE)<0)
+ return -1;
+
+ return 1;
+ }
+ }
+
+
+/*-------------------------------------------------------------------------
+ * the type of filter and additional parameter
+ * type can be one of the filters
+ * H5Z_FILTER_NONE 0, uncompress if compressed
+ * H5Z_FILTER_DEFLATE 1 , deflation like gzip
+ * H5Z_FILTER_SHUFFLE 2 , shuffle the data
+ * H5Z_FILTER_FLETCHER32 3 , fletcher32 checksum of EDC
+ * H5Z_FILTER_SZIP 4 , szip compression
+ *-------------------------------------------------------------------------
+ */
-/*
- the type of filter and additional parameter
- type can be one of the filters
- H5Z_FILTER_NONE 0, uncompress if compressed
- H5Z_FILTER_DEFLATE 1 , deflation like gzip
- H5Z_FILTER_SHUFFLE 2 , shuffle the data
- H5Z_FILTER_FLETCHER32 3 , fletcher32 checksum of EDC
- H5Z_FILTER_SZIP 4 , szip compression
-*/
- for ( j=0; j<obj->nfilters; j++)
+ for ( i=0; i<obj->nfilters; i++)
{
- switch (obj->filter[j].filtn)
+ switch (obj->filter[i].filtn)
{
- case H5Z_FILTER_NONE:
-
+ default:
break;
-
case H5Z_FILTER_DEFLATE:
-
- aggression=obj->filter[j].cd_values[0];
+ aggression=obj->filter[i].cd_values[0];
/* set up for deflated data */
if(H5Pset_chunk(dcpl_id, obj->chunk.rank, obj->chunk.chunk_lengths)<0)
@@ -232,7 +233,7 @@ int apply_filters(hid_t dcpl_id,
case H5Z_FILTER_SZIP:
- szip_pixels_per_block=obj->filter[j].cd_values[0];
+ szip_pixels_per_block=obj->filter[i].cd_values[0];
/* check szip parameters */
if (check_szip(obj->chunk.rank,
@@ -273,13 +274,10 @@ int apply_filters(hid_t dcpl_id,
return -1;
break;
-
-
- default:
- break;
+
} /* switch */
- }/*j*/
+ }/*i*/
return 0;
}
diff --git a/tools/h5repack/h5repack_verify.c b/tools/h5repack/h5repack_verify.c
index 2283bc5..bbf0492 100644
--- a/tools/h5repack/h5repack_verify.c
+++ b/tools/h5repack/h5repack_verify.c
@@ -47,11 +47,15 @@ int has_filter(hid_t dcpl_id,
/* if no information about the input filter is requested return exit */
if (filtnin==-1)
- return 1;
+ return 1;
/* get information about filters */
if ((nfilters = H5Pget_nfilters(dcpl_id))<0)
return -1;
+
+ /* if we do not have filters and the requested filter is NONE, return 1 */
+ if (!nfilters && filtnin==H5Z_FILTER_NONE)
+ return 1;
for (i=0; i<nfilters; i++)
{
@@ -190,11 +194,14 @@ int h5repack_verify(const char *fname,
}
/*-------------------------------------------------------------------------
- * layout check
+ * layout check; check only if a filter exists
*-------------------------------------------------------------------------
*/
- if (has_layout(dcpl_id,obj)==0)
- ret=0;
+ if (obj->filter[j].filtn>H5Z_FILTER_NONE )
+ {
+ if (has_layout(dcpl_id,obj)==0)
+ ret=0;
+ }
/*-------------------------------------------------------------------------
* close
@@ -248,7 +255,7 @@ int h5repack_verify(const char *fname,
* filter check
*-------------------------------------------------------------------------
*/
- if (options->all_filter==1){
+ if (options->all_filter==1 ){
if (has_filter(dcpl_id,options->filter_g.filtn)==0)
ret=0;
}
diff --git a/tools/h5repack/testh5repack_main.c b/tools/h5repack/testh5repack_main.c
index d81f311..fc7d571 100644
--- a/tools/h5repack/testh5repack_main.c
+++ b/tools/h5repack/testh5repack_main.c
@@ -96,6 +96,82 @@ error:
}
/*-------------------------------------------------------------------------
+ * Function: test_filter_none
+ *
+ * Purpose:
+ *
+ * 1) delete filters form the filter pipeline
+ * 2) use the h5diff utility to compare the input and output file;
+ * it returns RET==0 if the objects have the same data
+ * 3) use API functions to verify the compression/chunking input on the output file
+ *
+ * Return: Success: zero
+ * Failure: 1
+ *
+ * Programmer: Pedro Vicente <pvn@ncsa.uiuc.edu>
+ * September, 19, 2003
+ *
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_filter_none(void)
+{
+ pack_opt_t pack_options;
+ diff_opt_t diff_options;
+ memset(&diff_options, 0, sizeof (diff_opt_t));
+ memset(&pack_options, 0, sizeof (pack_opt_t));
+
+ TESTING(" delete filters");
+
+/*-------------------------------------------------------------------------
+ * test the NONE global option
+ *-------------------------------------------------------------------------
+ */
+
+ if (h5repack_init (&pack_options, 0)<0)
+ TEST_ERROR;
+ if (h5repack_addfilter("dset_gzip:NONE",&pack_options)<0)
+ TEST_ERROR;
+ if (h5repack(FNAME4,FNAME4OUT,&pack_options)<0)
+ TEST_ERROR;
+ if (h5diff(FNAME4,FNAME4OUT,NULL,NULL,&diff_options) == 1)
+ TEST_ERROR;
+ if (h5repack_verify(FNAME4OUT,&pack_options)<=0)
+ TEST_ERROR;
+ if (h5repack_end (&pack_options)<0)
+ TEST_ERROR;
+
+/*-------------------------------------------------------------------------
+ * test the NONE specific option; uncompress a dataset
+ *-------------------------------------------------------------------------
+ */
+
+ if (h5repack_init (&pack_options, 0)<0)
+ TEST_ERROR;
+ if (h5repack_addfilter("dset_gzip:NONE",&pack_options)<0)
+ TEST_ERROR;
+ if (h5repack_addfilter("dset1:NONE",&pack_options)<0)
+ TEST_ERROR;
+ if (h5repack(FNAME4,FNAME4OUT,&pack_options)<0)
+ TEST_ERROR;
+ if (h5diff(FNAME4,FNAME4OUT,NULL,NULL,&diff_options) == 1)
+ TEST_ERROR;
+ if (h5repack_verify(FNAME4OUT,&pack_options)<=0)
+ TEST_ERROR;
+ if (h5repack_end (&pack_options)<0)
+ TEST_ERROR;
+
+ PASSED();
+ return 0;
+
+error:
+ return 1;
+
+
+}
+
+/*-------------------------------------------------------------------------
* Function: test_filter_deflate
*
* Purpose:
@@ -182,7 +258,8 @@ test_filter_deflate(void)
TEST_ERROR;
if (h5repack_end (&pack_options)<0)
TEST_ERROR;
-
+
+
PASSED();
#else
SKIPPED();
@@ -193,11 +270,8 @@ test_filter_deflate(void)
error:
return 1;
#endif
-
-
}
-
/*-------------------------------------------------------------------------
* Function: test_filter_szip
*
@@ -347,10 +421,8 @@ error:
return 1;
#endif
-
}
-
/*-------------------------------------------------------------------------
* Function: test_filter_checksum
*
@@ -743,6 +815,9 @@ int main (void)
/* test a copy with no filters */
nerrors += test_copy();
+ /* test a copy with the delete filters option */
+ nerrors += test_filter_none();
+
/* test a copy with the deflate filter */
nerrors += test_filter_deflate();
diff --git a/tools/lib/h5trav.c b/tools/lib/h5trav.c
index a005636..9c1db43 100644
--- a/tools/lib/h5trav.c
+++ b/tools/lib/h5trav.c
@@ -624,7 +624,7 @@ int h5trav_getindext(const char *name, trav_table_t *table)
result = (int)(pdest - table->objs[i].name);
/* found at position 1, meaning without '/' */
- if( pdest != NULL && result==1 )
+ if( pdest != NULL && result==1 && strlen(table->objs[i].name)-1==strlen(name))
return i;
/* search also in the list of links */