378732a
--- allegro-4.2.0/tools/grabber.c.mprotect	2005-09-04 18:00:18.000000000 +0200
85e6f88
+++ allegro-4.2.0/tools/grabber.c	2006-03-11 23:27:31.000000000 +0100
378732a
@@ -3121,6 +3121,7 @@
378732a
       case OSTYPE_SUNOS:      s = "SunOS/Solaris";              break;
378732a
       case OSTYPE_FREEBSD:    s = "FreeBSD";                    break;
378732a
       case OSTYPE_NETBSD:     s = "NetBSD";                     break;
378732a
+      case OSTYPE_OPENBSD:    s = "OpenBSD";                    break;
378732a
       case OSTYPE_IRIX:       s = "IRIX";                       break;
378732a
       case OSTYPE_DARWIN:     s = "Darwin";                     break;
378732a
       case OSTYPE_QNX:        s = "QNX";                        break;
378732a
--- allegro-4.2.0/include/allegro/platform/alunixac.hin.mprotect	2005-10-30 21:23:33.000000000 +0100
85e6f88
+++ allegro-4.2.0/include/allegro/platform/alunixac.hin	2006-03-11 23:27:31.000000000 +0100
378732a
@@ -169,6 +169,9 @@
378732a
 /* Define to 1 if you have the `mmap' function. */
378732a
 #undef HAVE_MMAP
378732a
 
378732a
+/* Define to 1 if you have the `mprotect' function. */
378732a
+#undef HAVE_MPROTECT
378732a
+
378732a
 /* Define to 1 if you have the <ndir.h> header file, and it defines `DIR'. */
378732a
 #undef HAVE_NDIR_H
378732a
 
378732a
--- allegro-4.2.0/include/allegro/system.h.mprotect	2005-03-15 21:32:43.000000000 +0100
85e6f88
+++ allegro-4.2.0/include/allegro/system.h	2006-03-11 23:27:31.000000000 +0100
378732a
@@ -53,6 +53,7 @@
378732a
 #define OSTYPE_SUNOS       AL_ID('S','U','N',' ')
378732a
 #define OSTYPE_FREEBSD     AL_ID('F','B','S','D')
378732a
 #define OSTYPE_NETBSD      AL_ID('N','B','S','D')
378732a
+#define OSTYPE_OPENBSD     AL_ID('O','B','S','D')
378732a
 #define OSTYPE_IRIX        AL_ID('I','R','I','X')
378732a
 #define OSTYPE_DARWIN      AL_ID('D','A','R','W')
378732a
 #define OSTYPE_QNX         AL_ID('Q','N','X',' ')
378732a
--- allegro-4.2.0/configure.mprotect	2005-11-06 10:54:00.000000000 +0100
85e6f88
+++ allegro-4.2.0/configure	2006-03-11 23:27:31.000000000 +0100
378732a
@@ -11225,7 +11225,7 @@
378732a
 
378732a
 
378732a
 
378732a
-for ac_func in mmap memcmp mkstemp stricmp strlwr strupr vprintf
378732a
+for ac_func in mmap mprotect memcmp mkstemp stricmp strlwr strupr vprintf
378732a
 do
378732a
 as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
378732a
 echo "$as_me:$LINENO: checking for $ac_func" >&5
378732a
--- allegro-4.2.0/configure.in.mprotect	2005-08-07 23:50:49.000000000 +0200
85e6f88
+++ allegro-4.2.0/configure.in	2006-03-11 23:27:31.000000000 +0100
378732a
@@ -713,7 +713,7 @@
378732a
 AC_STRUCT_TM
378732a
 AC_TYPE_SIGNAL
378732a
 
378732a
-AC_CHECK_FUNCS(mmap memcmp mkstemp stricmp strlwr strupr vprintf)
378732a
+AC_CHECK_FUNCS(mmap mprotect memcmp mkstemp stricmp strlwr strupr vprintf)
378732a
 
378732a
 dnl Tweak header files for library build
378732a
 CFLAGS="$CFLAGS -DALLEGRO_LIB_BUILD"
378732a
--- allegro-4.2.0/src/unix/usystem.c.mprotect	2005-09-04 18:00:17.000000000 +0200
85e6f88
+++ allegro-4.2.0/src/unix/usystem.c	2006-03-11 23:27:31.000000000 +0100
378732a
@@ -196,6 +196,9 @@
378732a
       else if (!strcmp(utsn.sysname, "NetBSD")) {
378732a
 	 os_type = OSTYPE_NETBSD;
378732a
       }
378732a
+      else if (!strcmp(utsn.sysname, "OpenBSD")) {
378732a
+	 os_type = OSTYPE_OPENBSD;
378732a
+      }
378732a
       else if ((!strcmp(utsn.sysname, "IRIX"))
378732a
 	       || (!strcmp(utsn.sysname, "IRIX64"))) {
378732a
 	 os_type = OSTYPE_IRIX;
378732a
--- allegro-4.2.0/src/unix/uesd.c.mprotect	2005-03-12 08:54:27.000000000 +0100
85e6f88
+++ allegro-4.2.0/src/unix/uesd.c	2006-03-11 23:27:31.000000000 +0100
378732a
@@ -27,6 +27,7 @@
378732a
 
378732a
 #include <sys/time.h>
378732a
 #include <sys/types.h>
378732a
+#include <string.h> /* FD_ZERO() needs this */
378732a
 #include <unistd.h>
378732a
 #include <esd.h>
378732a
 
378732a
--- allegro-4.2.0/src/i386/istretch.c.mprotect	2005-03-15 19:02:22.000000000 +0100
85e6f88
+++ allegro-4.2.0/src/i386/istretch.c	2006-03-11 23:31:44.000000000 +0100
85e6f88
@@ -30,6 +30,11 @@
378732a
    #include "winalleg.h"   /* For VirtualProtect */
378732a
 #endif     /* ifdef ALLEGRO_WINDOWS */
378732a
 
378732a
+#ifdef HAVE_MPROTECT
378732a
+   #include <sys/types.h>
378732a
+   #include <sys/mman.h>
85e6f88
+   #include <sys/user.h>
378732a
+#endif
378732a
 
378732a
 
378732a
 /* helper macro for generating stretchers in each color depth */
85e6f88
@@ -435,7 +440,14 @@
378732a
  #ifdef ALLEGRO_WINDOWS
378732a
    /* Play nice with Windows executable memory protection */
378732a
    VirtualProtect(_scratch_mem, _scratch_mem_size, PAGE_EXECUTE_READWRITE, &old_protect);
378732a
- #endif     /* ifdef ALLEGRO_WINDOWS */
378732a
+ #elif defined(HAVE_MPROTECT)
85e6f88
+   {
85e6f88
+      char *p = (char *)((unsigned long)_scratch_mem & ~(PAGE_SIZE-1ul));
85e6f88
+      if (mprotect(p, _scratch_mem_size + ((char *)_scratch_mem - p),
85e6f88
+            PROT_EXEC|PROT_READ|PROT_WRITE))
85e6f88
+         perror("allegro-error: mprotect failed during stretched blit!");
85e6f88
+   }
378732a
+ #endif
378732a
 
378732a
    /* call the stretcher */
378732a
    _do_stretch(source, dest, _scratch_mem, sx>>16, sy, syd,