From 99afb857528580b088eaddca0f7f4eeec14a3835 Mon Sep 17 00:00:00 2001 From: Chris Allegretta Date: Wed, 16 May 2001 04:20:57 +0000 Subject: [PATCH] strcasestr() - Replaced by mutt's mutt_stristr function, because the thought of dynamically allocating memory and copying each line in a file to do a search or replace was causing me to lose sleep git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@654 35c25a1d-7b9e-4130-9fde-d3aeb78583b8 --- ChangeLog | 5 +++++ utils.c | 42 ++++++++++++++++-------------------------- 2 files changed, 21 insertions(+), 26 deletions(-) diff --git a/ChangeLog b/ChangeLog index 60212ef3..6a1c5b73 100644 --- a/ChangeLog +++ b/ChangeLog @@ -60,6 +60,11 @@ Cvs code - do_replace() - If we manage to make it in somehow with VIEW_MODE on, abort nicely (fixes BUG #59). +- utils.c + strcasestr() + - Replaced by mutt's mutt_stristr function, because the thought + of dynamically allocating memory and copying each line in a file + to do a search or replace was causing me to lose sleep. - winio.c: actual_x() - Remove inline from function decl (Albert Chin). diff --git a/utils.c b/utils.c index a88eb3ef..6927333a 100644 --- a/utils.c +++ b/utils.c @@ -48,37 +48,27 @@ void lowercase(char *src) } -/* I can't believe I have to write this function */ +/* This is now mutt's version (called mutt_stristr) because it doesn't + Use memory allocation to do a simple search (yuck). */ + char *strcasestr(char *haystack, char *needle) { - char *localneedle, *localhaystack, *found, *tmp, *tmp2; + const char *p, *q; - /* Make a copy of the search string and search space */ - localneedle = nmalloc(strlen(needle) + 2); - localhaystack = nmalloc(strlen(haystack) + 2); - - strcpy(localneedle, needle); - strcpy(localhaystack, haystack); - - /* Make them lowercase */ - lowercase(localneedle); - lowercase(localhaystack); - - /* Look for the lowercased substring in the lowercased search space - - return NULL if we didn't find anything */ - if ((found = strstr(localhaystack, localneedle)) == NULL) { - free(localneedle); - free(localhaystack); + if (!haystack) return NULL; + if (!needle) + return (haystack); + + while (*(p = haystack)) + { + for (q = needle; *p && *q && tolower (*p) == tolower (*q); p++, q++) + ; + if (!*q) + return (haystack); + haystack++; } - /* Else return the pointer to the same place in the real search space */ - tmp2 = haystack; - for (tmp = localhaystack; tmp != found; tmp++) - tmp2++; - - free(localneedle); - free(localhaystack); - return tmp2; + return NULL; } char *strstrwrapper(char *haystack, char *needle)