Add rahash2 -n to specify number of blocks instead of blocksize

This commit is contained in:
pancake 2013-02-28 09:50:59 +01:00
parent 0fa2a74ac5
commit b6b756521d

View File

@ -72,6 +72,8 @@ static int do_hash(const char *algo, RIO *io, int bsize, int rad) {
eprintf ("Invalid file size\n");
return 1;
}
if (bsize<0)
bsize = fsize / -bsize;
if (bsize == 0 || bsize > fsize)
bsize = fsize;
if (to == 0LL)
@ -162,11 +164,12 @@ static void algolist() {
int main(int argc, char **argv) {
const char *algo = "sha256"; /* default hashing algorithm */
int c, rad = 0, quit = 0, bsize = 0;
int c, rad = 0, quit = 0, bsize = 0, numblocks = 0;
RIO *io;
while ((c = getopt (argc, argv, "rva:s:b:Bhf:t:kL")) != -1) {
while ((c = getopt (argc, argv, "rva:s:b:nBhf:t:kL")) != -1) {
switch (c) {
case 'n': numblocks = 1; break;
case 'L': algolist (); return 0;
case 'r': rad = 1; break;
case 'k': rad = 2; break;
@ -206,19 +209,20 @@ int main(int argc, char **argv) {
return 0;
if (optind>=argc)
return do_help (1);
if (numblocks) {
bsize = -bsize;
} else if (bsize<0) {
eprintf ("rahash2: Invalid block size\n");
return 1;
}
io = r_io_new ();
if (r_file_is_directory (argv[optind])) {
eprintf ("Cannot hash directories\n");
eprintf ("rahash2: Cannot hash directories\n");
return 1;
}
// TODO: use mmap
if (!r_io_open (io, argv[optind], 0, 0)) {
eprintf ("Cannot open '%s'\n", argv[optind]);
return 1;
}
if (bsize<1) {
eprintf ("Invalid block size\n");
eprintf ("rahash2: Cannot open '%s'\n", argv[optind]);
return 1;
}
return do_hash (algo, io, bsize, rad);