diff options
author | Pedro Vicente Nunes <pvn@hdfgroup.org> | 2007-03-05 16:26:50 (GMT) |
---|---|---|
committer | Pedro Vicente Nunes <pvn@hdfgroup.org> | 2007-03-05 16:26:50 (GMT) |
commit | bd01f34589a4d3d790312a844bfd0cce28721f31 (patch) | |
tree | 75517f698815cf1a71af8eda28055cf8c75cd585 /tools/h5repack | |
parent | 44f312b183305cf37295595bfd3f5df40fc637be (diff) | |
download | hdf5-bd01f34589a4d3d790312a844bfd0cce28721f31.zip hdf5-bd01f34589a4d3d790312a844bfd0cce28721f31.tar.gz hdf5-bd01f34589a4d3d790312a844bfd0cce28721f31.tar.bz2 |
[svn-r13451]
h5diff bug fix, attributes differences were not being count for total
differences
Revision of H5Ocopy call in h5repack
Diffstat (limited to 'tools/h5repack')
-rwxr-xr-x | tools/h5repack/h5repack.sh.in | 2 | ||||
-rw-r--r-- | tools/h5repack/h5repack_copy.c | 830 | ||||
-rw-r--r-- | tools/h5repack/h5repack_refs.c | 81 | ||||
-rw-r--r-- | tools/h5repack/h5repacktst.c | 8 |
4 files changed, 69 insertions, 852 deletions
diff --git a/tools/h5repack/h5repack.sh.in b/tools/h5repack/h5repack.sh.in index 21cddde..4b00bc0 100755 --- a/tools/h5repack/h5repack.sh.in +++ b/tools/h5repack/h5repack.sh.in @@ -160,7 +160,7 @@ fi # copy files (these files have no filters) TOOLTEST $FILE0 TOOLTEST $FILE1 -#TOOLTEST $FILE2 +TOOLTEST $FILE2 TOOLTEST $FILE3 TOOLTEST $FILE4 TOOLTEST $FILE5 diff --git a/tools/h5repack/h5repack_copy.c b/tools/h5repack/h5repack_copy.c index 03faa55..e8d0f90 100644 --- a/tools/h5repack/h5repack_copy.c +++ b/tools/h5repack/h5repack_copy.c @@ -556,6 +556,10 @@ int do_copy_objects(hid_t fidin, /* create property to pass copy options */ if ( (pid = H5Pcreate(H5P_OBJECT_COPY)) < 0) goto error; + + /* set options for object copy */ + if(H5Pset_copy_object(pid, H5O_COPY_WITHOUT_ATTR_FLAG) < 0) + goto error; /*------------------------------------------------------------------------- * do the copy @@ -573,6 +577,23 @@ int do_copy_objects(hid_t fidin, /* close property */ if (H5Pclose(pid)<0) goto error; + + + /*------------------------------------------------------------------------- + * copy attrs manually + *------------------------------------------------------------------------- + */ + if ((dset_in=H5Dopen(fidin,travt->objs[i].name))<0) + goto error; + if ((dset_out=H5Dopen(fidout,travt->objs[i].name))<0) + goto error; + if (copy_attr(dset_in,dset_out,options)<0) + goto error; + if (H5Dclose(dset_in)<0) + goto error; + if (H5Dclose(dset_out)<0) + goto error; + } /* end do we have request for filter/chunking */ @@ -978,812 +999,3 @@ static void print_dataset_info(hid_t dcpl_id, - -#if 0 - - - -/*------------------------------------------------------------------------- - * Function: do_hardlinks - * - * Purpose: duplicate hard links - * - * Return: 0, ok, -1 no - * - * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu - * - * Date: December, 10, 2003 - * - *------------------------------------------------------------------------- - */ - -static -int do_hardlinks(hid_t fidout,trav_table_t *travt) -{ - unsigned int i, j; - - for ( i = 0; i < travt->nobjs; i++) - { - switch ( travt->objs[i].type ) - { - case H5G_GROUP: - - if (travt->objs[i].nlinks) - { - for ( j=0; j<travt->objs[i].nlinks; j++) - { - if (H5Glink(fidout, - H5L_TYPE_HARD, - travt->objs[i].name, - travt->objs[i].links[j].new_name)<0) - return -1; - } - } - - break; - - case H5G_DATASET: - - if (travt->objs[i].nlinks) - { - for ( j=0; j<travt->objs[i].nlinks; j++){ - if (H5Glink(fidout, - H5L_TYPE_HARD, - travt->objs[i].name, - travt->objs[i].links[j].new_name)<0) - return -1; - } - } - - break; - - case H5G_TYPE: - case H5G_LINK: - case H5G_UDLINK: - - /*nothing to do */ - break; - - default: - - break; - } - } - - return 0; - -} - - -/*------------------------------------------------------------------------- - * Function: do_copy_refobjs - * - * Purpose: duplicate all referenced HDF5 objects in the file in a second traversal - * - * Return: 0, ok, -1 no - * - * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu - * - * Date: December, 10, 2003 - * - *------------------------------------------------------------------------- - */ - -static -int do_copy_refobjs(hid_t fidin, - hid_t fidout, - trav_table_t *travt, - pack_opt_t *options) /* repack options */ -{ - hid_t grp_in=-1; /* read group ID */ - hid_t grp_out=-1; /* write group ID */ - hid_t dset_in=-1; /* read dataset ID */ - hid_t dset_out=-1; /* write dataset ID */ - hid_t type_in=-1; /* named type ID */ - hid_t dcpl_id=-1; /* dataset creation property list ID */ - hid_t space_id=-1; /* space ID */ - hid_t ftype_id=-1; /* file type ID */ - hid_t wtype_id=-1; /* read/write type ID */ - size_t msize; /* size of type */ - hsize_t nelmts; /* number of elements in dataset */ - int rank; /* rank of dataset */ - hsize_t dims[H5S_MAX_RANK];/* dimensions of dataset */ - int next; /* external files */ - unsigned i; - int j; - -/*------------------------------------------------------------------------- - * browse - *------------------------------------------------------------------------- - */ - - for ( i = 0; i < travt->nobjs; i++) - { - switch ( travt->objs[i].type ) - { - - case H5G_GROUP: - - break; - - /*------------------------------------------------------------------------- - * H5G_DATASET - *------------------------------------------------------------------------- - */ - case H5G_DATASET: - - if ((dset_in=H5Dopen(fidin,travt->objs[i].name))<0) - goto error; - if ((space_id=H5Dget_space(dset_in))<0) - goto error; - if ((ftype_id=H5Dget_type (dset_in))<0) - goto error; - if ((dcpl_id=H5Dget_create_plist(dset_in))<0) - goto error; - if ( (rank=H5Sget_simple_extent_ndims(space_id))<0) - goto error; - if ( H5Sget_simple_extent_dims(space_id,dims,NULL)<0) - goto error; - nelmts=1; - for (j=0; j<rank; j++) - nelmts*=dims[j]; - - if (options->use_native==1) - wtype_id = h5tools_get_native_type(ftype_id); - else - wtype_id = H5Tcopy(ftype_id); - - if ((msize=H5Tget_size(wtype_id))==0) - goto error; - -/*------------------------------------------------------------------------- - * check for external files - *------------------------------------------------------------------------- - */ - if ((next=H5Pget_external_count (dcpl_id))<0) - goto error; -/*------------------------------------------------------------------------- - * check if the dataset creation property list has filters that - * are not registered in the current configuration - * 1) the external filters GZIP and SZIP might not be available - * 2) the internal filters might be turned off - *------------------------------------------------------------------------- - */ - if (next==0 && h5tools_canreadf((NULL),dcpl_id)==1) - { -/*------------------------------------------------------------------------- - * test for a valid output dataset - *------------------------------------------------------------------------- - */ - dset_out = FAIL; - -/*------------------------------------------------------------------------- - * object references are a special case - * we cannot just copy the buffers, but instead we recreate the reference - *------------------------------------------------------------------------- - */ - if (H5Tequal(wtype_id, H5T_STD_REF_OBJ)) - { - H5G_obj_t obj_type; - hid_t refobj_id; - hobj_ref_t *refbuf=NULL; /* buffer for object references */ - hobj_ref_t *buf=NULL; - const char* refname; - unsigned u; - - /*------------------------------------------------------------------------- - * read to memory - *------------------------------------------------------------------------- - */ - - if (nelmts) - { - buf=(void *) HDmalloc((unsigned)(nelmts*msize)); - if ( buf==NULL){ - error_msg(progname, "cannot read into memory\n" ); - goto error; - } - if (H5Dread(dset_in,wtype_id,H5S_ALL,H5S_ALL,H5P_DEFAULT,buf)<0) - goto error; - - if ((obj_type = H5Rget_obj_type(dset_in,H5R_OBJECT,buf))<0) - goto error; - refbuf=HDmalloc((unsigned)nelmts*msize); - if ( refbuf==NULL){ - error_msg(progname, "cannot allocate memory\n" ); - goto error; - } - for ( u=0; u<nelmts; u++) - { - H5E_BEGIN_TRY { - if ((refobj_id = H5Rdereference(dset_in,H5R_OBJECT,&buf[u]))<0) - continue; - } H5E_END_TRY; - /* get the name. a valid name could only occur in the - second traversal of the file */ - if ((refname=MapIdToName(refobj_id,travt))!=NULL) - { - /* create the reference, -1 parameter for objects */ - if (H5Rcreate(&refbuf[u],fidout,refname,H5R_OBJECT,-1)<0) - goto error; - if (options->verbose) - printf("object <%s> object reference created to <%s>\n", - travt->objs[i].name, - refname); - }/*refname*/ - close_obj(obj_type,refobj_id); - }/* u */ - }/*nelmts*/ - - /*------------------------------------------------------------------------- - * create/write dataset/close - *------------------------------------------------------------------------- - */ - if ((dset_out=H5Dcreate(fidout,travt->objs[i].name,wtype_id,space_id,dcpl_id))<0) - goto error; - if (nelmts) { - if (H5Dwrite(dset_out,wtype_id,H5S_ALL,H5S_ALL,H5P_DEFAULT,refbuf)<0) - goto error; - } - - if (buf) - free(buf); - if (refbuf) - free(refbuf); - - }/*H5T_STD_REF_OBJ*/ - -/*------------------------------------------------------------------------- - * dataset region references - *------------------------------------------------------------------------- - */ - else if (H5Tequal(wtype_id, H5T_STD_REF_DSETREG)) - { - H5G_obj_t obj_type; - hid_t refobj_id; - hdset_reg_ref_t *refbuf=NULL; /* input buffer for region references */ - hdset_reg_ref_t *buf=NULL; /* output buffer */ - const char* refname; - unsigned u; - - /*------------------------------------------------------------------------- - * read input to memory - *------------------------------------------------------------------------- - */ - if (nelmts) - { - buf=(void *) HDmalloc((unsigned)(nelmts*msize)); - if ( buf==NULL){ - error_msg(progname, "cannot read into memory\n" ); - goto error; - } - if (H5Dread(dset_in,wtype_id,H5S_ALL,H5S_ALL,H5P_DEFAULT,buf)<0) - goto error; - if ((obj_type = H5Rget_obj_type(dset_in,H5R_DATASET_REGION,buf))<0) - goto error; - - /*------------------------------------------------------------------------- - * create output - *------------------------------------------------------------------------- - */ - - refbuf=HDcalloc(sizeof(hdset_reg_ref_t),(size_t)nelmts); /*init to zero */ - if ( refbuf==NULL){ - error_msg(progname, "cannot allocate memory\n" ); - goto error; - } - for ( u=0; u<nelmts; u++) - { - H5E_BEGIN_TRY { - if ((refobj_id = H5Rdereference(dset_in,H5R_DATASET_REGION,&buf[u]))<0) - continue; - } H5E_END_TRY; - - /* get the name. a valid name could only occur in the - second traversal of the file */ - if ((refname=MapIdToName(refobj_id,travt))!=NULL) - { - hid_t region_id; /* region id of the referenced dataset */ - if ((region_id = H5Rget_region(dset_in,H5R_DATASET_REGION,&buf[u]))<0) - goto error; - /* create the reference, we need the space_id */ - if (H5Rcreate(&refbuf[u],fidout,refname,H5R_DATASET_REGION,region_id)<0) - goto error; - if (H5Sclose(region_id)<0) - goto error; - if (options->verbose) - printf("object <%s> region reference created to <%s>\n", - travt->objs[i].name, - refname); - }/*refname*/ - close_obj(obj_type,refobj_id); - }/* u */ - }/*nelmts*/ - - /*------------------------------------------------------------------------- - * create/write dataset/close - *------------------------------------------------------------------------- - */ - if ((dset_out=H5Dcreate(fidout,travt->objs[i].name,wtype_id,space_id,dcpl_id))<0) - goto error; - if (nelmts) { - if (H5Dwrite(dset_out,wtype_id,H5S_ALL,H5S_ALL,H5P_DEFAULT,refbuf)<0) - goto error; - } - - if (buf) - free(buf); - if (refbuf) - free(refbuf); - } /* H5T_STD_REF_DSETREG */ - - -/*------------------------------------------------------------------------- - * not references, open previously created object in 1st traversal - *------------------------------------------------------------------------- - */ - else - { - if ((dset_out=H5Dopen(fidout,travt->objs[i].name))<0) - goto error; - } - - assert(dset_out!=FAIL); - -/*------------------------------------------------------------------------- - * copy referenced objects in attributes - *------------------------------------------------------------------------- - */ - if (copy_refs_attr(dset_in,dset_out,options,travt,fidout)<0) - goto error; - - - - if (H5Dclose(dset_out)<0) - goto error; - - }/*can_read*/ - - /*------------------------------------------------------------------------- - * close - *------------------------------------------------------------------------- - */ - - if (H5Tclose(ftype_id)<0) - goto error; - if (H5Tclose(wtype_id)<0) - goto error; - if (H5Pclose(dcpl_id)<0) - goto error; - if (H5Sclose(space_id)<0) - goto error; - if (H5Dclose(dset_in)<0) - goto error; - - - break; - - - case H5G_TYPE: - case H5G_LINK: - case H5G_UDLINK: - - /*nothing to do */ - break; - - default: - - break; - } - } - - -/*------------------------------------------------------------------------- - * the root is a special case, we get an ID for the root group - * and copy its attributes using that ID - * it must be done last, because the attributes might contain references to - * objects in the object list - *------------------------------------------------------------------------- - */ - - if ((grp_out = H5Gopen(fidout,"/"))<0) - goto error; - - if ((grp_in = H5Gopen(fidin,"/"))<0) - goto error; - - if (copy_refs_attr(grp_in,grp_out,options,travt,fidout)<0) - goto error; - - if (H5Gclose(grp_out)<0) - goto error; - if (H5Gclose(grp_in)<0) - goto error; - - - return 0; - -error: - H5E_BEGIN_TRY { - H5Gclose(grp_in); - H5Gclose(grp_out); - H5Pclose(dcpl_id); - H5Sclose(space_id); - H5Dclose(dset_in); - H5Dclose(dset_out); - H5Tclose(ftype_id); - H5Tclose(wtype_id); - H5Tclose(type_in); - } H5E_END_TRY; - return -1; - -} - - - -/*------------------------------------------------------------------------- - * Function: copy_refs_attr - * - * Purpose: duplicate all referenced HDF5 objects located in attributes - * relative to LOC_IN, which is obtained either from - * loc_id = H5Gopen( fid, name); - * loc_id = H5Dopen( fid, name); - * loc_id = H5Topen( fid, name); - * - * Return: 0, ok, -1 no - * - * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu - * - * Date: October, 28, 2003 - * - *------------------------------------------------------------------------- - */ - -static int copy_refs_attr(hid_t loc_in, - hid_t loc_out, - pack_opt_t *options, - trav_table_t *travt, - hid_t fidout /* for saving references */ - ) -{ - hid_t attr_id=-1; /* attr ID */ - hid_t attr_out=-1; /* attr ID */ - hid_t space_id=-1; /* space ID */ - hid_t ftype_id=-1; /* file type ID */ - hid_t wtype_id=-1; /* read/write type ID */ - size_t msize; /* size of type */ - hsize_t nelmts; /* number of elements in dataset */ - int rank; /* rank of dataset */ - hsize_t dims[H5S_MAX_RANK];/* dimensions of dataset */ - char name[255]; - int n, j; - unsigned u; - - if ((n = H5Aget_num_attrs(loc_in))<0) - goto error; - - for ( u = 0; u < (unsigned)n; u++) - { - -/*------------------------------------------------------------------------- - * open - *------------------------------------------------------------------------- - */ - /* open attribute */ - if ((attr_id = H5Aopen_idx(loc_in, u))<0) - goto error; - - /* get name */ - if (H5Aget_name( attr_id, 255, name )<0) - goto error; - - /* get the file datatype */ - if ((ftype_id = H5Aget_type( attr_id )) < 0 ) - goto error; - - /* get the dataspace handle */ - if ((space_id = H5Aget_space( attr_id )) < 0 ) - goto error; - - /* get dimensions */ - if ( (rank = H5Sget_simple_extent_dims(space_id, dims, NULL)) < 0 ) - goto error; - - - /*------------------------------------------------------------------------- - * elements - *------------------------------------------------------------------------- - */ - nelmts=1; - for (j=0; j<rank; j++) - nelmts*=dims[j]; - - if (options->use_native==1) - wtype_id = h5tools_get_native_type(ftype_id); - else - wtype_id = H5Tcopy(ftype_id); - - if ((msize=H5Tget_size(wtype_id))==0) - goto error; - -/*------------------------------------------------------------------------- - * object references are a special case - * we cannot just copy the buffers, but instead we recreate the reference - *------------------------------------------------------------------------- - */ - if (H5Tequal(wtype_id, H5T_STD_REF_OBJ)) - { - H5G_obj_t obj_type; - hid_t refobj_id; - hobj_ref_t *refbuf=NULL; - unsigned k; - const char* refname; - hobj_ref_t *buf=NULL; - - /*------------------------------------------------------------------------- - * read input to memory - *------------------------------------------------------------------------- - */ - - if (nelmts) - { - buf=(void *) HDmalloc((unsigned)(nelmts*msize)); - if ( buf==NULL){ - error_msg(progname, "cannot read into memory\n" ); - goto error; - } - if (H5Aread(attr_id,wtype_id,buf)<0) - goto error; - - if ((obj_type = H5Rget_obj_type(attr_id,H5R_OBJECT,buf))<0) - goto error; - refbuf=HDmalloc((unsigned)nelmts*msize); - if ( refbuf==NULL){ - error_msg(progname, "cannot allocate memory\n" ); - goto error; - } - for ( k=0; k<nelmts; k++) - { - H5E_BEGIN_TRY { - if ((refobj_id = H5Rdereference(attr_id,H5R_OBJECT,&buf[k]))<0) - goto error; - } H5E_END_TRY; - /* get the name. a valid name could only occur in the - second traversal of the file */ - if ((refname=MapIdToName(refobj_id,travt))!=NULL) - { - /* create the reference */ - if (H5Rcreate(&refbuf[k],fidout,refname,H5R_OBJECT,-1)<0) - goto error; - if (options->verbose) - printf("object <%s> reference created to <%s>\n",name,refname); - } - close_obj(obj_type,refobj_id); - }/* k */ - }/*nelmts*/ - - /*------------------------------------------------------------------------- - * copy - *------------------------------------------------------------------------- - */ - - if ((attr_out=H5Acreate(loc_out,name,ftype_id,space_id,H5P_DEFAULT))<0) - goto error; - if (nelmts) { - if(H5Awrite(attr_out,wtype_id,refbuf)<0) - goto error; - } - - if (H5Aclose(attr_out)<0) - goto error; - - if (refbuf) - free(refbuf); - if (buf) - free(buf); - - }/*H5T_STD_REF_OBJ*/ - -/*------------------------------------------------------------------------- - * dataset region references - *------------------------------------------------------------------------- - */ - else if (H5Tequal(wtype_id, H5T_STD_REF_DSETREG)) - { - H5G_obj_t obj_type; - hid_t refobj_id; - hdset_reg_ref_t *refbuf=NULL; /* input buffer for region references */ - hdset_reg_ref_t *buf=NULL; /* output buffer */ - const char* refname; - unsigned k; - - /*------------------------------------------------------------------------- - * read input to memory - *------------------------------------------------------------------------- - */ - - if (nelmts) - { - buf=(void *) HDmalloc((unsigned)(nelmts*msize)); - if ( buf==NULL){ - error_msg(progname, "cannot read into memory\n" ); - goto error; - } - if (H5Aread(attr_id,wtype_id,buf)<0) - goto error; - if ((obj_type = H5Rget_obj_type(attr_id,H5R_DATASET_REGION,buf))<0) - goto error; - - /*------------------------------------------------------------------------- - * create output - *------------------------------------------------------------------------- - */ - - refbuf=HDcalloc(sizeof(hdset_reg_ref_t),(size_t)nelmts); /*init to zero */ - if ( refbuf==NULL){ - error_msg(progname, "cannot allocate memory\n" ); - goto error; - } - for ( k=0; k<nelmts; k++) - { - H5E_BEGIN_TRY { - if ((refobj_id = H5Rdereference(attr_id,H5R_DATASET_REGION,&buf[k]))<0) - continue; - } H5E_END_TRY; - /* get the name. a valid name could only occur in the - second traversal of the file */ - if ((refname=MapIdToName(refobj_id,travt))!=NULL) - { - hid_t region_id; /* region id of the referenced dataset */ - if ((region_id = H5Rget_region(attr_id,H5R_DATASET_REGION,&buf[k]))<0) - goto error; - /* create the reference, we need the space_id */ - if (H5Rcreate(&refbuf[k],fidout,refname,H5R_DATASET_REGION,region_id)<0) - goto error; - if (H5Sclose(region_id)<0) - goto error; - if (options->verbose) - printf("object <%s> region reference created to <%s>\n",name,refname); - } - close_obj(obj_type,refobj_id); - }/* k */ - }/*nelmts */ - - /*------------------------------------------------------------------------- - * copy - *------------------------------------------------------------------------- - */ - - if ((attr_out=H5Acreate(loc_out,name,ftype_id,space_id,H5P_DEFAULT))<0) - goto error; - if (nelmts) { - if(H5Awrite(attr_out,wtype_id,refbuf)<0) - goto error; - } - if (H5Aclose(attr_out)<0) - goto error; - if (refbuf) - free(refbuf); - if (buf) - free(buf); - } /* H5T_STD_REF_DSETREG */ - -/*------------------------------------------------------------------------- - * close - *------------------------------------------------------------------------- - */ - - if (H5Tclose(ftype_id)<0) goto error; - if (H5Tclose(wtype_id)<0) goto error; - if (H5Sclose(space_id)<0) goto error; - if (H5Aclose(attr_id)<0) goto error; - } /* u */ - - return 0; - -error: - H5E_BEGIN_TRY { - H5Tclose(ftype_id); - H5Tclose(wtype_id); - H5Sclose(space_id); - H5Aclose(attr_id); - H5Aclose(attr_out); - } H5E_END_TRY; - return -1; -} - -/*------------------------------------------------------------------------- - * Function: close_obj - * - * Purpose: Auxiliary function to close an object - * - *------------------------------------------------------------------------- - */ - -static void close_obj(H5G_obj_t obj_type, hid_t obj_id) -{ - H5E_BEGIN_TRY - { - switch (obj_type) - { - case H5G_GROUP: - H5Gclose(obj_id); - break; - case H5G_DATASET: - H5Dclose(obj_id); - break; - case H5G_TYPE: - H5Tclose(obj_id); - break; - default: - break; - } - } H5E_END_TRY; -} - -/*------------------------------------------------------------------------- - * Function: MapIdToName - * - * Purpose: map an object ID to a name - * - *------------------------------------------------------------------------- - */ - -static const char* MapIdToName(hid_t refobj_id, - trav_table_t *travt) -{ - hid_t id; - hid_t fid; - H5G_stat_t refstat; /* Stat for the refobj id */ - H5G_stat_t objstat; /* Stat for objects in the file */ - unsigned int i; - - /* obtain information to identify the referenced object uniquely */ - if(H5Gget_objinfo(refobj_id, ".", 0, &refstat) <0) - return NULL; - - /* obtains the file ID given an object ID. This ID must be closed */ - if ((fid = H5Iget_file_id(refobj_id))<0) - { - return NULL; - } - - /* linear search */ - for ( i=0; i<travt->nobjs; i++) - { - switch ( travt->objs[i].type ) - { - default: - break; - - /*------------------------------------------------------------------------- - * H5G_DATASET - *------------------------------------------------------------------------- - */ - - case H5G_DATASET: - - if ((id = H5Dopen(fid,travt->objs[i].name))<0) - return NULL; - if(H5Gget_objinfo(id, ".", 0, &objstat) <0) - return NULL; - if (H5Dclose(id)<0) - return NULL; - if (!HDmemcmp(&refstat.fileno, &objstat.fileno, sizeof(refstat.fileno)) && !HDmemcmp(&refstat.objno, &objstat.objno, sizeof(refstat.objno))) - { - H5Fclose(fid); - return travt->objs[i].name; - } - break; - } /* switch */ - } /* i */ - - if (H5Fclose(fid)<0) - return NULL; - - return NULL; -} - - -#endif - diff --git a/tools/h5repack/h5repack_refs.c b/tools/h5repack/h5repack_refs.c index 0fc9dc3..e29769a 100644 --- a/tools/h5repack/h5repack_refs.c +++ b/tools/h5repack/h5repack_refs.c @@ -1,3 +1,4 @@ + /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * @@ -20,18 +21,14 @@ #include "H5private.h" #include "h5repack.h" -static const char* MapIdToName(hid_t refobj_id, - trav_table_t *travt); - -static void close_obj(H5G_obj_t obj_type, hid_t obj_id); +/*------------------------------------------------------------------------- + * local functions + *------------------------------------------------------------------------- + */ - -static int copy_refs_attr(hid_t loc_in, - hid_t loc_out, - pack_opt_t *options, - trav_table_t *travt, - hid_t fidout /* for saving references */ - ); +static const char* MapIdToName(hid_t refobj_id,trav_table_t *travt); +static void close_obj(H5G_obj_t1 obj_type, hid_t obj_id); +static int copy_refs_attr(hid_t loc_in,hid_t loc_out,pack_opt_t *options,trav_table_t *travt,hid_t fidout); /*------------------------------------------------------------------------- * Function: do_copy_refobjs @@ -62,12 +59,13 @@ int do_copy_refobjs(hid_t fidin, hid_t space_id=(-1); /* space ID */ hid_t ftype_id=(-1); /* file data type ID */ hid_t mtype_id=(-1); /* memory data type ID */ - size_t msize; /* memory size of memory type */ - hsize_t nelmts; /* number of elements in dataset */ - int rank; /* rank of dataset */ - hsize_t dims[H5S_MAX_RANK];/* dimensions of dataset */ - int next; /* external files */ - unsigned i, j; + size_t msize; /* memory size of memory type */ + hsize_t nelmts; /* number of elements in dataset */ + int rank; /* rank of dataset */ + hsize_t dims[H5S_MAX_RANK]; /* dimensions of dataset */ + int next; /* external files */ + unsigned int i, j; + int k; /*------------------------------------------------------------------------- * browse @@ -143,8 +141,8 @@ int do_copy_refobjs(hid_t fidin, if ( H5Sget_simple_extent_dims(space_id,dims,NULL)<0) goto error; nelmts=1; - for (j=0; j<rank; j++) - nelmts*=dims[j]; + for (k=0; k<rank; k++) + nelmts*=dims[k]; if ((mtype_id=h5tools_get_native_type(ftype_id))<0) goto error; @@ -180,7 +178,7 @@ int do_copy_refobjs(hid_t fidin, */ if (H5Tequal(mtype_id, H5T_STD_REF_OBJ)) { - H5G_obj_t obj_type; + H5G_obj_t1 obj_type; hid_t refobj_id; hobj_ref_t *refbuf=NULL; /* buffer for object references */ hobj_ref_t *buf=NULL; @@ -255,7 +253,7 @@ int do_copy_refobjs(hid_t fidin, */ else if (H5Tequal(mtype_id, H5T_STD_REF_DSETREG)) { - H5G_obj_t obj_type; + H5G_obj_t1 obj_type; hid_t refobj_id; hdset_reg_ref_t *refbuf=NULL; /* input buffer for region references */ hdset_reg_ref_t *buf=NULL; /* output buffer */ @@ -350,8 +348,10 @@ int do_copy_refobjs(hid_t fidin, * copy referenced objects in attributes *------------------------------------------------------------------------- */ +#if 1 if (copy_refs_attr(dset_in,dset_out,options,travt,fidout)<0) goto error; +#endif /*------------------------------------------------------------------------- @@ -489,14 +489,14 @@ static int copy_refs_attr(hid_t loc_in, hid_t fidout /* for saving references */ ) { - hid_t attr_id=-1; /* attr ID */ - hid_t attr_out=-1; /* attr ID */ - hid_t space_id=-1; /* space ID */ - hid_t ftype_id=-1; /* file data type ID */ - hid_t mtype_id=-1; /* memory data type ID */ - size_t msize; /* memory size of type */ - hsize_t nelmts; /* number of elements in dataset */ - int rank; /* rank of dataset */ + hid_t attr_id=-1; /* attr ID */ + hid_t attr_out=-1; /* attr ID */ + hid_t space_id=-1; /* space ID */ + hid_t ftype_id=-1; /* file data type ID */ + hid_t mtype_id=-1; /* memory data type ID */ + size_t msize; /* memory size of type */ + hsize_t nelmts; /* number of elements in dataset */ + int rank; /* rank of dataset */ hsize_t dims[H5S_MAX_RANK];/* dimensions of dataset */ char name[255]; int n, j; @@ -554,7 +554,7 @@ static int copy_refs_attr(hid_t loc_in, */ if (H5Tequal(mtype_id, H5T_STD_REF_OBJ)) { - H5G_obj_t obj_type; + H5G_obj_t1 obj_type; hid_t refobj_id; hobj_ref_t *refbuf=NULL; unsigned k; @@ -631,7 +631,7 @@ static int copy_refs_attr(hid_t loc_in, */ else if (H5Tequal(mtype_id, H5T_STD_REF_DSETREG)) { - H5G_obj_t obj_type; + H5G_obj_t1 obj_type; hid_t refobj_id; hdset_reg_ref_t *refbuf=NULL; /* input buffer for region references */ hdset_reg_ref_t *buf=NULL; /* output buffer */ @@ -734,14 +734,14 @@ error: } /*------------------------------------------------------------------------- - * Function: close_obj + * Function: close_obj * - * Purpose: Auxiliary function to close an object + * Purpose: Auxiliary function to close an object * *------------------------------------------------------------------------- */ -static void close_obj(H5G_obj_t obj_type, hid_t obj_id) +static void close_obj(H5G_obj_t1 obj_type, hid_t obj_id) { H5E_BEGIN_TRY { @@ -761,6 +761,7 @@ static void close_obj(H5G_obj_t obj_type, hid_t obj_id) } } H5E_END_TRY; } + /*------------------------------------------------------------------------- * Function: MapIdToName * @@ -772,11 +773,11 @@ static void close_obj(H5G_obj_t obj_type, hid_t obj_id) static const char* MapIdToName(hid_t refobj_id, trav_table_t *travt) { - hid_t id; - hid_t fid; - H5G_stat_t refstat; /* Stat for the refobj id */ - H5G_stat_t objstat; /* Stat for objects in the file */ - int i; + hid_t id; + hid_t fid; + H5G_stat_t refstat; /* Stat for the refobj id */ + H5G_stat_t objstat; /* Stat for objects in the file */ + unsigned int i; /* obtain information to identify the referenced object uniquely */ if(H5Gget_objinfo(refobj_id, ".", 0, &refstat) <0) @@ -825,3 +826,5 @@ static const char* MapIdToName(hid_t refobj_id, return NULL; } + + diff --git a/tools/h5repack/h5repacktst.c b/tools/h5repack/h5repacktst.c index 6d58abc..098d6d8 100644 --- a/tools/h5repack/h5repacktst.c +++ b/tools/h5repack/h5repacktst.c @@ -160,6 +160,8 @@ int main (void) *------------------------------------------------------------------------- */ +#if 0 + /*------------------------------------------------------------------------- * file with fill values *------------------------------------------------------------------------- @@ -198,11 +200,12 @@ int main (void) GOERROR; PASSED(); +#endif + /*------------------------------------------------------------------------- * file with attributes *------------------------------------------------------------------------- */ -#if 0 TESTING(" copy of datasets (attributes)"); if (h5repack_init (&pack_options, 0)<0) GOERROR; @@ -217,7 +220,6 @@ int main (void) if (h5repack_end (&pack_options)<0) GOERROR; PASSED(); -#endif /*------------------------------------------------------------------------- * file with hardlinks @@ -3541,7 +3543,7 @@ void write_attr_in(hid_t loc_id, { status=H5Rcreate(&buf4[0],fid,dset_name,H5R_OBJECT,-1); status=H5Rcreate(&buf4[1],fid,dset_name,H5R_OBJECT,-1); - make_attr(loc_id,1,dims,"reference to object",H5T_STD_REF_OBJ,buf4); + make_attr(loc_id,1,dims,"reference",H5T_STD_REF_OBJ,buf4); } |