Refactor cryptcheck() to allow multiple list-files and stdin

Previously, it was not possible to use

sha1sum test.c | sha1sum -c

because the program would not differenciate between an empty
argument and a non-specified argument.
Moreover, why not allow this?

sha1sum -c hashlist1 hashlist2

Digging deeper I found that using function pointers and a
modification in the crypt-backend might simplify the program
a lot by passing the argument-list to both cryptmain and
cryptcheck.
Allowing more than one list-file to be specified is also
consistent with what the other implementations support,
so we not only have simpler code, we also do not silently
break if there's a script around passing multiple files to
check.
This commit is contained in:
FRIGN
2015-03-01 22:51:52 +01:00
parent 0226c05105
commit 9b06720f62
6 changed files with 56 additions and 53 deletions

View File

@@ -17,24 +17,22 @@ struct crypt_ops sha1_ops = {
static void
usage(void)
{
eprintf("usage: %s [-c] [file...]\n", argv0);
eprintf("usage: %s [-c] [file ...]\n", argv0);
}
int
main(int argc, char *argv[])
{
int (*cryptfunc)(int, char **, struct crypt_ops *, uint8_t *, size_t) = cryptmain;
uint8_t md[SHA1_DIGEST_LENGTH];
char *checkfile = NULL;
ARGBEGIN {
case 'c':
checkfile = ARGF();
cryptfunc = cryptcheck;
break;
default:
usage();
} ARGEND;
if (checkfile)
return cryptcheck(checkfile, argc, argv, &sha1_ops, md, sizeof(md));
return cryptmain(argc, argv, &sha1_ops, md, sizeof(md));
return cryptfunc(argc, argv, &sha1_ops, md, sizeof(md));
}