Thu, 02 Feb 2012 14:17:35 +0100
added regex parser
/* * bfile_heuristics.c * * Created on: 20.10.2011 * Author: Mike */ #include "bfile_heuristics.h" #include <ctype.h> bfile_heuristics_t *new_bfile_heuristics_t() { bfile_heuristics_t *ret = malloc(sizeof(bfile_heuristics_t)); ret->level = BFILE_MEDIUM_ACCURACY; bfile_reset(ret); return ret; } void destroy_bfile_heuristics_t(bfile_heuristics_t *def) { free(def); } void bfile_reset(bfile_heuristics_t *def) { def->bcount = 0; def->tcount = 0; } bool bfile_check(bfile_heuristics_t *def, int next_char) { bool ret = false; if (def->level != BFILE_IGNORE) { def->tcount++; if (!isprint(next_char) && !isspace(next_char)) { def->bcount++; } if (def->tcount > 1) { /* empty files are text files */ switch (def->level) { case BFILE_LOW_ACCURACY: if (def->tcount > 15 || next_char == EOF) { ret = (1.0*def->bcount)/def->tcount > 0.32; } break; case BFILE_HIGH_ACCURACY: if (def->tcount > 500 || next_char == EOF) { ret = (1.0*def->bcount)/def->tcount > 0.1; } break; default: /* BFILE_MEDIUM_ACCURACY */ if (def->tcount > 100 || next_char == EOF) { ret = (1.0*def->bcount)/def->tcount > 0.1; } break; } } } return ret; }