summaryrefslogtreecommitdiff
path: root/src/eval.c
diff options
context:
space:
mode:
authorRichard M. Stallman <rms@gnu.org>1994-03-06 20:39:52 +0000
committerRichard M. Stallman <rms@gnu.org>1994-03-06 20:39:52 +0000
commit3470291d5679378332f7c218a9e21b334d4dbdda (patch)
tree85ee1c6eed5d06e55eaaf0a5cee9e67dfb9fdac7 /src/eval.c
parent000a4db60cda82a1d9696dc29c32acff5449c61f (diff)
downloademacs-3470291d5679378332f7c218a9e21b334d4dbdda.tar.gz
(error): Use doprnt. Make buffer larger as necessary.
Diffstat (limited to 'src/eval.c')
-rw-r--r--src/eval.c30
1 files changed, 28 insertions, 2 deletions
diff --git a/src/eval.c b/src/eval.c
index 02590e6e938..ea608d35a78 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -1302,12 +1302,38 @@ find_handler_clause (handlers, conditions, sig, data, debugger_value_ptr)
void
error (m, a1, a2, a3)
char *m;
+ char *a1, *a2, *a3;
{
char buf[200];
- sprintf (buf, m, a1, a2, a3);
+ int size = 200;
+ int mlen;
+ char *buffer = buf;
+ char *args[3];
+ int allocated = 0;
+ Lisp_Object string;
+
+ args[0] = a1;
+ args[1] = a2;
+ args[2] = a3;
+
+ mlen = strlen (m);
while (1)
- Fsignal (Qerror, Fcons (build_string (buf), Qnil));
+ {
+ int used = doprnt (buf, size, m, m + mlen, 3, args);
+ if (used < size)
+ break;
+ size *= 2;
+ if (allocated)
+ buffer = (char *) xrealloc (buffer, size);
+ buffer = (char *) xmalloc (size);
+ }
+
+ string = build_string (buf);
+ if (allocated)
+ free (buffer);
+
+ Fsignal (Qerror, Fcons (string, Qnil));
}
DEFUN ("commandp", Fcommandp, Scommandp, 1, 1, 0,