+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.
}
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
{
{
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);
}