]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
buglet & relaxed rules
authorBruce Korb <bkorb@gnu.org>
Fri, 12 May 2000 16:35:21 +0000 (16:35 +0000)
committerBruce Korb <korbb@gcc.gnu.org>
Fri, 12 May 2000 16:35:21 +0000 (16:35 +0000)
From-SVN: r33877

gcc/ChangeLog
gcc/fixinc/fixfixes.c

index d5ff1679f7549fc3032a5a4185070488083554c0..bf19c4496722f8a87790ce1c099812e1a80c3079 100644 (file)
        (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,
index 1dfa5a7ce28a00f28af9d1488654ff9922d8e2b4..90b8fd814abe766fab7f06ddc7ae63825450d345 100644 (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;
-       }
-
-       c = *++p;
-       if (c == '%') {
-           putchar(c);
-           continue;
-       } else if (c < '0' || c > '9') {
-           abort();
-       }
-
-       c -= '0';
-       str = text + av[c].rm_so;
-       len = av[c].rm_eo - av[c].rm_so;
-       fwrite(str, len, 1, stdout);
+
+    while ((c = (unsigned)*(format++)) != NUL) {
+
+        if (c != '%') {
+            putchar(c);
+            continue;
+        }
+
+        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";