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