cen64/os/posix/rom_file.c
2016-01-24 21:58:15 -05:00

47 lines
1 KiB
C

//
// os/unix/rom_file.c
//
// Functions for mapping ROM images into the address space.
//
// This file is subject to the terms and conditions defined in
// 'LICENSE', which is part of this source code package.
//
#include "rom_file.h"
#include <fcntl.h>
#include <stddef.h>
#include <sys/mman.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
// Unmaps a ROM image from the host address space.
int close_rom_file(const struct rom_file *file) {
return munmap(file->ptr, file->size);
}
// Maps a ROM into the host address space, returns a pointer.
int open_rom_file(const char *path, struct rom_file *file) {
struct stat sb;
void *ptr;
int fd;
// Open the file for read only.
if ((fd = open(path, O_RDONLY)) == -1)
return -1;
// Get the file's size, map it into the address space.
if (fstat(fd, &sb) == -1 || (ptr = mmap(NULL,
sb.st_size, PROT_READ, MAP_PRIVATE, fd, 0)) == MAP_FAILED) {
close(fd);
return -1;
}
file->ptr = ptr;
file->size = sb.st_size;
file->fd = fd;
return 0;
}