From 582a7567c8004eab1257aae29b96804425f8ee3d Mon Sep 17 00:00:00 2001 From: Lieuwe Rooijakkers Date: Sat, 13 Jul 2024 22:07:45 +0200 Subject: shared code for kat --- src/util/map.c | 39 +++++++++++++++++++++++++++++++++++++++ src/util/map.h | 10 ++++++++++ 2 files changed, 49 insertions(+) create mode 100644 src/util/map.c create mode 100644 src/util/map.h (limited to 'src/util') diff --git a/src/util/map.c b/src/util/map.c new file mode 100644 index 0000000..db691d3 --- /dev/null +++ b/src/util/map.c @@ -0,0 +1,39 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +#include "map.h" + +struct map *open_map(const char *fname) { + int fd = open(fname, O_RDONLY); + + struct stat sb; + if (fstat(fd, &sb) == -1) { + fprintf(stderr, "Kon bestand niet lezen\n"); + return NULL; + } + + char *addr = mmap(NULL, sb.st_size, PROT_READ, MAP_SHARED, fd, 0); + if (addr == MAP_FAILED) { + fprintf(stderr, "Kon bestand niet kaarten\n"); + return NULL; + } + + struct map *res = calloc(1, sizeof(struct map)); + + res->addr = addr; + res->sb = sb; + res->fd = fd; + return res; +} + +void close_map(struct map *m) { + munmap(m->addr, m->sb.st_size); + close(m->fd); + free(m); +} diff --git a/src/util/map.h b/src/util/map.h new file mode 100644 index 0000000..232720f --- /dev/null +++ b/src/util/map.h @@ -0,0 +1,10 @@ +#include + +struct map { + char *addr; + struct stat sb; + int fd; +}; + +struct map *open_map(const char *fname); +void close_map(struct map *m); -- cgit v1.2.3-70-g09d2