1/* $NetBSD$ */ 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 7This file is part of groff. 8 9groff is free software; you can redistribute it and/or modify it under 10the terms of the GNU General Public License as published by the Free 11Software Foundation; either version 2, or (at your option) any later 12version. 13 14groff is distributed in the hope that it will be useful, but WITHOUT ANY 15WARRANTY; without even the implied warranty of MERCHANTABILITY or 16FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 17for more details. 18 19You should have received a copy of the GNU General Public License along 20with groff; see the file COPYING. If not, write to the Free Software 21Foundation, 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 40extern "C" { 41#endif 42 43char *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 55int 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 69extern "C" { 70#endif 71 72char *mapread(int fd, int nbytes) 73{ 74 errno = ENODEV; 75 return 0; 76} 77 78int 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