aboutsummaryrefslogtreecommitdiffstats
path: root/package/sdl/sdl-1.2.11-patch_PAGE_SIZE.patch
blob: ece702d8d8b8b9ba04a9869cd428484c60ca70b1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
diff -urN SDL-1.2.11.orig/src/video/fbcon/SDL_fbvideo.c SDL-1.2.11/src/video/fbcon/SDL_fbvideo.c
--- SDL-1.2.11.orig/src/video/fbcon/SDL_fbvideo.c	2006-05-17 06:16:06.000000000 +0300
+++ SDL-1.2.11/src/video/fbcon/SDL_fbvideo.c	2007-06-24 22:19:41.000000000 +0300
@@ -29,9 +29,17 @@
 #include <unistd.h>
 #include <sys/ioctl.h>
 #include <sys/mman.h>
-#include <asm/page.h>		/* For definition of PAGE_SIZE */
 #include <linux/vt.h>
 
+#if defined(linux)
+#define HAS_MMAP_ANON
+#include <sys/types.h>
+#include <sys/mman.h>
+#include <asm/page.h>   /* PAGE_SIZE */
+#define HAS_SC_PAGESIZE /* _SC_PAGESIZE may be an enum for Linux */
+#define HAS_GETPAGESIZE
+#endif /* linux */
+
 #include "SDL_video.h"
 #include "SDL_mouse.h"
 #include "../SDL_sysvideo.h"
@@ -474,6 +482,7 @@
 	unsigned int current_h;
 	const char *SDL_fbdev;
 	FILE *modesdb;
+	int pagesize = -1;
 
 	/* Initialize the library */
 	SDL_fbdev = SDL_getenv("SDL_FBDEV");
@@ -545,9 +554,27 @@
 		}
 	}
 
+#if defined(_SC_PAGESIZE) && defined(HAS_SC_PAGESIZE)
+	pagesize = sysconf(_SC_PAGESIZE);
+#endif
+#ifdef _SC_PAGE_SIZE
+	if (pagesize == -1)
+		pagesize = sysconf(_SC_PAGE_SIZE);
+#endif
+#ifdef HAS_GETPAGESIZE
+	if (pagesize == -1)
+		pagesize = getpagesize();
+#endif
+#ifdef PAGE_SIZE
+	if (pagesize == -1)
+		pagesize = PAGE_SIZE;
+#endif
+	if (pagesize == -1)
+		pagesize = 4096;
+
 	/* 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);