#include "filehash.h" #include #include struct filehash_t { const char *hash_program; const char **argv; unsigned max_per_invocation; }; filehash_t *filehash_new(const char *hash_program, unsigned max_per_invocation) { filehash_t *fh; fh = malloc(sizeof(filehash_t)); if (!fh) return NULL; *fh = (filehash_t){ .hash_program = strdup(hash_program), .max_per_invocation = max_per_invocation, .argv = reallocarray( NULL, 1 + max_per_invocation, sizeof(const char *) ), }; if (!fh->hash_program) goto fail; if (!fh->argv) goto fail; fh->argv[max_per_invocation] = NULL; return fh; fail: filehash_free(fh); return NULL; } void filehash_free(filehash_t *fh) { if (!fh) return; free(fh->argv); free((void *)fh->hash_program); free(fh); }