diff options
Diffstat (limited to 'utility.c')
-rw-r--r-- | utility.c | 101 |
1 files changed, 66 insertions, 35 deletions
@@ -686,41 +686,6 @@ my_getgrgid(char* group, gid_t gid) -#if !defined BB_REGEXP && (defined BB_GREP || defined BB_FIND ) -/* 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... - * -Erik Andersen - */ -extern int find_match(char *haystack, char *needle, int ignoreCase) -{ - - 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; - } -} -#endif - - #if (defined BB_CHVT) || (defined BB_DEALLOCVT) @@ -812,5 +777,71 @@ int get_console_fd(char* tty_name) #endif +#if !defined BB_REGEXP && (defined BB_GREP || defined BB_FIND ) +/* 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... + * -Erik Andersen + */ +extern int find_match(char *haystack, char *needle, int ignoreCase) +{ + + 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; + } +} + + +/* This performs substitutions after a regexp match has been found. */ +extern int replace_match(char *haystack, char *needle, char *newNeedle, int ignoreCase) +{ + int foundOne; + char *where, *slider; + + if (ignoreCase == FALSE) { + /*Find needle in haystack */ + where = strstr (haystack, needle); + while(where!=NULL) { + foundOne++; + fprintf(stderr, "A match: haystack='%s'\n", haystack); + 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 + + } + if (foundOne) + return TRUE; + else + return FALSE; +} + +#endif /* END CODE */ |