cvsdist c4afb89
--- netkit-rsh-0.10/rcp/rcp.c	1999-04-18 05:16:49-04	1.1
cvsdist c4afb89
+++ netkit-rsh-0.10/rcp/rcp.c	1999-04-18 05:40:52-04
cvsdist c4afb89
@@ -836,19 +836,33 @@
cvsdist c4afb89
 error(const char *fmt, ...)
cvsdist c4afb89
 {
cvsdist c4afb89
 	static FILE *fp;
cvsdist c4afb89
-	va_list ap;
cvsdist c4afb89
-
cvsdist c4afb89
-	va_start(ap, fmt);
cvsdist c4afb89
+	char buf[1000];
cvsdist c4afb89
 
cvsdist c4afb89
 	++errs;
cvsdist c4afb89
 	if (!fp && !(fp = fdopen(rem, "w")))
cvsdist c4afb89
 		return;
cvsdist c4afb89
-	fprintf(fp, "%c", 0x01);
cvsdist c4afb89
-	vfprintf(fp, fmt, ap);
cvsdist c4afb89
+	
cvsdist c4afb89
+	/* (fmt,...) might need to go to two streams.
cvsdist c4afb89
+	 *
cvsdist c4afb89
+	 * In { va_start ; vfprintf ; vfprintf ; va_end }, second
cvsdist c4afb89
+	 * vfprintf didn't restart (ie: vfprintf affects ap) (glibc)
cvsdist c4afb89
+	 *
cvsdist c4afb89
+	 * Is { va_start ; vfprintf ; va_end} * 2 even allowed?
cvsdist c4afb89
+	 *
cvsdist c4afb89
+	 * => Dump (fmt,...) to buffer.  */
cvsdist c4afb89
+	
cvsdist c4afb89
+	{
cvsdist c4afb89
+	    va_list ap;
cvsdist c4afb89
+	    va_start(ap, fmt);
cvsdist c4afb89
+	    vsnprintf(buf, sizeof(buf), fmt, ap);
cvsdist c4afb89
+	    buf[sizeof(buf)-1] = 0;
cvsdist c4afb89
+	    va_end(ap);
cvsdist c4afb89
+	}
cvsdist c4afb89
+	
cvsdist c4afb89
+	fprintf(fp, "%c%s", 0x01, buf);
cvsdist c4afb89
 	fflush(fp);
cvsdist c4afb89
-	if (!iamremote)	vfprintf(stderr, fmt, ap);
cvsdist c4afb89
 
cvsdist c4afb89
-	va_end(ap);
cvsdist c4afb89
+	if (!iamremote)	fputs(buf, stderr);
cvsdist c4afb89
 }
cvsdist c4afb89
 
cvsdist c4afb89
 static void