-/**
- * Map a file into memory.
- *
- * \param path Name of the regular file to map.
- * \param open_mode Either \p O_RDONLY or \p O_RDWR.
- * \param obj On success, the mapping is returned here.
- *
- * \return Positive on success, negative on errors. Possible errors include: \p
- * E_FSTAT, any errors returned by para_open(), \p E_EMPTY, \p E_MMAP.
- *
- * \sa para_open(), mmap(2).
- */
-int mmap_full_file(const char *path, int open_mode, struct osl_object *obj)
-{
- int fd, ret, mmap_prot, mmap_flags;
- struct stat file_status;
-
- if (open_mode == O_RDONLY) {
- mmap_prot = PROT_READ;
- mmap_flags = MAP_PRIVATE;
- } else {
- mmap_prot = PROT_READ | PROT_WRITE;
- mmap_flags = MAP_SHARED;
- }
- ret = para_open(path, open_mode, 0);
- if (ret < 0)
- return ret;
- fd = ret;
- ret = -E_FSTAT;
- if (fstat(fd, &file_status) < 0)
- goto out;
- obj->size = file_status.st_size;
- ret = -E_EMPTY;
- PARA_DEBUG_LOG("%s: size %zu\n", path, obj->size);
- if (!obj->size)
- goto out;
- obj->data = mmap(NULL, obj->size, mmap_prot, mmap_flags, fd, 0);
- if (obj->data == MAP_FAILED) {
- obj->data = NULL;
- ret = -E_MMAP;
- goto out;
- }
- ret = 1;
-out:
- close(fd);
- return ret;
-}
-