Hash utilities: maintain a hash state object, not a bundle of arguments.
[u/mdw/catacomb] / cc.h
diff --git a/cc.h b/cc.h
index c8b0cdf..7d93fa3 100644 (file)
--- a/cc.h
+++ b/cc.h
@@ -326,6 +326,16 @@ extern const encodeops *getencoding(const char */*ename*/);
 
 /*----- File hashing ------------------------------------------------------*/
 
+typedef struct fhashstate {
+  const gchash *gch;
+  unsigned f;
+} fhashstate;
+
+#define FHF_BINARY 0x100u
+#define FHF_PROGRESS 0x200u
+
+#define FHF_MASK 0xff00u
+
 /* --- @gethash@ --- *
  *
  * Arguments:  @const char *name@ = pointer to name string
@@ -337,10 +347,34 @@ extern const encodeops *getencoding(const char */*ename*/);
 
 extern const gchash *gethash(const char */*name*/);
 
+/* --- @fhash_init@ ---*
+ *
+ * Arguments:  @fhashstate *fh@ = pointer to fhash state to initialize
+ *             @const gchash *gch@ = hash class to set
+ *             @unsigned f@ initial flags to set
+ *
+ * Returns:    ---
+ *
+ * Use:                Initializes an @fhashstate@ structure.
+ */
+
+extern void fhash_init(fhashstate */*fh*/,
+                      const gchash */*gch*/, unsigned /*f*/);
+
+/* --- @fhash_free@ --- *
+ *
+ * Arguments:  @fhashstate *fh@ = pointer to fhash state to free
+ *
+ * Returns:    ---
+ *
+ * Use:                Frees an fhash state.
+ */
+
+extern void fhash_free(fhashstate */*fh*/);
+
 /* --- @fhash@ --- *
  *
- * Arguments:  @const gchash *gch@ = pointer to hash function to use
- *             @unsigned f@ = flags to set
+ * Arguments:  @fhashstate *fh@ = pointer to fhash state
  *             @const char *file@ = file name to be hashed (null for stdin)
  *             @void *buf@ = pointer to hash output buffer
  *
@@ -349,13 +383,7 @@ extern const gchash *gethash(const char */*name*/);
  * Use:                Hashes a file.
  */
 
-#define FHF_BINARY 256u
-#define FHF_PROGRESS 512u
-
-#define FHF_MASK 384u
-
-extern int fhash(const gchash */*gch*/, unsigned /*f*/,
-                const char */*file*/, void */*buf*/);
+extern int fhash(fhashstate */*fh*/, const char */*file*/, void */*buf*/);
 
 /* --- @hfparse@ --- *
  *