changeset 2536:6426007cad63

Fixed broken BIOS workaround
author nick
date Mon, 29 Oct 2001 18:24:29 +0000
parents b44113f46c96
children 28d30f50d89c
files linux/vbelib.c
diffstat 1 files changed, 24 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/linux/vbelib.c	Mon Oct 29 18:07:40 2001 +0000
+++ b/linux/vbelib.c	Mon Oct 29 18:24:29 2001 +0000
@@ -17,7 +17,7 @@
 
 static struct VesaProtModeInterface vbe_pm_info;
 
-static inline int VERR(void *p)
+static inline int VERR(const void *p)
 {
   register int retval;
   __asm __volatile(
@@ -31,7 +31,7 @@
 }
 
 #if 0
-static inline int VERW(void *p)
+static inline int VERW(const void *p)
 {
   register int retval;
   __asm __volatile(
@@ -108,30 +108,46 @@
 
 int vbeDestroy( void ) { return VBE_OK; }
 
-static int check_str(unsigned char *str)
+/* Fixme!!! This code is compatible only with mplayer's version of lrmi*/
+static inline int is_addr_valid(const void *p)
+{
+  return (p < (const void *)0x502) || 
+	 (p >= (const void *)0x10000 && p < (const void *)0x20000) ||
+	 (p >= (const void *)0xa0000 && p < (const void *)0x100000);
+}
+
+static int check_str(const unsigned char *str)
 {
   size_t i;
   int null_found = 0;
   for(i = 0;i < 256;i++) 
   {
-    if(VERR(&str[i]))
+    if(is_addr_valid(&str[i]))
     {
-      if(!str[i]) { null_found = 1; break; }
+      if(VERR(&str[i]))
+      {
+        if(!str[i]) { null_found = 1; break; }
+      }
+      else break;
     }
     else break;
   }
   return null_found;
 }
 
-static int check_wrd(unsigned short *str)
+static int check_wrd(const unsigned short *str)
 {
   size_t i;
   int ffff_found = 0;
   for(i = 0;i < 1024;i++) 
   {
-    if(VERR(&str[i]))
+    if(is_addr_valid(&str[i]))
     {
-      if(str[i] == 0xffff) { ffff_found = 1; break; }
+      if(VERR(&str[i]))
+      {
+        if(str[i] == 0xffff) { ffff_found = 1; break; }
+      }
+      else break;
     }
     else break;
   }