 50c817e0c0
			
		
	
	50c817e0c0
	
	
	
		
			
			Since we're going to have multiple hash algorithms to test, it makes sense to share as much of the test code as possible. Convert the sha1 helper for the test-tool to be generic and move it out into its own module. This will allow us to share most of this code with our NewHash implementation. Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
		
			
				
	
	
		
			59 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			59 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| #include "test-tool.h"
 | |
| #include "cache.h"
 | |
| 
 | |
| int cmd_hash_impl(int ac, const char **av, int algo)
 | |
| {
 | |
| 	git_hash_ctx ctx;
 | |
| 	unsigned char hash[GIT_MAX_HEXSZ];
 | |
| 	unsigned bufsz = 8192;
 | |
| 	int binary = 0;
 | |
| 	char *buffer;
 | |
| 	const struct git_hash_algo *algop = &hash_algos[algo];
 | |
| 
 | |
| 	if (ac == 2) {
 | |
| 		if (!strcmp(av[1], "-b"))
 | |
| 			binary = 1;
 | |
| 		else
 | |
| 			bufsz = strtoul(av[1], NULL, 10) * 1024 * 1024;
 | |
| 	}
 | |
| 
 | |
| 	if (!bufsz)
 | |
| 		bufsz = 8192;
 | |
| 
 | |
| 	while ((buffer = malloc(bufsz)) == NULL) {
 | |
| 		fprintf(stderr, "bufsz %u is too big, halving...\n", bufsz);
 | |
| 		bufsz /= 2;
 | |
| 		if (bufsz < 1024)
 | |
| 			die("OOPS");
 | |
| 	}
 | |
| 
 | |
| 	algop->init_fn(&ctx);
 | |
| 
 | |
| 	while (1) {
 | |
| 		ssize_t sz, this_sz;
 | |
| 		char *cp = buffer;
 | |
| 		unsigned room = bufsz;
 | |
| 		this_sz = 0;
 | |
| 		while (room) {
 | |
| 			sz = xread(0, cp, room);
 | |
| 			if (sz == 0)
 | |
| 				break;
 | |
| 			if (sz < 0)
 | |
| 				die_errno("test-hash");
 | |
| 			this_sz += sz;
 | |
| 			cp += sz;
 | |
| 			room -= sz;
 | |
| 		}
 | |
| 		if (this_sz == 0)
 | |
| 			break;
 | |
| 		algop->update_fn(&ctx, buffer, this_sz);
 | |
| 	}
 | |
| 	algop->final_fn(hash, &ctx);
 | |
| 
 | |
| 	if (binary)
 | |
| 		fwrite(hash, 1, algop->rawsz, stdout);
 | |
| 	else
 | |
| 		puts(hash_to_hex_algop(hash, algop));
 | |
| 	exit(0);
 | |
| }
 |