#include #include #include #include #include #include #include #include #include "map.h" struct map *open_map(const char *fname, bool *isdir) { if (isdir != NULL) *isdir = false; 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 projecteren in geheugen\n"); if (isdir != NULL) *isdir = S_ISDIR(sb.st_mode); return NULL; } struct map *res = calloc(1, sizeof(struct map)); res->addr = addr; res->end = addr + sb.st_size; 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); }