[Gmp-commit] /var/hg/gmp: Handle %a in __gmp_replacement_vsnprintf

mercurial at gmplib.org mercurial at gmplib.org
Fri Jan 31 21:38:53 CET 2025


details:   /var/hg/gmp/rev/e16148339597
changeset: 18480:e16148339597
user:      Marc Glisse <marc.glisse at inria.fr>
date:      Fri Jan 31 21:38:50 2025 +0100
description:
Handle %a in __gmp_replacement_vsnprintf

diffstat:

 ChangeLog               |   1 +
 printf/repl-vsnprintf.c |  24 ++++++++++++++++++++++++
 2 files changed, 25 insertions(+), 0 deletions(-)

diffs (45 lines):

diff -r a57f396ce062 -r e16148339597 ChangeLog
--- a/ChangeLog	Fri Jan 31 19:17:30 2025 +0100
+++ b/ChangeLog	Fri Jan 31 21:38:50 2025 +0100
@@ -1,6 +1,7 @@
 2025-01-31  Marc Glisse <marc.glisse at inria.fr>
 
 	* demos/calc/calc.y (yylex, yyerror): Declare.
+	* printf/repl-vsnprintf.c (__gmp_replacement_vsnprintf): Handle %a.
 
 2025-01-29  Albin Ahlbäck <albin.ahlback at gmail.com>
 	    Marc Glisse <marc.glisse at inria.fr>
diff -r a57f396ce062 -r e16148339597 printf/repl-vsnprintf.c
--- a/printf/repl-vsnprintf.c	Fri Jan 31 19:17:30 2025 +0100
+++ b/printf/repl-vsnprintf.c	Fri Jan 31 21:38:50 2025 +0100
@@ -264,6 +264,30 @@
 	      }
 	    goto next;
 
+	  case 'A':
+	  case 'a':
+	    /* 6 for the 2 signs, 0x, point and p.
+	     * The exponent is decimal, the rest hexa, pretend everything is
+	     * the exponent. The right factor is more like 2.4.
+	     * + 2 extra margin for error.
+	     * prec + width are added later. */
+	    total_width += 6 + floating_sizeof * 3 + 2;
+	    if (type == 'L')
+	      {
+#if HAVE_LONG_DOUBLE
+		(void) va_arg (ap, long double);
+		total_width += long_double_digits;
+#else
+		ASSERT_FAIL (long double not available);
+#endif
+	      }
+	    else
+	      {
+		(void) va_arg (ap, double);
+		total_width += double_digits;
+	      }
+	    goto next;
+
 	  case 'h':  /* short or char */
 	  case 'j':  /* intmax_t */
 	  case 'L':  /* long long or long double */


More information about the gmp-commit mailing list