Mercurial > sdl-ios-xcode
diff src/video/fbcon/SDL_fbvideo.c @ 3917:8a3a0f1179f3 SDL-1.2
Patched fbcon to compile on newer Linux kernels that don't #define PAGE_SIZE,
since a memory page's size may vary on various architectures and kernel
configurations.
Will use getpagesize() if it exists, the PAGE_SIZE #define from older kernels
if that doesn't, and #error out if that's not there either...but it's
probably 4096 in that case. We may revisit this.
Fixes Bugzilla #392.
author | Ryan C. Gordon <icculus@icculus.org> |
---|---|
date | Thu, 15 Feb 2007 23:50:45 +0000 |
parents | 6987e947c77a |
children | 0dd8bdf173e2 |
line wrap: on
line diff
--- a/src/video/fbcon/SDL_fbvideo.c Thu Feb 15 11:06:22 2007 +0000 +++ b/src/video/fbcon/SDL_fbvideo.c Thu Feb 15 23:50:45 2007 +0000 @@ -149,6 +149,19 @@ struct fb_var_screeninfo *vinfo); static void FB_RestorePalette(_THIS); +static int SDL_getpagesize(void) +{ +#ifdef HAVE_GETPAGESIZE + return getpagesize(); +#elif defined(PAGE_SIZE) + return PAGE_SIZE; +#else +#error Can not determine system page size. + return 4096; /* this is what it USED to be in Linux... */ +#endif +} + + /* Small wrapper for mmap() so we can play nicely with no-mmu hosts * (non-mmu hosts disallow the MAP_SHARED flag) */ @@ -466,6 +479,7 @@ static int FB_VideoInit(_THIS, SDL_PixelFormat *vformat) { + const int pagesize = SDL_getpagesize(); struct fb_fix_screeninfo finfo; struct fb_var_screeninfo vinfo; int i, j; @@ -547,7 +561,7 @@ /* Memory map the device, compensating for buggy PPC mmap() */ mapped_offset = (((long)finfo.smem_start) - - (((long)finfo.smem_start)&~(PAGE_SIZE-1))); + (((long)finfo.smem_start)&~(pagesize-1))); mapped_memlen = finfo.smem_len+mapped_offset; mapped_mem = do_mmap(NULL, mapped_memlen, PROT_READ|PROT_WRITE, MAP_SHARED, console_fd, 0);