bool display_result(state *s, const TCHAR * fn, const char * sum) { // Only spend the extra time to make a Filedata object if we need to if (MODE(mode_match_pretty) or MODE(mode_match) or MODE(mode_directory)) { Filedata * f; try { f = new Filedata(fn, sum); } catch (std::bad_alloc) { fatal_error("%s: Unable to create Filedata object in engine.cpp:display_result()", __progname); } if (MODE(mode_match_pretty)) { if (match_add(s,f)) print_error_unicode(s,fn,"Unable to add hash to set of known hashes"); } else { // This block is for MODE(mode_match) or MODE(mode_directory) match_compare(s,f); if (MODE(mode_directory)) if (match_add(s,f)) print_error_unicode(s, fn, "Unable to add hash to set of known hashes"); } } else { // No special options selected. Display the hash for this file if (s->first_file_processed) { print_status("%s", OUTPUT_FILE_HEADER); s->first_file_processed = false; } printf ("%s,\"", sum); display_filename(stdout,fn,TRUE); print_status("\""); } return false; }
bool find_matches_in_known(state *s) { if (NULL == s) return true; // Walk the vector which contains all of the known files std::vector<Filedata *>::const_iterator it; for (it = s->all_files.begin() ; it != s->all_files.end() ; ++it) { bool status = match_compare(s,*it); // In pretty mode and sigcompare mode we need to display a blank // line after each file. In clustering mode we don't display anything // right now. if (status and not(MODE(mode_cluster))) print_status(""); } return false; }
bool match_compare_unknown(state *s, const char * fn) { if (NULL == s or NULL == fn) return true; if (sig_file_open(s,fn)) return true; bool status; do { Filedata *f; status = sig_file_next(s,&f); if (not status) match_compare(s,f); } while (not sig_file_end(s)); sig_file_close(s); return false; }