On Wed, 18 Aug 2021 21:40:31 -0600
Simon Glass <s...@chromium.org> wrote:

> 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 <s...@chromium.org>

> +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;
> +}

You need to close the file descriptor after mmapping.

Marek

Reply via email to