summaryrefslogtreecommitdiffstats
path: root/commands/iminfo.c
blob: 2fde9bc09c48d4ee85d487a60c8f0552d72d3e4d (plain)
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
#include <common.h>
#include <command.h>
#include <image.h>
#include <fs.h>
#include <malloc.h>
#include <fcntl.h>
#include <errno.h>

static int image_info(image_header_t *hdr)
{
	u32 len, checksum;

	if (image_get_magic(hdr) != IH_MAGIC) {
		puts ("   Bad Magic Number\n");
		return 1;
	}

	len = image_get_header_size();

	checksum = image_get_hcrc(hdr);
	hdr->ih_hcrc = 0;

	if (crc32 (0, hdr, len) != checksum) {
		puts ("   Bad Header Checksum\n");
		return 1;
	}

	image_print_contents(hdr, NULL);

	return 0;
}

static int do_iminfo(struct command *cmdtp, int argc, char *argv[])
{
	int rcode = 1;
	int fd;
	int ret;
	image_header_t hdr;

	if (argc != 2)
		return COMMAND_ERROR_USAGE;

	fd = open(argv[1], O_RDONLY);
	if (fd < 0) {
		perror("open");
		return 1;
	}

	ret = read(fd, &hdr, sizeof(image_header_t));
	if (ret != sizeof(image_header_t))
		goto err_out;

	printf("Image at %s:\n", argv[1]);
	image_info(&hdr);

err_out:
	close(fd);

	return rcode;
}

BAREBOX_CMD_HELP_START(iminfo)
BAREBOX_CMD_HELP_USAGE("iminfo\n")
BAREBOX_CMD_HELP_SHORT("Print header information for an application image.\n")
BAREBOX_CMD_HELP_END

BAREBOX_CMD_START(iminfo)
	.cmd		= do_iminfo,
	.usage		= "print header information for an application image",
	BAREBOX_CMD_HELP(cmd_iminfo_help)
BAREBOX_CMD_END