[U-Boot] [PATCHv2 6/8] mkenvimage: Use mmap() when reading from a regular file
David Wagner
david.wagner at free-electrons.com
Thu Jan 5 19:44:57 CET 2012
Signed-off-by: David Wagner <david.wagner at free-electrons.com>
---
tools/mkenvimage.c | 15 +++++++++------
1 files changed, 9 insertions(+), 6 deletions(-)
diff --git a/tools/mkenvimage.c b/tools/mkenvimage.c
index 6db2b21..58f1d0b 100644
--- a/tools/mkenvimage.c
+++ b/tools/mkenvimage.c
@@ -38,6 +38,7 @@
#include "compiler.h"
#include <sys/types.h>
#include <sys/stat.h>
+#include <sys/mman.h>
#include "u-boot/crc.h"
#include <version.h>
@@ -209,14 +210,16 @@ int main(int argc, char **argv)
}
filesize = txt_file_stat.st_size;
- /* Read the raw input file and transform it */
- filebuf = malloc(sizeof(*envptr) * filesize);
- ret = read(txt_fd, filebuf, sizeof(*envptr) * filesize);
- if (ret != sizeof(*envptr) * filesize) {
- fprintf(stderr, "Can't read the whole input file\n");
+
+ filebuf = mmap(NULL, sizeof(*envptr) * filesize, PROT_READ,
+ MAP_PRIVATE, txt_fd, 0);
+ ret = close(txt_fd);
+ if (filebuf == MAP_FAILED) {
+ fprintf(stderr, "mmap (%ld bytes) failed: %s\n",
+ sizeof(*envptr) * filesize,
+ strerror(errno));
return EXIT_FAILURE;
}
- ret = close(txt_fd);
}
/* The +1 is for the additionnal ending \0. See below. */
if (filesize + 1 > envsize) {
--
1.7.5.4
More information about the U-Boot
mailing list