summaryrefslogtreecommitdiffstats
path: root/tools/h5repack/h5repack_refs.c
diff options
context:
space:
mode:
Diffstat (limited to 'tools/h5repack/h5repack_refs.c')
-rw-r--r--tools/h5repack/h5repack_refs.c268
1 files changed, 134 insertions, 134 deletions
diff --git a/tools/h5repack/h5repack_refs.c b/tools/h5repack/h5repack_refs.c
index 28c6c0b..99cd49f 100644
--- a/tools/h5repack/h5repack_refs.c
+++ b/tools/h5repack/h5repack_refs.c
@@ -19,14 +19,14 @@
#include "H5private.h"
#include "h5repack.h"
-static const char* MapIdToName(hid_t refobj_id,
+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);
-static int copy_refs_attr(hid_t loc_in,
- hid_t loc_out,
+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 */
@@ -35,7 +35,7 @@ static int copy_refs_attr(hid_t loc_in,
/*-------------------------------------------------------------------------
* Function: do_copy_refobjs
*
- * Purpose: duplicate all referenced HDF5 objects in the file
+ * Purpose: duplicate all referenced HDF5 objects in the file
* and create hard links
*
* Return: 0, ok, -1 no
@@ -47,19 +47,19 @@ static int copy_refs_attr(hid_t loc_in,
*-------------------------------------------------------------------------
*/
-int do_copy_refobjs(hid_t fidin,
- hid_t fidout,
+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 data type ID */
+ 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 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 */
@@ -72,7 +72,7 @@ int do_copy_refobjs(hid_t fidin,
* browse
*-------------------------------------------------------------------------
*/
-
+
for ( i = 0; i < travt->nobjs; i++)
{
switch ( travt->objs[i].type )
@@ -82,7 +82,7 @@ int do_copy_refobjs(hid_t fidin,
*-------------------------------------------------------------------------
*/
case H5G_GROUP:
-
+
/*-------------------------------------------------------------------------
* check for hard links
*-------------------------------------------------------------------------
@@ -92,37 +92,37 @@ int do_copy_refobjs(hid_t fidin,
{
for ( j=0; j<travt->objs[i].nlinks; j++)
{
- H5Glink(fidout,
+ H5Glink(fidout,
H5G_LINK_HARD,
travt->objs[i].name,
travt->objs[i].links[j].new_name);
}
}
-
+
break;
-
+
/*-------------------------------------------------------------------------
* H5G_DATASET
*-------------------------------------------------------------------------
*/
case H5G_DATASET:
-
- if ((dset_in=H5Dopen(fidin,travt->objs[i].name))<0)
+
+ if ((dset_in=H5Dopen(fidin,travt->objs[i].name))<0)
goto error;
- if ((space_id=H5Dget_space(dset_in))<0)
+ if ((space_id=H5Dget_space(dset_in))<0)
goto error;
- if ((ftype_id=H5Dget_type (dset_in))<0)
+ if ((ftype_id=H5Dget_type (dset_in))<0)
goto error;
- if ((dcpl_id=H5Dget_create_plist(dset_in))<0)
+ 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++)
+ for (j=0; j<rank; j++)
nelmts*=dims[j];
-
+
if ((mtype_id=h5tools_get_native_type(ftype_id))<0)
goto error;
@@ -133,11 +133,11 @@ int do_copy_refobjs(hid_t fidin,
* check for external files
*-------------------------------------------------------------------------
*/
- if ((next=H5Pget_external_count (dcpl_id))<0)
+ 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
+ * 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
*-------------------------------------------------------------------------
@@ -152,10 +152,10 @@ int do_copy_refobjs(hid_t fidin,
/*-------------------------------------------------------------------------
* object references are a special case
- * we cannot just copy the buffers, but instead we recreate the reference
+ * we cannot just copy the buffers, but instead we recreate the reference
*-------------------------------------------------------------------------
*/
- if (H5Tequal(mtype_id, H5T_STD_REF_OBJ))
+ if (H5Tequal(mtype_id, H5T_STD_REF_OBJ))
{
H5G_obj_t obj_type;
hid_t refobj_id;
@@ -178,7 +178,7 @@ int do_copy_refobjs(hid_t fidin,
}
if (H5Dread(dset_in,mtype_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);
@@ -192,7 +192,7 @@ int do_copy_refobjs(hid_t fidin,
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
+ /* get the name. a valid name could only occur in the
second traversal of the file */
if ((refname=MapIdToName(refobj_id,travt))!=NULL)
{
@@ -207,30 +207,30 @@ int do_copy_refobjs(hid_t fidin,
close_obj(obj_type,refobj_id);
}/* u */
}/*nelmts*/
-
+
/*-------------------------------------------------------------------------
* create/write dataset/close
*-------------------------------------------------------------------------
*/
- if ((dset_out=H5Dcreate(fidout,travt->objs[i].name,mtype_id,space_id,dcpl_id))<0)
+ if ((dset_out=H5Dcreate(fidout,travt->objs[i].name,mtype_id,space_id,dcpl_id))<0)
goto error;
if (nelmts) {
if (H5Dwrite(dset_out,mtype_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(mtype_id, H5T_STD_REF_DSETREG))
+ else if (H5Tequal(mtype_id, H5T_STD_REF_DSETREG))
{
H5G_obj_t obj_type;
hid_t refobj_id;
@@ -254,12 +254,12 @@ int do_copy_refobjs(hid_t fidin,
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){
printf( "cannot allocate memory\n" );
@@ -271,8 +271,8 @@ int do_copy_refobjs(hid_t fidin,
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
+
+ /* get the name. a valid name could only occur in the
second traversal of the file */
if ((refname=MapIdToName(refobj_id,travt))!=NULL)
{
@@ -282,7 +282,7 @@ int do_copy_refobjs(hid_t fidin,
/* 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)
+ if (H5Sclose(region_id)<0)
goto error;
if (options->verbose)
printf("object <%s> region reference created to <%s>\n",
@@ -292,18 +292,18 @@ int do_copy_refobjs(hid_t fidin,
close_obj(obj_type,refobj_id);
}/* u */
}/*nelmts*/
-
+
/*-------------------------------------------------------------------------
* create/write dataset/close
*-------------------------------------------------------------------------
*/
- if ((dset_out=H5Dcreate(fidout,travt->objs[i].name,mtype_id,space_id,dcpl_id))<0)
+ if ((dset_out=H5Dcreate(fidout,travt->objs[i].name,mtype_id,space_id,dcpl_id))<0)
goto error;
if (nelmts) {
if (H5Dwrite(dset_out,mtype_id,H5S_ALL,H5S_ALL,H5P_DEFAULT,refbuf)<0)
goto error;
}
-
+
if (buf)
free(buf);
if (refbuf)
@@ -317,19 +317,19 @@ int do_copy_refobjs(hid_t fidin,
*/
else
{
- if ((dset_out=H5Dopen(fidout,travt->objs[i].name))<0)
+ 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)
+ if (copy_refs_attr(dset_in,dset_out,options,travt,fidout)<0)
goto error;
-
+
/*-------------------------------------------------------------------------
* check for hard links
@@ -338,92 +338,92 @@ int do_copy_refobjs(hid_t fidin,
if (travt->objs[i].nlinks)
{
for ( j=0; j<travt->objs[i].nlinks; j++){
- H5Glink(fidout,
+ H5Glink(fidout,
H5G_LINK_HARD,
travt->objs[i].name,
travt->objs[i].links[j].new_name);
}
}
- if (H5Dclose(dset_out)<0)
+ if (H5Dclose(dset_out)<0)
goto error;
}/*can_read*/
-
+
/*-------------------------------------------------------------------------
* close
*-------------------------------------------------------------------------
*/
-
- if (H5Tclose(ftype_id)<0)
+
+ if (H5Tclose(ftype_id)<0)
goto error;
- if (H5Tclose(mtype_id)<0)
+ if (H5Tclose(mtype_id)<0)
goto error;
- if (H5Pclose(dcpl_id)<0)
+ if (H5Pclose(dcpl_id)<0)
goto error;
- if (H5Sclose(space_id)<0)
+ if (H5Sclose(space_id)<0)
goto error;
- if (H5Dclose(dset_in)<0)
+ if (H5Dclose(dset_in)<0)
goto error;
-
+
break;
-
+
/*-------------------------------------------------------------------------
* H5G_TYPE
*-------------------------------------------------------------------------
*/
case H5G_TYPE:
-
- if ((type_in = H5Topen (fidin,travt->objs[i].name))<0)
+
+ if ((type_in = H5Topen (fidin,travt->objs[i].name))<0)
goto error;
-
- if (H5Tclose(type_in)<0)
+
+ if (H5Tclose(type_in)<0)
goto error;
-
+
break;
-
+
/*-------------------------------------------------------------------------
* H5G_LINK
*-------------------------------------------------------------------------
*/
-
+
case H5G_LINK:
-
+
/*nothing to do */
break;
-
+
default:
-
+
break;
}
}
-
-
-
+
+
+
/*-------------------------------------------------------------------------
- * the root is a special case, we get an ID for the root group
+ * 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)
+
+ if ((grp_out = H5Gopen(fidout,"/"))<0)
goto error;
-
- if ((grp_in = H5Gopen(fidin,"/"))<0)
+
+ if ((grp_in = H5Gopen(fidin,"/"))<0)
goto error;
-
- if (copy_refs_attr(grp_in,grp_out,options,travt,fidout)<0)
+
+ if (copy_refs_attr(grp_in,grp_out,options,travt,fidout)<0)
goto error;
-
- if (H5Gclose(grp_out)<0)
+
+ if (H5Gclose(grp_out)<0)
goto error;
- if (H5Gclose(grp_in)<0)
+ if (H5Gclose(grp_in)<0)
goto error;
-
+
return 0;
-
+
error:
H5E_BEGIN_TRY {
H5Gclose(grp_in);
@@ -437,7 +437,7 @@ error:
H5Tclose(type_in);
} H5E_END_TRY;
return -1;
-
+
}
@@ -445,7 +445,7 @@ error:
* Function: copy_refs_attr
*
* Purpose: duplicate all referenced HDF5 located in attributes
- * relative to LOC_IN, which is obtained either from
+ * relative to LOC_IN, which is obtained either from
* loc_id = H5Gopen( fid, name);
* loc_id = H5Dopen( fid, name);
* loc_id = H5Topen( fid, name);
@@ -459,17 +459,17 @@ error:
*-------------------------------------------------------------------------
*/
-static int copy_refs_attr(hid_t loc_in,
- hid_t loc_out,
+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 data type ID */
+ 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 */
@@ -479,9 +479,9 @@ static int copy_refs_attr(hid_t loc_in,
int n, j;
unsigned u;
- if ((n = H5Aget_num_attrs(loc_in))<0)
+ if ((n = H5Aget_num_attrs(loc_in))<0)
goto error;
-
+
for ( u = 0; u < (unsigned)n; u++)
{
@@ -490,32 +490,32 @@ static int copy_refs_attr(hid_t loc_in,
*-------------------------------------------------------------------------
*/
/* open attribute */
- if ((attr_id = H5Aopen_idx(loc_in, u))<0)
+ if ((attr_id = H5Aopen_idx(loc_in, u))<0)
goto error;
-
+
/* get name */
- if (H5Aget_name( attr_id, 255, name )<0)
+ 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++)
+ for (j=0; j<rank; j++)
nelmts*=dims[j];
if ((mtype_id=h5tools_get_native_type(ftype_id))<0)
@@ -526,10 +526,10 @@ static int copy_refs_attr(hid_t loc_in,
/*-------------------------------------------------------------------------
* object references are a special case
- * we cannot just copy the buffers, but instead we recreate the reference
+ * we cannot just copy the buffers, but instead we recreate the reference
*-------------------------------------------------------------------------
*/
- if (H5Tequal(mtype_id, H5T_STD_REF_OBJ))
+ if (H5Tequal(mtype_id, H5T_STD_REF_OBJ))
{
H5G_obj_t obj_type;
hid_t refobj_id;
@@ -537,7 +537,7 @@ static int copy_refs_attr(hid_t loc_in,
unsigned k;
const char* refname;
hobj_ref_t *buf=NULL;
-
+
/*-------------------------------------------------------------------------
* read input to memory
*-------------------------------------------------------------------------
@@ -552,7 +552,7 @@ static int copy_refs_attr(hid_t loc_in,
}
if (H5Aread(attr_id,mtype_id,buf)<0)
goto error;
-
+
if ((obj_type = H5Rget_obj_type(attr_id,H5R_OBJECT,buf))<0)
goto error;
refbuf=HDmalloc((unsigned)nelmts*msize);
@@ -566,7 +566,7 @@ static int copy_refs_attr(hid_t loc_in,
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
+ /* get the name. a valid name could only occur in the
second traversal of the file */
if ((refname=MapIdToName(refobj_id,travt))!=NULL)
{
@@ -579,34 +579,34 @@ static int copy_refs_attr(hid_t loc_in,
close_obj(obj_type,refobj_id);
}/* k */
}/*nelmts*/
-
+
/*-------------------------------------------------------------------------
- * copy
+ * copy
*-------------------------------------------------------------------------
*/
-
+
if ((attr_out=H5Acreate(loc_out,name,ftype_id,space_id,H5P_DEFAULT))<0)
goto error;
if (nelmts) {
if(H5Awrite(attr_out,mtype_id,refbuf)<0)
goto error;
}
-
- if (H5Aclose(attr_out)<0)
+
+ 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(mtype_id, H5T_STD_REF_DSETREG))
+ else if (H5Tequal(mtype_id, H5T_STD_REF_DSETREG))
{
H5G_obj_t obj_type;
hid_t refobj_id;
@@ -619,8 +619,8 @@ static int copy_refs_attr(hid_t loc_in,
* read input to memory
*-------------------------------------------------------------------------
*/
-
- if (nelmts)
+
+ if (nelmts)
{
buf=(void *) HDmalloc((unsigned)(nelmts*msize));
if ( buf==NULL){
@@ -631,12 +631,12 @@ static int copy_refs_attr(hid_t loc_in,
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){
printf( "cannot allocate memory\n" );
@@ -648,7 +648,7 @@ static int copy_refs_attr(hid_t loc_in,
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
+ /* get the name. a valid name could only occur in the
second traversal of the file */
if ((refname=MapIdToName(refobj_id,travt))!=NULL)
{
@@ -658,7 +658,7 @@ static int copy_refs_attr(hid_t loc_in,
/* 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)
+ if (H5Sclose(region_id)<0)
goto error;
if (options->verbose)
printf("object <%s> region reference created to <%s>\n",name,refname);
@@ -666,19 +666,19 @@ static int copy_refs_attr(hid_t loc_in,
close_obj(obj_type,refobj_id);
}/* k */
}/*nelmts */
-
+
/*-------------------------------------------------------------------------
- * copy
+ * copy
*-------------------------------------------------------------------------
*/
-
+
if ((attr_out=H5Acreate(loc_out,name,ftype_id,space_id,H5P_DEFAULT))<0)
goto error;
if (nelmts) {
if(H5Awrite(attr_out,mtype_id,refbuf)<0)
goto error;
}
- if (H5Aclose(attr_out)<0)
+ if (H5Aclose(attr_out)<0)
goto error;
if (refbuf)
free(refbuf);
@@ -696,7 +696,7 @@ static int copy_refs_attr(hid_t loc_in,
if (H5Sclose(space_id)<0) goto error;
if (H5Aclose(attr_id)<0) goto error;
} /* u */
-
+
return 0;
error:
@@ -720,9 +720,9 @@ error:
static void close_obj(H5G_obj_t obj_type, hid_t obj_id)
{
- H5E_BEGIN_TRY
+ H5E_BEGIN_TRY
{
- switch (obj_type)
+ switch (obj_type)
{
case H5G_GROUP:
H5Gclose(obj_id);
@@ -736,7 +736,7 @@ static void close_obj(H5G_obj_t obj_type, hid_t obj_id)
default:
break;
}
- } H5E_END_TRY;
+ } H5E_END_TRY;
}
/*-------------------------------------------------------------------------
@@ -747,7 +747,7 @@ static void close_obj(H5G_obj_t obj_type, hid_t obj_id)
*-------------------------------------------------------------------------
*/
-static const char* MapIdToName(hid_t refobj_id,
+static const char* MapIdToName(hid_t refobj_id,
trav_table_t *travt)
{
hid_t id;
@@ -769,18 +769,18 @@ static const char* MapIdToName(hid_t refobj_id,
/* linear search */
for ( i=0; i<travt->nobjs; i++)
{
- switch ( travt->objs[i].type )
+ 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)