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