source: git/omalloc/omMmap.c @ 8291be

spielwiese
Last change on this file since 8291be was 341696, checked in by Hans Schönemann <hannes@…>, 14 years ago
Adding Id property to all files git-svn-id: file:///usr/local/Singular/svn/trunk@12231 2c84dea3-7e68-4137-9b89-c4e89433aadc
  • Property mode set to 100644
File size: 1.1 KB
Line 
1/*******************************************************************
2 *  File:    omMmap.c
3 *  Purpose: implementing valloc via mmap
4 *  Author:  obachman (Olaf Bachmann)
5 *  Created: 11/99
6 *  Version: $Id$
7 *******************************************************************/
8#include <unistd.h>
9#include <fcntl.h>
10#include <sys/mman.h>
11
12#if !defined(MAP_ANONYMOUS) && defined(MAP_ANON)
13#define MAP_ANONYMOUS MAP_ANON
14#endif
15
16static void* omVallocMmap(size_t size)
17{
18  void* addr;
19#ifndef MAP_ANONYMOUS
20  static int fd = -1;
21#endif
22
23#ifdef MAP_ANONYMOUS
24#ifndef __CYGWIN__
25  /* under cygwin, MAP_PRIVATE|MAP_ANONYMOUS fails */
26  addr = mmap(0, size, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0);
27#else
28  /* however, the following works */
29  addr = mmap(0, size, PROT_READ|PROT_WRITE, MAP_PRIVATE, -1, 0);
30#endif
31#else /* !MAP_ANONYMOUS */
32  if (fd < 0)
33  {
34    fd = open("/dev/zero", O_RDWR);
35    if (fd < 0) return NULL;
36  }
37  addr = mmap(0, size, PROT_READ|PROT_WRITE, MAP_PRIVATE, fd, 0);
38#endif
39
40  if (addr == (void*) -1) return NULL;
41  return addr;
42}
43
44static int omVfreeMmap(void* addr, size_t size)
45{
46  return munmap(addr, size);
47}
Note: See TracBrowser for help on using the repository browser.