Merged r2981:2982 from branches/SDL-1.2: fbcon getpagesize() compile fix.
authorRyan C. Gordon <icculus@icculus.org>
Thu, 15 Feb 2007 23:57:07 +0000
changeset 2093 cdaeb26ed66a
parent 2092 8e761d6af583
child 2094 7ba4a732e3d0
Merged r2981:2982 from branches/SDL-1.2: fbcon getpagesize() compile fix.
configure.in
include/SDL_config.h.in
src/video/fbcon/SDL_fbvideo.c
--- a/configure.in	Thu Feb 15 11:14:24 2007 +0000
+++ b/configure.in	Thu Feb 15 23:57:07 2007 +0000
@@ -1117,6 +1117,7 @@
         ])
         AC_MSG_RESULT($video_fbcon)
         if test x$video_fbcon = xyes; then
+            AC_CHECK_FUNCS(getpagesize)
             AC_DEFINE(SDL_VIDEO_DRIVER_FBCON)
             SOURCES="$SOURCES $srcdir/src/video/fbcon/*.c"
             have_video=yes
--- a/include/SDL_config.h.in	Thu Feb 15 11:14:24 2007 +0000
+++ b/include/SDL_config.h.in	Thu Feb 15 23:57:07 2007 +0000
@@ -130,6 +130,7 @@
 #undef HAVE_NANOSLEEP
 #undef HAVE_CLOCK_GETTIME
 #undef HAVE_DLVSYM
+#undef HAVE_GETPAGESIZE
 
 #else
 /* We may need some replacement for stdarg.h here */
--- a/src/video/fbcon/SDL_fbvideo.c	Thu Feb 15 11:14:24 2007 +0000
+++ b/src/video/fbcon/SDL_fbvideo.c	Thu Feb 15 23:57:07 2007 +0000
@@ -177,6 +177,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) */
 
@@ -508,6 +521,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;
@@ -589,7 +603,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);