1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
|
// $Id: engine.c 78 2009-07-11 20:17:05Z jessekornblum $
#include "main.h"
#define MAX_STATUS_MSG 78
int hash_file(state *s, TCHAR *fn)
{
size_t fn_length;
char *sum;
TCHAR *my_filename, *msg;
FILE *handle;
handle = _tfopen(fn,_TEXT("rb"));
if (NULL == handle)
{
print_error_unicode(s,fn,"%s", strerror(errno));
return TRUE;
}
if ((sum = (char *)malloc(sizeof(char) * FUZZY_MAX_RESULT)) == NULL)
{
fclose(handle);
print_error_unicode(s,fn,"%s", strerror(errno));
return TRUE;
}
if ((msg = (TCHAR *)malloc(sizeof(TCHAR) * (MAX_STATUS_MSG + 2))) == NULL)
{
free(sum);
fclose(handle);
print_error_unicode(s,fn,"%s", strerror(errno));
return TRUE;
}
if (MODE(mode_verbose))
{
fn_length = _tcslen(fn);
if (fn_length > MAX_STATUS_MSG)
{
// We have to make a duplicate of the string to call basename on it
// We need the original name for the output later on
my_filename = _tcsdup(fn);
my_basename(my_filename);
}
else
my_filename = fn;
_sntprintf(msg,
MAX_STATUS_MSG-1,
_TEXT("Hashing: %s%s"),
my_filename,
_TEXT(BLANK_LINE));
_ftprintf(stderr,_TEXT("%s\r"), msg);
if (fn_length > MAX_STATUS_MSG)
free(my_filename);
}
fuzzy_hash_file(handle,sum);
prepare_filename(s,fn);
if (MODE(mode_match_pretty))
{
if (match_add(s,NULL,fn,sum))
print_error_unicode(s,fn,"Unable to add hash to set of known hashes");
}
else if (MODE(mode_match) || MODE(mode_directory))
{
match_compare(s,NULL,fn,sum);
if (MODE(mode_directory))
if (match_add(s,NULL,fn,sum))
print_error_unicode(s,fn,"Unable to add hash to set of known hashes");
}
else
{
if (s->first_file_processed)
{
printf ("%s%s", OUTPUT_FILE_HEADER,NEWLINE);
s->first_file_processed = FALSE;
}
printf ("%s,\"", sum);
display_filename(stdout,fn);
print_status("\"");
}
fclose(handle);
free(sum);
free(msg);
return FALSE;
}
|