diff options
author | Pedro Vicente Nunes <pvn@hdfgroup.org> | 2003-12-04 19:35:33 (GMT) |
---|---|---|
committer | Pedro Vicente Nunes <pvn@hdfgroup.org> | 2003-12-04 19:35:33 (GMT) |
commit | 28e43d818f105e2b93caa1b39a0ea056d8f3393e (patch) | |
tree | 69d9ba95cc9389609e87e17ff6f54d1a2a436caf /tools/h5repack/h5repack_list.c | |
parent | 967a04fdec8aa15d93978cd201cd4ba0a583d6e2 (diff) | |
download | hdf5-28e43d818f105e2b93caa1b39a0ea056d8f3393e.zip hdf5-28e43d818f105e2b93caa1b39a0ea056d8f3393e.tar.gz hdf5-28e43d818f105e2b93caa1b39a0ea056d8f3393e.tar.bz2 |
[svn-r7913] Purpose:
code clean
Description:
separated the h5repack code in several modules
Solution:
Platforms tested:
linux
IRIX
solaris
Misc. update:
Diffstat (limited to 'tools/h5repack/h5repack_list.c')
-rw-r--r-- | tools/h5repack/h5repack_list.c | 484 |
1 files changed, 5 insertions, 479 deletions
diff --git a/tools/h5repack/h5repack_list.c b/tools/h5repack/h5repack_list.c index f1142f2..a285e3f 100644 --- a/tools/h5repack/h5repack_list.c +++ b/tools/h5repack/h5repack_list.c @@ -18,14 +18,13 @@ #include <stdio.h> #include "H5private.h" #include "h5repack.h" -#include "h5repack_list.h" - /*------------------------------------------------------------------------- - * Function: get_objlist + * Function: check_objects * - * Purpose: locate all HDF5 objects in the file + * Purpose: locate all HDF5 objects in the file and compare with user + * supplied list * * Return: 0, ok, -1 no * @@ -35,10 +34,8 @@ * *------------------------------------------------------------------------- */ - - -int get_objlist(const char* fname, - pack_opt_t *options) +int check_objects(const char* fname, + pack_opt_t *options) { hid_t fid; int nobjects, i; @@ -111,9 +108,6 @@ int get_objlist(const char* fname, if (options->verbose) printf("...Found\n"); } - - - /*------------------------------------------------------------------------- * free *------------------------------------------------------------------------- @@ -121,100 +115,6 @@ int get_objlist(const char* fname, H5Fclose(fid); h5trav_freeinfo(info,nobjects); return 0; - -} - - - -/*------------------------------------------------------------------------- - * Function: copy_file - * - * Purpose: duplicate all HDF5 objects in the file - * - * Return: 0, ok, -1 no - * - * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu - * - * Date: October, 23, 2003 - * - *------------------------------------------------------------------------- - */ - -int copy_file(const char* fnamein, - const char* fnameout, - pack_opt_t *options) -{ - hid_t fidin; - hid_t fidout; - int nobjects; - trav_info_t *info=NULL; - -/*------------------------------------------------------------------------- - * open the files - *------------------------------------------------------------------------- - */ - - /* disable error reporting */ - H5E_BEGIN_TRY { - - /* Open the files */ - if ((fidin=H5Fopen(fnamein,H5F_ACC_RDONLY,H5P_DEFAULT))<0 ){ - printf("h5repack: <%s>: No such file or directory\n", fnamein ); - exit(1); - } - if ((fidout=H5Fcreate(fnameout,H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT))<0 ){ - printf("h5repack: <%s>: Could not create file\n", fnameout ); - exit(1); - } - /* enable error reporting */ - } H5E_END_TRY; - - -/*------------------------------------------------------------------------- - * get the number of objects in the file - *------------------------------------------------------------------------- - */ - - if ((nobjects = h5trav_getinfo(fidin, NULL ))<0) { - printf("h5repack: <%s>: Could not obtain object list\n", fnamein ); - return -1; - } - -/*------------------------------------------------------------------------- - * get the list of objects in the file - *------------------------------------------------------------------------- - */ - - if ((info = (trav_info_t*) malloc( nobjects * sizeof(trav_info_t)))==NULL){ - printf("h5repack: <%s>: Could not allocate object list\n", fnamein ); - return -1; - } - if (h5trav_getinfo(fidin, info )<0) { - printf("h5repack: <%s>: Could not obtain object list\n", fnamein ); - return -1; - } - - - -/*------------------------------------------------------------------------- - * do the copy - *------------------------------------------------------------------------- - */ - - if(do_copy_file(fidin,fidout,nobjects,info,options)<0) { - printf("h5repack: <%s>: Could not copy data to: %s\n", fnamein, fnameout); - return -1; - } - -/*------------------------------------------------------------------------- - * free - *------------------------------------------------------------------------- - */ - H5Fclose(fidin); - H5Fclose(fidout); - h5trav_freeinfo(info,nobjects); - return 0; - } @@ -263,377 +163,3 @@ void print_objlist(const char *filename, } - -/*------------------------------------------------------------------------- - * Function: do_copy_file - * - * Purpose: duplicate all HDF5 objects in the file - * - * Return: 0, ok, -1 no - * - * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu - * - * Date: October, 23, 2003 - * - *------------------------------------------------------------------------- - */ - -int do_copy_file(hid_t fidin, - hid_t fidout, - int nobjects, - trav_info_t *info, - pack_opt_t *options) -{ - hid_t grp_in; /* group ID */ - hid_t grp_out; /* group ID */ - hid_t dset_in; /* read dataset ID */ - hid_t dset_out; /* write dataset ID */ - hid_t type_in; /* named type ID */ - hid_t type_out; /* named type ID */ - hid_t dcpl_id; /* dataset creation property list ID */ - hid_t space_id; /* space ID */ - hid_t ftype_id; /* file data type ID */ - hid_t mtype_id; /* memory data type ID */ - size_t msize; /* memory size of memory type */ - void *buf=NULL; /* data buffer */ - hsize_t nelmts; /* number of elements in dataset */ - int rank; /* rank of dataset */ - hsize_t dims[H5S_MAX_RANK];/* dimensions of dataset */ - int i, j; - - for ( i = 0; i < nobjects; i++) - { - switch ( info[i].type ) - { -/*------------------------------------------------------------------------- - * H5G_GROUP - *------------------------------------------------------------------------- - */ - case H5G_GROUP: - if (options->verbose) - printf(" %-10s %s\n", "group",info[i].name ); - - if ((grp_out=H5Gcreate(fidout, info[i].name, 0))<0) - goto error; - - if((grp_in = H5Gopen (fidin, info[i].name))<0) - goto error; - -/*------------------------------------------------------------------------- - * copy attrs - *------------------------------------------------------------------------- - */ - - copy_attr(grp_in, - grp_out, - options); - - if (H5Gclose(grp_out)<0) - goto error; - if (H5Gclose(grp_in)<0) - goto error; - - break; - -/*------------------------------------------------------------------------- - * H5G_DATASET - *------------------------------------------------------------------------- - */ - case H5G_DATASET: - if (options->verbose) - printf(" %-10s %s\n", "dataset",info[i].name ); - - if ((dset_in=H5Dopen(fidin,info[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; - -/*------------------------------------------------------------------------- - * read to memory - *------------------------------------------------------------------------- - */ - nelmts=1; - for (j=0; j<rank; j++) - nelmts*=dims[j]; - if ((mtype_id=H5Tget_native_type(ftype_id,H5T_DIR_DEFAULT))<0) - goto error; - if ((msize=H5Tget_size(mtype_id))==0) - goto error; - buf=(void *) HDmalloc((unsigned)(nelmts*msize)); - if ( buf==NULL){ - printf( "cannot read into memory\n" ); - goto error; - } - if (H5Dread(dset_in,mtype_id,H5S_ALL,H5S_ALL,H5P_DEFAULT,buf)<0) - goto error; - -/*------------------------------------------------------------------------- - * create/write dataset/close - *------------------------------------------------------------------------- - */ - if ((dset_out=H5Dcreate(fidout,info[i].name,ftype_id,space_id,dcpl_id))<0) - goto error; - if (H5Dwrite(dset_out,mtype_id,H5S_ALL,H5S_ALL,H5P_DEFAULT,buf)<0) - goto error; - - -/*------------------------------------------------------------------------- - * copy attrs - *------------------------------------------------------------------------- - */ - - copy_attr(dset_in, - dset_out, - options); - - -/*------------------------------------------------------------------------- - * close - *------------------------------------------------------------------------- - */ - - if (H5Tclose(ftype_id)<0) - goto error; - if (H5Tclose(mtype_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; - if (H5Dclose(dset_out)<0) - goto error; - - if (buf) - free(buf); - - break; - -/*------------------------------------------------------------------------- - * H5G_TYPE - *------------------------------------------------------------------------- - */ - case H5G_TYPE: - - if ((type_in = H5Topen (fidin, info[i].name))<0) - goto error; - - if ((type_out = H5Tcopy(type_in))<0) - goto error; - - if ((H5Tcommit(fidout, info[i].name, type_out))<0) - goto error; - -/*------------------------------------------------------------------------- - * copy attrs - *------------------------------------------------------------------------- - */ - - copy_attr(type_in, - type_out, - options); - - if (H5Tclose(type_in)<0) - goto error; - if (H5Tclose(type_out)<0) - goto error; - - if (options->verbose) - printf(" %-10s %s\n", "datatype",info[i].name ); - - break; - - case H5G_LINK: - - { - - H5G_stat_t statbuf; - char *targbuf=NULL; - - if (H5Gget_objinfo(fidin,info[i].name,FALSE,&statbuf)<0) - goto error; - - targbuf = malloc(statbuf.linklen); - - if (H5Gget_linkval(fidin,info[i].name,statbuf.linklen,targbuf)<0) - goto error; - - if (H5Glink(fidout, - H5G_LINK_SOFT, - targbuf, /* current name of object */ - info[i].name /* new name of object */ - )<0) - goto error; - - free(targbuf); - - if (options->verbose) - printf(" %-10s %s\n", "link",info[i].name ); - - } - break; - - default: - if (options->verbose) - printf(" %-10s %s\n", "User defined object", info[i].name); - break; - } - } - - 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(mtype_id); - H5Tclose(type_in); - H5Tclose(type_out); - if (buf) - free(buf); - } H5E_END_TRY; - return -1; - -} - - -/*------------------------------------------------------------------------- - * Function: copy_attr - * - * Purpose: copy attributes located in 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 - * - *------------------------------------------------------------------------- - */ - -int copy_attr(hid_t loc_in, - hid_t loc_out, - pack_opt_t *options - ) -{ - hid_t attr_id; /* attr ID */ - hid_t attr_out; /* attr ID */ - hid_t space_id; /* space ID */ - hid_t ftype_id; /* file data type ID */ - hid_t mtype_id; /* memory data type ID */ - size_t msize; /* memory size of memory type */ - void *buf=NULL; /* data buffer */ - 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; - -/*------------------------------------------------------------------------- - * read to memory - *------------------------------------------------------------------------- - */ - nelmts=1; - for (j=0; j<rank; j++) - nelmts*=dims[j]; - if ((mtype_id=H5Tget_native_type(ftype_id,H5T_DIR_DEFAULT))<0) - goto error; - if ((msize=H5Tget_size(mtype_id))==0) - goto error; - buf=(void *) HDmalloc((unsigned)(nelmts*msize)); - if ( buf==NULL){ - printf( "cannot read into memory\n" ); - goto error; - } - if (H5Aread(attr_id,mtype_id,buf)<0) - goto error; - - -/*------------------------------------------------------------------------- - * copy - *------------------------------------------------------------------------- - */ - - if ((attr_out=H5Acreate(loc_out,name,ftype_id,space_id,H5P_DEFAULT))<0) - goto error; - if(H5Awrite(attr_out,mtype_id,buf)<0) - goto error; - - if (options->verbose) - printf(" %-13s %s\n", "attr", name); - -/*------------------------------------------------------------------------- - * close - *------------------------------------------------------------------------- - */ - - if (H5Tclose(ftype_id)<0) goto error; - if (H5Tclose(mtype_id)<0) goto error; - if (H5Sclose(space_id)<0) goto error; - if (H5Aclose(attr_id)<0) goto error; - if (H5Aclose(attr_out)<0) goto error; - if (buf) - free(buf); - } /* u */ - - return 0; - -error: - H5E_BEGIN_TRY { - H5Tclose(ftype_id); - H5Tclose(mtype_id); - H5Sclose(space_id); - H5Aclose(attr_id); - H5Aclose(attr_out); - if (buf) - free(buf); - } H5E_END_TRY; - return -1; -} |