1 /* $NetBSD: map.c,v 1.1.1.1 2016/01/13 18:41:48 christos Exp $ */ 2 3 /* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2004 4 Free Software Foundation, Inc. 5 Written by James Clark (jjc@jclark.com) 6 7 This file is part of groff. 8 9 groff is free software; you can redistribute it and/or modify it under 10 the terms of the GNU General Public License as published by the Free 11 Software Foundation; either version 2, or (at your option) any later 12 version. 13 14 groff is distributed in the hope that it will be useful, but WITHOUT ANY 15 WARRANTY; without even the implied warranty of MERCHANTABILITY or 16 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 17 for more details. 18 19 You should have received a copy of the GNU General Public License along 20 with groff; see the file COPYING. If not, write to the Free Software 21 Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ 22 23 #include <stdlib.h> 24 25 #ifdef HAVE_CONFIG_H 26 #include <config.h> 27 #endif 28 29 #ifdef HAVE_MMAP 30 31 #include <sys/types.h> 32 #include <sys/mman.h> 33 34 /* The Net-2 man pages says that a MAP_FILE flag is required. */ 35 #ifndef MAP_FILE 36 #define MAP_FILE 0 37 #endif 38 39 #ifdef __cplusplus 40 extern "C" { 41 #endif 42 43 char *mapread(int fd, int nbytes) 44 { 45 char *p = (char *)mmap((void *)0, (size_t)nbytes, PROT_READ, 46 MAP_FILE|MAP_PRIVATE, fd, (off_t)0); 47 if (p == (char *)-1) 48 return 0; 49 /* mmap() shouldn't return 0 since MAP_FIXED wasn't specified. */ 50 if (p == 0) 51 abort(); 52 return p; 53 } 54 55 int unmap(char *p, int len) 56 { 57 return munmap((void *)p, len); 58 } 59 60 #ifdef __cplusplus 61 } 62 #endif 63 64 #else /* not HAVE_MMAP */ 65 66 #include <errno.h> 67 68 #ifdef __cplusplus 69 extern "C" { 70 #endif 71 72 char *mapread(int fd, int nbytes) 73 { 74 errno = ENODEV; 75 return 0; 76 } 77 78 int unmap(char *p, int len) 79 { 80 errno = EINVAL; 81 return -1; 82 } 83 84 #ifdef __cplusplus 85 } 86 #endif 87 88 #endif /* not HAVE_MMAP */ 89