blob: c6e7dae152d5600cfcbf3516fa26fe03b8674ac9 [file] [log] [blame]
#include <sys/mman.h>
#include <string.h>
#ifdef __cplusplus
extern "C" {
#endif
#if SB_API_VERSION < 16
#include "starboard/memory.h"
static SbMemoryMapFlags ToSbMemoryMapFlags(int prot) {
SbMemoryMapFlags sb_prot = kSbMemoryMapProtectReserved;
if (prot & PROT_READ) {
sb_prot |= kSbMemoryMapProtectRead;
}
if (prot & PROT_WRITE) {
sb_prot |= kSbMemoryMapProtectWrite;
}
#if SB_CAN(MAP_EXECUTABLE_MEMORY)
if (prot & PROT_EXEC) {
sb_prot |= kSbMemoryMapProtectExec;
}
#endif
return sb_prot;
}
void *mmap (void* addr, size_t len, int prot, int flags, int fd, off_t off) {
if (addr != NULL) {
return MAP_FAILED;
}
if (fd != -1) {
return MAP_FAILED;
}
void*p = SbMemoryMap(len , ToSbMemoryMapFlags(prot), "musl allocation");
if (!p) {
return MAP_FAILED;
}
return p;
}
int munmap (void* addr, size_t len) {
if (SbMemoryUnmap(addr, len)) {
return 0;
}
return -1;
}
int mprotect (void* addr, size_t len, int prot) {
if (SbMemoryProtect(addr, len, ToSbMemoryMapFlags(prot))) {
return 0;
}
return -1;
}
int msync (void * addr, size_t len, int flags) {
SbMemoryFlush(addr, len);
return 0;
}
#endif // SB_API_VERSION < 16