Serene Runtime 1.0.0-dev
C runtime for the Serene programming language
Loading...
Searching...
No Matches
srn_mmap.h File Reference
#include <stddef.h>
#include <stdio.h>
#include "serene/utils.h"
Include dependency graph for srn_mmap.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  srn_mmap_buffer_t
 Memory mapped buffer. More...

Macros

#define PMAP_WIN32   0
#define SRN_PROT_NONE   0x0
#define SRN_PROT_READ   0x1
#define SRN_PROT_WRITE   0x2
#define SRN_PROT_EXEC   0x4
#define SRN_MAP_FILE   0
#define SRN_MAP_SHARED   1
#define SRN_MAP_PRIVATE   2
#define SRN_MAP_TYPE   0xf
#define SRN_MAP_FIXED   0x10
#define SRN_MMAP_VALIDATE(out, len, prot, flags)

Typedefs

typedef struct srn_mmap_buffer_t srn_mmap_buffer_t
 Memory mapped buffer.

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)

Macro Definition Documentation

◆ PMAP_WIN32

#define PMAP_WIN32   0

Definition at line 30 of file srn_mmap.h.

◆ SRN_MAP_FILE

#define SRN_MAP_FILE   0

Definition at line 44 of file srn_mmap.h.

◆ SRN_MAP_FIXED

#define SRN_MAP_FIXED   0x10

Definition at line 48 of file srn_mmap.h.

◆ SRN_MAP_PRIVATE

#define SRN_MAP_PRIVATE   2

Definition at line 46 of file srn_mmap.h.

◆ SRN_MAP_SHARED

#define SRN_MAP_SHARED   1

Definition at line 45 of file srn_mmap.h.

◆ SRN_MAP_TYPE

#define SRN_MAP_TYPE   0xf

Definition at line 47 of file srn_mmap.h.

◆ SRN_MMAP_VALIDATE

#define SRN_MMAP_VALIDATE ( out,
len,
prot,
flags )
Value:
do { \
PANIC_IF( \
(out) == nullptr || (len) == 0, \
"mmap requires a non-null output buffer and a positive length" \
); \
PANIC_IF( \
!(((prot) & SRN_PROT_WRITE) || ((prot) & SRN_PROT_READ)), \
"mmap requires read or write protection" \
); \
PANIC_IF(((flags) & SRN_MAP_FIXED) != 0, "mmap does not support fixed mappings"); \
} while (0)
#define SRN_MAP_FIXED
Definition srn_mmap.h:48
#define SRN_PROT_WRITE
Definition srn_mmap.h:40
#define SRN_PROT_READ
Definition srn_mmap.h:39

Definition at line 68 of file srn_mmap.h.

68#define SRN_MMAP_VALIDATE(out, len, prot, flags) \
69 do { \
70 PANIC_IF( \
71 (out) == nullptr || (len) == 0, \
72 "mmap requires a non-null output buffer and a positive length" \
73 ); \
74 PANIC_IF( \
75 !(((prot) & SRN_PROT_WRITE) || ((prot) & SRN_PROT_READ)), \
76 "mmap requires read or write protection" \
77 ); \
78 PANIC_IF(((flags) & SRN_MAP_FIXED) != 0, "mmap does not support fixed mappings"); \
79 } while (0)

◆ SRN_PROT_EXEC

#define SRN_PROT_EXEC   0x4

Definition at line 41 of file srn_mmap.h.

◆ SRN_PROT_NONE

#define SRN_PROT_NONE   0x0

Definition at line 38 of file srn_mmap.h.

◆ SRN_PROT_READ

#define SRN_PROT_READ   0x1

Definition at line 39 of file srn_mmap.h.

◆ SRN_PROT_WRITE

#define SRN_PROT_WRITE   0x2

Definition at line 40 of file srn_mmap.h.

Typedef Documentation

◆ srn_mmap_buffer_t

typedef struct srn_mmap_buffer_t srn_mmap_buffer_t

Memory mapped buffer.

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 )
extern

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_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)
extern

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