From 46daa8d7421870474e44da6a2738415a2d2208dc Mon Sep 17 00:00:00 2001 From: Chris Want Date: Sun, 5 Mar 2006 14:58:56 +0000 Subject: [PATCH] It looks like Irix works alright with the /dev/zero trick for mmap(). I had to include fcntl.h for Irix to get symbol O_RDWR. --- intern/guardedalloc/intern/mallocn.c | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/intern/guardedalloc/intern/mallocn.c b/intern/guardedalloc/intern/mallocn.c index f3023b96445..6636e68b817 100644 --- a/intern/guardedalloc/intern/mallocn.c +++ b/intern/guardedalloc/intern/mallocn.c @@ -252,16 +252,29 @@ void *MEM_callocN(unsigned int len, const char *str) /* note; mmap returns zero'd memory */ void *MEM_mapallocN(unsigned int len, const char *str) { -#if defined(AMIGA) || defined(__BeOS) || defined(WIN32) || defined(__sgi) +#if defined(AMIGA) || defined(__BeOS) || defined(WIN32) return MEM_callocN(len, str); #else MemHead *memh; len = (len + 3 ) & ~3; /* allocate in units of 4 */ - memh= mmap(0, len+sizeof(MemHead)+sizeof(MemTail), - PROT_READ|PROT_WRITE, MAP_SHARED|MAP_ANON, -1, 0); - +#ifdef __sgi + { +#include + + int fd; + fd = open("/dev/zero", O_RDWR); + + memh= mmap(0, len+sizeof(MemHead)+sizeof(MemTail), + PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0); + close(fd); + } +#else + memh= mmap(0, len+sizeof(MemHead)+sizeof(MemTail), + PROT_READ|PROT_WRITE, MAP_SHARED|MAP_ANON, -1, 0); +#endif + if(memh!=(MemHead *)-1) { make_memhead_header(memh, len, str); memh->mmap= 1;