Module Name:    src
Committed By:   mrg
Date:           Mon Jul  1 02:25:07 UTC 2024

Modified Files:
        src/external/lgpl3/mpfr/dist: VERSION
        src/external/lgpl3/mpfr/dist/src: Makefile.in vasprintf.c

Log Message:
merge mpfr 4.2.1.


To generate a diff of this commit:
cvs rdiff -u -r1.7 -r1.8 src/external/lgpl3/mpfr/dist/VERSION
cvs rdiff -u -r1.7 -r1.8 src/external/lgpl3/mpfr/dist/src/Makefile.in
cvs rdiff -u -r1.6 -r1.7 src/external/lgpl3/mpfr/dist/src/vasprintf.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/external/lgpl3/mpfr/dist/VERSION
diff -u src/external/lgpl3/mpfr/dist/VERSION:1.7 src/external/lgpl3/mpfr/dist/VERSION:1.8
--- src/external/lgpl3/mpfr/dist/VERSION:1.7	Sun Mar  5 22:11:12 2023
+++ src/external/lgpl3/mpfr/dist/VERSION	Mon Jul  1 02:25:07 2024
@@ -1 +1 @@
-4.2.0
+4.2.1

Index: src/external/lgpl3/mpfr/dist/src/Makefile.in
diff -u src/external/lgpl3/mpfr/dist/src/Makefile.in:1.7 src/external/lgpl3/mpfr/dist/src/Makefile.in:1.8
--- src/external/lgpl3/mpfr/dist/src/Makefile.in:1.7	Sun Mar  5 22:11:12 2023
+++ src/external/lgpl3/mpfr/dist/src/Makefile.in	Mon Jul  1 02:25:07 2024
@@ -617,7 +617,7 @@ libmpfr_la_LIBADD = @LIBOBJS@ $(am__appe
 #        4.0.x    6:x:0
 #        4.1.x    7:x:1
 #        4.2.x    8:x:2
-libmpfr_la_LDFLAGS = $(MPFR_LDFLAGS) $(LIBMPFR_LDFLAGS) -version-info 8:0:2
+libmpfr_la_LDFLAGS = $(MPFR_LDFLAGS) $(LIBMPFR_LDFLAGS) -version-info 8:1:2
 GET_PATCHES_SH = $(top_srcdir)/tools/get_patches.sh
 PATCHES = $(top_srcdir)/PATCHES
 

Index: src/external/lgpl3/mpfr/dist/src/vasprintf.c
diff -u src/external/lgpl3/mpfr/dist/src/vasprintf.c:1.6 src/external/lgpl3/mpfr/dist/src/vasprintf.c:1.7
--- src/external/lgpl3/mpfr/dist/src/vasprintf.c:1.6	Sun Mar  5 22:11:12 2023
+++ src/external/lgpl3/mpfr/dist/src/vasprintf.c	Mon Jul  1 02:25:07 2024
@@ -880,7 +880,7 @@ struct number_parts
   enum pad_t pad_type;    /* Padding type */
   mpfr_intmax_t pad_size; /* Number of padding characters */
 
-  char sign;              /* Sign character */
+  char sign;              /* Sign character ('-', '+', ' ', or '\0') */
 
   char *prefix_ptr;       /* Pointer to prefix part */
   size_t prefix_size;     /* Number of characters in *prefix_ptr */
@@ -1067,12 +1067,6 @@ regular_ab (struct number_parts *np, mpf
 
   uppercase = spec.spec == 'A';
 
-  /* sign */
-  if (MPFR_IS_NEG (p))
-    np->sign = '-';
-  else if (spec.showsign || spec.space)
-    np->sign = spec.showsign ? '+' : ' ';
-
   if (spec.spec == 'a' || spec.spec == 'A')
     /* prefix part */
     {
@@ -1290,12 +1284,6 @@ regular_eg (struct number_parts *np, mpf
 
   const int uppercase = spec.spec == 'E' || spec.spec == 'G';
 
-  /* sign */
-  if (MPFR_IS_NEG (p))
-    np->sign = '-';
-  else if (spec.showsign || spec.space)
-    np->sign = spec.showsign ? '+' : ' ';
-
   /* integral part */
   np->ip_size = 1;
   if (dec_info == NULL)
@@ -1425,12 +1413,6 @@ regular_fg (struct number_parts *np, mpf
      and it should have been changed to 6 before the function call) */
   MPFR_ASSERTD (spec.prec >= 0);
 
-  /* sign */
-  if (MPFR_IS_NEG (p))
-    np->sign = '-';
-  else if (spec.showsign || spec.space)
-    np->sign = spec.showsign ? '+' : ' ';
-
   if (MPFR_GET_EXP (p) <= 0)
     /* 0 < |p| < 1 */
     {
@@ -1725,8 +1707,7 @@ partition_number (struct number_parts *n
   /* WARNING: left justification means right space padding */
   np->pad_type = spec.left ? RIGHT : spec.pad == '0' ? LEADING_ZEROS : LEFT;
   np->pad_size = 0;
-  np->sign = '\0';
-  np->prefix_ptr =NULL;
+  np->prefix_ptr = NULL;
   np->prefix_size = 0;
   np->thousands_sep = '\0';
   np->ip_ptr = NULL;
@@ -1746,6 +1727,12 @@ partition_number (struct number_parts *n
   uppercase = spec.spec == 'A' || spec.spec == 'E' || spec.spec == 'F'
     || spec.spec == 'G';
 
+  /* The sign/space rule is the same for all cases. */
+  np->sign =
+    MPFR_IS_NEG (p) ? '-' :
+    spec.showsign ? '+' :
+    spec.space ? ' ' : '\0';
+
   if (MPFR_UNLIKELY (MPFR_IS_SINGULAR (p)))
     {
       if (MPFR_IS_NAN (p))
@@ -1767,9 +1754,6 @@ partition_number (struct number_parts *n
                with left spaces instead */
             np->pad_type = LEFT;
 
-          if (MPFR_IS_NEG (p))
-            np->sign = '-';
-
           np->ip_size = MPFR_INF_STRING_LENGTH;
           str = (char *) mpfr_allocate_func (1 + np->ip_size);
           strcpy (str, uppercase ? MPFR_INF_STRING_UC : MPFR_INF_STRING_LC);
@@ -1781,11 +1765,6 @@ partition_number (struct number_parts *n
           /* note: for 'g' spec, zero is always displayed with 'f'-style with
              precision spec.prec - 1 and the trailing zeros are removed unless
              the flag '#' is used. */
-          if (MPFR_IS_NEG (p))
-            /* signed zero */
-            np->sign = '-';
-          else if (spec.showsign || spec.space)
-            np->sign = spec.showsign ? '+' : ' ';
 
           if (spec.spec == 'a' || spec.spec == 'A')
             /* prefix part */
@@ -1849,9 +1828,6 @@ partition_number (struct number_parts *n
         /* change to right justification padding with left spaces */
         np->pad_type = LEFT;
 
-      if (MPFR_IS_NEG (p))
-        np->sign = '-';
-
       np->ip_size = 3;
       str = (char *) mpfr_allocate_func (1 + np->ip_size);
       strcpy (str, uppercase ? "UBF" : "ubf");
@@ -1888,7 +1864,7 @@ partition_number (struct number_parts *n
              precision T-1.
              where T is the threshold computed below and X is the exponent
              that would be displayed with style 'e' and precision T-1. */
-          int threshold;
+          mpfr_intmax_t threshold;
           mpfr_exp_t x, e, k;
           struct decimal_info dec_info;
 
@@ -1920,9 +1896,15 @@ partition_number (struct number_parts *n
           e = e <= 0 ? k : (e + 2) / 3 + (k <= 0 ? 0 : k);
           MPFR_ASSERTD (e >= 1);
 
+          if (e > threshold)
+            e = threshold;
+
+          /* error if e does not fit in size_t (for mpfr_get_str) */
+          if (e > (size_t) -1)
+            goto error;
+
           dec_info.str = mpfr_get_str (NULL, &dec_info.exp, 10,
-                                       e < threshold ? e : threshold,
-                                       p, spec.rnd_mode);
+                                       e, p, spec.rnd_mode);
           register_string (np->sl, dec_info.str);
           /* mpfr_get_str corresponds to a significand between 0.1 and 1,
              whereas here we want a significand between 1 and 10. */
@@ -2030,7 +2012,7 @@ sprnt_fp (struct string_buffer *buf, mpf
   if (np.pad_type == LEFT && np.pad_size != 0)
     buffer_pad (buf, ' ', np.pad_size);
 
-  /* sign character (may be '-', '+', or ' ') */
+  /* sign character (may be '-', '+', ' ', or '\0') */
   if (np.sign)
     buffer_pad (buf, np.sign, 1);
 

Reply via email to