From 12902a5ccc0fa4ef617fcd9a9c85836ab9960a57 Mon Sep 17 00:00:00 2001 From: mdw Date: Sat, 29 Jul 2000 17:02:43 +0000 Subject: [PATCH] (checkhash): Be pettier about spaces between the hash and filename, for compatiblity with `md5sum'. --- hashsum.c | 34 ++++++++++++++++++++-------------- 1 file changed, 20 insertions(+), 14 deletions(-) diff --git a/hashsum.c b/hashsum.c index 0e537eeb..051fdb12 100644 --- a/hashsum.c +++ b/hashsum.c @@ -1,6 +1,6 @@ /* -*-c-*- * - * $Id: hashsum.c,v 1.2 2000/07/15 21:14:05 mdw Exp $ + * $Id: hashsum.c,v 1.3 2000/07/29 17:02:43 mdw Exp $ * * Hash files using some secure hash function * @@ -30,6 +30,10 @@ /*----- Revision history --------------------------------------------------* * * $Log: hashsum.c,v $ + * Revision 1.3 2000/07/29 17:02:43 mdw + * (checkhash): Be pettier about spaces between the hash and filename, for + * compatiblity with `md5sum'. + * * Revision 1.2 2000/07/15 21:14:05 mdw * Missed `-e' out of the usage string. * @@ -422,18 +426,19 @@ static int checkhash(const char *file, unsigned f, const gchash *gch) /* --- Otherwise it's a hex thing --- */ - if ((q = str_getword(&p)) == 0) + q = p; + while (*p && *p != ' ') + p++; + if (!*p) continue; + *p++ = 0; if (gethex(q, buf, gch->hashsz, 0) < gch->hashsz) continue; - while (isspace((unsigned char)*p)) - p++; - if (*p == '*') { - p++; + if (*p == '*') ff |= f_binary; - } - if (!*p) + else if (*p != ' ') continue; + p++; if (f & f_escape) { DRESET(&dd); @@ -495,6 +500,11 @@ static int dohash(const char *file, unsigned f, const gchash *gch) return (rc); } +static int dofile(const char *file, unsigned f, const gchash *gch) +{ + return (f & f_check ? checkhash : dohash)(file, f, gch); +} + static int hashfiles(const char *file, unsigned f, const gchash *gch) { FILE *fp; @@ -513,7 +523,7 @@ static int hashfiles(const char *file, unsigned f, const gchash *gch) DRESET(&d); if (getstring(fp, 0, &d, f & f_raw)) break; - if ((rrc = dohash(d.buf, f, gch)) != 0) + if ((rrc = dofile(d.buf, f, gch)) != 0) rc = rrc; } @@ -522,11 +532,7 @@ static int hashfiles(const char *file, unsigned f, const gchash *gch) static int hashsum(const char *file, unsigned f, const gchash *gch) { - if (f & f_check) - return (checkhash(file, f, gch)); - if (f & f_files) - return (hashfiles(file, f, gch)); - return (dohash(file, f, gch)); + return (f & f_files ? hashfiles : dofile)(file, f, gch); } /*----- Main driver -------------------------------------------------------*/ -- 2.11.0