errfn.c (cp_thing): Print buf as a string not as a printf format to avoid problems with the operator%.

* 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
This commit is contained in:
Theodore Papadopoulo 1998-10-04 23:12:11 +02:00 committed by Jason Merrill
parent 5f2c99c43b
commit 12a27dfc4e
2 changed files with 12 additions and 9 deletions

View 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.

View 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);
}