mirror of
https://github.com/u-boot/u-boot.git
synced 2024-12-01 00:23:29 +08:00
sandbox: Close file after mmaping it
After opening pathname, we must close ifd once we are done with it.
Fixes: b9274095c2
("sandbox: Add a way to map a file into memory")
Signed-off-by: Sean Anderson <seanga2@gmail.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
2c61c0eb14
commit
f6d76e6878
@ -219,7 +219,7 @@ int os_map_file(const char *pathname, int os_flags, void **bufp, int *sizep)
|
|||||||
{
|
{
|
||||||
void *ptr;
|
void *ptr;
|
||||||
off_t size;
|
off_t size;
|
||||||
int ifd;
|
int ifd, ret = 0;
|
||||||
|
|
||||||
ifd = os_open(pathname, os_flags);
|
ifd = os_open(pathname, os_flags);
|
||||||
if (ifd < 0) {
|
if (ifd < 0) {
|
||||||
@ -229,23 +229,28 @@ int os_map_file(const char *pathname, int os_flags, void **bufp, int *sizep)
|
|||||||
size = os_filesize(ifd);
|
size = os_filesize(ifd);
|
||||||
if (size < 0) {
|
if (size < 0) {
|
||||||
printf("Cannot get file size of '%s'\n", pathname);
|
printf("Cannot get file size of '%s'\n", pathname);
|
||||||
return -EIO;
|
ret = -EIO;
|
||||||
|
goto out;
|
||||||
}
|
}
|
||||||
if ((unsigned long long)size > (unsigned long long)SIZE_MAX) {
|
if ((unsigned long long)size > (unsigned long long)SIZE_MAX) {
|
||||||
printf("File '%s' too large to map\n", pathname);
|
printf("File '%s' too large to map\n", pathname);
|
||||||
return -EIO;
|
ret = -EIO;
|
||||||
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
ptr = mmap(0, size, PROT_READ | PROT_WRITE, MAP_SHARED, ifd, 0);
|
ptr = mmap(0, size, PROT_READ | PROT_WRITE, MAP_SHARED, ifd, 0);
|
||||||
if (ptr == MAP_FAILED) {
|
if (ptr == MAP_FAILED) {
|
||||||
printf("Can't map file '%s': %s\n", pathname, strerror(errno));
|
printf("Can't map file '%s': %s\n", pathname, strerror(errno));
|
||||||
return -EPERM;
|
ret = -EPERM;
|
||||||
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
*bufp = ptr;
|
*bufp = ptr;
|
||||||
*sizep = size;
|
*sizep = size;
|
||||||
|
|
||||||
return 0;
|
out:
|
||||||
|
os_close(ifd);
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
int os_unmap(void *buf, int size)
|
int os_unmap(void *buf, int size)
|
||||||
|
Loading…
Reference in New Issue
Block a user