X-Git-Url: https://git.distorted.org.uk/u/mdw/catacomb/blobdiff_plain/7280f7f44cfae62f6d34761ac88aa19da7da5dd8..07290a455e008c37adc233554eff8ad468608161:/cc-hash.c diff --git a/cc-hash.c b/cc-hash.c index b0d8bb2..9e23f79 100644 --- a/cc-hash.c +++ b/cc-hash.c @@ -193,10 +193,34 @@ const gchash *gethash(const char *name) return (gg); } +/* --- @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. + */ + +void fhash_init(fhashstate *fh, const gchash *gch, unsigned f) + { fh->f = f; fh->gch = gch; } + +/* --- @fhash_free@ --- * + * + * Arguments: @fhashstate *fh@ = pointer to fhash state to free + * + * Returns: --- + * + * Use: Frees an fhash state. + */ + +void fhash_free(fhashstate *fh) { return; } + /* --- @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 * @@ -205,7 +229,7 @@ const gchash *gethash(const char *name) * Use: Hashes a file. */ -int fhash(const gchash *gch, unsigned f, const char *file, void *buf) +int fhash(fhashstate *fh, const char *file, void *buf) { FILE *fp; char fbuf[1024 * 128]; @@ -216,21 +240,21 @@ int fhash(const gchash *gch, unsigned f, const char *file, void *buf) if (!file || strcmp(file, "-") == 0) fp = stdin; - else if ((fp = fopen(file, f & FHF_BINARY ? "rb" : "r")) == 0) + else if ((fp = fopen(file, fh->f & FHF_BINARY ? "rb" : "r")) == 0) return (-1); - if (f & FHF_PROGRESS) { + if (fh->f & FHF_PROGRESS) { if (fprogress_init(&ff, file, fp)) return (-1); } - h = GH_INIT(gch); + h = GH_INIT(fh->gch); while ((sz = fread(fbuf, 1, sizeof(fbuf), fp)) > 0) { GH_HASH(h, fbuf, sz); - if (f & FHF_PROGRESS) fprogress_update(&ff, sz); + if (fh->f & FHF_PROGRESS) fprogress_update(&ff, sz); } if (ferror(fp)) rc = -1; if (fp != stdin) fclose(fp); - if (f & FHF_PROGRESS) fprogress_done(&ff); + if (fh->f & FHF_PROGRESS) fprogress_done(&ff); GH_DONE(h, buf); GH_DESTROY(h); return (rc);