mirror of
https://github.com/HDFGroup/hdf5.git
synced 2025-02-17 16:10:24 +08:00
[svn-r8113] Purpose:
new library function H5Pdelete_filter deletes one or all filters from a dataset creation property list this was done for the NONE option of h5repack, added tests for this feature added a test for the new function in /test/dsets.c Description: Solution: Platforms tested: linux solaris AIX Misc. update:
This commit is contained in:
parent
2a4253ceb8
commit
afc3563b76
@ -1621,3 +1621,52 @@ done:
|
||||
FUNC_LEAVE_API(ret_value);
|
||||
}
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5Pdelete_filter
|
||||
*
|
||||
* Purpose: Deletes a filter from the dataset creation property list;
|
||||
* deletes all filters if FILTER is H5Z_FILTER_NONE
|
||||
*
|
||||
* Return: Non-negative on success/Negative on failure
|
||||
*
|
||||
* Programmer: Pedro Vicente
|
||||
* January 26, 2004
|
||||
*
|
||||
* Modifications:
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
herr_t
|
||||
H5Pdelete_filter(hid_t plist_id, H5Z_filter_t filter)
|
||||
{
|
||||
H5P_genplist_t *plist; /* Property list pointer */
|
||||
H5O_pline_t pline; /* Filter pipeline */
|
||||
herr_t ret_value = SUCCEED; /* return value */
|
||||
|
||||
FUNC_ENTER_API(H5Pdelete_filter, FAIL);
|
||||
H5TRACE2("e","iZf",plist_id,filter);
|
||||
|
||||
/* Get the property list structure */
|
||||
if(NULL == (plist = H5P_object_verify(plist_id,H5P_DATASET_CREATE)))
|
||||
HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID");
|
||||
|
||||
/* Get pipeline info */
|
||||
if(H5P_get(plist, H5D_CRT_DATA_PIPELINE_NAME, &pline) < 0)
|
||||
HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, H5Z_FILTER_ERROR, "can't get pipeline");
|
||||
|
||||
if (pline.filter)
|
||||
{
|
||||
/* Delete filter */
|
||||
if(H5Z_delete(&pline, filter) < 0)
|
||||
HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, H5Z_FILTER_ERROR, "can't delete filter");
|
||||
|
||||
/* Put the I/O pipeline information back into the property list */
|
||||
if(H5P_set(plist, H5D_CRT_DATA_PIPELINE_NAME, &pline) < 0)
|
||||
HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set pipeline");
|
||||
}
|
||||
|
||||
done:
|
||||
FUNC_LEAVE_API(ret_value);
|
||||
}
|
||||
|
||||
|
@ -299,6 +299,8 @@ H5_DLL herr_t H5Pset_hyper_vector_size(hid_t fapl_id, size_t size);
|
||||
H5_DLL herr_t H5Pget_hyper_vector_size(hid_t fapl_id, size_t *size/*out*/);
|
||||
H5_DLL herr_t H5Pset_small_data_block_size(hid_t fapl_id, hsize_t size);
|
||||
H5_DLL herr_t H5Pget_small_data_block_size(hid_t fapl_id, hsize_t *size/*out*/);
|
||||
H5_DLL herr_t H5Pdelete_filter(hid_t plist_id, H5Z_filter_t filter);
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
80
src/H5Z.c
80
src/H5Z.c
@ -1084,3 +1084,83 @@ done:
|
||||
FUNC_LEAVE_NOAPI(ret_value)
|
||||
} /* end H5Z_all_filters_avail() */
|
||||
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5Z_delete
|
||||
*
|
||||
* Purpose: Delete filter FILTER from pipeline PLINE;
|
||||
* deletes all filters if FILTER is H5Z_FILTER_NONE
|
||||
*
|
||||
* Return: Non-negative on success/Negative on failure
|
||||
*
|
||||
* Programmer: Pedro Vicente
|
||||
* Monday, January 26, 2004
|
||||
*
|
||||
* Modifications:
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
H5Z_delete(H5O_pline_t *pline, H5Z_filter_t filter)
|
||||
{
|
||||
size_t idx; /* Index of filter in pipeline */
|
||||
herr_t ret_value=SUCCEED; /* Return value */
|
||||
size_t i, found=0;
|
||||
|
||||
FUNC_ENTER_NOAPI(H5Z_delete, FAIL)
|
||||
|
||||
/* Check args */
|
||||
assert(pline);
|
||||
assert(filter>=0 && filter<=H5Z_FILTER_MAX);
|
||||
|
||||
/* if the pipeline has no filters, just return */
|
||||
if(pline->nused==0)
|
||||
HGOTO_DONE(FALSE)
|
||||
|
||||
/* Delete all filters */
|
||||
if (H5Z_FILTER_NONE==filter)
|
||||
{
|
||||
if(H5O_reset(H5O_PLINE_ID, pline)<0)
|
||||
HGOTO_ERROR(H5E_PLINE, H5E_CANTFREE, FAIL, "can't release pipeline info")
|
||||
}
|
||||
/* Delete filter */
|
||||
else
|
||||
{
|
||||
/* Locate the filter in the pipeline */
|
||||
for(idx=0; idx<pline->nused; idx++)
|
||||
{
|
||||
if(pline->filter[idx].id==filter)
|
||||
{
|
||||
found=1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
/* filter was not found in the pipeline */
|
||||
if (!found)
|
||||
HGOTO_ERROR(H5E_PLINE, H5E_NOTFOUND, FAIL, "filter not in pipeline")
|
||||
|
||||
/* Free, reset */
|
||||
H5MM_xfree(pline->filter[idx].name);
|
||||
H5MM_xfree(pline->filter[idx].cd_values);
|
||||
HDmemset(&pline->filter[idx], 0, sizeof (H5Z_filter_info_t));
|
||||
|
||||
/* Reorder array */
|
||||
if (idx+1<pline->nused)
|
||||
{
|
||||
for(i=idx; i<pline->nused; i++)
|
||||
{
|
||||
pline->filter[i] = pline->filter[i+1];
|
||||
}
|
||||
}
|
||||
/* Decrement number of used filters */
|
||||
pline->nused--;
|
||||
|
||||
}
|
||||
|
||||
done:
|
||||
FUNC_LEAVE_NOAPI(ret_value)
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
@ -58,5 +58,7 @@ H5_DLL herr_t H5Z_set_local(hid_t dcpl_id, hid_t type_id);
|
||||
H5_DLL H5Z_filter_info_t *H5Z_filter_info(const struct H5O_pline_t *pline,
|
||||
H5Z_filter_t filter);
|
||||
H5_DLL htri_t H5Z_all_filters_avail(const struct H5O_pline_t *pline);
|
||||
H5_DLL herr_t H5Z_delete(struct H5O_pline_t *pline, H5Z_filter_t filter);
|
||||
|
||||
|
||||
#endif
|
||||
|
121
test/dsets.c
121
test/dsets.c
@ -3074,6 +3074,126 @@ error:
|
||||
return -1;
|
||||
} /* end test_compare_dcpl() */
|
||||
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: test_filter_delete
|
||||
*
|
||||
* Purpose: Tests deletion of filters from a dataset creation property list
|
||||
*
|
||||
* Return: Success: 0
|
||||
* Failure: -1
|
||||
*
|
||||
* Programmer: Pedro Vicente
|
||||
* Monday, January 26, 2004
|
||||
*
|
||||
* Modifications:
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static herr_t
|
||||
test_filter_delete(hid_t file)
|
||||
{
|
||||
H5Z_filter_t filtn; /* filter identification number */
|
||||
hid_t dsid; /* dataset ID */
|
||||
hid_t sid; /* dataspace ID */
|
||||
hid_t dcpl; /* dataset creation property list ID */
|
||||
hid_t dcpl1; /* dataset creation property list ID */
|
||||
hsize_t dims[2] = {20,20}; /* dataspace dimensions */
|
||||
hsize_t chunk_dims[2] = {10,10}; /* chunk dimensions */
|
||||
size_t nfilters; /* number of filters in DCPL */
|
||||
size_t i;
|
||||
|
||||
TESTING("filter deletion");
|
||||
|
||||
/* Create the data space */
|
||||
if ((sid = H5Screate_simple(2, dims, NULL))<0) goto error;
|
||||
|
||||
/* Create dcpl */
|
||||
if((dcpl = H5Pcreate(H5P_DATASET_CREATE))<0) goto error;
|
||||
if(H5Pset_chunk(dcpl, 2, chunk_dims)<0) goto error;
|
||||
|
||||
#if defined H5_HAVE_FILTER_FLETCHER32
|
||||
if (H5Pset_fletcher32 (dcpl)<0) goto error;
|
||||
#endif
|
||||
|
||||
#if defined H5_HAVE_FILTER_DEFLATE
|
||||
if (H5Pset_deflate (dcpl, 6)<0) goto error;
|
||||
#endif
|
||||
|
||||
#if defined H5_HAVE_FILTER_SHUFFLE
|
||||
if (H5Pset_shuffle (dcpl)<0) goto error;
|
||||
#endif
|
||||
|
||||
/* Create a dataset */
|
||||
if ((dsid = H5Dcreate(file,"dsetdel", H5T_NATIVE_INT, sid, dcpl)) <0) goto error;
|
||||
|
||||
/* Get copy of dataset's dataset creation property list */
|
||||
if ((dcpl1=H5Dget_create_plist(dsid))<0) goto error;
|
||||
|
||||
/*----------------------------------------------------------------------
|
||||
* delete the deflate filter
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
#if defined H5_HAVE_FILTER_DEFLATE
|
||||
|
||||
/* delete the deflate filter */
|
||||
if (H5Pdelete_filter(dcpl1,H5Z_FILTER_DEFLATE)<0) goto error;
|
||||
|
||||
/* get information about filters */
|
||||
if ((nfilters = H5Pget_nfilters(dcpl1))<0) goto error;
|
||||
|
||||
/* check if filter was deleted */
|
||||
for (i=0; i<nfilters; i++)
|
||||
{
|
||||
filtn = H5Pget_filter(dcpl1,i,0,0,0,0,0);
|
||||
if (H5Z_FILTER_DEFLATE==filtn)
|
||||
goto error;
|
||||
}
|
||||
|
||||
#endif /*H5_HAVE_FILTER_DEFLATE*/
|
||||
|
||||
/*----------------------------------------------------------------------
|
||||
* delete all filters
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
/* delete all filters */
|
||||
if (H5Pdelete_filter(dcpl1,H5Z_FILTER_NONE)<0) goto error;
|
||||
|
||||
/* get information about filters */
|
||||
if ((nfilters = H5Pget_nfilters(dcpl1))<0) goto error;
|
||||
|
||||
/* check if filters were deleted */
|
||||
if (nfilters)goto error;
|
||||
|
||||
/*----------------------------------------------------------------------
|
||||
* close
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/* clean up objects used for this test */
|
||||
if (H5Pclose (dcpl)<0) goto error;
|
||||
if (H5Pclose (dcpl1)<0) goto error;
|
||||
if (H5Dclose (dsid)<0) goto error;
|
||||
if (H5Sclose (sid)<0) goto error;
|
||||
|
||||
PASSED();
|
||||
return 0;
|
||||
|
||||
error:
|
||||
H5E_BEGIN_TRY {
|
||||
H5Pclose(dcpl);
|
||||
H5Pclose(dcpl1);
|
||||
H5Dclose(dsid);
|
||||
H5Sclose(sid);
|
||||
} H5E_END_TRY;
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: main
|
||||
@ -3140,6 +3260,7 @@ main(void)
|
||||
nerrors += test_set_local(fapl)<0 ?1:0;
|
||||
nerrors += test_can_apply_szip(file)<0 ?1:0;
|
||||
nerrors += test_compare_dcpl(file)<0 ?1:0;
|
||||
nerrors += test_filter_delete(file)<0 ?1:0;
|
||||
|
||||
if (H5Fclose(file)<0) goto error;
|
||||
if (nerrors) goto error;
|
||||
|
@ -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++)
|
||||
|
@ -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++)
|
||||
{
|
||||
cd_nelmts = NELMTS(cd_values);
|
||||
filtn = H5Pget_filter(dcpl_id,
|
||||
(unsigned)i,
|
||||
&filt_flags,
|
||||
&cd_nelmts,
|
||||
cd_values,
|
||||
sizeof(f_name),
|
||||
f_name);
|
||||
}
|
||||
/*-------------------------------------------------------------------------
|
||||
* check if we have the H5Z_FILTER_NONE filter
|
||||
* if so, just delete all filters from the DCPL and exit
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/*
|
||||
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)
|
||||
if (obj->filter[i].filtn==H5Z_FILTER_NONE)
|
||||
{
|
||||
case 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
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
for ( i=0; i<obj->nfilters; i++)
|
||||
{
|
||||
switch (obj->filter[i].filtn)
|
||||
{
|
||||
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;
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -95,6 +95,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
|
||||
*
|
||||
@ -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();
|
||||
|
||||
|
@ -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 */
|
||||
|
Loading…
Reference in New Issue
Block a user