1*dbd550edSchristos #include "config.h"
2*dbd550edSchristos
3*dbd550edSchristos #include <sys/types.h>
4*dbd550edSchristos
5*dbd550edSchristos #include <stdlib.h>
6*dbd550edSchristos #include <unistd.h>
7*dbd550edSchristos
8*dbd550edSchristos /*
9*dbd550edSchristos * This function fakes mmap() by reading `len' bytes from the file descriptor
10*dbd550edSchristos * `fd' and returning a pointer to that memory. The "mapped" region can later
11*dbd550edSchristos * be deallocated with munmap().
12*dbd550edSchristos *
13*dbd550edSchristos * Note: ONLY reading is supported and only reading of the exact size of the
14*dbd550edSchristos * file will work.
15*dbd550edSchristos *
16*dbd550edSchristos * PUBLIC: #ifndef HAVE_MMAP
17*dbd550edSchristos * PUBLIC: char *mmap __P((char *, size_t, int, int, int, off_t));
18*dbd550edSchristos * PUBLIC: #endif
19*dbd550edSchristos */
20*dbd550edSchristos char *
mmap(char * addr,size_t len,int prot,int flags,int fd,off_t off)21*dbd550edSchristos mmap(char *addr, size_t len, int prot, int flags, int fd, off_t off)
22*dbd550edSchristos {
23*dbd550edSchristos char *ptr;
24*dbd550edSchristos
25*dbd550edSchristos if ((ptr = (char *)malloc(len)) == 0)
26*dbd550edSchristos return ((char *)-1);
27*dbd550edSchristos if (read(fd, ptr, len) < 0) {
28*dbd550edSchristos free(ptr);
29*dbd550edSchristos return ((char *)-1);
30*dbd550edSchristos }
31*dbd550edSchristos return (ptr);
32*dbd550edSchristos }
33*dbd550edSchristos
34*dbd550edSchristos /*
35*dbd550edSchristos * PUBLIC: #ifndef HAVE_MMAP
36*dbd550edSchristos * PUBLIC: int munmap __P((char *, size_t));
37*dbd550edSchristos * PUBLIC: #endif
38*dbd550edSchristos */
39*dbd550edSchristos int
munmap(char * addr,size_t len)40*dbd550edSchristos munmap(char *addr, size_t len)
41*dbd550edSchristos {
42*dbd550edSchristos free(addr);
43*dbd550edSchristos return (0);
44*dbd550edSchristos }
45