(checkhash): Be pettier about spaces between the hash and filename, for
authormdw <mdw>
Sat, 29 Jul 2000 17:02:43 +0000 (17:02 +0000)
committermdw <mdw>
Sat, 29 Jul 2000 17:02:43 +0000 (17:02 +0000)
compatiblity with `md5sum'.

hashsum.c

index 0e537ee..051fdb1 100644 (file)
--- 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
  *
 /*----- 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 -------------------------------------------------------*/