summaryrefslogtreecommitdiff
path: root/src/md5sum.c
diff options
context:
space:
mode:
authorJim Meyering <jim@meyering.net>1995-07-21 04:45:40 +0000
committerJim Meyering <jim@meyering.net>1995-07-21 04:45:40 +0000
commit855741c7cbe860b5aa295bbfad34bc0a256bc55d (patch)
tree39c32cd444232b4f14b90abad83da556195cb6df /src/md5sum.c
parentd58bdcd4fa4a1bdcd52118e99850f32a4ecc2268 (diff)
downloadcoreutils-855741c7cbe860b5aa295bbfad34bc0a256bc55d.tar.xz
Use EXIT_FAILURE and EXIT_SUCCESS.
(main): Report an error if md5_stream fails. Otherwise, running `md5sum dir-on-mounted-filesystem' always reported the checksum for an empty file. Now it gets the `is a directory' error. Greg McGary reported that the released version got stuck in an infinite loop with such arguments.
Diffstat (limited to 'src/md5sum.c')
-rw-r--r--src/md5sum.c48
1 files changed, 29 insertions, 19 deletions
diff --git a/src/md5sum.c b/src/md5sum.c
index 1d4fa46d3..fcf4d0796 100644
--- a/src/md5sum.c
+++ b/src/md5sum.c
@@ -199,6 +199,7 @@ main (argc, argv)
char **string = NULL;
char n_strings = 0;
size_t i;
+ size_t err = 0;
/* Setting values of global variables. */
program_name = argv[0];
@@ -243,23 +244,23 @@ main (argc, argv)
do_version = 1;
break;
default:
- usage (1);
+ usage (EXIT_FAILURE);
}
if (do_version)
{
printf ("md5sum - %s\n", version_string);
- exit (0);
+ exit (EXIT_SUCCESS);
}
if (do_help)
- usage (0);
+ usage (EXIT_SUCCESS);
if (n_strings > 0 && do_check != 0)
{
error (0, 0,
_("the --string and --check options are mutually exclusive"));
- usage (1);
+ usage (EXIT_FAILURE);
}
if (n_strings > 0)
@@ -268,7 +269,7 @@ main (argc, argv)
if (optind < argc)
{
error (0, 0, _("no files may be specified when using --string"));
- usage (1);
+ usage (EXIT_FAILURE);
}
for (i = 0; i < n_strings; ++i)
{
@@ -304,15 +305,23 @@ main (argc, argv)
fp = fopen (argv[optind], OPENOPTS);
if (fp == NULL)
- error (1, errno, _("while opening input file `%s'"),
- argv[optind]);
+ error (EXIT_FAILURE, errno, "%s", argv[optind]);
}
- md5_stream (fp, md5buffer);
+ err |= md5_stream (fp, md5buffer);
+ if (err)
+ {
+ error (0, errno, argv[optind]);
+ fclose (fp);
+ continue;
+ }
- if (fp != stdin)
- if (fclose (fp) == EOF)
- error (1, errno, argv[optind]);
+ if (fp != stdin && fclose (fp) == EOF)
+ {
+ err = 1;
+ error (0, errno, argv[optind]);
+ continue;
+ }
for (cnt = 0; cnt < 16; ++cnt)
printf ("%02x", md5buffer[cnt]);
@@ -334,7 +343,7 @@ main (argc, argv)
{
error (0, 0,
_("only one argument may be specified when using --check"));
- usage (1);
+ usage (EXIT_FAILURE);
}
if (optind == argc || strcmp (argv[optind], "-") == 0)
@@ -348,9 +357,10 @@ main (argc, argv)
checkfile_stream = fopen (checkfile_name, "r");
if (checkfile_stream == NULL)
if (quiet)
- exit (1);
+ exit (EXIT_FAILURE);
else
- error (1, errno, _("check file: %s"), checkfile_name);
+ error (EXIT_FAILURE, errno,
+ _("check file: %s"), checkfile_name);
}
do
@@ -405,7 +415,7 @@ main (argc, argv)
if (fp == NULL)
/* The text of this sometimes message completes the
message given above. */
- error (1, errno, quiet ? "%s: " : "", filename);
+ error (EXIT_FAILURE, errno, quiet ? "%s: " : "", filename);
}
++n_tests;
@@ -413,7 +423,7 @@ main (argc, argv)
if (fp != stdin)
if (fclose (fp) == EOF)
- error (1, errno, filename);
+ error (EXIT_FAILURE, errno, filename);
/* Compare generated binary number with text representation
in check file. Ignore case of hex digits. */
@@ -432,7 +442,7 @@ main (argc, argv)
while (!feof (checkfile_stream));
if (fclose (checkfile_stream) == EOF)
- error (1, errno, checkfile_name);
+ error (EXIT_FAILURE, errno, checkfile_name);
if (!quiet)
printf (n_tests == 1 ? (n_tests_failed ? _("Test failed\n")
@@ -444,7 +454,7 @@ main (argc, argv)
}
if (fclose (stdout) == EOF)
- error (1, errno, "write error");
+ error (EXIT_FAILURE, errno, "write error");
- exit (0);
+ exit (err == 0 ? EXIT_SUCCESS : EXIT_FAILURE);
}