summaryrefslogtreecommitdiffstats
path: root/tools/misc/h5debug.c
diff options
context:
space:
mode:
authorBill Wendling <wendling@ncsa.uiuc.edu>2001-02-22 21:49:40 (GMT)
committerBill Wendling <wendling@ncsa.uiuc.edu>2001-02-22 21:49:40 (GMT)
commit20061988ec9daa96b5d5b9aaed75af587d582a0e (patch)
treed1da4991b23c856babee189a099d5436006cd4c2 /tools/misc/h5debug.c
parente8ff838cf3892d4ec64ed689616a1f8e4ecaba77 (diff)
downloadhdf5-20061988ec9daa96b5d5b9aaed75af587d582a0e.zip
hdf5-20061988ec9daa96b5d5b9aaed75af587d582a0e.tar.gz
hdf5-20061988ec9daa96b5d5b9aaed75af587d582a0e.tar.bz2
[svn-r3487] Purpose:
Code Movement Description: Moved the tools into their own separate directories (except for these small tools which are REALLY small, not tested, or documented, really...They just get put into the misc/ directory). Platforms tested: Linux and Kelgia
Diffstat (limited to 'tools/misc/h5debug.c')
-rw-r--r--tools/misc/h5debug.c185
1 files changed, 185 insertions, 0 deletions
diff --git a/tools/misc/h5debug.c b/tools/misc/h5debug.c
new file mode 100644
index 0000000..76eb472
--- /dev/null
+++ b/tools/misc/h5debug.c
@@ -0,0 +1,185 @@
+/*-------------------------------------------------------------------------
+ * Copyright (C) 1997 National Center for Supercomputing Applications.
+ * All rights reserved.
+ *
+ *-------------------------------------------------------------------------
+ *
+ * Created: debug.c
+ * Jul 18 1997
+ * Robb Matzke <matzke@llnl.gov>
+ *
+ * Purpose: Debugs an existing HDF5 file at a low level.
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+#define H5F_PACKAGE /*suppress error about including H5Fpkg */
+
+#include <H5private.h>
+#include <H5Iprivate.h>
+#include <H5Bprivate.h>
+#include <H5Pprivate.h>
+#include <H5Fpkg.h>
+#include <H5Gprivate.h>
+#include <H5HGprivate.h>
+#include <H5HLprivate.h>
+#include <H5Oprivate.h>
+
+/* File drivers */
+#include <H5FDfamily.h>
+
+#define INDENT 3
+#define VCOL 50
+
+
+/*-------------------------------------------------------------------------
+ * Function: main
+ *
+ * Usage: debug FILENAME [OFFSET]
+ *
+ * Return: Success: exit (0)
+ *
+ * Failure: exit (non-zero)
+ *
+ * Programmer: Robb Matzke
+ * matzke@llnl.gov
+ * Jul 18 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+int
+main(int argc, char *argv[])
+{
+ hid_t fid, plist=H5P_DEFAULT;
+ H5F_t *f;
+ haddr_t addr=0, extra=0;
+ uint8_t sig[16];
+ intn i, ndims;
+ herr_t status = SUCCEED;
+
+ if (argc == 1) {
+ fprintf(stderr,
+ "Usage: %s filename [signature addr [extra]]\n", argv[0]);
+ HDexit(1);
+ }
+
+ /*
+ * Open the file and get the file descriptor.
+ */
+ if (strchr (argv[1], '%')) {
+ plist = H5Pcreate (H5P_FILE_ACCESS);
+ H5Pset_fapl_family (plist, (hsize_t)0, H5P_DEFAULT);
+ }
+ if ((fid = H5Fopen(argv[1], H5F_ACC_RDONLY, plist)) < 0) {
+ fprintf(stderr, "cannot open file\n");
+ HDexit(1);
+ }
+ if (NULL == (f = H5I_object(fid))) {
+ fprintf(stderr, "cannot obtain H5F_t pointer\n");
+ HDexit(2);
+ }
+
+ /*
+ * Parse command arguments.
+ */
+ if (argc > 2) {
+ printf("New address: %s\n", argv[2]);
+ addr = HDstrtoll(argv[2], NULL, 0);
+ }
+ if (argc > 3) {
+ extra = HDstrtoll(argv[3], NULL, 0);
+ }
+ /*
+ * Read the signature at the specified file position.
+ */
+ HDfprintf(stdout, "Reading signature at address %a (rel)\n", addr);
+ if (H5F_block_read(f, H5FD_MEM_SUPER, addr, (hsize_t)sizeof(sig), H5P_DEFAULT, sig)<0) {
+ fprintf(stderr, "cannot read signature\n");
+ HDexit(3);
+ }
+ if (!HDmemcmp(sig, H5F_SIGNATURE, H5F_SIGNATURE_LEN)) {
+ /*
+ * Debug the boot block.
+ */
+ status = H5F_debug(f, addr, stdout, 0, VCOL);
+
+ } else if (!HDmemcmp(sig, H5HL_MAGIC, H5HL_SIZEOF_MAGIC)) {
+ /*
+ * Debug a local heap.
+ */
+ status = H5HL_debug(f, addr, stdout, 0, VCOL);
+
+ } else if (!HDmemcmp (sig, H5HG_MAGIC, H5HG_SIZEOF_MAGIC)) {
+ /*
+ * Debug a global heap collection.
+ */
+ status = H5HG_debug (f, addr, stdout, 0, VCOL);
+
+ } else if (!HDmemcmp(sig, H5G_NODE_MAGIC, H5G_NODE_SIZEOF_MAGIC)) {
+ /*
+ * Debug a symbol table node.
+ */
+ status = H5G_node_debug(f, addr, stdout, 0, VCOL, extra);
+
+ } else if (!HDmemcmp(sig, H5B_MAGIC, H5B_SIZEOF_MAGIC)) {
+ /*
+ * Debug a B-tree. B-trees are debugged through the B-tree
+ * subclass. The subclass identifier is the byte immediately
+ * after the B-tree signature.
+ */
+ H5B_subid_t subtype = (H5B_subid_t)sig[H5B_SIZEOF_MAGIC];
+
+ switch (subtype) {
+ case H5B_SNODE_ID:
+ status = H5G_node_debug(f, addr, stdout, 0, VCOL, extra);
+ break;
+
+ case H5B_ISTORE_ID:
+ ndims = (int)extra;
+ status = H5F_istore_debug (f, addr, stdout, 0, VCOL, ndims);
+ break;
+
+ default:
+ fprintf(stderr, "Unknown B-tree subtype %u\n",
+ (unsigned)(subtype));
+ HDexit(4);
+ }
+
+ } else if (sig[0] == H5O_VERSION) {
+ /*
+ * This could be an object header. Since they don't have a signature
+ * it's a somewhat "ify" detection.
+ */
+ status = H5O_debug(f, addr, stdout, 0, VCOL);
+
+ } else {
+ /*
+ * Got some other unrecognized signature.
+ */
+ printf("%-*s ", VCOL, "Signature:");
+ for (i = 0; i < 8; i++) {
+ if (sig[i] > ' ' && sig[i] <= '~' && '\\' != sig[i]) {
+ HDputchar(sig[i]);
+ } else if ('\\' == sig[i]) {
+ HDputchar('\\');
+ HDputchar('\\');
+ } else {
+ printf("\\%03o", sig[i]);
+ }
+ }
+ HDputchar('\n');
+
+ fprintf(stderr, "unknown signature\n");
+ HDexit(4);
+ }
+
+ if (status < 0) {
+ fprintf(stderr, "An error occurred\n");
+ HDexit(5);
+ }
+ H5Fclose(fid);
+ return 0;
+}