diff options
author | Eric Andersen <andersen@codepoet.org> | 1999-10-29 06:50:17 +0000 |
---|---|---|
committer | Eric Andersen <andersen@codepoet.org> | 1999-10-29 06:50:17 +0000 |
commit | 24d8e7d787aa1940030a1beaabdd4388588ca512 (patch) | |
tree | 2da0e6ade947ff1a5a77d3911015781a457df458 /utility.c | |
parent | c1525e84dd6a3ac8252ce10e6ae605bd37d60797 (diff) |
Stuf
Diffstat (limited to 'utility.c')
-rw-r--r-- | utility.c | 86 |
1 files changed, 49 insertions, 37 deletions
@@ -778,70 +778,82 @@ int get_console_fd(char* tty_name) #if !defined BB_REGEXP && (defined BB_GREP || defined BB_FIND ) + +/* Do a case insensitive strstr() */ +char* stristr(char *haystack, const char *needle) +{ + int len = strlen( needle ); + while( *haystack ) { + if( !strncasecmp( haystack, needle, len ) ) + break; + haystack++; + } + + if( !(*haystack) ) + haystack = NULL; + + return haystack; +} + /* This tries to find a needle in a haystack, but does so by * only trying to match literal strings (look 'ma, no regexps!) * This is short, sweet, and carries _very_ little baggage, - * unlike its beefier cousin a few lines down... + * unlike its beefier cousin in regexp.c * -Erik Andersen */ extern int find_match(char *haystack, char *needle, int ignoreCase) { - if (ignoreCase == FALSE) { + if (ignoreCase == FALSE) haystack = strstr (haystack, needle); - if (haystack == NULL) - return FALSE; - return TRUE; - } else { - int i; - char needle1[BUF_SIZE]; - char haystack1[BUF_SIZE]; - - strncpy( haystack1, haystack, sizeof(haystack1)); - strncpy( needle1, needle, sizeof(needle1)); - for( i=0; i<sizeof(haystack1) && haystack1[i]; i++) - haystack1[i]=tolower( haystack1[i]); - for( i=0; i<sizeof(needle1) && needle1[i]; i++) - needle1[i]=tolower( needle1[i]); - haystack = strstr (haystack1, needle1); - if (haystack == NULL) - return FALSE; - return TRUE; - } + else + haystack = stristr (haystack, needle); + if (haystack == NULL) + return FALSE; + return TRUE; } -/* This performs substitutions after a regexp match has been found. */ +/* This performs substitutions after a string match has been found. */ extern int replace_match(char *haystack, char *needle, char *newNeedle, int ignoreCase) { int foundOne; - char *where, *slider; + char *where, *slider, *slider1, *oldhayStack; - if (ignoreCase == FALSE) { - /*Find needle in haystack */ + if (ignoreCase == FALSE) where = strstr (haystack, needle); - while(where!=NULL) { - foundOne++; - fprintf(stderr, "A match: haystack='%s'\n", haystack); + else + where = stristr (haystack, needle); + + if (strcmp(needle, newNeedle)==0) + return FALSE; + + oldhayStack = (char*)malloc((unsigned)(strlen(haystack))); + while(where!=NULL) { + foundOne++; + strcpy(oldhayStack, haystack); +#if 0 + if ( strlen(newNeedle) > strlen(needle)) { haystack = (char *)realloc(haystack, (unsigned)(strlen(haystack) - strlen(needle) + strlen(newNeedle))); - for(slider=haystack;slider!=where;slider++); - *slider=0; - haystack=strcat(haystack, newNeedle); - slider+=1+sizeof(newNeedle); - haystack = strcat(haystack, slider); - where = strstr (where+1, needle); } - } else { - // FIXME - +#endif + for(slider=haystack,slider1=oldhayStack;slider!=where;slider++,slider1++); + *slider=0; + haystack=strcat(haystack, newNeedle); + slider1+=strlen(needle); + haystack = strcat(haystack, slider1); + where = strstr (slider, needle); } + free( oldhayStack); + if (foundOne) return TRUE; else return FALSE; } + #endif /* END CODE */ |