コード例 #1
0
ファイル: digest.c プロジェクト: cpdesign/barebox
static int do_digest(char *algorithm, int argc, char *argv[])
{
	struct digest *d;
	int ret = 0;
	int i;
	unsigned char *hash;

	d = digest_get_by_name(algorithm);
	BUG_ON(!d);

	if (argc < 2)
		return COMMAND_ERROR_USAGE;

	hash = calloc(d->length, sizeof(unsigned char));
	if (!hash) {
		perror("calloc");
		return COMMAND_ERROR_USAGE;
	}

	argv++;
	while (*argv) {
		char *filename = "/dev/mem";
		ulong start = 0, size = ~0;

		/* arguments are either file, file+area or area */
		if (parse_area_spec(*argv, &start, &size)) {
			filename = *argv;
			if (argv[1] && !parse_area_spec(argv[1], &start, &size))
				argv++;
		}

		if (digest_file_window(d, filename, hash, start, size) < 0)
			ret = 1;

		for (i = 0; i < d->length; i++)
			printf("%02x", hash[i]);

		printf("  %s\t0x%08lx ... 0x%08lx\n", filename, start, start + size);

		argv++;
	}

	free(hash);

	return ret;
}
コード例 #2
0
ファイル: crc.c プロジェクト: RobertCNelson/barebox
static int do_crc(int argc, char *argv[])
{
	loff_t start = 0, size = ~0;
	ulong crc = 0, vcrc = 0, total = 0;
	char *filename = "/dev/mem";
#ifdef CONFIG_CMD_CRC_CMP
	char *vfilename = NULL;
#endif
	int opt, err = 0, filegiven = 0, verify = 0;

	while((opt = getopt(argc, argv, "f:F:v:V:")) > 0) {
		switch(opt) {
		case 'f':
			filename = optarg;
			filegiven = 1;
			break;
#ifdef CONFIG_CMD_CRC_CMP
		case 'F':
			verify = 1;
			vfilename = optarg;
			break;
#endif
		case 'v':
			verify = 1;
			vcrc = simple_strtoul(optarg, NULL, 0);
			break;
		case 'V':
			if (!crc_from_file(optarg, &vcrc))
				verify = 1;
			break;
		default:
			return COMMAND_ERROR_USAGE;
		}
	}

	if (!filegiven && optind == argc)
		return COMMAND_ERROR_USAGE;

	if (optind < argc) {
		if (parse_area_spec(argv[optind], &start, &size)) {
			printf("could not parse area description: %s\n", argv[optind]);
			return 1;
		}
	}

	if (file_crc(filename, start, size, &crc, &total) < 0)
		return 1;

	printf("CRC32 for %s 0x%08lx ... 0x%08lx ==> 0x%08lx",
			filename, (ulong)start, (ulong)start + total - 1, crc);

#ifdef CONFIG_CMD_CRC_CMP
	if (vfilename) {
		size = total;
		puts("\n");
		if (file_crc(vfilename, start, size, &vcrc, &total) < 0)
			return 1;
	}
#endif

	if (verify && crc != vcrc) {
		printf(" != 0x%08lx ** ERROR **", vcrc);
		err = 1;
	}

	printf("\n");

	return err;
}