buglet & relaxed rules

From-SVN: r33877
This commit is contained in:
Bruce Korb 2000-05-12 16:35:21 +00:00 committed by Bruce Korb
parent be1bb65263
commit a92fa60873
2 changed files with 45 additions and 19 deletions

View file

@ -41,6 +41,10 @@
(LABEL_NUSES, LABEL_REFS): Likewise.
* unroll.c (copy_loop_body): Don't copy NOTE_INSN_DELETED_LABEL.
2000-05-12 Bruce Korb <bkorb@gnu.org>
* fixinc/fixfixes.c(format_write): buglet & relaxed rules
2000-05-12 Zack Weinberg <zack@wolery.cumb.org>
* fixinc/fixfixes.c (IO_use_fix, IO_defn_fix, CTRL_use_fix,

View file

@ -127,32 +127,54 @@ format_write (format, text, av)
tCC* text;
regmatch_t av[];
{
tCC *p, *str;
int c;
size_t len;
for (p = 0; *p; p++) {
c = *p;
if (c != '%') {
putchar(c);
continue;
}
while ((c = (unsigned)*(format++)) != NUL) {
c = *++p;
if (c == '%') {
putchar(c);
continue;
} else if (c < '0' || c > '9') {
abort();
}
if (c != '%') {
putchar(c);
continue;
}
c -= '0';
str = text + av[c].rm_so;
len = av[c].rm_eo - av[c].rm_so;
fwrite(str, len, 1, stdout);
c = (unsigned)*(format++);
/*
* IF the character following a '%' is not a digit,
* THEN we will always emit a '%' and we may or may
* not emit the following character. We will end on
* a NUL and we will emit only one of a pair of '%'.
*/
if (! isdigit( c )) {
putchar( '%' );
switch (c) {
case NUL:
return;
case '%':
break;
default:
putchar(c);
}
}
/*
* Emit the matched subexpression numbered 'c'.
* IF, of course, there was such a match...
*/
else {
regmatch_t* pRM = av + (c - (unsigned)'0');
size_t len;
if (pRM->rm_so < 0)
continue;
len = pRM->rm_eo - pRM->rm_so;
if (len > 0)
fwrite(text + pRM->rm_so, len, 1, stdout);
}
}
}
FIX_PROC_HEAD( format_fix )
{
tSCC zBad[] = "fixincl error: `%s' needs %s c_fix_arg\n";