From db4c7c19512504ee1391728248ae08c966a60b43 Mon Sep 17 00:00:00 2001 From: Pali Rohár Date: Wed, 26 Nov 2014 16:29:53 +0100 Subject: all: Use internal MEMMEM instead gnu memem It is used only on small strings, so it is fast enough --- src/global.h | 13 +++++++++++++ src/mkii.c | 2 +- src/nolo.c | 4 ++-- 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/src/global.h b/src/global.h index 991d3b3..4cff79f 100644 --- a/src/global.h +++ b/src/global.h @@ -24,4 +24,17 @@ extern int verbose; #define SLEEP(usec) do { struct timespec _t = { 0, (usec) }; nanosleep(&_t, NULL); } while (0) +static inline void * MEMMEM(void *haystack, size_t haystacklen, const void *needle, size_t needlelen) { + for ( size_t i = 0; i < haystacklen; ++i ) { + for ( size_t j = 0; j < needlelen; ++j ) { + if ( ((char *)haystack)[i] != ((const char *)needle)[j] ) + break; + if ( j != needlelen - 1 ) + continue; + return (char *)haystack + i; + } + } + return NULL; +} + #endif diff --git a/src/mkii.c b/src/mkii.c index 7e2ea26..889dae7 100644 --- a/src/mkii.c +++ b/src/mkii.c @@ -262,7 +262,7 @@ int mkii_flash_image(struct usb_device_info * dev, struct image * image) { for ( i = 0; bufs[i]; ++i ) { len = ((uint8_t*)bufs[i])[0]; - if ( memmem(bufs[i]+1, len, buf, strlen(buf)) ) + if ( MEMMEM(bufs[i]+1, len, buf, strlen(buf)) ) break; } diff --git a/src/nolo.c b/src/nolo.c index 6dce8a2..5e51a36 100644 --- a/src/nolo.c +++ b/src/nolo.c @@ -127,7 +127,7 @@ static int nolo_identify_string(struct usb_device_info * dev, const char * str, if ( (size_t)ret > sizeof(buf) ) ret = sizeof(buf); - ptr = memmem(buf, ret, str, strlen(str)); + ptr = MEMMEM(buf, ret, str, strlen(str)); if ( ! ptr ) ERROR_RETURN("Substring was not found", -1); @@ -326,7 +326,7 @@ static int nolo_send_image(struct usb_device_info * dev, struct image * image, i for ( i = 0; bufs[i]; ++i ) { len = ((uint8_t*)bufs[i])[0]; - if ( memmem(bufs[i]+1, len, buf, strlen(buf)) ) + if ( MEMMEM(bufs[i]+1, len, buf, strlen(buf)) ) break; } -- cgit v1.2.3