version 1.19, 2003/06/07 12:02:35 |
version 1.20, 2003/06/08 20:11:45 |
|
|
void |
void |
dopatsubst(const char *argv[], int argc) |
dopatsubst(const char *argv[], int argc) |
{ |
{ |
int error; |
|
regex_t re; |
|
regmatch_t *pmatch; |
|
|
|
if (argc <= 3) { |
if (argc <= 3) { |
warnx("Too few arguments to patsubst"); |
warnx("Too few arguments to patsubst"); |
return; |
return; |
} |
} |
error = regcomp(&re, mimic_gnu ? twiddle(argv[3]) : argv[3], |
/* special case: empty regexp */ |
REG_NEWLINE | REG_EXTENDED); |
if (argv[3][0] == '\0') { |
if (error != 0) |
const char *s; |
exit_regerror(error, &re); |
size_t len = strlen(argv[4]); |
|
for (s = argv[2]; *s != '\0'; s++) { |
pmatch = xalloc(sizeof(regmatch_t) * (re.re_nsub+1)); |
addchars(argv[4], len); |
do_subst(argv[2], &re, |
addchar(*s); |
argc != 4 && argv[4] != NULL ? argv[4] : "", pmatch); |
} |
|
} else { |
|
int error; |
|
regex_t re; |
|
regmatch_t *pmatch; |
|
|
|
error = regcomp(&re, mimic_gnu ? twiddle(argv[3]) : argv[3], |
|
REG_NEWLINE | REG_EXTENDED); |
|
if (error != 0) |
|
exit_regerror(error, &re); |
|
|
|
pmatch = xalloc(sizeof(regmatch_t) * (re.re_nsub+1)); |
|
do_subst(argv[2], &re, |
|
argc != 4 && argv[4] != NULL ? argv[4] : "", pmatch); |
|
free(pmatch); |
|
regfree(&re); |
|
} |
pbstr(getstring()); |
pbstr(getstring()); |
free(pmatch); |
|
regfree(&re); |
|
} |
} |
|
|
void |
void |