mirror of https://github.com/OpenIPC/firmware.git
				
				
				
			
		
			
				
	
	
		
			42 lines
		
	
	
		
			1004 B
		
	
	
	
		
			Diff
		
	
	
			
		
		
	
	
			42 lines
		
	
	
		
			1004 B
		
	
	
	
		
			Diff
		
	
	
| --- a/buffer.c
 | |
| +++ b/buffer.c
 | |
| @@ -63,6 +63,9 @@
 | |
|  #include <sys/stat.h>
 | |
|  #endif
 | |
|  
 | |
| +#if defined(BROKEN_MMAP)
 | |
| +#include <sys/syscall.h>
 | |
| +#endif
 | |
|  
 | |
|  #include <errno.h>
 | |
|  #include <stdio.h>
 | |
| @@ -2977,6 +2980,12 @@
 | |
|  	return result;
 | |
|  }
 | |
|  
 | |
| +#if defined(BROKEN_MMAP)
 | |
| +static void *mmap_ev(void *start, size_t len, int prot, int flags, int fd, off_t off) {
 | |
| +	return (void *)syscall(SYS_mmap2, start, len, prot, flags, fd, off >> 12);
 | |
| +}
 | |
| +#endif
 | |
| +
 | |
|  /* TODO(niels): we may want to add to automagically convert to mmap, in
 | |
|   * case evbuffer_remove() or evbuffer_pullup() are being used.
 | |
|   */
 | |
| @@ -3080,11 +3089,15 @@
 | |
|  			offset_leftover = offset % page_size;
 | |
|  			offset_rounded = offset - offset_leftover;
 | |
|  		}
 | |
| +#if defined(BROKEN_MMAP)
 | |
| + 		mapped = mmap_ev(NULL, length + offset_leftover,
 | |
| +#else
 | |
|  #if defined(EVENT__HAVE_MMAP64)
 | |
|  		mapped = mmap64(NULL, length + offset_leftover,
 | |
|  #else
 | |
|  		mapped = mmap(NULL, length + offset_leftover,
 | |
|  #endif
 | |
| +#endif
 | |
|  		    PROT_READ,
 | |
|  #ifdef MAP_NOCACHE
 | |
|  		    MAP_NOCACHE | /* ??? */
 |