Blame view

tools/imagetool.c 2.75 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
  				if ((*curr)->print_header) {
bd6e14209   Simon Glass   mkimage: Add a qu...
52
53
  					if (!params->quiet)
  						(*curr)->print_header(ptr);
0ca6691c2   Guilherme Maciel Ferreira   imagetool: move c...
54
55
56
57
  				} else {
  					fprintf(stderr,
  						"%s: print_header undefined for %s
  ",
1fddd7b63   Andreas Bießmann   tools/imagetool: ...
58
  						params->cmdname, (*curr)->name);
0ca6691c2   Guilherme Maciel Ferreira   imagetool: move c...
59
60
61
62
63
64
65
66
  				}
  				break;
  			}
  		}
  	}
  
  	return retval;
  }
067d15607   Guilherme Maciel Ferreira   imagetool: make t...
67

67f946cd1   Guilherme Maciel Ferreira   dumpimage: replac...
68
  int imagetool_save_subimage(
067d15607   Guilherme Maciel Ferreira   imagetool: make t...
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
95
  	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...
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
  
  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...
114
  		close(fd);
3837ce65b   Simon Glass   tools: Add a func...
115
116
117
118
119
120
  		return -1;
  	}
  	close(fd);
  
  	return sbuf.st_size;
  }
5847084f6   Vagrant Cascadian   Respect SOURCE_DA...
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
  
  time_t imagetool_get_source_date(
  	 struct image_tool_params *params,
  	 time_t fallback)
  {
  	char *source_date_epoch = getenv("SOURCE_DATE_EPOCH");
  
  	if (source_date_epoch == NULL)
  		return fallback;
  
  	time_t time = (time_t) strtol(source_date_epoch, NULL, 10);
  
  	if (gmtime(&time) == NULL) {
  		fprintf(stderr, "%s: SOURCE_DATE_EPOCH is not valid
  ",
  			params->cmdname);
  		time = 0;
  	}
  
  	return time;
  }