Mercurial > mplayer.hg
view osdep/mmap_anon.c @ 24824:70a64a5a85c3
r24740: misc roff fixes
r24746: document filter -vf ow: Overcomplete Wavelet denoiser.
r24772: DirectShow based tv:// driver for win32
r24783: Consistently set NOTE: in italics.
r24784: small grammar fix
r24785: Add -lavfdopts cryptokey
r24807: Docs update: -ao openal handles more than one channels since some time already
r24808: Add a space behind openal to get minimum length of 7
r24809: Replace Polyp- by PulseAudio output.
r24820: Clarify that -vo gl bicubic filtering is B-spline, not polynomial
r24837: Spelling, vf_ow parameters are optional.
r24841: type fix: there was a 'not' too much
author | voroshil |
---|---|
date | Thu, 25 Oct 2007 17:37:49 +0000 |
parents | 10f268ec0d87 |
children | 5cfef41a1771 |
line wrap: on
line source
/** * \file mmap_anon.c * \brief Provide a compatible anonymous space mapping function */ #include "config.h" #include <stdio.h> #include <unistd.h> #include <fcntl.h> #include <sys/mman.h> #if defined(MAP_ANON) && !defined(MAP_ANONYMOUS) #define MAP_ANONYMOUS MAP_ANON #endif /* * mmap() anonymous space, depending on the system's mmap() style. On systems * that use the /dev/zero mapping idiom, zerofd will be set to the file descriptor * of the opened /dev/zero. */ /** * \brief mmap() anonymous space, depending on the system's mmap() style. On systems * that use the /dev/zero mapping idiom, zerofd will be set to the file descriptor * of the opened /dev/zero. * * \param addr address to map at. * \param len number of bytes from addr to be mapped. * \param prot protections (region accessibility). * \param flags specifies the type of the mapped object. * \param offset start mapping at byte offset. * \param zerofd * \return a pointer to the mapped region upon successful completion, -1 otherwise. */ void *mmap_anon(void *addr, size_t len, int prot, int flags, off_t offset) { void *result; /* From loader/ext.c: * "Linux EINVAL's on us if we don't pass MAP_PRIVATE to an anon mmap" * Therefore we preserve the same behavior on all platforms, ie. no * shared mappings of anon space (if the concepts are supported). */ #if defined(MAP_SHARED) && defined(MAP_PRIVATE) flags = (flags & ~MAP_SHARED) | MAP_PRIVATE; #endif /* defined(MAP_SHARED) && defined(MAP_PRIVATE) */ #ifdef MAP_ANONYMOUS /* BSD-style anonymous mapping */ result = mmap(addr, len, prot, flags | MAP_ANONYMOUS, -1, offset); #else /* SysV-style anonymous mapping */ int fd; fd = open("/dev/zero", O_RDWR); if(fd < 0){ perror( "Cannot open /dev/zero for READ+WRITE. Check permissions! error: "); return NULL; } result = mmap(addr, len, prot, flags, fd, offset); close(fd); #endif /* MAP_ANONYMOUS */ return result; }