From: Chong Yidong <cyd@stupidchicken.com>
Date: Mon, 15 Mar 2010 15:51:48 +0000 (-0400)
Subject: Fix bug in `format' (Bug#5710).
X-Git-Tag: emacs-pretest-23.1.95~68
X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=35cd7cd68e92e4f364bde2875a02780f2caf6197;p=emacs.git

Fix bug in `format' (Bug#5710).

* editfns.c (Fformat): Account for string precision when computing
field width (Bug#5710).
---

diff --git a/src/ChangeLog b/src/ChangeLog
index ce4fe1cd7b4..d8369bb9a20 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,8 @@
+2010-03-15  Andreas Politz  <politza@fh-trier.de>  (tiny change)
+
+	* editfns.c (Fformat): Account for string precision when computing
+	field width (Bug#5710).
+
 2010-03-05  Stefan Monnier  <monnier@iro.umontreal.ca>
 
 	Make it possible to C-g in a tight bytecode loop again (bug#5680).
diff --git a/src/editfns.c b/src/editfns.c
index 093f141bff2..9f30ea06411 100644
--- a/src/editfns.c
+++ b/src/editfns.c
@@ -3782,7 +3782,11 @@ usage: (format STRING &rest OBJECTS)  */)
 	       to be as large as is calculated here.  Easy check for
 	       the case PRECISION = 0. */
 	    thissize = precision[n] ? CONVERTED_BYTE_SIZE (multibyte, args[n]) : 0;
+	    /* The precision also constrains how much of the argument
+	       string will finally appear (Bug#5710). */
 	    actual_width = lisp_string_width (args[n], -1, NULL, NULL);
+	    if (precision[n] != -1)
+	      actual_width = min(actual_width,precision[n]);
 	  }
 	/* Would get MPV otherwise, since Lisp_Int's `point' to low memory.  */
 	else if (INTEGERP (args[n]) && *format != 's')