errfn.c (cp_thing): Print buf as a string not as a printf format to avoid problems...
authorTheodore Papadopoulo <Theodore.Papadopoulo@sophia.inria.fr>
Sun, 4 Oct 1998 21:12:11 +0000 (23:12 +0200)
committerJason Merrill <jason@gcc.gnu.org>
Sun, 4 Oct 1998 21:12:11 +0000 (17:12 -0400)
* errfn.c (cp_thing): Print buf as a string not as a printf format
to avoid problems with the operator%. Consequently, `%%' sequences
in format are copied as `%' in buf.

From-SVN: r22825

gcc/cp/ChangeLog
gcc/cp/errfn.c

index d803d39..86bd8c9 100644 (file)
@@ -1,3 +1,9 @@
+1998-10-04  Theodore Papadopoulo <Theodore.Papadopoulo@sophia.inria.fr>
+
+       * errfn.c (cp_thing): Print buf as a string not as a printf format
+       to avoid problems with the operator%. Consequently, `%%' sequences
+       in format are copied as `%' in buf.
+
 1998-10-04  Jason Merrill  <jason@yorick.cygnus.com>
 
        * pt.c (pop_tinst_level): Call extract_interface_info.
index 10de8a9..a43bcf3 100644 (file)
@@ -149,18 +149,15 @@ cp_thing (errfn, atarg1, format, ap)
        }
       else if (*f == '%')
        {
-         /* A `%%' has occurred in the input string.  Since the
-            string we produce here will be passed to vprintf we must
-            preserve both `%' characters.  */
+         /* A `%%' has occurred in the input string. Replace it with
+            a `%' in the formatted message buf. */
 
-         len += 2;
-         if (len > buflen)
+         if (++len > buflen)
            {
              buflen = len;
              buf = xrealloc (buf, len);
            }
-         strcpy (buf + offset, "%%");
-         offset += 2;
+         buf[offset++] = '%';
        }
       else
        {
@@ -190,10 +187,10 @@ cp_thing (errfn, atarg1, format, ap)
     {
       char *file = cp_file_of (atarg);
       int   line = cp_line_of (atarg);
-      (*errfn) (file, line, buf);
+      (*errfn) (file, line, "%s", buf);
     }
   else
-    (*errfn) (buf);
+    (*errfn) ("%s", buf);
 
 }