diff --git a/src/opcodes.c b/src/opcodes.c
index 2e111d5ef4d1cfbb15de31b0686721d0c4e9b45a..108ff9c99fc6c6cc7761bcf206124d2cfd13a32a 100644
--- a/src/opcodes.c
+++ b/src/opcodes.c
@@ -432,7 +432,7 @@ static INT32 low_sscanf(INT32 num_arg)
 	  s=MEMMEM(end_str_start,
 		   end_str_end-end_str_start,
 		   input+eye,
-		   input_len-eye);
+		   (SIZE_T)(input_len-eye));
 	  if(!s) return matches;
 	  eye=s-input;
 	  new_eye=eye+end_str_end-end_str_start;
diff --git a/src/port.c b/src/port.c
index 5d4ae22ddcee68f5cd814fb24b6675a22f497fab..8de3e0ffaf57656f230f3cae7b953c12eb1fa884 100644
--- a/src/port.c
+++ b/src/port.c
@@ -145,7 +145,30 @@ char *MEMCHR(char *p,char c,int e)
 #endif
 
 #ifndef HAVE_MEMMEM
-
+#if 1
+char *MEMMEM(char *needle, SIZE_T needlelen, char *haystack,
+	     SIZE_T haystacklen)
+{
+  if(needlelen>haystacklen)
+    return 0;
+  switch(needlelen)
+  {
+  case 0: return haystack;
+  case 1: return MEMCHR(haystack,needle[0],haystacklen);
+  default:
+   SIZE_T i, j;
+   for(i=0; i<haystacklen-needlelen; i++)
+   {
+     for(j=0; j<needlelen; j++)
+       if(haystack[i] != needle[j])
+	 break;
+     if(j==needlelen)
+       return haystack+i;
+   }
+   return 0;
+ }
+}
+#else 
 /*
  * a quick memmem
  * Written by Fredrik Hubinette (hubbe@lysator.liu.se)
@@ -159,7 +182,8 @@ typedef struct link2_s
   INT32 key, offset;
 } link2;
 
-char *MEMMEM(char *needle, SIZE_T needlelen, char *haystack, SIZE_T haystacklen)
+char *MEMMEM(char *needle, SIZE_T needlelen, char *haystack, 
+	     SIZE_T haystacklen)
 {
   if(needlelen > haystacklen) return 0;
 
@@ -281,7 +305,7 @@ char *MEMMEM(char *needle, SIZE_T needlelen, char *haystack, SIZE_T haystacklen)
     
   }
 }
-
+#endif
 #endif
 
 #if !defined(HAVE_INDEX) && !defined(HAVE_STRCHR)
diff --git a/src/types.h b/src/types.h
index 3ebfac2b4b854479b416d7af4fdf6d1286e400c8..7933f776638817409b9521f880619836dbf915f4 100644
--- a/src/types.h
+++ b/src/types.h
@@ -9,7 +9,7 @@
 #if SIZEOF_SHORT >= 4
 #define INT32 short
 #else
-#if SIZEOF_INT < 4
+#if SIZEOF_INT >= 4
 #define INT32 int
 #else
 #define INT32 long
@@ -26,4 +26,5 @@
 
 #define FLOAT_TYPE float
 
+#include "memory.h"
 #endif