[PATCH 2/2] scripts: imx-image: Make in-place capable
Sascha Hauer
s.hauer at pengutronix.de
Thu Jul 16 00:48:46 PDT 2015
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 at pengutronix.de>
---
scripts/imx/imx-image.c | 47 ++++++++++++++++++++++++-----------------------
1 file changed, 24 insertions(+), 23 deletions(-)
diff --git a/scripts/imx/imx-image.c b/scripts/imx/imx-image.c
index f0e8ca3..e8d9dbf 100644
--- a/scripts/imx/imx-image.c
+++ b/scripts/imx/imx-image.c
@@ -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);
--
2.1.4
More information about the barebox
mailing list