diff options
-rw-r--r-- | tools/h5dump/h5dump.c | 823 | ||||
-rw-r--r-- | tools/h5ls/h5ls.c | 545 | ||||
-rw-r--r-- | tools/h5repack/h5repack_copy.c | 34 | ||||
-rw-r--r-- | tools/h5repack/h5repack_refs.c | 28 | ||||
-rw-r--r-- | tools/lib/Makefile.in | 2 | ||||
-rw-r--r-- | tools/lib/h5diff_attr.c | 23 | ||||
-rw-r--r-- | tools/lib/h5diff_dset.c | 45 | ||||
-rw-r--r-- | tools/lib/h5tools.c | 300 | ||||
-rw-r--r-- | tools/lib/h5tools.h | 13 | ||||
-rw-r--r-- | tools/lib/h5tools_str.c | 12 | ||||
-rw-r--r-- | tools/lib/h5tools_type.c | 1 | ||||
-rw-r--r-- | tools/lib/h5tools_utils.c | 2 | ||||
-rw-r--r-- | tools/lib/h5trav.c | 9 | ||||
-rw-r--r-- | tools/lib/h5trav.h | 2 | ||||
-rw-r--r-- | tools/lib/talign.c | 7 |
15 files changed, 910 insertions, 936 deletions
diff --git a/tools/h5dump/h5dump.c b/tools/h5dump/h5dump.c index 237cbaf..6cab57d 100644 --- a/tools/h5dump/h5dump.c +++ b/tools/h5dump/h5dump.c @@ -38,7 +38,7 @@ int d_status = EXIT_SUCCESS; static int unamedtype = 0; /* shared data type with no name */ static size_t prefix_len = 1024; static table_t *group_table = NULL, *dset_table = NULL, *type_table = NULL; -char *prefix; +char *prefix; static const char *driver = NULL; /* The driver to open the file with. */ static const dump_header *dump_header_format; @@ -145,8 +145,8 @@ static h5dump_t dataformat = { "%s", /*dset_blockformat_pre */ "%s", /*dset_ptformat_pre */ "%s", /*dset_ptformat */ - 1 , /*array indices */ - 1 /*escape non printable characters */ + 1, /*array indices */ + 1 /*escape non printable characters */ }; /** @@ -229,8 +229,8 @@ static h5dump_t xml_dataformat = { "%s", /*dset_blockformat_pre */ "%s", /*dset_ptformat_pre */ "%s", /*dset_ptformat */ - 0, /*array indices */ - 0 /*escape non printable characters */ + 0, /*array indices */ + 0 /*escape non printable characters */ }; /** XML **/ @@ -522,6 +522,30 @@ static const dump_functions xml_function_table = { */ static const dump_functions *dump_function_table; + +/*------------------------------------------------------------------------- + * Function: leave + * + * Purpose: Shutdown MPI & HDF5 and call exit() + * + * Return: Does not return + * + * Programmer: Quincey Koziol + * Saturday, 31. January 2004 + * + * Modifications: + * + *------------------------------------------------------------------------- + */ +static void +leave(int ret) +{ + h5tools_close(); + + exit(ret); +} + + /*------------------------------------------------------------------------- * Function: usage * @@ -621,8 +645,11 @@ static void print_datatype(hid_t type,unsigned in_group) { char *fname; - hid_t nmembers, mtype, str_type; - int i, j, ndims, perm[H5DUMP_MAX_RANK]; + hid_t mtype, str_type; + unsigned nmembers; + int perm[H5DUMP_MAX_RANK]; + unsigned ndims; + unsigned i; size_t size=0; hsize_t dims[H5DUMP_MAX_RANK]; H5T_str_t str_pad; @@ -631,17 +658,18 @@ print_datatype(hid_t type,unsigned in_group) hid_t super; hid_t tmp_type; htri_t is_vlstr=FALSE; + herr_t ret; /* Generic return value */ if (!in_group && H5Tcommitted(type) > 0) { H5Gget_objinfo(type, ".", TRUE, &statbuf); - i = search_obj(type_table, statbuf.objno); + ret = search_obj(type_table, statbuf.objno); - if (i >= 0) { - if (!type_table->objs[i].recorded) - printf("\"/#%lu:%lu\"", type_table->objs[i].objno[0], - type_table->objs[i].objno[1]); + if (ret >= 0) { + if (!type_table->objs[ret].recorded) + printf("\"/#%lu:%lu\"", type_table->objs[ret].objno[0], + type_table->objs[ret].objno[1]); else - printf("\"%s\"", type_table->objs[i].objname); + printf("\"%s\"", type_table->objs[ret].objname); } else { error_msg(progname, "unknown committed type.\n"); d_status = EXIT_FAILURE; @@ -904,8 +932,8 @@ print_datatype(hid_t type,unsigned in_group) H5Tget_array_dims(type, dims, perm); /* Print array dimensions */ - for (j = 0; j < ndims; j++) - printf("[%d]", (int) dims[j]); + for (i = 0; i < ndims; i++) + printf("[%d]", (int) dims[i]); printf(" "); @@ -1259,236 +1287,227 @@ dump_all(hid_t group, const char *name, void * op_data) switch (statbuf.type) { case H5G_LINK: - - - indentation(indent); - targbuf = malloc(statbuf.linklen); - - if (!doxml) { - begin_obj(dump_header_format->softlinkbegin, name, + indentation(indent); + targbuf = malloc(statbuf.linklen); + + if (!doxml) { + begin_obj(dump_header_format->softlinkbegin, name, dump_header_format->softlinkblockbegin); - indentation(indent + COL); - } - - if (H5Gget_linkval(group, name, statbuf.linklen, targbuf) < 0) { - error_msg(progname, "unable to get link value\n"); - d_status = EXIT_FAILURE; - ret = FAIL; - } else { - /* print the value of a soft link */ - if (!doxml) { - /* Standard DDL: no modification */ - printf("LINKTARGET \"%s\"\n", targbuf); - } else { - /* XML */ - char *linkxid = malloc(100); - char *parentxid = malloc(100); - char *targetxid = malloc(100); - char *t_prefix = xml_escape_the_name(strcmp(prefix,"") ? prefix : "/"); - char *t_name = xml_escape_the_name(name); - char *t_targbuf = xml_escape_the_name(targbuf); - char *tmp2, *t_tmp; - int res; - - tmp2 = malloc(strlen(prefix) + statbuf.linklen + 1); - strcpy(tmp2, prefix); - - if (targbuf && targbuf[0] == '/') - strcpy(tmp2, targbuf); - else - strcat(strcat(tmp2, "/"), targbuf); - - t_tmp = xml_escape_the_name(strcat(strcat(tmp, "/"), name)); - res = xml_name_to_XID(t_tmp,linkxid,100,1); - res = xml_name_to_XID(prefix,parentxid,100,1); - - res = xml_name_to_XID(tmp2,targetxid,100,0); - - if (res == 0) { - /* target obj found */ - printf("<%sSoftLink LinkName=\"%s\" " + indentation(indent + COL); + } + + if (H5Gget_linkval(group, name, statbuf.linklen, targbuf) < 0) { + error_msg(progname, "unable to get link value\n"); + d_status = EXIT_FAILURE; + ret = FAIL; + } else { + /* print the value of a soft link */ + if (!doxml) { + /* Standard DDL: no modification */ + printf("LINKTARGET \"%s\"\n", targbuf); + } else { + /* XML */ + char *linkxid = malloc(100); + char *parentxid = malloc(100); + char *targetxid = malloc(100); + char *t_prefix = xml_escape_the_name(strcmp(prefix,"") ? prefix : "/"); + char *t_name = xml_escape_the_name(name); + char *t_targbuf = xml_escape_the_name(targbuf); + char *tmp2, *t_tmp; + int res; + + tmp2 = malloc(strlen(prefix) + statbuf.linklen + 1); + strcpy(tmp2, prefix); + + if (targbuf && targbuf[0] == '/') + strcpy(tmp2, targbuf); + else + strcat(strcat(tmp2, "/"), targbuf); + + t_tmp = xml_escape_the_name(strcat(strcat(tmp, "/"), name)); + xml_name_to_XID(t_tmp,linkxid,100,1); + xml_name_to_XID(prefix,parentxid,100,1); + + res = xml_name_to_XID(tmp2,targetxid,100,0); + + if (res == 0) { + /* target obj found */ + printf("<%sSoftLink LinkName=\"%s\" " "OBJ-XID=\"%s\" " "H5SourcePath=\"%s\" " - "TargetPath=\"%s\" TargetObj=\"%s\" " + "TargetPath=\"%s\" TargetObj=\"%s\" " "Parents=\"%s\" H5ParentPaths=\"%s\" />\n", - xmlnsprefix, - t_name, - linkxid, - t_tmp, - t_targbuf, targetxid, - parentxid, t_prefix); - free(targetxid); - } else { - /* dangling link -- omit from xml attributes */ - printf("<%sSoftLink LinkName=\"%s\" " + xmlnsprefix, + t_name, + linkxid, + t_tmp, + t_targbuf, targetxid, + parentxid, t_prefix); + free(targetxid); + } else { + /* dangling link -- omit from xml attributes */ + printf("<%sSoftLink LinkName=\"%s\" " "OBJ-XID=\"%s\" " "H5SourcePath=\"%s\" " - "TargetPath=\"%s\" " + "TargetPath=\"%s\" " "Parents=\"%s\" H5ParentPaths=\"%s\" />\n", - xmlnsprefix, - t_name, - linkxid, - t_tmp, - t_targbuf, - parentxid, t_prefix); - } - - free(t_name); - free(t_targbuf); - free(t_tmp); - free(tmp2); - free(linkxid); - free(parentxid); - } - } - - if (!doxml) { - indentation(indent); - end_obj(dump_header_format->softlinkend, - dump_header_format->softlinkblockend); - } - - free(targbuf); - - break; + xmlnsprefix, + t_name, + linkxid, + t_tmp, + t_targbuf, + parentxid, t_prefix); + } + + free(t_name); + free(t_targbuf); + free(t_tmp); + free(tmp2); + free(linkxid); + free(parentxid); + } + } + + if (!doxml) { + indentation(indent); + end_obj(dump_header_format->softlinkend, + dump_header_format->softlinkblockend); + } + + free(targbuf); + break; case H5G_GROUP: - - if ((obj = H5Gopen(group, name)) < 0) { - error_msg(progname, "unable to dump group \"%s\"\n", name); - d_status = EXIT_FAILURE; - ret = FAIL; - } else { - size_t new_len = strlen(prefix) + strlen(name) + 2; - - if (prefix_len <= new_len) { - prefix_len = new_len + 1; - prefix = realloc(prefix, prefix_len); - } - - strcat(strcat(prefix, "/"), name); - dump_function_table->dump_group_function(obj, name); - strcpy(prefix, tmp); - H5Gclose(obj); - } - break; + if ((obj = H5Gopen(group, name)) < 0) { + error_msg(progname, "unable to dump group \"%s\"\n", name); + d_status = EXIT_FAILURE; + ret = FAIL; + } else { + size_t new_len = strlen(prefix) + strlen(name) + 2; + + if (prefix_len <= new_len) { + prefix_len = new_len + 1; + prefix = realloc(prefix, prefix_len); + } + + strcat(strcat(prefix, "/"), name); + dump_function_table->dump_group_function(obj, name); + strcpy(prefix, tmp); + H5Gclose(obj); + } + + break; case H5G_DATASET: + if ((obj = H5Dopen(group, name)) >= 0) { + /* hard link */ + H5Gget_objinfo(obj, ".", TRUE, &statbuf); + + if (statbuf.nlink > 1) { + i = search_obj(dset_table, statbuf.objno); + + if (i < 0) { + indentation(indent); + begin_obj(dump_header_format->datasetbegin, name, + dump_header_format->datasetblockbegin); + indentation(indent + COL); + error_msg(progname, + "internal error (file %s:line %d)\n", + __FILE__, __LINE__); + indentation(indent); + end_obj(dump_header_format->datasetend, + dump_header_format->datasetblockend); + d_status = EXIT_FAILURE; + ret = FAIL; + H5Dclose(obj); + goto done; + } else if (dset_table->objs[i].displayed) { + indentation(indent); + + if (!doxml) { + begin_obj(dump_header_format->datasetbegin, name, + dump_header_format->datasetblockbegin); + indentation(indent + COL); + printf("%s \"%s\"\n", HARDLINK, + dset_table->objs[i].objname); + indentation(indent); + end_obj(dump_header_format->datasetend, + dump_header_format->datasetblockend); + } else { + /* the XML version */ + char *t_tmp; + char *t_prefix; + char *t_name; + char *dsetxid = malloc(100); + char *parentxid = malloc(100); + char *pointerxid = malloc(100); + char *tx_tmp = malloc(strlen(tmp)+strlen(name)+1); + strcpy(tx_tmp,tmp); + t_tmp = xml_escape_the_name(strcat(strcat(tx_tmp, "/"), name)); + t_prefix = xml_escape_the_name(prefix); + t_name = xml_escape_the_name(name); + xml_name_to_XID( strcat(strcat(tmp,"/"),name), dsetxid,100,1); + xml_name_to_XID( prefix ,parentxid,100,1); + + printf("<%sDataset Name=\"%s\" OBJ-XID=\"%s-%d\" " + "H5Path=\"%s\" Parents=\"%s\" " + "H5ParentPaths=\"%s\">\n", + xmlnsprefix, + t_name, dsetxid, get_next_xid(), + t_tmp, parentxid, + (strcmp(prefix, "") ? t_prefix : "/")); + + indentation(indent + COL); + xml_name_to_XID(dset_table->objs[i].objname,pointerxid,100,1); + printf("<%sDatasetPtr OBJ-XID=\"%s\" H5Path=\"%s\"/>\n", + xmlnsprefix, + pointerxid,t_tmp); + indentation(indent); + printf("</%sDataset>\n", xmlnsprefix); + + free(t_name); + free(dsetxid); + free(parentxid); + free(pointerxid); + free(t_tmp); + free(tx_tmp); + free(t_prefix); + } + + H5Dclose(obj); + goto done; + } else { + dset_table->objs[i].displayed = 1; + + } + } + + dump_function_table->dump_dataset_function(obj, name, NULL); + H5Dclose(obj); + } else { + error_msg(progname, "unable to dump dataset \"%s\"\n", name); + d_status = EXIT_FAILURE; + ret = FAIL; + } + break; - if ((obj = H5Dopen(group, name)) >= 0) { - /* hard link */ - H5Gget_objinfo(obj, ".", TRUE, &statbuf); - - if (statbuf.nlink > 1) { - i = search_obj(dset_table, statbuf.objno); - - if (i < 0) { - indentation(indent); - begin_obj(dump_header_format->datasetbegin, name, - dump_header_format->datasetblockbegin); - indentation(indent + COL); - error_msg(progname, - "internal error (file %s:line %d)\n", - __FILE__, __LINE__); - indentation(indent); - end_obj(dump_header_format->datasetend, - dump_header_format->datasetblockend); - d_status = EXIT_FAILURE; - ret = FAIL; - H5Dclose(obj); - goto done; - } else if (dset_table->objs[i].displayed) { - indentation(indent); - - if (!doxml) { - begin_obj(dump_header_format->datasetbegin, name, - dump_header_format->datasetblockbegin); - indentation(indent + COL); - printf("%s \"%s\"\n", HARDLINK, - dset_table->objs[i].objname); - indentation(indent); - end_obj(dump_header_format->datasetend, - dump_header_format->datasetblockend); - } else { - /* the XML version */ - char *t_tmp; - char *t_prefix; - char *t_name; - char *dsetxid = malloc(100); - char *parentxid = malloc(100); - char *pointerxid = malloc(100); - char *tx_tmp = malloc(strlen(tmp)+strlen(name)+1); - strcpy(tx_tmp,tmp); - t_tmp = xml_escape_the_name(strcat(strcat(tx_tmp, "/"), name)); - t_prefix = xml_escape_the_name(prefix); - t_name = xml_escape_the_name(name); - xml_name_to_XID( strcat(strcat(tmp,"/"),name), dsetxid,100,1); - xml_name_to_XID( prefix ,parentxid,100,1); - - printf("<%sDataset Name=\"%s\" OBJ-XID=\"%s-%d\" " - "H5Path=\"%s\" Parents=\"%s\" " - "H5ParentPaths=\"%s\">\n", - xmlnsprefix, - t_name, dsetxid, get_next_xid(), - t_tmp, parentxid, - (strcmp(prefix, "") ? t_prefix : "/")); - - indentation(indent + COL); - xml_name_to_XID(dset_table->objs[i].objname,pointerxid,100,1); - printf("<%sDatasetPtr OBJ-XID=\"%s\" H5Path=\"%s\"/>\n", - xmlnsprefix, - pointerxid,t_tmp); - indentation(indent); - printf("</%sDataset>\n", xmlnsprefix); - - free(t_name); - free(dsetxid); - free(parentxid); - free(pointerxid); - free(t_tmp); -#ifdef WIN32 - /* free(tx_tmp);*/ -#else - free(tx_tmp); -#endif - free(t_prefix); - } - - H5Dclose(obj); - goto done; - } else { - dset_table->objs[i].displayed = 1; - - } - } - - dump_function_table->dump_dataset_function(obj, name, NULL); - H5Dclose(obj); - } else { - error_msg(progname, "unable to dump dataset \"%s\"\n", name); - d_status = EXIT_FAILURE; - ret = FAIL; - } - break; - case H5G_TYPE: - - if ((obj = H5Topen(group, name)) < 0) { - error_msg(progname, "unable to dump data type \"%s\"\n", name); - d_status = EXIT_FAILURE; - ret = FAIL; - } else { - dump_function_table->dump_named_datatype_function(obj, name); - H5Tclose(obj); - } - break; - + if ((obj = H5Topen(group, name)) < 0) { + error_msg(progname, "unable to dump data type \"%s\"\n", name); + d_status = EXIT_FAILURE; + ret = FAIL; + } else { + dump_function_table->dump_named_datatype_function(obj, name); + H5Tclose(obj); + } + break; + default: - error_msg(progname, "unknown object \"%s\"\n", name); - d_status = EXIT_FAILURE; - ret = FAIL; + error_msg(progname, "unknown object \"%s\"\n", name); + d_status = EXIT_FAILURE; + ret = FAIL; } - + done: free(tmp); return ret; @@ -1520,7 +1539,6 @@ dump_named_datatype(hid_t type, const char *name) indentation(indent + COL); print_datatype(type,1); printf(";\n"); - dump_comment(type); } end_obj(dump_header_format->datatypeend, dump_header_format->datatypeblockend); @@ -1627,20 +1645,19 @@ dump_dataset(hid_t did, const char *name, struct subset_t *sset) indentation(indent); begin_obj(dump_header_format->datasetbegin, name, dump_header_format->datasetblockbegin); - type = H5Dget_type(did); - space = H5Dget_space(did); - dcpl_id = H5Dget_create_plist(did); - + type = H5Dget_type(did); + space = H5Dget_space(did); + dcpl_id = H5Dget_create_plist(did); dump_comment(did); dump_datatype(type); dump_dataspace(space); if (display_oid) - dump_oid(did); - - if (display_dcpl) - dump_dcpl(dcpl_id, type, did); + dump_oid(did); + + if (display_dcpl) + dump_dcpl(dcpl_id, type, did); if (display_data) switch (H5Tget_class(type)) { @@ -1671,7 +1688,7 @@ dump_dataset(hid_t did, const char *name, struct subset_t *sset) indent -= COL; H5Tclose(type); H5Sclose(space); - H5Pclose(dcpl_id); + H5Pclose(dcpl_id); indentation(indent); end_obj(dump_header_format->datasetend, dump_header_format->datasetblockend); @@ -1906,20 +1923,13 @@ dump_data(hid_t obj_id, int obj_data, struct subset_t *sset, int pindex) outputformat = &string_dataformat; } - - status = h5tools_dump_dset(stdout, outputformat, obj_id, -1, sset, depth); - H5Tclose(f_type); + status = h5tools_dump_dset(stdout, outputformat, obj_id, -1, sset, depth); + H5Tclose(f_type); } else { /* need to call h5tools_dump_mem for the attribute data */ - H5T_class_t type_class; - type = H5Aget_type(obj_id); - type_class = H5Tget_class(type); - if(type_class==H5T_BITFIELD) - p_type=H5Tcopy(type); - else - p_type = H5Tget_native_type(type,H5T_DIR_DEFAULT); + p_type = h5tools_get_native_type(type); space = H5Aget_space(obj_id); ndims = H5Sget_simple_extent_dims(space, size, NULL); @@ -2025,35 +2035,29 @@ static void dump_comment(hid_t obj_id) static void dump_fill_value(hid_t dcpl,hid_t type_id, hid_t obj_id) { - h5tools_context_t ctx; /*print context */ - size_t size; - void *buf=NULL; - int nelmts=1; - h5dump_t *outputformat = &dataformat; - hid_t n_type; - H5T_class_t type_class; - - memset(&ctx, 0, sizeof(ctx)); - ctx.indent_level=2; - - type_class = H5Tget_class(type_id); - if(type_class==H5T_BITFIELD) - n_type=H5Tcopy(type_id); - else - n_type = H5Tget_native_type(type_id,H5T_DIR_DEFAULT); + h5tools_context_t ctx; /*print context */ + size_t size; + void *buf=NULL; + int nelmts=1; + h5dump_t *outputformat = &dataformat; + hid_t n_type; - size = H5Tget_size(n_type); - buf = malloc(size); + memset(&ctx, 0, sizeof(ctx)); + ctx.indent_level=2; - H5Pget_fill_value(dcpl, n_type, buf); - - h5tools_dump_simple_data(stdout, outputformat, obj_id, &ctx, - START_OF_DATA | END_OF_DATA, nelmts, n_type, buf); + n_type = h5tools_get_native_type(type_id); + + size = H5Tget_size(n_type); + buf = malloc(size); + + H5Pget_fill_value(dcpl, n_type, buf); - H5Tclose(n_type); + h5tools_dump_simple_data(stdout, outputformat, obj_id, &ctx, START_OF_DATA | END_OF_DATA, nelmts, n_type, buf); - if (buf) - free (buf); + H5Tclose(n_type); + + if (buf) + free (buf); } @@ -2396,7 +2400,7 @@ dump_fcpl(hid_t fid) int freelist; /* free list version # */ int stab; /* symbol table entry version # */ int shhdr; /* shared object header version # */ - hid_t driver; /* file driver */ + hid_t fdriver; /* file driver */ char dname[15]; /* buffer to store driver name */ fcpl=H5Fget_create_plist(fid); @@ -2406,10 +2410,10 @@ dump_fcpl(hid_t fid) H5Pget_sym_k(fcpl,&sym_ik,&sym_lk); H5Pget_istore_k(fcpl,&istore_ik); H5Pclose(fcpl); - fapl = h5_fileaccess(); - driver = H5Pget_driver(fapl); + fapl=h5_fileaccess(); + fdriver=H5Pget_driver(fapl); H5Pclose(fapl); - + /*------------------------------------------------------------------------- * SUPER_BLOCK *------------------------------------------------------------------------- @@ -2432,40 +2436,40 @@ dump_fcpl(hid_t fid) indentation(indent + COL); printf("%s %d\n","BTREE_LEAF", sym_lk); - if (H5FD_CORE==driver) + if (H5FD_CORE==fdriver) { strcpy(dname,"H5FD_CORE"); } - else if (H5FD_FAMILY==driver) + else if (H5FD_FAMILY==fdriver) { strcpy(dname,"H5FD_FAMILY"); } - else if (H5FD_GASS==driver) + else if (H5FD_GASS==fdriver) { strcpy(dname,"H5FD_GASS"); } - else if (H5FD_LOG==driver) + else if (H5FD_LOG==fdriver) { strcpy(dname,"H5FD_LOG"); } - else if (H5FD_MPIO==driver) + else if (H5FD_MPIO==fdriver) { strcpy(dname,"H5FD_MPIO"); } - else if (H5FD_MULTI==driver) + else if (H5FD_MULTI==fdriver) { strcpy(dname,"H5FD_MULTI"); } - else if (H5FD_SEC2==driver) + else if (H5FD_SEC2==fdriver) { strcpy(dname,"H5FD_SEC2"); } - else if (H5FD_STDIO==driver) + else if (H5FD_STDIO==fdriver) { strcpy(dname,"H5FD_STDIO"); } #ifdef H5_HAVE_STREAM - else if (H5FD_STREAM==driver) + else if (H5FD_STREAM==fdriver) { strcpy(dname,"H5FD_STREAM"); } @@ -2808,7 +2812,6 @@ handle_datasets(hid_t fid, char *dset, void *data) end_obj(dump_header_format->datasetend, dump_header_format->datasetblockend); } else { - dset_table->objs[idx].displayed = 1; dump_dataset(dsetid, dset, sset); } @@ -2959,9 +2962,8 @@ handle_datatypes(hid_t fid, char *type, void UNUSED * data) type_table->objs[idx].objno[0], type_table->objs[idx].objno[1]); - if (!strncmp(name, type, strlen(type)) || - !strncmp(name1, type, strlen(type))) - break; + if (!strncmp(name, type, strlen(type)) || !strncmp(name1, type, strlen(type))) + break; } idx++; @@ -3059,7 +3061,7 @@ parse_start: break; case 'V': print_version(progname); - exit(EXIT_SUCCESS); + leave(EXIT_SUCCESS); break; case 'w': nCols = atoi(opt_arg); @@ -3134,7 +3136,7 @@ parse_start: if (set_output_file(opt_arg) < 0){ /* failed to set output file */ usage(progname); - exit(EXIT_FAILURE); + leave(EXIT_FAILURE); } usingdasho = TRUE; @@ -3166,7 +3168,7 @@ parse_start: /* To Do: check format of this value? */ if (!useschema) { usage(progname); - exit(EXIT_FAILURE); + leave(EXIT_FAILURE); } if (strcmp(opt_arg,":") == 0) { xmlnsprefix = ""; @@ -3187,7 +3189,7 @@ parse_start: error_msg(progname, "option `-%c' can only be used after --dataset option\n", opt); - exit(EXIT_FAILURE); + leave(EXIT_FAILURE); } if (last_dset->subset_info) { @@ -3233,11 +3235,11 @@ end_collect: case 'h': usage(progname); - exit(EXIT_SUCCESS); + leave(EXIT_SUCCESS); case '?': default: usage(progname); - exit(EXIT_FAILURE); + leave(EXIT_FAILURE); } } @@ -3246,7 +3248,7 @@ parse_end: if (argc <= opt_ind) { error_msg(progname, "missing file name\n"); usage(progname); - exit(EXIT_FAILURE); + leave(EXIT_FAILURE); } return hand; } @@ -3329,7 +3331,7 @@ main(int argc, const char *argv[]) hid_t fid, gid; const char *fname = NULL; void *edata; - hid_t (*func)(void*); + H5E_auto_t func; find_objs_t info; struct handler_t *hand; int i; @@ -3350,23 +3352,23 @@ main(int argc, const char *argv[]) if (!display_all) { error_msg(progname, "option \"%s\" not available for XML\n", "to display selected objects"); - exit(EXIT_FAILURE); + leave(EXIT_FAILURE); } else if (display_bb) { error_msg(progname, "option \"%s\" not available for XML\n", "--boot-block"); - exit(EXIT_FAILURE); + leave(EXIT_FAILURE); } else if (display_oid == 1) { error_msg(progname, "option \"%s\" not available for XML\n", "--object-ids"); - exit(EXIT_FAILURE); + leave(EXIT_FAILURE); } else if (display_char == TRUE) { error_msg(progname, "option \"%s\" not available for XML\n", "--string"); - exit(EXIT_FAILURE); + leave(EXIT_FAILURE); } else if (usingdasho) { error_msg(progname, "option \"%s\" not available for XML\n", "--output"); - exit(EXIT_FAILURE); + leave(EXIT_FAILURE); } } else { if (xml_dtd_uri) { @@ -3378,15 +3380,15 @@ main(int argc, const char *argv[]) if (argc <= opt_ind) { error_msg(progname, "missing file name\n"); usage(progname); - exit(EXIT_FAILURE); + leave(EXIT_FAILURE); } fname = argv[opt_ind]; - fid = h5tools_fopen(fname, driver, NULL, 0); + fid = h5tools_fopen(fname, driver, NULL, 0, argc, argv); if (fid < 0) { error_msg(progname, "unable to open file \"%s\"\n", fname); - exit(EXIT_FAILURE); + leave(EXIT_FAILURE); } /* allocate and initialize internal data structure */ @@ -3404,7 +3406,7 @@ main(int argc, const char *argv[]) info.dset_table = dset_table; info.status = d_status; - thefile = fid; + thefile = fid; /* find all objects that might be targets of a refernce */ if ((gid = H5Gopen(fid, "/")) < 0) { error_msg(progname, "unable to open root group\n"); @@ -3432,7 +3434,7 @@ main(int argc, const char *argv[]) } else { if (useschema && strcmp(xmlnsprefix,"")) { error_msg(progname, "Cannot set Schema URL for a qualified namespace--use -X or -U option with -D \n"); - exit(EXIT_FAILURE); + leave(EXIT_FAILURE); } } } @@ -3454,8 +3456,6 @@ main(int argc, const char *argv[]) goto done; } - - /* start to dump */ if (!doxml) { begin_obj(dump_header_format->filebegin, fname, @@ -3563,9 +3563,9 @@ done: /* To Do: clean up XML table */ - h5tools_close(); H5Eset_auto(func, edata); - return d_status; + + leave(d_status); } /*------------------------------------------------------------------------- @@ -3587,14 +3587,15 @@ print_enum(hid_t type) { char **name = NULL; /*member names */ unsigned char *value = NULL; /*value array */ - int nmembs; /*number of members */ + unsigned nmembs; /*number of members */ int nchars; /*number of output characters */ hid_t super; /*enum base integer type */ hid_t native = -1; /*native integer data type */ size_t dst_size; /*destination value type size */ - int i; + unsigned i; nmembs = H5Tget_nmembers(type); + assert(nmembs>0); super = H5Tget_super(type); /* @@ -3617,9 +3618,8 @@ print_enum(hid_t type) } /* Get the names and raw values of all members */ - assert(nmembs>0); - name = calloc((size_t)nmembs, sizeof(char *)); - value = calloc((size_t)nmembs, MAX(H5Tget_size(type), dst_size)); + name = calloc(nmembs, sizeof(char *)); + value = calloc(nmembs, MAX(H5Tget_size(type), dst_size)); for (i = 0; i < nmembs; i++) { name[i] = H5Tget_member_name(type, i); @@ -3683,42 +3683,42 @@ print_enum(hid_t type) int xml_name_to_XID(const char *str , char *outstr, int outlen, int gen) { - struct ref_path_table_entry_t *r; - char *os; - - if (outlen < 22) return 1; - - os = outstr; - - r = ref_path_table_lookup(str); - if (r == NULL) { - if (strlen(str) == 0) { - r = ref_path_table_lookup("/"); - if (r == NULL) { - if (gen) { - sprintf(os," "); /* ?? */ - r = ref_path_table_gen_fake(str); - sprintf(os,"xid_%lu-%lu",r->statbuf.objno[0],r->statbuf.objno[1]); - return 0; - } else { - return 1; - } - } - } else { - if (gen) { - sprintf(os," "); /* ?? */ - r = ref_path_table_gen_fake(str); - sprintf(os,"xid_%lu-%lu",r->statbuf.objno[0],r->statbuf.objno[1]); - return 0; - } else { - return 1; - } - } - } + ref_path_table_entry_t *r; + char *os; + + if (outlen < 22) return 1; + + os = outstr; + + r = ref_path_table_lookup(str); + if (r == NULL) { + if (strlen(str) == 0) { + r = ref_path_table_lookup("/"); + if (r == NULL) { + if (gen) { + sprintf(os," "); /* ?? */ + r = ref_path_table_gen_fake(str); + sprintf(os,"xid_%lu-%lu",r->statbuf.objno[0],r->statbuf.objno[1]); + return 0; + } else { + return 1; + } + } + } else { + if (gen) { + sprintf(os," "); /* ?? */ + r = ref_path_table_gen_fake(str); + sprintf(os,"xid_%lu-%lu",r->statbuf.objno[0],r->statbuf.objno[1]); + return 0; + } else { + return 1; + } + } + } - sprintf(os,"xid_%lu-%lu",r->statbuf.objno[0],r->statbuf.objno[1]); + sprintf(os,"xid_%lu-%lu",r->statbuf.objno[0],r->statbuf.objno[1]); - return(0); + return(0); } static const char *quote = """; @@ -3927,8 +3927,11 @@ static void xml_print_datatype(hid_t type, unsigned in_group) { char *fname; - hid_t nmembers, mtype; - int i, j, ndims, perm[H5DUMP_MAX_RANK]; + hid_t mtype; + unsigned nmembers; + int perm[H5DUMP_MAX_RANK]; + unsigned ndims; + unsigned i; size_t size; hsize_t dims[H5DUMP_MAX_RANK]; H5T_str_t str_pad; @@ -3945,19 +3948,20 @@ xml_print_datatype(hid_t type, unsigned in_group) size_t msize; int nmembs; htri_t is_vlstr=FALSE; - + herr_t ret; + if (!in_group && H5Tcommitted(type) > 0) { /* detect a shared datatype, output only once */ H5Gget_objinfo(type, ".", TRUE, &statbuf); - i = search_obj(type_table, statbuf.objno); + ret = search_obj(type_table, statbuf.objno); - if (i >= 0) { + if (ret >= 0) { /* This should be defined somewhere else */ /* These 2 cases are handled the same right now, but probably will have something different eventually */ char * dtxid = malloc(100); - xml_name_to_XID(type_table->objs[i].objname,dtxid,100,1); - if (!type_table->objs[i].recorded) { + xml_name_to_XID(type_table->objs[ret].objname,dtxid,100,1); + if (!type_table->objs[ret].recorded) { /* 'anonymous' NDT. Use it's object num. as it's name. */ printf("<%sNamedDataTypePtr OBJ-XID=\"/%s\"/>\n", @@ -3965,7 +3969,7 @@ xml_print_datatype(hid_t type, unsigned in_group) dtxid); } else { /* point to the NDT by name */ - char *t_objname = xml_escape_the_name(type_table->objs[i].objname); + char *t_objname = xml_escape_the_name(type_table->objs[ret].objname); printf("<%sNamedDataTypePtr OBJ-XID=\"%s\" H5Path=\"%s\"/>\n", xmlnsprefix, dtxid,t_objname); @@ -4245,7 +4249,7 @@ xml_print_datatype(hid_t type, unsigned in_group) indentation(indent); printf("<%sArrayType Ndims=\"",xmlnsprefix); ndims = H5Tget_array_ndims(type); - printf("%d\">\n", ndims); + printf("%u\">\n", ndims); /* Get array information */ H5Tget_array_dims(type, dims, perm); @@ -4254,17 +4258,17 @@ xml_print_datatype(hid_t type, unsigned in_group) indent += COL; if (perm != NULL) { /* for each dimension, list */ - for (j = 0; j < ndims; j++) { + for (i = 0; i < ndims; i++) { indentation(indent); printf("<%sArrayDimension DimSize=\"%u\" DimPerm=\"%u\"/>\n", - xmlnsprefix,(int) dims[j], (int) perm[j]); + xmlnsprefix,(int) dims[i], (int) perm[i]); } } else { - for (j = 0; j < ndims; j++) { + for (i = 0; i < ndims; i++) { indentation(indent); printf("<%sArrayDimension DimSize=\"%u\" DimPerm=\"0\"/>\n", xmlnsprefix, - (int) dims[j]); + (int) dims[i]); } } indent -= COL; @@ -4490,13 +4494,7 @@ xml_dump_data(hid_t obj_id, int obj_data, struct subset_t UNUSED * sset, int UNU status = xml_print_strs(obj_id, ATTRIBUTE_DATA); } else { /* all other data */ - H5T_class_t type_class; - - type_class = H5Tget_class(type); - if(type_class==H5T_BITFIELD) - p_type=H5Tcopy(type); - else - p_type = H5Tget_native_type(type,H5T_DIR_DEFAULT); + p_type = h5tools_get_native_type(type); H5Tclose(type); @@ -4594,7 +4592,7 @@ xml_dump_attr(hid_t attr, const char *attr_name, void UNUSED * op_data) case H5T_COMPOUND: indentation(indent); printf("<!-- Note: format of compound data not specified -->\n"); - dump_function_table->dump_data_function(attr_id, ATTRIBUTE_DATA, NULL,0); + dump_function_table->dump_data_function(attr_id, ATTRIBUTE_DATA, NULL, 0); break; case H5T_REFERENCE: @@ -4617,7 +4615,7 @@ xml_dump_attr(hid_t attr, const char *attr_name, void UNUSED * op_data) case H5T_VLEN: printf("<!-- Note: format of VL data not specified -->\n"); - dump_function_table->dump_data_function(attr_id, ATTRIBUTE_DATA, NULL,0); + dump_function_table->dump_data_function(attr_id, ATTRIBUTE_DATA, NULL, 0); break; default: indentation(indent); @@ -4632,11 +4630,11 @@ xml_dump_attr(hid_t attr, const char *attr_name, void UNUSED * op_data) } } else { /* The case of an attribute never yet written ?? */ - indentation(indent); - printf("<%sData>\n",xmlnsprefix); indentation(indent + COL); + printf("<%sData>\n",xmlnsprefix); + indentation(indent + COL + COL); printf("<%sNoData/>\n",xmlnsprefix); - indentation(indent); + indentation(indent + COL); printf("</%sData>\n",xmlnsprefix); } @@ -4720,6 +4718,7 @@ xml_dump_named_datatype(hid_t type, const char *name) free(t_tmp); free(t_prefix); free(t_name); + free(tmp); indent += COL; indentation(indent); @@ -5037,7 +5036,7 @@ xml_print_refs(hid_t did, int source) ssiz = H5Sget_simple_extent_npoints(space); for (i = 0; i < ssiz; i++) { - path = lookup_ref_path(refbuf); + path = lookup_ref_path(*refbuf); indentation(indent + COL); if (!path) { @@ -5052,6 +5051,8 @@ xml_print_refs(hid_t did, int source) refbuf++; } + free(buf); + return SUCCEED; } @@ -5144,9 +5145,9 @@ xml_print_strs(hid_t did, int source) if(is_vlstr) { onestring = *(char **)bp; if(onestring) - str_size = (size_t)strlen(onestring); + str_size = (size_t)HDstrlen(onestring); } else { - strncpy(onestring, bp, tsiz); + HDstrncpy(onestring, bp, tsiz); str_size = tsiz; } indentation(indent + COL); @@ -5308,7 +5309,7 @@ static void xml_dump_fill_value(hid_t dcpl, hid_t type) size_t sz; size_t i; hsize_t space; -void * buf=NULL; +void * buf; char * path; char * name; indent += COL; @@ -5416,8 +5417,8 @@ char * name; printf("<%sNoData/>\n",xmlnsprefix); break; } - free(buf); } + free(buf); indent -= COL; indentation(indent); printf("</%sData>\n",xmlnsprefix); @@ -5592,7 +5593,8 @@ xml_dump_dataset(hid_t did, const char *name, struct subset_t UNUSED * sset) printf("<%sFillValue>\n",xmlnsprefix); indent += COL; H5Pfill_value_defined(dcpl, &fvstatus); - if (fvstatus == H5D_FILL_VALUE_UNDEFINED) { + if (fvstatus == H5D_FILL_VALUE_UNDEFINED || + (fvstatus==H5D_FILL_VALUE_DEFAULT && ft==H5D_FILL_TIME_IFSET)) { indentation(indent + COL); printf("<%sNoFill/>\n",xmlnsprefix); } else { @@ -5625,7 +5627,7 @@ xml_dump_dataset(hid_t did, const char *name, struct subset_t UNUSED * sset) case H5T_OPAQUE: case H5T_ENUM: case H5T_ARRAY: - dump_function_table->dump_data_function(did, DATASET_DATA, NULL,0); + dump_function_table->dump_data_function(did, DATASET_DATA, NULL, 0); break; case H5T_TIME: @@ -5644,7 +5646,7 @@ xml_dump_dataset(hid_t did, const char *name, struct subset_t UNUSED * sset) case H5T_COMPOUND: indentation(indent); printf("<!-- Note: format of compound data not specified -->\n"); - dump_function_table->dump_data_function(did, DATASET_DATA, NULL,0); + dump_function_table->dump_data_function(did, DATASET_DATA, NULL, 0); break; case H5T_REFERENCE: @@ -5667,7 +5669,7 @@ xml_dump_dataset(hid_t did, const char *name, struct subset_t UNUSED * sset) case H5T_VLEN: printf("<!-- Note: format of VL data not specified -->\n"); - dump_function_table->dump_data_function(did, DATASET_DATA, NULL,0); + dump_function_table->dump_data_function(did, DATASET_DATA, NULL, 0); break; default: indentation(indent); @@ -5682,16 +5684,17 @@ xml_dump_dataset(hid_t did, const char *name, struct subset_t UNUSED * sset) } } else { /* no data written */ - indentation(indent); + indentation(indent + COL); printf("<%sData>\n",xmlnsprefix); - indentation(indent); + indentation(indent + COL + COL); printf("<%sNoData/>\n",xmlnsprefix); - indentation(indent); + indentation(indent + COL); printf("</%sData>\n",xmlnsprefix); } H5Tclose(type); H5Sclose(space); + H5Pclose(dcpl); indentation(indent); printf("</%sDataset>\n", xmlnsprefix); } @@ -5715,11 +5718,11 @@ xml_print_enum(hid_t type) { char **name = NULL; /*member names */ unsigned char *value = NULL; /*value array */ - int nmembs; /*number of members */ + unsigned nmembs; /*number of members */ hid_t super; /*enum base integer type */ hid_t native = -1; /*native integer data type */ size_t dst_size; /*destination value type size */ - int i; /*miscellaneous counters */ + unsigned i; /*miscellaneous counters */ size_t j; nmembs = H5Tget_nmembers(type); @@ -5751,8 +5754,8 @@ xml_print_enum(hid_t type) } /* Get the names and raw values of all members */ - name = calloc((size_t)nmembs, sizeof(char *)); - value = calloc((size_t)nmembs, MAX(H5Tget_size(type), dst_size)); + name = calloc(nmembs, sizeof(char *)); + value = calloc(nmembs, MAX(H5Tget_size(type), dst_size)); for (i = 0; i < nmembs; i++) { name[i] = H5Tget_member_name(type, i); @@ -5831,24 +5834,14 @@ xml_print_enum(hid_t type) * *------------------------------------------------------------------------- */ - - - -static hid_t h5_fileaccess(void) +static hid_t +h5_fileaccess(void) { - static const char *multi_letters = "msbrglo"; - + static const char *multi_letters = "msbrglo"; const char *val = NULL; const char *name; char s[1024]; hid_t fapl = -1; - hsize_t fam_size = 100*1024*1024; /*100 MB*/ -#ifdef H5_WANT_H5_V1_4_COMPAT - long verbosity = 1; -#else /* H5_WANT_H5_V1_4_COMPAT */ - long log_flags = H5FD_LOG_LOC_IO; -#endif /* H5_WANT_H5_V1_4_COMPAT */ - H5FD_mem_t mt; /* First use the environment variable, then the constant */ val = HDgetenv("HDF5_DRIVER"); @@ -5885,6 +5878,7 @@ static hid_t h5_fileaccess(void) const char *memb_name[H5FD_MEM_NTYPES]; char sv[H5FD_MEM_NTYPES][1024]; haddr_t memb_addr[H5FD_MEM_NTYPES]; + H5FD_mem_t mt; HDmemset(memb_map, 0, sizeof memb_map); HDmemset(memb_fapl, 0, sizeof memb_fapl); @@ -5904,13 +5898,21 @@ static hid_t h5_fileaccess(void) return -1; } } else if (!HDstrcmp(name, "family")) { + hsize_t fam_size = 100*1024*1024; /*100 MB*/ + /* Family of files, each 1MB and using the default driver */ - if ((val=HDstrtok(NULL, " \t\n\r"))) { + if ((val=HDstrtok(NULL, " \t\n\r"))) fam_size = (hsize_t)(HDstrtod(val, NULL) * 1024*1024); - } - if (H5Pset_fapl_family(fapl, fam_size, H5P_DEFAULT)<0) return -1; + if (H5Pset_fapl_family(fapl, fam_size, H5P_DEFAULT)<0) + return -1; } else if (!HDstrcmp(name, "log")) { #ifdef H5_WANT_H5_V1_4_COMPAT + long verbosity = 1; +#else /* H5_WANT_H5_V1_4_COMPAT */ + long log_flags = H5FD_LOG_LOC_IO; +#endif /* H5_WANT_H5_V1_4_COMPAT */ + +#ifdef H5_WANT_H5_V1_4_COMPAT /* Log file access */ if ((val = strtok(NULL, " \t\n\r"))) verbosity = strtol(val, NULL, 0); @@ -5932,4 +5934,3 @@ static hid_t h5_fileaccess(void) return fapl; } - diff --git a/tools/h5ls/h5ls.c b/tools/h5ls/h5ls.c index ca0140d..07b53d1 100644 --- a/tools/h5ls/h5ls.c +++ b/tools/h5ls/h5ls.c @@ -711,11 +711,14 @@ display_cmpd_type(hid_t type, int ind) char *name=NULL; /* member name */ size_t size; /* total size of type in bytes */ hid_t subtype; /* member data type */ - int i, n; /* miscellaneous counters */ + unsigned nmembs; /* number of members */ + int n; /* miscellaneous counters */ + unsigned i; /* miscellaneous counters */ if (H5T_COMPOUND!=H5Tget_class(type)) return FALSE; printf("struct {"); - for (i=0; i<H5Tget_nmembers(type); i++) { + nmembs=H5Tget_nmembers(type); + for (i=0; i<nmembs; i++) { /* Name and offset */ name = H5Tget_member_name(type, i); @@ -758,16 +761,17 @@ display_enum_type(hid_t type, int ind) { char **name=NULL; /* member names */ unsigned char *value=NULL; /* value array */ - int nmembs; /* number of members */ + unsigned nmembs; /* number of members */ int nchars; /* number of output characters */ hid_t super; /* enum base integer type */ hid_t native=-1; /* native integer data type */ size_t dst_size; /* destination value type size */ - int i; /* miscellaneous counters */ + unsigned i; /* miscellaneous counters */ size_t j; if (H5T_ENUM!=H5Tget_class(type)) return FALSE; nmembs = H5Tget_nmembers(type); + assert(nmembs>0); super = H5Tget_super(type); printf("enum "); display_type(super, ind+4); @@ -779,23 +783,22 @@ display_enum_type(hid_t type, int ind) * 2. unsigned long_long -- the largest native unsigned integer * 3. raw format */ if (H5Tget_size(type)<=sizeof(long_long)) { - dst_size = sizeof(long_long); - if (H5T_SGN_NONE==H5Tget_sign(type)) { - native = H5T_NATIVE_ULLONG; - } else { - native = H5T_NATIVE_LLONG; - } + dst_size = sizeof(long_long); + if (H5T_SGN_NONE==H5Tget_sign(type)) { + native = H5T_NATIVE_ULLONG; + } else { + native = H5T_NATIVE_LLONG; + } } else { - dst_size = H5Tget_size(type); + dst_size = H5Tget_size(type); } /* Get the names and raw values of all members */ - assert(nmembs>0); - name = calloc((size_t)nmembs, sizeof(char*)); - value = calloc((size_t)nmembs, MAX(H5Tget_size(type), dst_size)); + name = calloc(nmembs, sizeof(char*)); + value = calloc(nmembs, MAX(H5Tget_size(type), dst_size)); for (i=0; i<nmembs; i++) { - name[i] = H5Tget_member_name(type, i); - H5Tget_member_value(type, i, value+i*H5Tget_size(type)); + name[i] = H5Tget_member_name(type, i); + H5Tget_member_value(type, i, value+i*H5Tget_size(type)); } /* Convert values to native data type */ @@ -806,22 +809,21 @@ display_enum_type(hid_t type, int ind) /* Print members */ for (i=0; i<nmembs; i++) { - printf("\n%*s", ind+4, ""); - nchars = display_string(stdout, name[i], TRUE); - printf("%*s = ", MAX(0, 16-nchars), ""); - - if (native<0) { - printf("0x"); - for (j=0; j<dst_size; j++) { - printf("%02x", value[i*dst_size+j]); - } - } else if (H5T_SGN_NONE==H5Tget_sign(native)) { - HDfprintf(stdout,"%"H5_PRINTF_LL_WIDTH"u", - *((unsigned long_long*)((void*)(value+i*dst_size)))); - } else { - HDfprintf(stdout,"%"H5_PRINTF_LL_WIDTH"d", - *((long_long*)((void*)(value+i*dst_size)))); - } + printf("\n%*s", ind+4, ""); + nchars = display_string(stdout, name[i], TRUE); + printf("%*s = ", MAX(0, 16-nchars), ""); + + if (native<0) { + printf("0x"); + for (j=0; j<dst_size; j++) + printf("%02x", value[i*dst_size+j]); + } else if (H5T_SGN_NONE==H5Tget_sign(native)) { + HDfprintf(stdout,"%"H5_PRINTF_LL_WIDTH"u", + *((unsigned long_long*)((void*)(value+i*dst_size)))); + } else { + HDfprintf(stdout,"%"H5_PRINTF_LL_WIDTH"d", + *((long_long*)((void*)(value+i*dst_size)))); + } } /* Release resources */ @@ -1331,11 +1333,11 @@ list_attr (hid_t obj, const char *attr_name, void UNUSED *op_data) n = display_string(stdout, attr_name, TRUE); printf("%*s", MAX(0, 9-n), ""); if ((attr = H5Aopen_name(obj, attr_name))) { - space = H5Aget_space(attr); - type = H5Aget_type(attr); + space = H5Aget_space(attr); + type = H5Aget_type(attr); - /* Data space */ - ndims = H5Sget_simple_extent_dims(space, size, NULL); + /* Data space */ + ndims = H5Sget_simple_extent_dims(space, size, NULL); if (0==ndims) { puts(" scalar"); } else { @@ -1347,71 +1349,66 @@ list_attr (hid_t obj, const char *attr_name, void UNUSED *op_data) puts("}"); } - /* Data type */ - printf(" Type: "); - display_type(type, 15); - putchar('\n'); + /* Data type */ + printf(" Type: "); + display_type(type, 15); + putchar('\n'); + + /* Data */ + memset(&info, 0, sizeof info); + info.line_multi_new = 1; + if (nelmts<5) { + info.idx_fmt = ""; + info.line_1st = " Data: "; + info.line_pre = " "; + info.line_cont = " "; + info.str_repeat = 8; + + } else { + printf(" Data:\n"); + info.idx_fmt = "(%s)"; + info.line_pre = " %s "; + info.line_cont = " %s "; + info.str_repeat = 8; + } + + info.line_ncols = width_g; + if (label_g) info.cmpd_name = "%s="; + if (string_g && 1==H5Tget_size(type) && + H5T_INTEGER==H5Tget_class(type)) { + info.ascii = TRUE; + info.elmt_suf1 = ""; + info.elmt_suf2 = ""; + info.idx_fmt = "(%s)"; + info.line_pre = " %s \""; + info.line_suf = "\""; + } - /* Data */ - memset(&info, 0, sizeof info); - info.line_multi_new = 1; - if (nelmts<5) { - info.idx_fmt = ""; - info.line_1st = " Data: "; - info.line_pre = " "; - info.line_cont = " "; - info.str_repeat = 8; - - } else { - printf(" Data:\n"); - info.idx_fmt = "(%s)"; - info.line_pre = " %s "; - info.line_cont = " %s "; - info.str_repeat = 8; - } - info.line_ncols = width_g; - if (label_g) info.cmpd_name = "%s="; - if (string_g && 1==H5Tget_size(type) && - H5T_INTEGER==H5Tget_class(type)) { - info.ascii = TRUE; - info.elmt_suf1 = ""; - info.elmt_suf2 = ""; - info.idx_fmt = "(%s)"; - info.line_pre = " %s \""; - info.line_suf = "\""; - } - /* values of type reference */ - info.obj_format = "-%lu:%lu:%lu:%lu"; - info.obj_hidefileno = 0; - if (hexdump_g) { - p_type = H5Tcopy(type); - } else { - H5T_class_t type_class; + /* values of type reference */ + info.obj_format = "-%lu:%lu:%lu:%lu"; + info.obj_hidefileno = 0; + if (hexdump_g) + p_type = H5Tcopy(type); + else + p_type = h5tools_get_native_type(type); - type_class = H5Tget_class(type); - if(type_class==H5T_BITFIELD) - p_type=H5Tcopy(type); - else - p_type = H5Tget_native_type(type,H5T_DIR_DEFAULT); - } - if (p_type>=0) { + if (p_type>=0) { temp_need= nelmts * MAX(H5Tget_size(type), H5Tget_size(p_type)); assert(temp_need==(hsize_t)((size_t)temp_need)); need = (size_t)temp_need; - buf = malloc(need); - assert(buf); - if (H5Aread(attr, p_type, buf)>=0) { - h5tools_dump_mem(stdout, &info, attr, p_type, space, buf, -1); - } - free(buf); - H5Tclose(p_type); - } - - H5Sclose(space); - H5Tclose(type); - H5Aclose(attr); + buf = malloc(need); + assert(buf); + if (H5Aread(attr, p_type, buf)>=0) + h5tools_dump_mem(stdout, &info, attr, p_type, space, buf, -1); + free(buf); + H5Tclose(p_type); + } + + H5Sclose(space); + H5Tclose(type); + H5Aclose(attr); } else { - putchar('\n'); + putchar('\n'); } return 0; @@ -1442,8 +1439,8 @@ dataset_list1(hid_t dset) { hsize_t cur_size[64]; /* current dataset dimensions */ hsize_t max_size[64]; /* maximum dataset dimensions */ - hid_t space; /* data space */ - int ndims; /* dimensionality */ + hid_t space; /* data space */ + int ndims; /* dimensionality */ int i; /* Information that goes on the same row as the name. The name has @@ -1970,6 +1967,29 @@ get_width(void) /*------------------------------------------------------------------------- + * Function: leave + * + * Purpose: Close HDF5 and MPI and call exit() + * + * Return: Does not return + * + * Programmer: Quincey Koziol + * Saturday, January 31, 2004 + * + * Modifications: + * + *------------------------------------------------------------------------- + */ +static void +leave(int ret) +{ + h5tools_close(); + + exit(ret); +} + + +/*------------------------------------------------------------------------- * Function: main * * Purpose: Opens a file and lists the specified group @@ -1986,7 +2006,7 @@ get_width(void) *------------------------------------------------------------------------- */ int -main (int argc, char *argv[]) +main (int argc, const char *argv[]) { hid_t file=-1, root=-1; char *fname=NULL, *oname=NULL, *x; @@ -2023,132 +2043,132 @@ main (int argc, char *argv[]) /* Switches come before non-switch arguments */ for (argno=1; argno<argc && '-'==argv[argno][0]; argno++) { - if (!strcmp(argv[argno], "--")) { - /* Last switch */ - argno++; - break; - } else if (!strcmp(argv[argno], "--help")) { - usage(progname); - exit(0); - } else if (!strcmp(argv[argno], "--address")) { - address_g = TRUE; - } else if (!strcmp(argv[argno], "--data")) { - data_g = TRUE; - } else if (!strcmp(argv[argno], "--errors")) { - show_errors_g = TRUE; - } else if (!strcmp(argv[argno], "--full")) { - fullname_g = TRUE; - } else if (!strcmp(argv[argno], "--group")) { - grp_literal_g = TRUE; - } else if (!strcmp(argv[argno], "--label")) { - label_g = TRUE; - } else if (!strcmp(argv[argno], "--recursive")) { - recursive_g = TRUE; - fullname_g = TRUE; - } else if (!strcmp(argv[argno], "--simple")) { - simple_output_g = TRUE; - } else if (!strcmp(argv[argno], "--string")) { - string_g = TRUE; - } else if (!strncmp(argv[argno], "--width=", 8)) { - width_g = (int)strtol(argv[argno]+8, &rest, 0); - if (width_g<=0 || *rest) { - usage(progname); - exit(1); - } - } else if (!strcmp(argv[argno], "--width")) { - if (argno+1>=argc) { - usage(progname); - exit(1); - } else { - s = argv[++argno]; - } - width_g = (int)strtol(s, &rest, 0); - if (width_g<=0 || *rest) { - usage(progname); - exit(1); - } - } else if (!strcmp(argv[argno], "--verbose")) { - verbose_g++; - } else if (!strcmp(argv[argno], "--version")) { + if (!strcmp(argv[argno], "--")) { + /* Last switch */ + argno++; + break; + } else if (!strcmp(argv[argno], "--help")) { + usage(progname); + leave(0); + } else if (!strcmp(argv[argno], "--address")) { + address_g = TRUE; + } else if (!strcmp(argv[argno], "--data")) { + data_g = TRUE; + } else if (!strcmp(argv[argno], "--errors")) { + show_errors_g = TRUE; + } else if (!strcmp(argv[argno], "--full")) { + fullname_g = TRUE; + } else if (!strcmp(argv[argno], "--group")) { + grp_literal_g = TRUE; + } else if (!strcmp(argv[argno], "--label")) { + label_g = TRUE; + } else if (!strcmp(argv[argno], "--recursive")) { + recursive_g = TRUE; + fullname_g = TRUE; + } else if (!strcmp(argv[argno], "--simple")) { + simple_output_g = TRUE; + } else if (!strcmp(argv[argno], "--string")) { + string_g = TRUE; + } else if (!strncmp(argv[argno], "--width=", 8)) { + width_g = (int)strtol(argv[argno]+8, &rest, 0); + if (width_g<=0 || *rest) { + usage(progname); + leave(1); + } + } else if (!strcmp(argv[argno], "--width")) { + if (argno+1>=argc) { + usage(progname); + leave(1); + } else { + s = argv[++argno]; + } + width_g = (int)strtol(s, &rest, 0); + if (width_g<=0 || *rest) { + usage(progname); + leave(1); + } + } else if (!strcmp(argv[argno], "--verbose")) { + verbose_g++; + } else if (!strcmp(argv[argno], "--version")) { print_version(progname); - exit(0); - } else if (!strcmp(argv[argno], "--hexdump")) { - hexdump_g = TRUE; - } else if (!strncmp(argv[argno], "-w", 2)) { - if (argv[argno][2]) { - s = argv[argno]+2; - } else if (argno+1>=argc) { - usage(progname); - exit(1); - } else { - s = argv[++argno]; - } - width_g = (int)strtol(s, &rest, 0); - if (width_g<=0 || *rest) { - usage(progname); - exit(1); - } - } else if ('-'!=argv[argno][1]) { - /* Single-letter switches */ - for (s=argv[argno]+1; *s; s++) { - switch (*s) { - case '?': - case 'h': /* --help */ - usage(progname); - exit(0); - case 'a': /* --address */ - address_g = TRUE; - break; - case 'd': /* --data */ - data_g = TRUE; - break; - case 'e': /* --errors */ - show_errors_g = TRUE; - break; - case 'f': /* --full */ - fullname_g = TRUE; - break; - case 'g': /* --group */ - grp_literal_g = TRUE; - break; - case 'l': /* --label */ - label_g = TRUE; - break; - case 'r': /* --recursive */ - recursive_g = TRUE; - fullname_g = TRUE; - break; - case 'S': /* --simple */ - simple_output_g = TRUE; - break; - case 's': /* --string */ - string_g = TRUE; - break; - case 'v': /* --verbose */ - verbose_g++; - break; - case 'V': /* --version */ - print_version(progname); - exit(0); - case 'x': /* --hexdump */ - hexdump_g = TRUE; - break; - default: - usage(progname); - exit(1); - } - } - } else { - usage(progname); - exit(1); - } + leave(0); + } else if (!strcmp(argv[argno], "--hexdump")) { + hexdump_g = TRUE; + } else if (!strncmp(argv[argno], "-w", 2)) { + if (argv[argno][2]) { + s = argv[argno]+2; + } else if (argno+1>=argc) { + usage(progname); + leave(1); + } else { + s = argv[++argno]; + } + width_g = (int)strtol(s, &rest, 0); + if (width_g<=0 || *rest) { + usage(progname); + leave(1); + } + } else if ('-'!=argv[argno][1]) { + /* Single-letter switches */ + for (s=argv[argno]+1; *s; s++) { + switch (*s) { + case '?': + case 'h': /* --help */ + usage(progname); + leave(0); + case 'a': /* --address */ + address_g = TRUE; + break; + case 'd': /* --data */ + data_g = TRUE; + break; + case 'e': /* --errors */ + show_errors_g = TRUE; + break; + case 'f': /* --full */ + fullname_g = TRUE; + break; + case 'g': /* --group */ + grp_literal_g = TRUE; + break; + case 'l': /* --label */ + label_g = TRUE; + break; + case 'r': /* --recursive */ + recursive_g = TRUE; + fullname_g = TRUE; + break; + case 'S': /* --simple */ + simple_output_g = TRUE; + break; + case 's': /* --string */ + string_g = TRUE; + break; + case 'v': /* --verbose */ + verbose_g++; + break; + case 'V': /* --version */ + print_version(progname); + leave(0); + case 'x': /* --hexdump */ + hexdump_g = TRUE; + break; + default: + usage(progname); + leave(1); + } + } + } else { + usage(progname); + leave(1); + } } /* If no arguments remain then print a usage message (instead of doing * absolutely nothing ;-) */ if (argno>=argc) { - usage(progname); - exit(1); + usage(progname); + leave(1); } /* Turn off HDF5's automatic error printing unless you're debugging h5ls */ @@ -2169,58 +2189,57 @@ main (int argc, char *argv[]) * doesn't exist). */ show_file_name_g = (argc-argno > 1); /*show file names if more than one*/ while (argno<argc) { - fname = argv[argno++]; - oname = NULL; - file = -1; - - while (fname && *fname) { - file = h5tools_fopen(fname, NULL, drivername, sizeof drivername); - - if (file>=0) { - if (verbose_g) { - printf("Opened \"%s\" with %s driver.\n", - fname, drivername); - } - break; /*success*/ - } - - /* Shorten the file name; lengthen the object name */ - x = oname; - oname = strrchr(fname, '/'); - if (x) *x = '/'; - if (!oname) break; - *oname = '\0'; - } - if (file<0) { - fprintf(stderr, "%s: unable to open file\n", argv[argno-1]); + fname = HDstrdup(argv[argno++]); + oname = NULL; + file = -1; + + while (fname && *fname) { + file = h5tools_fopen(fname, NULL, drivername, sizeof drivername, argc, argv); + + if (file>=0) { + if (verbose_g) { + printf("Opened \"%s\" with %s driver.\n", + fname, drivername); + } + break; /*success*/ + } + + /* Shorten the file name; lengthen the object name */ + x = oname; + oname = strrchr(fname, '/'); + if (x) *x = '/'; + if (!oname) break; + *oname = '\0'; + } + if (file<0) { + fprintf(stderr, "%s: unable to open file\n", argv[argno-1]); continue; - } - if (oname) oname++; - if (!oname || !*oname) oname = root_name; + } + if (oname) oname++; + if (!oname || !*oname) oname = root_name; - /* Open the object and display it's information */ - if (H5Gget_objinfo(file, oname, TRUE, &sb)>=0 && - H5G_GROUP==sb.type && !grp_literal_g) { + /* Open the object and display it's information */ + if (H5Gget_objinfo(file, oname, TRUE, &sb)>=0 && + H5G_GROUP==sb.type && !grp_literal_g) { /* Specified name is a group. List the complete contents of the * group. */ - sym_insert(&sb, oname); + sym_insert(&sb, oname); iter.container = container = fix_name(show_file_name_g?fname:"", oname); - H5Giterate(file, oname, NULL, list, &iter); - free(container); + H5Giterate(file, oname, NULL, list, &iter); + free(container); - } else if ((root=H5Gopen(file, "/"))<0) { - exit(1); /*major problem!*/ - - } else { + } else if ((root=H5Gopen(file, "/"))<0) { + leave(1); /*major problem!*/ + + } else { /* Specified name is a non-group object -- list that object. The - * container for the object is everything up to the base name. */ + * container for the object is everything up to the base name. */ iter.container = show_file_name_g ? fname : "/"; - list(root, oname, &iter); - if (H5Gclose(root)<0) exit(1); - } - H5Fclose(file); + list(root, oname, &iter); + if (H5Gclose(root)<0) leave(1); + } + H5Fclose(file); + free(fname); } - h5tools_close(); - - return 0; + leave(0); } diff --git a/tools/h5repack/h5repack_copy.c b/tools/h5repack/h5repack_copy.c index 8ec99b6..b9e69bb 100644 --- a/tools/h5repack/h5repack_copy.c +++ b/tools/h5repack/h5repack_copy.c @@ -30,7 +30,7 @@ * *------------------------------------------------------------------------- */ -static void print_obj(hid_t dcpl, char *name) +static void print_obj(hid_t dcpl_id, char *name) { char str[255]; #if defined (PRINT_DEBUG ) @@ -47,13 +47,13 @@ static void print_obj(hid_t dcpl, char *name) strcpy(str,"\0"); /* get information about input filters */ - if ((nfilters = H5Pget_nfilters(dcpl))<0) + if ((nfilters = H5Pget_nfilters(dcpl_id))<0) return; for ( i=0; i<nfilters; i++) { cd_nelmts = NELMTS(cd_values); - filtn = H5Pget_filter(dcpl, + filtn = H5Pget_filter(dcpl_id, (unsigned)i, &filt_flags, &cd_nelmts, @@ -245,7 +245,6 @@ int do_copy_objects(hid_t fidin, #endif /* LATER */ int i, j; int wrote=0; - H5T_class_t type_class; /* datatype class */ /*------------------------------------------------------------------------- * copy the suppplied object list @@ -309,16 +308,9 @@ int do_copy_objects(hid_t fidin, for (j=0; j<rank; j++) nelmts*=dims[j]; - if((type_class = H5Tget_class(ftype_id))<0) - goto error; - if(type_class==H5T_BITFIELD) { - if((mtype_id=H5Tcopy(ftype_id))<0) - goto error; - } else { - if ((mtype_id=H5Tget_native_type(ftype_id,H5T_DIR_DEFAULT))<0) - goto error; - } - + if ((mtype_id=h5tools_get_native_type(ftype_id))<0) + goto error; + if ((msize=H5Tget_size(mtype_id))==0) goto error; @@ -604,7 +596,6 @@ int copy_attr(hid_t loc_in, char name[255]; int n, j; unsigned u; - H5T_class_t type_class; if ((n = H5Aget_num_attrs(loc_in))<0) goto error; @@ -644,16 +635,9 @@ int copy_attr(hid_t loc_in, for (j=0; j<rank; j++) nelmts*=dims[j]; - if((type_class = H5Tget_class(ftype_id))<0) - goto error; - if(type_class==H5T_BITFIELD) { - if((mtype_id=H5Tcopy(ftype_id))<0) - goto error; - } else { - if ((mtype_id=H5Tget_native_type(ftype_id,H5T_DIR_DEFAULT))<0) - goto error; - } - + if ((mtype_id=h5tools_get_native_type(ftype_id))<0) + goto error; + if ((msize=H5Tget_size(mtype_id))==0) goto error; diff --git a/tools/h5repack/h5repack_refs.c b/tools/h5repack/h5repack_refs.c index 54c539d..dedad6b 100644 --- a/tools/h5repack/h5repack_refs.c +++ b/tools/h5repack/h5repack_refs.c @@ -67,7 +67,6 @@ int do_copy_refobjs(hid_t fidin, hsize_t dims[H5S_MAX_RANK];/* dimensions of dataset */ int next; /* external files */ int i, j; - H5T_class_t type_class; /* datatype class */ /*------------------------------------------------------------------------- * browse @@ -124,16 +123,9 @@ int do_copy_refobjs(hid_t fidin, for (j=0; j<rank; j++) nelmts*=dims[j]; - if((type_class = H5Tget_class(ftype_id))<0) - goto error; - if(type_class==H5T_BITFIELD) { - if((mtype_id=H5Tcopy(ftype_id))<0) - goto error; - } else { - if ((mtype_id=H5Tget_native_type(ftype_id,H5T_DIR_DEFAULT))<0) - goto error; - } - + if ((mtype_id=h5tools_get_native_type(ftype_id))<0) + goto error; + if ((msize=H5Tget_size(mtype_id))==0) goto error; @@ -486,7 +478,6 @@ static int copy_refs_attr(hid_t loc_in, char name[255]; int n, j; unsigned u; - H5T_class_t type_class; /* datatype class */ if ((n = H5Aget_num_attrs(loc_in))<0) goto error; @@ -526,16 +517,9 @@ static int copy_refs_attr(hid_t loc_in, nelmts=1; for (j=0; j<rank; j++) nelmts*=dims[j]; - - if((type_class = H5Tget_class(ftype_id))<0) - goto error; - if(type_class==H5T_BITFIELD) { - if((mtype_id=H5Tcopy(ftype_id))<0) - goto error; - } else { - if ((mtype_id=H5Tget_native_type(ftype_id,H5T_DIR_DEFAULT))<0) - goto error; - } + + if ((mtype_id=h5tools_get_native_type(ftype_id))<0) + goto error; if ((msize=H5Tget_size(mtype_id))==0) goto error; diff --git a/tools/lib/Makefile.in b/tools/lib/Makefile.in index 2fff656..0e382b9 100644 --- a/tools/lib/Makefile.in +++ b/tools/lib/Makefile.in @@ -41,7 +41,7 @@ PROGS=$(PUB_PROGS) $(TEST_PROGS) ## Source and object files for the library; do not install ## -LIB_SRC=h5tools.c h5tools_str.c h5tools_utils.c h5diff.c h5diff_array.c h5diff_attr.c h5diff_dset.c h5diff_util.c h5trav.c h5trav_table.c h5tools_filters.c h5tools_ref.c +LIB_SRC=h5tools.c h5tools_str.c h5tools_utils.c h5diff.c h5diff_array.c h5diff_attr.c h5diff_dset.c h5diff_util.c h5trav.c h5trav_table.c h5tools_filters.c h5tools_ref.c h5tools_type.c LIB_OBJ=$(LIB_SRC:.c=.lo) PUB_LIB= AUX_LIB=$(LIB) diff --git a/tools/lib/h5diff_attr.c b/tools/lib/h5diff_attr.c index efc1b11..ca34af4 100644 --- a/tools/lib/h5diff_attr.c +++ b/tools/lib/h5diff_attr.c @@ -60,7 +60,6 @@ int diff_attr(hid_t loc1_id, int rank2; /* rank of dataset */ hsize_t dims1[H5S_MAX_RANK];/* dimensions of dataset */ hsize_t dims2[H5S_MAX_RANK];/* dimensions of dataset */ - H5T_class_t type_class; /* Datatype class */ char name1[255]; char name2[255]; int n1, n2, i, j; @@ -162,25 +161,11 @@ int diff_attr(hid_t loc1_id, for (j=0; j<rank1; j++) nelmts1*=dims1[j]; - if((type_class = H5Tget_class(ftype1_id))<0) - goto error; - if(type_class==H5T_BITFIELD) { - if((mtype1_id=H5Tcopy(ftype1_id))<0) - goto error; - } else { - if ((mtype1_id=H5Tget_native_type(ftype1_id,H5T_DIR_DEFAULT))<0) - goto error; - } + if ((mtype1_id=h5tools_get_native_type(ftype1_id))<0) + goto error; - if((type_class = H5Tget_class(ftype2_id))<0) - goto error; - if(type_class==H5T_BITFIELD) { - if((mtype2_id=H5Tcopy(ftype2_id))<0) - goto error; - } else { - if ((mtype2_id=H5Tget_native_type(ftype2_id,H5T_DIR_DEFAULT))<0) - goto error; - } + if ((mtype2_id=h5tools_get_native_type(ftype2_id))<0) + goto error; if ((msize1=H5Tget_size(mtype1_id))==0) goto error; diff --git a/tools/lib/h5diff_dset.c b/tools/lib/h5diff_dset.c index 767587d..0cc8324 100644 --- a/tools/lib/h5diff_dset.c +++ b/tools/lib/h5diff_dset.c @@ -155,7 +155,6 @@ hsize_t diff_datasetid( hid_t dset1_id, hsize_t storage_size1; hsize_t storage_size2; hsize_t nfound=0; /* number of differences found */ - H5T_class_t type_class; /* data type class */ int cmp=1; /* do diff or not */ int i; @@ -267,25 +266,11 @@ hsize_t diff_datasetid( hid_t dset1_id, * memory type and sizes *------------------------------------------------------------------------- */ - if((type_class = H5Tget_class(f_type1))<0) - goto error; - if(type_class==H5T_BITFIELD) { - if((m_type1=H5Tcopy(f_type1))<0) - goto error; - } else { - if ((m_type1=H5Tget_native_type(f_type1,H5T_DIR_DEFAULT))<0) - goto error; - } + if ((m_type1=h5tools_get_native_type(f_type1))<0) + goto error; - if((type_class = H5Tget_class(f_type2))<0) - goto error; - if(type_class==H5T_BITFIELD) { - if((m_type2=H5Tcopy(f_type2))<0) - goto error; - } else { - if ((m_type2=H5Tget_native_type(f_type2,H5T_DIR_DEFAULT))<0) - goto error; - } + if ((m_type2=h5tools_get_native_type(f_type2))<0) + goto error; m_size1 = H5Tget_size( m_type1 ); m_size2 = H5Tget_size( m_type2 ); @@ -322,15 +307,8 @@ hsize_t diff_datasetid( hid_t dset1_id, { H5Tclose(m_type1); - if((type_class = H5Tget_class(f_type2))<0) - goto error; - if(type_class==H5T_BITFIELD) { - if((m_type1=H5Tcopy(f_type2))<0) - goto error; - } else { - if ((m_type1=H5Tget_native_type(f_type2,H5T_DIR_DEFAULT))<0) - goto error; - } + if ((m_type1=h5tools_get_native_type(f_type2))<0) + goto error; m_size1 = H5Tget_size( m_type1 ); } @@ -338,15 +316,8 @@ hsize_t diff_datasetid( hid_t dset1_id, { H5Tclose(m_type2); - if((type_class = H5Tget_class(f_type1))<0) - goto error; - if(type_class==H5T_BITFIELD) { - if((m_type2=H5Tcopy(f_type1))<0) - goto error; - } else { - if ((m_type2=H5Tget_native_type(f_type1,H5T_DIR_DEFAULT))<0) - goto error; - } + if ((m_type2=h5tools_get_native_type(f_type1))<0) + goto error; m_size2 = H5Tget_size( m_type2 ); } diff --git a/tools/lib/h5tools.c b/tools/lib/h5tools.c index 27d7577..d6835d1 100644 --- a/tools/lib/h5tools.c +++ b/tools/lib/h5tools.c @@ -50,6 +50,41 @@ FILE *rawdatastream; /* should initialize to stdout but gcc moans about it /* module-scoped variables */ static int h5tools_init_g; /* if h5tools lib has been initialized */ +#ifdef H5_HAVE_PARALLEL +static int h5tools_mpi_init_g; /* if MPI_Init() has been called */ +#endif /* H5_HAVE_PARALLEL */ + +/* Names of VFDs */ +static const char *drivernames[]={ + "sec2", + "family", + "split", + "multi", +#ifdef H5_HAVE_STREAM + "stream", +#endif /* H5_HAVE_STREAM */ +#ifdef H5_HAVE_PARALLEL + "mpio", + "mpiposix" +#endif /* H5_HAVE_PARALLEL */ +}; + +/* This enum should match the entries in the above drivers_list since they + * are indexes into the drivers_list array. */ +enum { + SEC2_IDX = 0 + ,FAMILY_IDX + ,SPLIT_IDX + ,MULTI_IDX +#ifdef H5_HAVE_STREAM + ,STREAM_IDX +#endif /* H5_HAVE_STREAM */ +#ifdef H5_HAVE_PARALLEL + ,MPIO_IDX + ,MPIPOSIX_IDX +#endif /* H5_HAVE_PARALLEL */ +} driver_idx; +#define NUM_DRIVERS (sizeof(drivernames) / sizeof(drivernames[0])) /*------------------------------------------------------------------------- * Audience: Public @@ -104,11 +139,118 @@ h5tools_close(void) rawdatastream = NULL; } + /* Shut down the library */ + H5close(); + +#ifdef H5_HAVE_PARALLEL + /* Check if we need to shut down MPI */ + if(h5tools_mpi_init_g) { + MPI_Finalize(); + h5tools_mpi_init_g=0; + } /* end if */ +#endif + h5tools_init_g = 0; } } /*------------------------------------------------------------------------- + * Audience: Private + * Chapter: H5Tools Library + * Purpose: Get a FAPL for a driver + * Description: + * Get a FAPL for a given VFL driver name. + * Return: + * None + * Programmer: + * Quincey Koziol, 2004-02-04 + * Modifications: + *------------------------------------------------------------------------- + */ +static hid_t +h5tools_get_fapl(const char *driver, unsigned *drivernum, int argc, const char *argv[]) +{ + hid_t fapl = H5P_DEFAULT; + + /* Determine which driver the user wants to open the file with. Try + * that driver. If it can't open it, then fail. */ + if (!strcmp(driver, drivernames[SEC2_IDX])) { + if(drivernum) + *drivernum = SEC2_IDX; + } else if (!strcmp(driver, drivernames[FAMILY_IDX])) { + /* FAMILY Driver */ + if((fapl = H5Pcreate(H5P_FILE_ACCESS))>=0) { + H5Pset_fapl_family(fapl, (hsize_t)0, H5P_DEFAULT); + + if(drivernum) + *drivernum = FAMILY_IDX; + } /* end if */ + } else if (!strcmp(driver, drivernames[SPLIT_IDX])) { + /* SPLIT Driver */ + if((fapl = H5Pcreate(H5P_FILE_ACCESS))>=0) { + H5Pset_fapl_split(fapl, "-m.h5", H5P_DEFAULT, "-r.h5", H5P_DEFAULT); + + if(drivernum) + *drivernum = SPLIT_IDX; + } /* end if */ + } else if (!strcmp(driver, drivernames[MULTI_IDX])) { + /* MULTI Driver */ + if((fapl = H5Pcreate(H5P_FILE_ACCESS))>=0) { + H5Pset_fapl_multi(fapl, NULL, NULL, NULL, NULL, TRUE); + + if(drivernum) + *drivernum = MULTI_IDX; + } /* end if */ +#ifdef H5_HAVE_STREAM + } else if (!strcmp(driver, drivernames[STREAM_IDX])) { + /* STREAM Driver */ + if((fapl = H5Pcreate(H5P_FILE_ACCESS))>=0) { + H5Pset_fapl_stream(fapl, NULL); + + if(drivernum) + *drivernum = STREAM_IDX; + } /* end if */ +#endif /* H5_HAVE_STREAM */ +#ifdef H5_HAVE_PARALLEL + } else if (!strcmp(driver, drivernames[MPIO_IDX])) { + /* MPI-I/O Driver */ + if((fapl = H5Pcreate(H5P_FILE_ACCESS))>=0) { + H5Pset_fapl_mpio(fapl, MPI_COMM_WORLD, MPI_INFO_NULL); + + /* Initialize the MPI library, if it wasn't already */ + if(!h5tools_mpi_init_g) { + MPI_Init(&argc, (char ***)&argv); + + h5tools_mpi_init_g=1; + } /* end if */ + + if(drivernum) + *drivernum = MPIO_IDX; + } /* end if */ + } else if (!strcmp(driver, drivernames[MPIPOSIX_IDX])) { + /* MPI-I/O Driver */ + if((fapl = H5Pcreate(H5P_FILE_ACCESS))>=0) { + H5Pset_fapl_mpiposix(fapl, MPI_COMM_WORLD, TRUE); + + /* Initialize the MPI library, if it wasn't already */ + if(!h5tools_mpi_init_g) { + MPI_Init(&argc, (char ***)&argv); + + h5tools_mpi_init_g=1; + } /* end if */ + + if(drivernum) + *drivernum = MPIPOSIX_IDX; + } /* end if */ +#endif /* H5_HAVE_PARALLEL */ + } else { + fapl=(-1); + } + + return(fapl); +} + +/*------------------------------------------------------------------------- * Audience: Public * Chapter: H5Tools Library * Purpose: Open a file with various VFL drivers. @@ -165,145 +307,49 @@ h5tools_close(void) */ hid_t h5tools_fopen(const char *fname, const char *driver, char *drivername, - size_t drivername_size) + size_t drivername_size, int argc, const char *argv[]) { - static struct d_list { - const char *name; - hid_t fapl; - } drivers_list[] = { - { "sec2", FAIL } - ,{ "family", FAIL } - ,{ "split", FAIL } - ,{ "multi", FAIL } -#ifdef H5_HAVE_STREAM - ,{ "stream", FAIL } -#endif /* H5_HAVE_STREAM */ - }; - /* This enum should match the entries in the above drivers_list since they - * are indexes into the drivers_list array. */ - enum { - SEC2_IDX = 0 - ,FAMILY_IDX - ,SPLIT_IDX - ,MULTI_IDX -#ifdef H5_HAVE_STREAM - ,STREAM_IDX -#endif /* H5_HAVE_STREAM */ - }; -#define NUM_DRIVERS (sizeof(drivers_list) / sizeof(struct d_list)) - - static int initialized = 0; - register unsigned drivernum; - hid_t fid = FAIL; -#ifndef VERSION12 - hid_t fapl = H5P_DEFAULT; -#endif /* !VERSION12 */ - - if (!initialized) { - /* 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. */ - ++initialized; - - /* SEC2 Driver */ - drivers_list[SEC2_IDX].fapl = H5P_DEFAULT; - -#ifndef VERSION12 - /* FAMILY Driver */ - drivers_list[FAMILY_IDX].fapl = fapl = H5Pcreate(H5P_FILE_ACCESS); - H5Pset_fapl_family(fapl, (hsize_t)0, H5P_DEFAULT); - - /* SPLIT Driver */ - drivers_list[SPLIT_IDX].fapl = fapl = H5Pcreate(H5P_FILE_ACCESS); - H5Pset_fapl_split(fapl, "-m.h5", H5P_DEFAULT, "-r.h5", H5P_DEFAULT); - - /* MULTI Driver */ - drivers_list[MULTI_IDX].fapl = fapl = H5Pcreate(H5P_FILE_ACCESS); - H5Pset_fapl_multi(fapl, NULL, NULL, NULL, NULL, TRUE); - -#ifdef H5_HAVE_STREAM - /* STREAM Driver */ - drivers_list[STREAM_IDX].fapl = fapl = H5Pcreate(H5P_FILE_ACCESS); - H5Pset_fapl_stream(fapl, NULL); -#endif /* H5_HAVE_STREAM */ -#endif /* !VERSION12 */ - } + unsigned drivernum; + hid_t fid = FAIL; + hid_t fapl = H5P_DEFAULT; if (driver && *driver) { - /* Determine which driver the user wants to open the file with. Try - * that driver. If it can't open it, then fail. */ - if (!strcmp(driver, drivers_list[SEC2_IDX].name)) { - H5E_BEGIN_TRY { - fid = H5Fopen(fname, H5F_ACC_RDONLY, - drivers_list[SEC2_IDX].fapl); - } H5E_END_TRY; - - if (fid == FAIL) - goto done; - - drivernum = SEC2_IDX; - } else if (!strcmp(driver, drivers_list[FAMILY_IDX].name)) { - H5E_BEGIN_TRY { - fid = H5Fopen(fname, H5F_ACC_RDONLY, - drivers_list[FAMILY_IDX].fapl); - } H5E_END_TRY; - - if (fid == FAIL) - goto done; - - drivernum = FAMILY_IDX; - } else if (!strcmp(driver, drivers_list[SPLIT_IDX].name)) { - H5E_BEGIN_TRY { - fid = H5Fopen(fname, H5F_ACC_RDONLY, - drivers_list[SPLIT_IDX].fapl); - } H5E_END_TRY; - - if (fid == FAIL) - goto done; - - drivernum = SPLIT_IDX; - } else if (!strcmp(driver, drivers_list[MULTI_IDX].name)) { - H5E_BEGIN_TRY { - fid = H5Fopen(fname, H5F_ACC_RDONLY, - drivers_list[MULTI_IDX].fapl); - } H5E_END_TRY; - - if (fid == FAIL) - goto done; - - drivernum = MULTI_IDX; -#ifdef H5_HAVE_STREAM - } else if (!strcmp(driver, drivers_list[STREAM_IDX].name)) { - H5E_BEGIN_TRY { - fid = H5Fopen(fname, H5F_ACC_RDONLY, - drivers_list[STREAM_IDX].fapl); - } H5E_END_TRY; + /* Get the correct FAPL for the given driver */ + if((fapl=h5tools_get_fapl(driver,&drivernum,argc,argv))<0) + goto done; - if (fid == FAIL) - goto done; + H5E_BEGIN_TRY { + fid = H5Fopen(fname, H5F_ACC_RDONLY, fapl); + } H5E_END_TRY; - drivernum = STREAM_IDX; -#endif /* H5_HAVE_STREAM */ - } else { + if (fid == FAIL) goto done; - } + } else { /* Try to open the file using each of the drivers */ for (drivernum = 0; drivernum < NUM_DRIVERS; drivernum++) { + /* Get the correct FAPL for the given driver */ + if((fapl=h5tools_get_fapl(drivernames[drivernum],NULL,argc,argv))<0) + goto done; + H5E_BEGIN_TRY { - fid = H5Fopen(fname, H5F_ACC_RDONLY, - drivers_list[drivernum].fapl); + fid = H5Fopen(fname, H5F_ACC_RDONLY, fapl); } H5E_END_TRY; if (fid != FAIL) break; + else { + /* Close the FAPL */ + H5Pclose(fapl); + fapl=H5P_DEFAULT; + } /* end else */ } } /* Save the driver name */ if (drivername && drivername_size) { if (fid != FAIL) { - strncpy(drivername, drivers_list[drivernum].name, drivername_size); + strncpy(drivername, drivernames[drivernum], drivername_size); drivername[drivername_size - 1] = '\0'; } else { /*no file opened*/ @@ -312,6 +358,8 @@ h5tools_fopen(const char *fname, const char *driver, char *drivername, } done: + if(fapl!=H5P_DEFAULT) + H5Pclose(fapl); return fid; } @@ -418,7 +466,7 @@ h5tools_simple_prefix(FILE *stream, const h5dump_t *info, else fputs(h5tools_str_fmt(&prefix, 0, info->line_pre), stream); - templength = h5tools_str_len(&prefix); + templength = h5tools_str_len(&prefix); for (i = 0; i < indentlevel; i++){ /*we already made the indent for the array indices case */ @@ -504,7 +552,6 @@ h5tools_dump_simple_data(FILE *stream, const h5dump_t *info, hid_t container, for (i = 0; i < nelmts; i++, ctx->cur_elmt++, elmt_counter++) { /* Render the element */ h5tools_str_reset(&buffer); - h5tools_str_sprint(&buffer, info, container, type, mem + i * size, ctx); if (i + 1 < nelmts || (flags & END_OF_DATA) == 0) @@ -1087,15 +1134,8 @@ h5tools_dump_dset(FILE *stream, const h5dump_t *info, hid_t dset, hid_t _p_type, if (info->raw) p_type = H5Tcopy(f_type); - else { - H5T_class_t type_class; - - type_class = H5Tget_class(f_type); - if(type_class==H5T_BITFIELD) - p_type=H5Tcopy(f_type); - else - p_type = H5Tget_native_type(f_type,H5T_DIR_DEFAULT); - } + else + p_type = h5tools_get_native_type(f_type); H5Tclose(f_type); diff --git a/tools/lib/h5tools.h b/tools/lib/h5tools.h index d7f0cdf..f43941f 100644 --- a/tools/lib/h5tools.h +++ b/tools/lib/h5tools.h @@ -23,10 +23,6 @@ #include "hdf5.h" -#if H5_VERS_MAJOR == 1 && H5_VERS_MINOR == 2 -#define VERSION12 -#endif /* H5_VERS_MAJOR == 1 && H5_VERS_MINOR == 2 */ - #define ESCAPE_HTML 1 #define OPT(X,S) ((X) ? (X) : (S)) #define OPTIONAL_LINE_BREAK "\001" /* Special strings embedded in the output */ @@ -106,7 +102,6 @@ typedef struct h5dump_t { * str_repeat: If set to non-zero then any character value repeated N * or more times is printed as 'C'*N * - * * Numeric data is also subject to the formats for individual elements. */ hbool_t raw; @@ -326,7 +321,6 @@ typedef struct h5dump_t { /*escape non printable characters */ int do_escape; - } h5dump_t; typedef struct dump_header{ @@ -493,7 +487,6 @@ extern FILE *rawdatastream; /*output stream for raw data */ #define FILE_CONTENTS "FILE_CONTENTS" - #define BEGIN "{" #define END "}" @@ -501,11 +494,14 @@ extern FILE *rawdatastream; /*output stream for raw data */ extern void h5tools_init(void); extern void h5tools_close(void); extern hid_t h5tools_fopen(const char *fname, const char *driver, - char *drivername, size_t drivername_len); + char *drivername, size_t drivername_len, + int argc, const char *argv[]); extern int h5tools_dump_dset(FILE *stream, const h5dump_t *info, hid_t dset, hid_t p_typ, struct subset_t *sset, int indentlevel); extern int h5tools_dump_mem(FILE *stream, const h5dump_t *info, hid_t obj_id, hid_t type, hid_t space, void *mem, int indentlevel); +extern hid_t h5tools_get_native_type(hid_t type); + extern void h5tools_dump_simple_data(FILE *stream, const h5dump_t *info, hid_t container, h5tools_context_t *ctx/*in,out*/, unsigned flags, hsize_t nelmts, hid_t type, void *_mem); @@ -513,5 +509,4 @@ extern void h5tools_dump_simple_data(FILE *stream, const h5dump_t *info, hid extern int h5tools_canreadf(const char* name, hid_t dcpl_id); - #endif /* H5TOOLS_H__ */ diff --git a/tools/lib/h5tools_str.c b/tools/lib/h5tools_str.c index cee0928..1bf3ec0 100644 --- a/tools/lib/h5tools_str.c +++ b/tools/lib/h5tools_str.c @@ -574,7 +574,8 @@ h5tools_str_sprint(h5tools_str_t *str, const h5dump_t *info, hid_t container, unsigned char *ucp_vp = (unsigned char *)vp; char *cp_vp = (char *)vp; hid_t memb, obj, region; - int nmembs, otype; + unsigned nmembs; + int otype; static char fmt_llong[8], fmt_ullong[8]; H5T_str_t pad; H5G_stat_t sb; @@ -641,6 +642,7 @@ h5tools_str_sprint(h5tools_str_t *str, const h5dump_t *info, hid_t container, } pad = H5Tget_strpad(type); + /* Check for NULL pointer for string */ if(s==NULL) { h5tools_str_append(str, "NULL"); } @@ -748,7 +750,7 @@ h5tools_str_sprint(h5tools_str_t *str, const h5dump_t *info, hid_t container, h5tools_str_append(str, OPT(info->fmt_ullong, fmt_ullong), tempullong); } } else if (H5Tget_class(type) == H5T_COMPOUND) { - int j; + unsigned j; nmembs = H5Tget_nmembers(type); h5tools_str_append(str, "%s", OPT(info->cmpd_pre, "{")); @@ -877,12 +879,11 @@ h5tools_str_sprint(h5tools_str_t *str, const h5dump_t *info, hid_t container, } /* Print OID */ - if (info->obj_hidefileno) { + if (info->obj_hidefileno) h5tools_str_append(str, info->obj_format, sb.objno[1], sb.objno[0]); - } else { + else h5tools_str_append(str, info->obj_format, sb.fileno[1], sb.fileno[0], sb.objno[1], sb.objno[0]); - } /* Print name */ path = lookup_ref_path(vp); @@ -1122,4 +1123,3 @@ h5tools_is_zero(const void *_mem, size_t size) return TRUE; } - diff --git a/tools/lib/h5tools_type.c b/tools/lib/h5tools_type.c index 53a3505..1ef2579 100644 --- a/tools/lib/h5tools_type.c +++ b/tools/lib/h5tools_type.c @@ -45,3 +45,4 @@ h5tools_get_native_type(hid_t type) return(p_type); } + diff --git a/tools/lib/h5tools_utils.c b/tools/lib/h5tools_utils.c index 26f894f..a942c17 100644 --- a/tools/lib/h5tools_utils.c +++ b/tools/lib/h5tools_utils.c @@ -246,7 +246,7 @@ get_option(int argc, const char **argv, const char *opts, const struct long_opti } -/*---------------------/---------------------------------------------------- +/*------------------------------------------------------------------------- * Function: indentation * * Purpose: Print spaces for indentation diff --git a/tools/lib/h5trav.c b/tools/lib/h5trav.c index 78c5650..babbac0 100644 --- a/tools/lib/h5trav.c +++ b/tools/lib/h5trav.c @@ -344,7 +344,7 @@ int traverse( hid_t loc_id, H5E_BEGIN_TRY { /* get info */ - H5Gget_objinfo( loc_id, path, FALSE, &statbuf); + H5Gget_objinfo( loc_id, path, FALSE, &statbuf); } H5E_END_TRY; /* add to array */ @@ -383,7 +383,7 @@ int traverse( hid_t loc_id, inserted_objs += traverse( loc_id, path, table, info, idx, print ); } - /* search table + /* search table group with more than one link to it */ if (statbuf.nlink > 1) { @@ -426,10 +426,9 @@ int traverse( hid_t loc_id, /* print it */ if (print) printf(" %-10s %s\n", "dataset", path ); - } - /* search table + /* search table dataset with more than one link to it */ if (statbuf.nlink > 1) { @@ -469,7 +468,7 @@ int traverse( hid_t loc_id, /* add object to table */ trav_table_add(statbuf.objno, path, H5G_TYPE, table ); - /* print it */ + /* print it */ if (print) printf(" %-10s %s\n", "datatype", path ); } diff --git a/tools/lib/h5trav.h b/tools/lib/h5trav.h index 4d7f0cf..b6522e6 100644 --- a/tools/lib/h5trav.h +++ b/tools/lib/h5trav.h @@ -41,7 +41,7 @@ #endif typedef struct trav_info_t { - char *name; + char *name; H5G_obj_t1 type; } trav_info_t; diff --git a/tools/lib/talign.c b/tools/lib/talign.c index 082e37e..bb9f96e 100644 --- a/tools/lib/talign.c +++ b/tools/lib/talign.c @@ -29,7 +29,6 @@ int main(void) hsize_t dim[2]; hsize_t cdim[4]; - H5T_class_t type_class; char string5[5]; float fok[2] = {1234., 2341.}; @@ -73,11 +72,7 @@ int main(void) H5Tinsert(cmp, "Not Ok", sizeof(fok) + sizeof(string5), array_dt); H5Tclose(array_dt); - type_class = H5Tget_class(cmp); - if(type_class==H5T_BITFIELD) - fix=H5Tcopy(cmp); - else - fix=H5Tget_native_type(cmp, H5T_DIR_DEFAULT); + fix=h5tools_get_native_type(cmp); cmp1 = H5Tcreate(H5T_COMPOUND, sizeof(fok)); |