logo

cmd-fuzzmatch

use ssdeep libfuzzy to find matching files git clone https://anongit.hacktivis.me/git/cmd-fuzzmatch.git
commit: 968f80821170472f3adaab7d959efc3aff260382
parent 2e0e036511efa4b63ea34c4762a9f753eaf893df
Author: Haelwenn (lanodan) Monnier <contact@hacktivis.me>
Date:   Sat,  2 May 2026 17:30:58 +0200

Use 0 for no-match, 1 for match, 2 for error (à la grep)

Diffstat:

Mfuzzmatch.c22+++++++++++-----------
1 file changed, 11 insertions(+), 11 deletions(-)

diff --git a/fuzzmatch.c b/fuzzmatch.c @@ -39,11 +39,11 @@ main(int argc, char *argv[]) case ':': fprintf(stderr, "fuzzmatch: error: Missing operand for option '-%c'\n", optopt); usage(); - return 1; + return 2; default: fprintf(stderr, "fuzzmatch: error: Unhandled option -%c\n", optopt); usage(); - return 1; + return 2; } } @@ -54,7 +54,7 @@ main(int argc, char *argv[]) { fputs("fuzzmatch: error: No file argument given\n", stderr); usage(); - return 1; + return 3; } size_t matches_len = 0; @@ -66,14 +66,14 @@ main(int argc, char *argv[]) if(!matches) { fprintf(stderr, "fuzzmatch: error: Failed allocating array of 128 matches: %s\n", strerror(errno)); - return 1; + return 2; } FILE *fmatch = fopen(match, "rb"); if(fmatch < 0) { fprintf(stderr, "fuzzmatch: error: Failed opening match file '%s': %s\n", match, strerror(errno)); - return 1; + return 2; } size_t matchbuf_cap = FUZZY_MAX_RESULT*20; @@ -82,7 +82,7 @@ main(int argc, char *argv[]) if(!matchbuf) { fprintf(stderr, "fuzzmatch: error: Failed allocating for 20 matches: %s\n", strerror(errno)); - return 1; + return 2; } char *line = NULL; @@ -111,7 +111,7 @@ main(int argc, char *argv[]) if(!matchbuf) { fprintf(stderr, "fuzzmatch: error: Failed allocating for 20 more matches: %s\n", strerror(errno)); - return 1; + return 2; } } @@ -125,7 +125,7 @@ main(int argc, char *argv[]) if(!matches) { fprintf(stderr, "fuzzmatch: error: Failed allocating array of 128 more matches: %s\n", strerror(errno)); - return 1; + return 2; } } matches[matches_len++] = matchbuf + matchbuf_len; @@ -142,7 +142,7 @@ main(int argc, char *argv[]) char res[FUZZY_MAX_RESULT]; if(fuzzy_hash_filename(argv[argi], res) != 0) - return 1; + return 2; size_t mi = 0; for(; mi < matches_len; mi++) @@ -151,7 +151,7 @@ main(int argc, char *argv[]) if(cmp > thresh) { printf("%s,%s ~~(%d%%) %s\n", res, argv[argi], cmp, matches[mi]); - matched++; + matched = 1; break; } } @@ -159,5 +159,5 @@ main(int argc, char *argv[]) printf("%s,%s unmatched\n", res, argv[argi]); } - return (matched == 0) ? 0 : 1 + (matched % 126); + return matched; }