scripts: imx-image: Make in-place capable
Read in the source image completely before starting to write the output image. This makes it possible to pass the same file as input and output. Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
This commit is contained in:
parent
99b591a779
commit
71a2ad25b1
|
@ -666,7 +666,8 @@ int main(int argc, char *argv[])
|
|||
char *imagename = NULL;
|
||||
char *outfile = NULL;
|
||||
void *buf;
|
||||
size_t image_size = 0, load_size;
|
||||
size_t image_size = 0, load_size, insize;
|
||||
void *infile;
|
||||
struct stat s;
|
||||
int infd, outfd;
|
||||
int dcd_only = 0;
|
||||
|
@ -779,6 +780,24 @@ int main(int argc, char *argv[])
|
|||
exit(1);
|
||||
}
|
||||
|
||||
infd = open(imagename, O_RDONLY);
|
||||
if (infd < 0) {
|
||||
perror("open");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
ret = fstat(infd, &s);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
insize = s.st_size;
|
||||
infile = malloc(insize);
|
||||
if (!infile)
|
||||
exit(1);
|
||||
|
||||
xread(infd, infile, insize);
|
||||
close(infd);
|
||||
|
||||
outfd = open(outfile, O_WRONLY | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR);
|
||||
if (outfd < 0) {
|
||||
perror("open");
|
||||
|
@ -799,32 +818,14 @@ int main(int argc, char *argv[])
|
|||
}
|
||||
}
|
||||
|
||||
infd = open(imagename, O_RDONLY);
|
||||
if (infd < 0) {
|
||||
perror("open");
|
||||
ret = xwrite(outfd, infile, insize);
|
||||
if (ret) {
|
||||
perror("write");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
while (image_size) {
|
||||
now = image_size < 4096 ? image_size : 4096;
|
||||
|
||||
ret = xread(infd, buf, now);
|
||||
if (ret) {
|
||||
perror("read");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
ret = xwrite(outfd, buf, now);
|
||||
if (ret) {
|
||||
perror("write");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
image_size -= now;
|
||||
}
|
||||
|
||||
/* pad until next 4k boundary */
|
||||
now = 4096 - now;
|
||||
now = 4096 - (insize % 4096);
|
||||
if (prepare_sign && now) {
|
||||
memset(buf, 0x5a, now);
|
||||
|
||||
|
|
Loading…
Reference in New Issue