Serene Runtime 1.0.0-dev
C runtime for the Serene programming language
Loading...
Searching...
No Matches
srn_mmap.c File Reference
#include "serene/utils/srn_mmap.h"
#include <sys/mman.h>
#include <unistd.h>
#include "serene/rt/context.h"
#include "serene/rt/errors.h"
Include dependency graph for srn_mmap.c:

Go to the source code of this file.

Functions

srn_error_tsrn_mmap (srn_context_t *ctx, srn_mmap_buffer_t *out, size_t len, int prot, int flags, int fd, off64_t offset)
int srn_munmap (srn_mmap_buffer_t *map)

Function Documentation

◆ srn_mmap()

srn_error_t * srn_mmap ( srn_context_t * ctx,
srn_mmap_buffer_t * out,
size_t len,
int prot,
int flags,
int fd,
off64_t offset )

Definition at line 30 of file srn_mmap.c.

33 {
34 int mprot = PROT_READ;
35 int mflag = 0;
36
37 SRN_MMAP_VALIDATE(out, len, prot, flags);
38
39 out->data = nullptr;
40 out->len = 0;
41
42 if (prot & SRN_PROT_WRITE) {
43 mprot |= PROT_WRITE;
44 }
45
46 if ((flags & SRN_MAP_TYPE) == SRN_MAP_SHARED) {
47 mflag = MAP_SHARED;
48 } else if ((flags & SRN_MAP_TYPE) == SRN_MAP_PRIVATE) {
49 mflag = MAP_PRIVATE;
50 } else {
51 mflag = MAP_SHARED;
52 }
53
54 out->data = mmap(NULL, len, mprot, mflag, fd, offset);
55
56 if (!out->data || out->data == MAP_FAILED) {
57 auto err = ERR(ctx, MEMORY_MAP_FAILED, "failed to mmap. Could not write data");
58 return err;
59 }
60
61 out->len = len;
62
63 return nullptr;
64}
@ MEMORY_MAP_FAILED
Definition errors.h:138
#define ERR(ctx, err, msg)
Definition errors.h:170
#define SRN_MAP_PRIVATE
Definition srn_mmap.h:46
#define SRN_PROT_WRITE
Definition srn_mmap.h:40
#define SRN_MAP_SHARED
Definition srn_mmap.h:45
#define SRN_MAP_TYPE
Definition srn_mmap.h:47
#define SRN_MMAP_VALIDATE(out, len, prot, flags)
Definition srn_mmap.h:68
void * data
data bytes
Definition srn_mmap.h:58
size_t len
data length
Definition srn_mmap.h:60

◆ srn_munmap()

int srn_munmap ( srn_mmap_buffer_t * map)

Definition at line 66 of file srn_mmap.c.

66 {
67 PANIC_IF_NULL(map);
68 munmap(map->data, map->len);
69 map->data = NULL;
70 map->len = 0;
71
72 return 0;
73}
#define PANIC_IF_NULL(ptr)
Definition utils.h:66