summaryrefslogtreecommitdiffstats
path: root/tools/h5diff/h5diff_common.c
diff options
context:
space:
mode:
Diffstat (limited to 'tools/h5diff/h5diff_common.c')
-rw-r--r--tools/h5diff/h5diff_common.c124
1 files changed, 76 insertions, 48 deletions
diff --git a/tools/h5diff/h5diff_common.c b/tools/h5diff/h5diff_common.c
index 64b0097..75e1774 100644
--- a/tools/h5diff/h5diff_common.c
+++ b/tools/h5diff/h5diff_common.c
@@ -31,7 +31,7 @@ const char *progname = "h5diff";
* Command-line options: The user can specify short or long-named
* parameters.
*/
-static const char *s_opts = "hVrvqn:d:p:Ncl";
+static const char *s_opts = "hVrvqn:d:p:Nc";
static struct long_options l_opts[] = {
{ "help", no_arg, 'h' },
{ "version", no_arg, 'V' },
@@ -44,7 +44,8 @@ static struct long_options l_opts[] = {
{ "nan", no_arg, 'N' },
{ "compare", no_arg, 'c' },
{ "use-system-epsilon", no_arg, 'e' },
- { "link-follow", no_arg, 'l' },
+ { "follow-links", no_arg, 'l' },
+ { "no-dangling-links", no_arg, 'x' },
{ NULL, 0, '\0' }
};
@@ -102,7 +103,10 @@ void parse_command_line(int argc,
options->m_report = 1;
break;
case 'l':
- options->linkfollow = 1;
+ options->follow_links = 1;
+ break;
+ case 'x':
+ options->no_dangle_links = 1;
break;
case 'd':
options->d=1;
@@ -114,7 +118,7 @@ void parse_command_line(int argc,
h5diff_exit(EXIT_FAILURE);
}
options->delta = atof( opt_arg );
-
+
/* -d 0 is the same as default */
if (options->delta == 0)
options->d=0;
@@ -227,8 +231,8 @@ void parse_command_line(int argc,
printf("--------------------------------\n");
printf("Use -c for a list of objects.\n");
}
-
-
+
+
}
}
@@ -356,33 +360,68 @@ void usage(void)
printf(" file2 File name of the second HDF5 file\n");
printf(" [obj1] Name of an HDF5 object, in absolute path\n");
printf(" [obj2] Name of an HDF5 object, in absolute path\n");
-
+ printf("\n");
printf(" OPTIONS\n");
-
- printf(" -h, --help Print a usage message and exit\n");
- printf(" -V, --version Print version number and exit\n");
- printf(" -r, --report Report mode. Print differences\n");
- printf(" -v, --verbose Verbose mode. Print differences, list of objects\n");
- printf(" -q, --quiet Quiet mode. Do not do output\n");
- printf(" -l, --link-follow Follow link(s)\n");
+ printf(" -h, --help Print a usage message and exit.\n");
+ printf(" -V, --version Print version number and exit.\n");
+ printf(" -r, --report Report mode. Print differences.\n");
+ printf(" -v, --verbose Verbose mode. Print differences, list of objects.\n");
+ printf(" -q, --quiet Quiet mode. Do not produce output.\n");
+ printf(" --follow-links Follow symbolic links (soft links and external links)\n");
+ printf(" and compare the links' target objects.\n");
+ printf(" If symbolic link(s) with the same name exist in the\n");
+ printf(" files being compared, then determine whether the \n");
+ printf(" target of each link is an existing object (dataset,\n");
+ printf(" group, or named datatype) or the link is a dangling\n");
+ printf(" link (a soft or external link pointing to a target\n");
+ printf(" object that does not yet exist).\n");
+ printf(" - If both symbolic links are dangling links, they\n");
+ printf(" are treated as being the same; by default, h5diff\n");
+ printf(" returns an exit code of 0. If, however, \n");
+ printf(" --no-dangling-links is used with --follow-links, \n");
+ printf(" this situation is treated as an error and h5diff \n");
+ printf(" returns an exit code of 2.\n");
+ printf(" - If only one of the two links is a dangling link,\n");
+ printf(" they are treated as being different and h5diff \n");
+ printf(" returns an exit code of 1. If, however, \n");
+ printf(" --no-dangling-links is used with --follow-links, \n");
+ printf(" this situation is treated as an error and h5diff \n");
+ printf(" returns an exit code of 2.\n");
+ printf(" - If both symbolic links point to existing objects,\n");
+ printf(" h5diff compares the two objects.\n");
+ printf(" If any symbolic link specified in the call to h5diff\n");
+ printf(" does not exist, h5diff treats it as an error and\n");
+ printf(" returns an exit code of 2.\n");
+ printf(" --no-dangling-links Must be used with --follow-links option;\n");
+ printf(" otherwise, h5diff shows error message and returns\n");
+ printf(" an exit code of 2.\n");
+ printf(" Check for any symbolic links (soft links or external\n");
+ printf(" links) that do not resolve to an existing object\n");
+ printf(" (dataset, group, or named datatype). If any\n");
+ printf(" dangling link is found, this situation is treated as\n");
+ printf(" an error and h5diff returns an exit code of 2.\n");
printf(" -c, --compare List objects that are not comparable\n");
printf(" -N, --nan Avoid NaNs detection\n");
- printf(" -n C, --count=C Print differences up to C number, C is a positive integer.\n");
-
- printf(" -d D, --delta=D Print difference if (|a-b| > D), D is a positive number.\n");
- printf(" -p R, --relative=R Print difference if (|(a-b)/b| > R), R is a positive number.\n");
+ printf(" -n C, --count=C Print differences up to C number, C is a positive\n");
+ printf(" integer.\n");
+ printf(" -d D, --delta=D Print difference if (|a-b| > D), D is a positive\n");
+ printf(" number.\n");
+ printf(" -p R, --relative=R Print difference if (|(a-b)/b| > R), R is a positive\n");
+ printf(" number.\n");
printf(" --use-system-epsilon Print difference if (|a-b| > EPSILON),\n");
- printf(" where EPSILON (FLT_EPSILON or FLT_EPSILON) is the system epsilon value. \n");
- printf(" If the system epsilon is not defined, use the value below:\n");
+ printf(" where EPSILON (FLT_EPSILON or FLT_EPSILON) is the\n");
+ printf(" system epsilon value. \n");
+ printf(" If the system epsilon is not defined, use the value\n");
+ printf(" below:\n");
printf(" FLT_EPSILON = 1.19209E-07 for float\n");
printf(" DBL_EPSILON = 2.22045E-16 for double\n");
-
- printf(" -d, -p, and --use-system-epsilon options are used for comparing floating point values.\n");
- printf(" By default, strict equality is used. Use -p or -d to set specific tolerance.\n");
+ printf(" -d, -p, and --use-system-epsilon options are used for\n");
+ printf(" comparing floating point values.\n");
+ printf(" By default, strict equality is used. Use -p or -d to\n");
+ printf(" set specific tolerance.\n");
printf("\n");
printf(" Modes of output:\n");
- printf("\n");
printf(" Default mode: print the number of differences found and where they occured\n");
printf(" -r Report mode: print the above plus the differences\n");
printf(" -v Verbose mode: print the above plus a list of objects and warnings\n");
@@ -391,46 +430,35 @@ void usage(void)
printf("\n");
printf(" Compare criteria\n");
- printf("\n");
- printf(" If no objects [obj1[obj2]] are specified, h5diff only compares objects\n");
- printf(" with the same absolute path in both files\n");
+ printf(" If no objects [obj1[obj2]] are specified, h5diff only compares objects\n");
+ printf(" with the same absolute path in both files\n");
printf("\n");
printf(" The compare criteria is:\n");
- printf(" 1) datasets: numerical array differences 2) groups: name string difference\n");
- printf(" 3) datatypes: the return value of H5Tequal 4) links: name string difference\n");
- printf(" of the linked value\n");
-
+ printf(" 1) datasets: numerical array differences\n");
+ printf(" 2) groups: name string difference\n");
+ printf(" 3) datatypes: the return value of H5Tequal\n");
+ printf(" 4) links: name string difference of the linked value as default\n");
+ printf(" (refer to --follow-links option).\n");
printf("\n");
-
- printf(" Return exit code:\n");
- printf("\n");
- printf(" 1 if differences found, 0 if no differences, 2 if error\n");
-
+ printf(" Exit code:\n");
+ printf(" 0 if no differences, 1 if differences found, 2 if error\n");
printf("\n");
-
printf(" Examples of use:\n");
- printf("\n");
printf(" 1) h5diff file1 file2 /g1/dset1 /g1/dset2\n");
- printf("\n");
printf(" Compares object '/g1/dset1' in file1 with '/g1/dset2' in file2\n");
printf("\n");
printf(" 2) h5diff file1 file2 /g1/dset1\n");
- printf("\n");
printf(" Compares object '/g1/dset1' in both files\n");
printf("\n");
printf(" 3) h5diff file1 file2\n");
- printf("\n");
printf(" Compares all objects in both files\n");
printf("\n");
- printf(" Note) file1 and file2 can be the same file. Use\n");
- printf("\n");
- printf(" h5diff file1 file1 /g1/dset1 /g1/dset2\n");
+ printf(" Notes:\n");
+ printf(" file1 and file2 can be the same file.\n");
+ printf(" Use h5diff file1 file1 /g1/dset1 /g1/dset2 to compare\n");
+ printf(" '/g1/dset1' and '/g1/dset2' in the same file\n");
printf("\n");
- printf(" to compare '/g1/dset1' and '/g1/dset2' in the same file\n");
- printf("\n");
-
-
}