sandbox: Add a way to map a file into memory
It is useful to map a file into memory so that it can be accessed using simple pointers. Add a function to support this. Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
b4467fae06
commit
b9274095c2
@ -182,6 +182,35 @@ err:
|
||||
return ret;
|
||||
}
|
||||
|
||||
int os_map_file(const char *pathname, int os_flags, void **bufp, int *sizep)
|
||||
{
|
||||
void *ptr;
|
||||
int size;
|
||||
int ifd;
|
||||
|
||||
ifd = os_open(pathname, os_flags);
|
||||
if (ifd < 0) {
|
||||
printf("Cannot open file '%s'\n", pathname);
|
||||
return -EIO;
|
||||
}
|
||||
size = os_filesize(ifd);
|
||||
if (size < 0) {
|
||||
printf("Cannot get file size of '%s'\n", pathname);
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
ptr = mmap(0, size, PROT_READ | PROT_WRITE, MAP_SHARED, ifd, 0);
|
||||
if (ptr == MAP_FAILED) {
|
||||
printf("Can't map file '%s': %s\n", pathname, strerror(errno));
|
||||
return -EPERM;
|
||||
}
|
||||
|
||||
*bufp = ptr;
|
||||
*sizep = size;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Restore tty state when we exit */
|
||||
static struct termios orig_term;
|
||||
static bool term_setup;
|
||||
|
13
include/os.h
13
include/os.h
@ -406,6 +406,19 @@ int os_write_file(const char *name, const void *buf, int size);
|
||||
*/
|
||||
int os_read_file(const char *name, void **bufp, int *sizep);
|
||||
|
||||
/**
|
||||
* os_map_file() - Map a file from the host filesystem into memory
|
||||
*
|
||||
* This can be useful when to provide a backing store for an emulated device
|
||||
*
|
||||
* @pathname: File pathname to map
|
||||
* @os_flags: Flags, like OS_O_RDONLY, OS_O_RDWR
|
||||
* @bufp: Returns buffer containing the file
|
||||
* @sizep: Returns size of data
|
||||
* Return: 0 if OK, -ve on error
|
||||
*/
|
||||
int os_map_file(const char *pathname, int os_flags, void **bufp, int *sizep);
|
||||
|
||||
/*
|
||||
* os_find_text_base() - Find the text section in this running process
|
||||
*
|
||||
|
Loading…
Reference in New Issue
Block a user