mirror of
https://github.com/Stichting-MINIX-Research-Foundation/u-boot.git
synced 2025-09-10 12:39:22 -04:00
mkenvimage: Use mmap() when reading from a regular file
Fall back to read() if it fails. Signed-off-by: David Wagner <david.wagner@free-electrons.com> Acked-by: Mike Frysinger <vapier@gentoo.org>
This commit is contained in:
parent
48995b5a96
commit
6ee39f8055
@ -37,6 +37,7 @@
|
|||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
|
#include <sys/mman.h>
|
||||||
|
|
||||||
#include "compiler.h"
|
#include "compiler.h"
|
||||||
#include <u-boot/crc.h>
|
#include <u-boot/crc.h>
|
||||||
@ -208,13 +209,25 @@ int main(int argc, char **argv)
|
|||||||
}
|
}
|
||||||
|
|
||||||
filesize = txt_file_stat.st_size;
|
filesize = txt_file_stat.st_size;
|
||||||
/* Read the raw input file and transform it */
|
|
||||||
|
filebuf = mmap(NULL, sizeof(*envptr) * filesize, PROT_READ,
|
||||||
|
MAP_PRIVATE, txt_fd, 0);
|
||||||
|
if (filebuf == MAP_FAILED) {
|
||||||
|
fprintf(stderr, "mmap (%ld bytes) failed: %s\n",
|
||||||
|
sizeof(*envptr) * filesize,
|
||||||
|
strerror(errno));
|
||||||
|
fprintf(stderr, "Falling back to read()\n");
|
||||||
|
|
||||||
filebuf = malloc(sizeof(*envptr) * filesize);
|
filebuf = malloc(sizeof(*envptr) * filesize);
|
||||||
ret = read(txt_fd, filebuf, sizeof(*envptr) * filesize);
|
ret = read(txt_fd, filebuf, sizeof(*envptr) * filesize);
|
||||||
if (ret != sizeof(*envptr) * filesize) {
|
if (ret != sizeof(*envptr) * filesize) {
|
||||||
fprintf(stderr, "Can't read the whole input file\n");
|
fprintf(stderr, "Can't read the whole input file (%ld bytes): %s\n",
|
||||||
|
sizeof(*envptr) * filesize,
|
||||||
|
strerror(errno));
|
||||||
|
|
||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
ret = close(txt_fd);
|
ret = close(txt_fd);
|
||||||
}
|
}
|
||||||
/* The +1 is for the additionnal ending \0. See below. */
|
/* The +1 is for the additionnal ending \0. See below. */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user