diff options
Diffstat (limited to 'tools')
-rw-r--r-- | tools/h5dump.c | 2 | ||||
-rw-r--r-- | tools/h5ls.c | 7 | ||||
-rw-r--r-- | tools/h5tools.c | 359 | ||||
-rw-r--r-- | tools/h5tools.h | 6 |
4 files changed, 190 insertions, 184 deletions
diff --git a/tools/h5dump.c b/tools/h5dump.c index 07c4335..d285cd4 100644 --- a/tools/h5dump.c +++ b/tools/h5dump.c @@ -1431,7 +1431,7 @@ main(int argc, char *argv[]) if (argv[argc-1][0] == '\\') fname = &argv[argc-1][1]; else fname = argv[argc-1]; - fid = H5ToolsFopen(fname, NULL); + fid = h5dump_fopen(fname, NULL, 0); if (fid < 0) { fprintf (stderr, "h5dump error: unable to open file %s \n", fname); free(opts); diff --git a/tools/h5ls.c b/tools/h5ls.c index 9ef01e5..fec6394 100644 --- a/tools/h5ls.c +++ b/tools/h5ls.c @@ -1914,10 +1914,9 @@ main (int argc, char *argv[]) H5G_stat_t sb; iter_t iter; static char root_name[] = "/"; - char drivername[50]; + char drivername[50]; - memset(drivername, '\0',50); /* Build display table */ DISPATCH(H5G_DATASET, "Dataset", H5Dopen, H5Dclose, dataset_list1, dataset_list2); @@ -2093,9 +2092,7 @@ main (int argc, char *argv[]) file = -1; while (fname && *fname) { - - file = H5ToolsFopen(fname, drivername); - + file = h5dump_fopen(fname, drivername, sizeof drivername); if (file>=0) { if (verbose_g) { printf("Opened \"%s\" with %s driver.\n", diff --git a/tools/h5tools.c b/tools/h5tools.c index 71948b6..02c6984 100644 --- a/tools/h5tools.c +++ b/tools/h5tools.c @@ -87,8 +87,9 @@ typedef struct h5dump_context_t { *needed so we can break after each *row */ int indent_level; /*the number of times we need some - extra indentation */ - int default_indent_level; /*this is used when the indent level gets changed*/ + *extra indentation */ + int default_indent_level; /*this is used when the indent + *level gets changed */ } h5dump_context_t; typedef herr_t (*H5G_operator_t)(hid_t, const char*, void*); @@ -105,8 +106,7 @@ extern int get_table_idx(table_t *table, unsigned long *); extern int get_tableflag(table_t*, int); extern int set_tableflag(table_t*, int); extern char* get_objectname(table_t*, int); -extern hid_t H5ToolsFopen(char* fname, char* drivername); - + /*------------------------------------------------------------------------- * Function: h5dump_str_close * @@ -131,7 +131,6 @@ h5dump_str_close(h5dump_str_t *str) } } - /*------------------------------------------------------------------------- * Function: h5dump_str_len * @@ -155,7 +154,6 @@ h5dump_str_len(h5dump_str_t *str) return str->len; } - /*------------------------------------------------------------------------- * Function: h5dump_str_append * @@ -208,7 +206,6 @@ h5dump_str_append(h5dump_str_t *str/*in,out*/, const char *fmt, ...) return str->s; } - /*------------------------------------------------------------------------- * Function: h5dump_str_reset * @@ -241,7 +238,6 @@ h5dump_str_reset(h5dump_str_t *str/*in,out*/) return str->s; } - /*------------------------------------------------------------------------- * Function: h5dump_str_trunc * @@ -268,7 +264,6 @@ h5dump_str_trunc(h5dump_str_t *str/*in,out*/, size_t size) return str->s; } - /*------------------------------------------------------------------------- * Function: h5dump_str_fmt * @@ -318,7 +313,6 @@ h5dump_str_fmt(h5dump_str_t *str/*in,out*/, size_t start, const char *fmt) return str->s; } - /*------------------------------------------------------------------------- * Function: h5dump_prefix * @@ -379,7 +373,6 @@ h5dump_prefix(h5dump_str_t *str/*in,out*/, const h5dump_t *info, return h5dump_str_fmt(str, 0, OPT(info->idx_fmt, "%s: ")); } - /*------------------------------------------------------------------------- * Function: h5dump_escape * @@ -456,7 +449,6 @@ h5dump_escape(char *s/*in,out*/, size_t size, int escape_spaces) return s; } - /*------------------------------------------------------------------------- * Function: h5dump_is_zero * @@ -481,7 +473,6 @@ h5dump_is_zero(const void *_mem, size_t size) return TRUE; } - /*------------------------------------------------------------------------- * Function: h5dump_region * @@ -565,7 +556,6 @@ h5dump_region(hid_t region, h5dump_str_t *str/*in,out*/, const h5dump_t *info) return 0; } - /*------------------------------------------------------------------------- * Function: h5dump_sprint * @@ -1024,7 +1014,6 @@ h5dump_sprint(h5dump_str_t *str/*in,out*/, const h5dump_t *info, return h5dump_str_fmt(str, start, OPT(info->elmt_fmt, "%s")); } - /*------------------------------------------------------------------------- * Function: h5dump_ncols * @@ -1052,7 +1041,6 @@ h5dump_ncols(const char *s) return i; } - /*------------------------------------------------------------------------- * Function: h5dump_simple_prefix * @@ -1134,7 +1122,6 @@ h5dump_simple_prefix(FILE *stream, const h5dump_t *info, h5dump_str_close(&prefix); } - /*------------------------------------------------------------------------- * Function: h5dump_simple_data * @@ -1305,8 +1292,6 @@ h5dump_simple_data(FILE *stream, const h5dump_t *info, hid_t container, h5dump_str_close(&buffer); } - - /*------------------------------------------------------------------------- * Function: h5dump_simple_dset * @@ -1461,7 +1446,6 @@ h5dump_simple_dset(FILE *stream, const h5dump_t *info, hid_t dset, return 0; } - /*------------------------------------------------------------------------- * Function: h5dump_simple_mem * @@ -1485,7 +1469,7 @@ h5dump_simple_mem(FILE *stream, const h5dump_t *info, hid_t type, { hsize_t i; /*counters */ hsize_t nelmts; /*total selected elmts */ - h5dump_context_t ctx; /*printing context */ + h5dump_context_t ctx; /*printing context */ /* * Check that everything looks okay. The dimensionality must not be too @@ -1525,7 +1509,6 @@ h5dump_simple_mem(FILE *stream, const h5dump_t *info, hid_t type, return 0; } - /*------------------------------------------------------------------------- * Function: h5dump_fixtype * @@ -1698,7 +1681,6 @@ h5dump_fixtype(hid_t f_type) return m_type; } - /*------------------------------------------------------------------------- * Function: h5dump_dset * @@ -1728,7 +1710,8 @@ h5dump_fixtype(hid_t f_type) *------------------------------------------------------------------------- */ int -h5dump_dset(FILE *stream, const h5dump_t *info, hid_t dset, hid_t _p_type, int indentlevel) +h5dump_dset(FILE *stream, const h5dump_t *info, hid_t dset, hid_t _p_type, + int indentlevel) { hid_t f_space; hid_t p_type = _p_type; @@ -1764,7 +1747,6 @@ h5dump_dset(FILE *stream, const h5dump_t *info, hid_t dset, hid_t _p_type, int i return status; } - /*------------------------------------------------------------------------- * Function: h5dump_mem * @@ -1839,13 +1821,13 @@ h5dump_mem(FILE *stream, const h5dump_t *info, hid_t type, hid_t space, *-----------------------------------------------------------------------*/ void indentation(int x) { - if(x < nCols) { - while (x>0) { printf(" "); x--; } - } - else { - printf("The indentation exceeds the number of cols. Exiting....\n"); - exit(1); - } + if(x < nCols) { + while (x>0) { printf(" "); x--; } + } + else { + printf("The indentation exceeds the number of cols. Exiting....\n"); + exit(1); + } } /* Print the program name and the version information which is */ @@ -1882,10 +1864,11 @@ THE FUNCTIONS BELOW ARE FROM THE H5FINSHD.C FILE * Modifications: * *-----------------------------------------------------------------------*/ -void init_table (table_t** temp){ - - int i; - table_t *table = malloc(sizeof(table_t)); +void +init_table (table_t** temp) +{ + int i; + table_t *table = malloc(sizeof(table_t)); table->size = 20; table->nobjs = 0; @@ -1894,16 +1877,14 @@ void init_table (table_t** temp){ for (i = 0; i < table->size; i++) { - table->objs[i].objno[0] = table->objs[i].objno[1] = 0; - table->objs[i].displayed = 0; - table->objs[i].recorded = 0; - table->objs[i].objflag = 0; + table->objs[i].objno[0] = table->objs[i].objno[1] = 0; + table->objs[i].displayed = 0; + table->objs[i].recorded = 0; + table->objs[i].objflag = 0; } - *temp = table; - + *temp = table; } - /*------------------------------------------------------------------------- * Function: init_prefix * @@ -1914,11 +1895,13 @@ void init_table (table_t** temp){ * Modifications: * *-----------------------------------------------------------------------*/ -void init_prefix(char **prefix, int prefix_len){ - char *temp; +void +init_prefix(char **prefix, int prefix_len) +{ + char *temp; temp = (char *) malloc(prefix_len * sizeof (char)); *temp = '\0'; - *prefix = temp; + *prefix = temp; } @@ -1937,13 +1920,13 @@ void init_prefix(char **prefix, int prefix_len){ * *-----------------------------------------------------------------------*/ void -free_table (table_t **table){ - - table_t *temp = *table; - if (temp->objs != NULL) { - HDfree(temp->objs); - } - *table = temp; +free_table (table_t **table) +{ + table_t *temp = *table; + if (temp->objs != NULL) { + HDfree(temp->objs); + } + *table = temp; } @@ -1962,20 +1945,20 @@ free_table (table_t **table){ * *-----------------------------------------------------------------------*/ int -search_obj (table_t *table, unsigned long *objno) { -int i=0, found=0; +search_obj (table_t *table, unsigned long *objno) +{ + int i=0, found=0; while (i < table->nobjs && !found) - if (table->objs[i].objno[0] == *(objno) && - table->objs[i].objno[1] == *(objno+1) ) found = 1; - else i++; + if (table->objs[i].objno[0] == *(objno) && + table->objs[i].objno[1] == *(objno+1) ) found = 1; + else i++; if (!found) return -1; else return i; } - /*------------------------------------------------------------------------- * Function: add_obj * @@ -1990,17 +1973,18 @@ int i=0, found=0; * *-----------------------------------------------------------------------*/ void -add_obj (table_t *table, unsigned long *objno, char *objname) { -int i; +add_obj (table_t *table, unsigned long *objno, char *objname) +{ + int i; if (table->nobjs == table->size) { table->size *= 2; table->objs = realloc (table->objs, table->size*sizeof(obj_t)); for (i = table->nobjs; i < table->size; i++) { - table->objs[i].objno[0] = table->objs[i].objno[1] = 0; - table->objs[i].displayed = 0; - table->objs[i].recorded = 0; - table->objs[i].objflag = 0; + table->objs[i].objno[0] = table->objs[i].objno[1] = 0; + table->objs[i].displayed = 0; + table->objs[i].recorded = 0; + table->objs[i].objflag = 0; } } @@ -2008,8 +1992,8 @@ int i; table->objs[i].objno[0] = *objno; table->objs[i].objno[1] = *(objno+1); strcpy (table->objs[i].objname, objname); - } + /*------------------------------------------------------------------------- * Function: Find_objs * @@ -2024,21 +2008,23 @@ int i; * Modifications: * *-----------------------------------------------------------------------*/ -herr_t find_objs(hid_t group, const char *name, void *op_data) +herr_t +find_objs(hid_t group, const char *name, void *op_data) { - hid_t obj, type; - H5G_stat_t statbuf; - char *tmp; - int i; - find_objs_t *info = (find_objs_t*)op_data; - - if (info->threshold > 1) { /*will get an infinite loop if greater than 1*/ - return(FAIL); - } + hid_t obj, type; + H5G_stat_t statbuf; + char *tmp; + int i; + find_objs_t *info = (find_objs_t*)op_data; + + if (info->threshold > 1) { + /*will get an infinite loop if greater than 1*/ + return(FAIL); + } H5Gget_objinfo(group, name, TRUE, &statbuf); - tmp = (char *) malloc ((strlen(info->prefix)+strlen(name)+2) * sizeof(char)); + tmp = (char *) malloc((strlen(info->prefix)+strlen(name)+2)*sizeof(char)); strcpy(tmp, info->prefix); @@ -2047,9 +2033,10 @@ herr_t find_objs(hid_t group, const char *name, void *op_data) case H5G_GROUP: if ((obj=H5Gopen (group, name))>=0) { - if (info->prefix_len < (int)(strlen(info->prefix) + strlen(name) + 2)) { + if (info->prefix_len<(int)(strlen(info->prefix)+strlen(name)+2)) { info->prefix_len *= 2; - info->prefix = realloc (info->prefix, info->prefix_len * sizeof(char)); + info->prefix = realloc(info->prefix, + info->prefix_len * sizeof(char)); } strcat(strcat(info->prefix,"/"), name); @@ -2078,35 +2065,38 @@ herr_t find_objs(hid_t group, const char *name, void *op_data) add_obj (info->dset_table, statbuf.objno, tmp); if ((obj=H5Dopen (group, name))>=0) { - type = H5Dget_type (obj); - if (H5Tcommitted(type) > 0 ) { - H5Gget_objinfo(type, ".", TRUE, &statbuf); - if (search_obj (info->type_table, statbuf.objno) < 0) { - add_obj (info->type_table, statbuf.objno, tmp) ; - info->type_table->objs[info->type_table->nobjs - 1].objflag = 0; - } - } - H5Tclose(type); - H5Dclose (obj); + type = H5Dget_type (obj); + if (H5Tcommitted(type) > 0 ) { + H5Gget_objinfo(type, ".", TRUE, &statbuf); + if (search_obj (info->type_table, statbuf.objno) < 0) { + add_obj (info->type_table, statbuf.objno, tmp) ; + info->type_table->objs[info->type_table->nobjs - 1].objflag = 0; + } + } + H5Tclose(type); + H5Dclose (obj); } else - info->status = 1; + info->status = 1; break; case H5G_TYPE: - strcat(tmp,"/"); - strcat(tmp,name); /* absolute name of the type */ - i = search_obj (info->type_table, statbuf.objno); - if (i < 0) { - add_obj (info->type_table, statbuf.objno, tmp) ; - info->type_table->objs[info->type_table->nobjs-1].recorded = 1; /* named data type */ - info->type_table->objs[info->type_table->nobjs-1].objflag = 1; /* named data type */ - } else { - strcpy (info->type_table->objs[i].objname, tmp); - info->type_table->objs[i].recorded = 1; - info->type_table->objs[info->type_table->nobjs-1].objflag = 1; /* named data type */ - } - break; + strcat(tmp,"/"); + strcat(tmp,name); /* absolute name of the type */ + i = search_obj (info->type_table, statbuf.objno); + if (i < 0) { + add_obj (info->type_table, statbuf.objno, tmp) ; + /* named data type */ + info->type_table->objs[info->type_table->nobjs-1].recorded = 1; + /* named data type */ + info->type_table->objs[info->type_table->nobjs-1].objflag = 1; + } else { + strcpy (info->type_table->objs[i].objname, tmp); + info->type_table->objs[i].recorded = 1; + /* named data type */ + info->type_table->objs[info->type_table->nobjs-1].objflag = 1; + } + break; default: break; @@ -2117,7 +2107,6 @@ herr_t find_objs(hid_t group, const char *name, void *op_data) return SUCCEED; } - /*------------------------------------------------------------------------- * Function: dump_tables * @@ -2131,20 +2120,18 @@ herr_t find_objs(hid_t group, const char *name, void *op_data) * *-----------------------------------------------------------------------*/ void -dump_table(char* tablename, table_t *table) { -int i; +dump_table(char* tablename, table_t *table) +{ + int i; printf("%s: # of entries = %d\n", tablename,table->nobjs); for ( i = 0; i < table->nobjs; i++) printf ("%lu %lu %s %d\n", table->objs[i].objno[0], - table->objs[i].objno[1], - table->objs[i].objname, - table->objs[i].objflag); - + table->objs[i].objno[1], + table->objs[i].objname, + table->objs[i].objflag); } - - /*------------------------------------------------------------------------- * Function: get_table_idx * @@ -2160,12 +2147,12 @@ int i; int get_table_idx(table_t *table, unsigned long *objno) { -int idx = -1; + int idx = -1; - idx = search_obj(table, objno); + idx = search_obj(table, objno); return idx; - } + /*------------------------------------------------------------------------- * Function: Get table flag setting * @@ -2183,11 +2170,9 @@ int idx = -1; int get_tableflag(table_t *table, int idx) { - - return(table->objs[idx].objflag); - - + return(table->objs[idx].objflag); } + /*------------------------------------------------------------------------- * Function: Set table flag setting * @@ -2205,12 +2190,10 @@ get_tableflag(table_t *table, int idx) int set_tableflag(table_t *table, int idx) { - table->objs[idx].objflag = TRUE; return(SUCCEED); - - } + /*------------------------------------------------------------------------- * Function: Get name of i'th object in table * @@ -2226,67 +2209,97 @@ set_tableflag(table_t *table, int idx) char * get_objectname(table_t* table, int idx) { - - return(strdup(table->objs[idx].objname)); + return(strdup(table->objs[idx].objname)); } /*------------------------------------------------------------------------- - * Function: opens a file using the list of drivers + * Function: opens a file using the list of drivers * - * Purpose: + * Purpose: Attempts to open a file with various VFL drivers. * - * Return: Success: a file id for the opened file + * Return: Success: a file id for the opened file. If + * DRIVERNAME is non-null then the first + * DRIVERNAME_SIZE-1 characters of the driver + * name are copied into the DRIVERNAME array + * and null terminated. * - * Failure: -1; + * Failure: -1. If DRIVERNAME is non-null then the + * first byte is set to the null terminator. * + * Modifications: + * Robb Matzke, 2000-06-23 + * We only have to initialize driver[] on the first call, + * thereby preventing memory leaks from repeated calls to + * H5Pcreate(). + * + * Robb Matzke, 2000-06-23 + * Added DRIVERNAME_SIZE arg to prevent overflows when + * writing to DRIVERNAME. + * + * Robb Matzke, 2000-06-23 + * Added test to prevent coredump when the file could not be + * opened by any driver. + * + * Robb Matzke, 2000-06-23 + * Changed name from H5ToolsFopen() so it jives better with + * the names we already have at the top of this source file. *-----------------------------------------------------------------------*/ - -hid_t H5ToolsFopen(char* fname, char* drivername){ - - typedef struct driver_t { - const char *name; - hid_t fapl; - } driver_t; - - hid_t fid, fapl = H5P_DEFAULT; - int ndrivers = 0, drivernum; - driver_t driver[NDRIVERS]; - - /*taken from h5ls*/ - /* - * Build a list of file access property lists which we should try when - * opening the file. Eventually we'd like some way for the user to - * augment/replace this list interactively. - */ - driver[ndrivers].name = "sec2"; - driver[ndrivers].fapl = H5P_DEFAULT; - ndrivers++; +hid_t +h5dump_fopen(const char *fname, char *drivername, size_t drivername_size) +{ + static struct { + const char *name; + hid_t fapl; + } driver[16]; + static int ndrivers = 0; + + hid_t fid, fapl = H5P_DEFAULT; + int drivernum; + + if (!ndrivers) { + /* Build a list of file access property lists which we should try + * when opening the file. Eventually we'd like some way for the + * user to augment/replace this list interactively. */ + driver[ndrivers].name = "sec2"; + driver[ndrivers].fapl = H5P_DEFAULT; + ndrivers++; + #if defined VERSION13 - driver[ndrivers].name = "family"; - driver[ndrivers].fapl = fapl = H5Pcreate(H5P_FILE_ACCESS); - H5Pset_fapl_family(fapl, 0, H5P_DEFAULT); - ndrivers++; - - driver[ndrivers].name = "split"; - driver[ndrivers].fapl = fapl = H5Pcreate(H5P_FILE_ACCESS); - H5Pset_fapl_split(fapl, "-m.h5", H5P_DEFAULT, "-r.h5", H5P_DEFAULT); - ndrivers++; - - driver[ndrivers].name = "multi"; - driver[ndrivers].fapl = fapl = H5Pcreate(H5P_FILE_ACCESS); - H5Pset_fapl_multi(fapl, NULL, NULL, NULL, NULL, TRUE); - ndrivers++; + driver[ndrivers].name = "family"; + driver[ndrivers].fapl = fapl = H5Pcreate(H5P_FILE_ACCESS); + H5Pset_fapl_family(fapl, 0, H5P_DEFAULT); + ndrivers++; + + driver[ndrivers].name = "split"; + driver[ndrivers].fapl = fapl = H5Pcreate(H5P_FILE_ACCESS); + H5Pset_fapl_split(fapl, "-m.h5", H5P_DEFAULT, "-r.h5", H5P_DEFAULT); + ndrivers++; + + driver[ndrivers].name = "multi"; + driver[ndrivers].fapl = fapl = H5Pcreate(H5P_FILE_ACCESS); + H5Pset_fapl_multi(fapl, NULL, NULL, NULL, NULL, TRUE); + ndrivers++; #endif - for (drivernum = 0; drivernum<ndrivers;drivernum++){ - H5E_BEGIN_TRY { - fid = H5Fopen(fname, H5F_ACC_RDONLY, driver[drivernum].fapl); - } H5E_END_TRY; - if (fid >= 0) break; - } - if (drivername){ - memcpy(drivername,driver[drivernum].name,strlen(driver[drivernum].name)); - } - return (fid); + } + + /* Try to open the file using each of the drivers */ + for (drivernum=0; drivernum<ndrivers; drivernum++) { + H5E_BEGIN_TRY { + fid = H5Fopen(fname, H5F_ACC_RDONLY, driver[drivernum].fapl); + } H5E_END_TRY; + if (fid >= 0) break; + } + + /* Save the driver name */ + if (drivername && drivername_size){ + if (fid>=0) { + strncpy(drivername, driver[drivernum].name, drivername_size); + drivername[drivername_size-1] = '\0'; + } else { + drivername[0] = '\0'; /*no file opened*/ + } + } + return (fid); } diff --git a/tools/h5tools.h b/tools/h5tools.h index 44432b4..bd28065 100644 --- a/tools/h5tools.h +++ b/tools/h5tools.h @@ -338,6 +338,7 @@ hid_t h5dump_fixtype(hid_t f_type); int h5dump_dset(FILE *stream, const h5dump_t *info, hid_t dset, hid_t p_typ,int indentlevel); int h5dump_mem(FILE *stream, const h5dump_t *info, hid_t type, hid_t space, void *mem, int indentlevel); +hid_t h5dump_fopen(const char *fname, char *drivername, size_t drivername_len); /*if we get a new program that needs to use the library add its name here*/ @@ -434,8 +435,3 @@ extern int nCols; /* Definitions of useful routines */ void print_version(const char *program_name); -/*used to open files so we can use different drivers*/ -hid_t H5ToolsFopen(char* fname, char* drivername); - -#define NDRIVERS 10 - |