version 1.15, 1994/02/15 22:51:23 |
version 1.16, 1994/03/28 02:11:53 |
|
|
#include <sys/mman.h> |
#include <sys/mman.h> |
#ifndef BSD |
#ifndef BSD |
#define MAP_COPY MAP_PRIVATE |
#define MAP_COPY MAP_PRIVATE |
#define MAP_FILE 0 |
|
#define MAP_ANON 0 |
#define MAP_ANON 0 |
#endif |
#endif |
#include <fcntl.h> |
#include <fcntl.h> |
|
|
|
|
if ((addr = mmap(0, hdr.a_text + hdr.a_data, |
if ((addr = mmap(0, hdr.a_text + hdr.a_data, |
PROT_READ|PROT_EXEC, |
PROT_READ|PROT_EXEC, |
MAP_FILE|MAP_COPY, fd, 0)) == (caddr_t)-1) { |
MAP_COPY, fd, 0)) == (caddr_t)-1) { |
(void)close(fd); |
(void)close(fd); |
return NULL; |
return NULL; |
} |
} |
|
|
if (mmap(addr + hdr.a_text, hdr.a_data, |
if (mmap(addr + hdr.a_text, hdr.a_data, |
PROT_READ|PROT_WRITE|PROT_EXEC, |
PROT_READ|PROT_WRITE|PROT_EXEC, |
MAP_FILE|MAP_FIXED|MAP_COPY, |
MAP_FIXED|MAP_COPY, |
fd, hdr.a_text) == (caddr_t)-1) { |
fd, hdr.a_text) == (caddr_t)-1) { |
(void)close(fd); |
(void)close(fd); |
return NULL; |
return NULL; |
|
|
} |
} |
|
|
msize = PAGSIZ; |
msize = PAGSIZ; |
addr = mmap(0, msize, PROT_READ, MAP_FILE|MAP_COPY, fd, 0); |
addr = mmap(0, msize, PROT_READ, MAP_COPY, fd, 0); |
|
|
if (addr == (caddr_t)-1) { |
if (addr == (caddr_t)-1) { |
hheader = (struct hints_header *)-1; |
hheader = (struct hints_header *)-1; |
|
|
|
|
if (hheader->hh_ehints > msize) { |
if (hheader->hh_ehints > msize) { |
if (mmap(addr+msize, hheader->hh_ehints - msize, |
if (mmap(addr+msize, hheader->hh_ehints - msize, |
PROT_READ, MAP_FILE|MAP_COPY|MAP_FIXED, |
PROT_READ, MAP_COPY|MAP_FIXED, |
fd, msize) != (caddr_t)(addr+msize)) { |
fd, msize) != (caddr_t)(addr+msize)) { |
|
|
munmap((caddr_t)hheader, msize); |
munmap((caddr_t)hheader, msize); |