diff options
-rw-r--r-- | Makefile | 5 | ||||
-rw-r--r-- | read.c | 12 | ||||
-rw-r--r-- | test-mmap.c | 9 |
3 files changed, 23 insertions, 3 deletions
@@ -108,6 +108,7 @@ SRCS = Makefile \ term.h \ term_ascii.c \ term_ps.c \ + test-mmap.c \ test-strlcat.c \ test-strlcpy.c \ tree.c \ @@ -382,6 +383,10 @@ config.h: config.h.pre config.h.post echo '#define HAVE_STRLCAT'; \ rm test-strlcat; \ fi; \ + if $(CC) $(CFLAGS) -Werror -o test-mmap test-mmap.c >> config.log 2>&1; then \ + echo '#define HAVE_MMAP'; \ + rm test-mmap; \ + fi; \ if $(CC) $(CFLAGS) -Werror -o test-strlcpy test-strlcpy.c >> config.log 2>&1; then \ echo '#define HAVE_STRLCPY'; \ rm test-strlcpy; \ @@ -19,8 +19,10 @@ #include "config.h" #endif -#include <sys/stat.h> -#include <sys/mman.h> +#ifdef HAVE_MMAP +# include <sys/stat.h> +# include <sys/mman.h> +#endif #include <assert.h> #include <ctype.h> @@ -529,19 +531,22 @@ pdesc(struct mparse *curp, const char *file, int fd) mparse_buf_r(curp, blk, 1); +#ifdef HAVE_MMAP if (with_mmap) munmap(blk.buf, blk.sz); else +#endif free(blk.buf); } static int read_whole_file(const char *file, int fd, struct buf *fb, int *with_mmap) { - struct stat st; size_t off; ssize_t ssz; +#ifdef HAVE_MMAP + struct stat st; if (-1 == fstat(fd, &st)) { perror(file); return(0); @@ -566,6 +571,7 @@ read_whole_file(const char *file, int fd, struct buf *fb, int *with_mmap) if (fb->buf != MAP_FAILED) return(1); } +#endif /* * If this isn't a regular file (like, say, stdin), then we must diff --git a/test-mmap.c b/test-mmap.c new file mode 100644 index 00000000..87596e3f --- /dev/null +++ b/test-mmap.c @@ -0,0 +1,9 @@ +#include <sys/mman.h> + +int +main(int argc, char **argv) +{ + + mmap(0, 0, PROT_READ, MAP_FILE|MAP_SHARED, -1, 0); + return 0; +} |