Package: bogl-bterm
Version: 0.1.18-1.2
Tags: patch

bogl.c currently uses PAGE_MASK from <asm/page.h>.  Recent kernel
versions on IA-64 define PAGE_MASK only #ifdef __KERNEL__, and even then
it represents the kernel internal page size, which depends on kernel
config, not the ABI page size.

The attached patch replaces the PAGE_MASK use by portable
sysconf(_SC_PAGE_SIZE).  This fixes the build on IA-64, but I haven't
tested the resulting IA-64 binary.

Thanks,
        Mirek
--- bogl-0.1.18/bogl.c.page_size	2006-10-17 02:41:01.000000000 +0200
+++ bogl-0.1.18/bogl.c	2006-10-17 02:47:20.000000000 +0200
@@ -40,10 +40,6 @@
 #include <termios.h>
 #include <unistd.h>
 
-/* Yes, I know, we shouldn't be including headers from the kernel.  But
-   XFree86 also uses this one (to get PAGE_MASK) so it's probably safe.  */
-#include <asm/page.h>
-
 #include "bogl.h"
 #include "boglP.h"
 #if BOGL_VGA16_FB
@@ -115,6 +111,7 @@
 bogl_init (void)
 {
   unsigned long bogl_frame_offset, bogl_frame_len;
+  long page_size;
   struct fb_var_screeninfo fb_var;
   struct vt_stat vts;
 
@@ -178,9 +175,14 @@
   if (!init_fb())
     return 0;
 
-  bogl_frame_offset = fb_fix.smem_start & ~PAGE_MASK;
-  bogl_frame_len = ((bogl_frame_offset + fb_fix.smem_len + ~PAGE_MASK)
-		    & PAGE_MASK);
+  errno = 0;
+  page_size = sysconf(_SC_PAGE_SIZE);
+  if (page_size == -1 && errno != 0)
+    return bogl_fail ("can't get PAGE_SIZE: %s", strerror (errno));
+
+  bogl_frame_offset = fb_fix.smem_start & (page_size - 1);
+  bogl_frame_len = ((bogl_frame_offset + fb_fix.smem_len + page_size - 1)
+		    & ~(page_size - 1));
 
   bogl_frame_mapped
     = mmap (NULL, bogl_frame_len, PROT_READ | PROT_WRITE, MAP_SHARED, fb, 0);

Reply via email to