Blame view

tools/imagetool.c 2.33 KB
f86ed6a8d   Guilherme Maciel Ferreira   tools: moved code...
1
2
3
4
5
6
7
8
9
  /*
   * (C) Copyright 2013
   *
   * Written by Guilherme Maciel Ferreira <guilherme.maciel.ferreira@gmail.com>
   *
   * SPDX-License-Identifier:	GPL-2.0+
   */
  
  #include "imagetool.h"
0ca6691c2   Guilherme Maciel Ferreira   imagetool: move c...
10
  #include <image.h>
a93648d19   Guilherme Maciel Ferreira   imagetool: replac...
11
  struct image_type_params *imagetool_get_type(int type)
0ca6691c2   Guilherme Maciel Ferreira   imagetool: move c...
12
  {
1fddd7b63   Andreas Bießmann   tools/imagetool: ...
13
14
15
16
17
  	struct image_type_params **curr;
  	INIT_SECTION(image_type);
  
  	struct image_type_params **start = __start_image_type;
  	struct image_type_params **end = __stop_image_type;
0ca6691c2   Guilherme Maciel Ferreira   imagetool: move c...
18

a93648d19   Guilherme Maciel Ferreira   imagetool: replac...
19
  	for (curr = start; curr != end; curr++) {
1fddd7b63   Andreas Bießmann   tools/imagetool: ...
20
21
22
  		if ((*curr)->check_image_type) {
  			if (!(*curr)->check_image_type(type))
  				return *curr;
0ca6691c2   Guilherme Maciel Ferreira   imagetool: move c...
23
24
25
26
27
28
29
30
31
32
33
34
  		}
  	}
  	return NULL;
  }
  
  int imagetool_verify_print_header(
  	void *ptr,
  	struct stat *sbuf,
  	struct image_type_params *tparams,
  	struct image_tool_params *params)
  {
  	int retval = -1;
1fddd7b63   Andreas Bießmann   tools/imagetool: ...
35
36
  	struct image_type_params **curr;
  	INIT_SECTION(image_type);
0ca6691c2   Guilherme Maciel Ferreira   imagetool: move c...
37

1fddd7b63   Andreas Bießmann   tools/imagetool: ...
38
39
  	struct image_type_params **start = __start_image_type;
  	struct image_type_params **end = __stop_image_type;
a93648d19   Guilherme Maciel Ferreira   imagetool: replac...
40
41
  
  	for (curr = start; curr != end; curr++) {
1fddd7b63   Andreas Bießmann   tools/imagetool: ...
42
43
  		if ((*curr)->verify_header) {
  			retval = (*curr)->verify_header((unsigned char *)ptr,
0ca6691c2   Guilherme Maciel Ferreira   imagetool: move c...
44
45
46
47
48
49
50
  						     sbuf->st_size, params);
  
  			if (retval == 0) {
  				/*
  				 * Print the image information  if verify is
  				 * successful
  				 */
1fddd7b63   Andreas Bießmann   tools/imagetool: ...
51
52
  				if ((*curr)->print_header) {
  					(*curr)->print_header(ptr);
0ca6691c2   Guilherme Maciel Ferreira   imagetool: move c...
53
54
55
56
  				} else {
  					fprintf(stderr,
  						"%s: print_header undefined for %s
  ",
1fddd7b63   Andreas Bießmann   tools/imagetool: ...
57
  						params->cmdname, (*curr)->name);
0ca6691c2   Guilherme Maciel Ferreira   imagetool: move c...
58
59
60
61
62
63
64
65
  				}
  				break;
  			}
  		}
  	}
  
  	return retval;
  }
067d15607   Guilherme Maciel Ferreira   imagetool: make t...
66

67f946cd1   Guilherme Maciel Ferreira   dumpimage: replac...
67
  int imagetool_save_subimage(
067d15607   Guilherme Maciel Ferreira   imagetool: make t...
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
  	const char *file_name,
  	ulong file_data,
  	ulong file_len)
  {
  	int dfd;
  
  	dfd = open(file_name, O_RDWR | O_CREAT | O_TRUNC | O_BINARY,
  		   S_IRUSR | S_IWUSR);
  	if (dfd < 0) {
  		fprintf(stderr, "Can't open \"%s\": %s
  ",
  			file_name, strerror(errno));
  		return -1;
  	}
  
  	if (write(dfd, (void *)file_data, file_len) != (ssize_t)file_len) {
  		fprintf(stderr, "Write error on \"%s\": %s
  ",
  			file_name, strerror(errno));
  		close(dfd);
  		return -1;
  	}
  
  	close(dfd);
  
  	return 0;
  }
3837ce65b   Simon Glass   tools: Add a func...
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
  
  int imagetool_get_filesize(struct image_tool_params *params, const char *fname)
  {
  	struct stat sbuf;
  	int fd;
  
  	fd = open(fname, O_RDONLY | O_BINARY);
  	if (fd < 0) {
  		fprintf(stderr, "%s: Can't open %s: %s
  ",
  			params->cmdname, fname, strerror(errno));
  		return -1;
  	}
  
  	if (fstat(fd, &sbuf) < 0) {
  		fprintf(stderr, "%s: Can't stat %s: %s
  ",
  			params->cmdname, fname, strerror(errno));
b12a81c4c   Simon Glass   mkimage: Close th...
113
  		close(fd);
3837ce65b   Simon Glass   tools: Add a func...
114
115
116
117
118
119
  		return -1;
  	}
  	close(fd);
  
  	return sbuf.st_size;
  }