Mercurial > mplayer.hg
view osdep/mmap_anon.c @ 28703:439de22fe1c0
r27801 Clarify screenw/screenh options, patch by Christian Ohm, chr.ohm gmx net.
r27872 Add a few more supported URL protocols
r27895 Fix typo in psy-rd x264 option description.
r27906 document x264's option subq=0, plus a bit of factoring and added details
r27973 add direct3d docs, ok'd by Guillaume
r27979 Make description of the option more clear
r28056 Add a note about some known issues with -vo sdl
r28095 Document missing vo_gl suboptions
r28096 Using rectangle=2 for vo_gl is probably a good idea nowadays.
r28126 Add support for writing PNG files with alpha channel in -vo png
author | kraymer |
---|---|
date | Thu, 26 Feb 2009 23:32:37 +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; }