patches/mpfr/2.4.0/110-mpfr_snprintf.patch
branch1.4
changeset 1307 39b1c755f19b
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/patches/mpfr/2.4.0/110-mpfr_snprintf.patch	Sun Apr 26 10:47:00 2009 +0000
     1.3 @@ -0,0 +1,176 @@
     1.4 +diff -Naurd mpfr-2.4.0-a/PATCHES mpfr-2.4.0-b/PATCHES
     1.5 +--- mpfr-2.4.0-a/PATCHES	2009-02-25 13:27:38.000000000 +0000
     1.6 ++++ mpfr-2.4.0-b/PATCHES	2009-02-25 13:42:26.000000000 +0000
     1.7 +@@ -0,0 +1 @@
     1.8 ++mpfr_snprintf
     1.9 +diff -Naurd mpfr-2.4.0-a/VERSION mpfr-2.4.0-b/VERSION
    1.10 +--- mpfr-2.4.0-a/VERSION	2009-02-20 17:27:44.000000000 +0000
    1.11 ++++ mpfr-2.4.0-b/VERSION	2009-02-25 13:41:31.000000000 +0000
    1.12 +@@ -1 +1 @@
    1.13 +-2.4.0-p1
    1.14 ++2.4.0-p2
    1.15 +diff -Naurd mpfr-2.4.0-a/mpfr.h mpfr-2.4.0-b/mpfr.h
    1.16 +--- mpfr-2.4.0-a/mpfr.h	2009-02-20 17:27:44.000000000 +0000
    1.17 ++++ mpfr-2.4.0-b/mpfr.h	2009-02-25 13:41:31.000000000 +0000
    1.18 +@@ -27,7 +27,7 @@
    1.19 + #define MPFR_VERSION_MAJOR 2
    1.20 + #define MPFR_VERSION_MINOR 4
    1.21 + #define MPFR_VERSION_PATCHLEVEL 0
    1.22 +-#define MPFR_VERSION_STRING "2.4.0-p1"
    1.23 ++#define MPFR_VERSION_STRING "2.4.0-p2"
    1.24 + 
    1.25 + /* Macros dealing with MPFR VERSION */
    1.26 + #define MPFR_VERSION_NUM(a,b,c) (((a) << 16L) | ((b) << 8) | (c))
    1.27 +diff -Naurd mpfr-2.4.0-a/printf.c mpfr-2.4.0-b/printf.c
    1.28 +--- mpfr-2.4.0-a/printf.c	2009-01-26 12:52:01.000000000 +0000
    1.29 ++++ mpfr-2.4.0-b/printf.c	2009-02-25 13:41:22.000000000 +0000
    1.30 +@@ -154,16 +154,16 @@
    1.31 +   int ret;
    1.32 +   size_t min_size;
    1.33 + 
    1.34 +-  /* C99 allows SIZE to be null */
    1.35 +-  if (size == 0)
    1.36 +-    return 0;
    1.37 +-
    1.38 +-  MPFR_ASSERTD (buf != NULL);
    1.39 +-
    1.40 +   GET_STR (ret, str, fmt);
    1.41 +-  min_size = (size_t)ret < size ? (size_t)ret : size - 1;
    1.42 +-  strncpy (buf, str, min_size);
    1.43 +-  buf[min_size + 1] = '\0';
    1.44 ++
    1.45 ++  /* C99 allows SIZE to be zero */
    1.46 ++  if (size != 0)
    1.47 ++    {
    1.48 ++      MPFR_ASSERTN (buf != NULL);
    1.49 ++      min_size = (size_t)ret < size ? (size_t)ret : size - 1;
    1.50 ++      strncpy (buf, str, min_size);
    1.51 ++      buf[min_size] = '\0';
    1.52 ++    }
    1.53 + 
    1.54 +   mpfr_free_str (str);
    1.55 +   return ret;
    1.56 +@@ -176,16 +176,17 @@
    1.57 +   int ret;
    1.58 +   int min_size;
    1.59 + 
    1.60 +-  /* C99 allows SIZE to be null */
    1.61 +-  if (size == 0)
    1.62 +-    return 0;
    1.63 ++  GET_STR_VA (ret, str, fmt, ap);
    1.64 + 
    1.65 +-  MPFR_ASSERTD (buf != NULL);
    1.66 ++  /* C99 allows SIZE to be zero */
    1.67 ++  if (size != 0)
    1.68 ++    {
    1.69 ++      MPFR_ASSERTN (buf != NULL);
    1.70 ++      min_size = (size_t)ret < size ? (size_t)ret : size - 1;
    1.71 ++      strncpy (buf, str, min_size);
    1.72 ++      buf[min_size] = '\0';
    1.73 ++    }
    1.74 + 
    1.75 +-  GET_STR_VA (ret, str, fmt, ap);
    1.76 +-  min_size = (size_t)ret < size ? (size_t)ret : size - 1;
    1.77 +-  strncpy (buf, str, min_size);
    1.78 +-  buf[min_size + 1] = '\0';
    1.79 +   mpfr_free_str (str);
    1.80 +   return ret;
    1.81 + }
    1.82 +diff -Naurd mpfr-2.4.0-a/tests/tsprintf.c mpfr-2.4.0-b/tests/tsprintf.c
    1.83 +--- mpfr-2.4.0-a/tests/tsprintf.c	2009-01-26 12:52:00.000000000 +0000
    1.84 ++++ mpfr-2.4.0-b/tests/tsprintf.c	2009-02-25 13:41:22.000000000 +0000
    1.85 +@@ -72,21 +72,37 @@
    1.86 + 
    1.87 +   /* test mpfr_snprintf */
    1.88 +   p = (int) (randlimb () % n0);
    1.89 +-  n1 = mpfr_snprintf (buffer, p, fmt, x);
    1.90 +-  if ((p != 0 && n0 != n1) || (p == 0 && n1 != 0))
    1.91 ++  if (p == 0 && (randlimb () & 1) == 0)
    1.92 ++    {
    1.93 ++      n1 = mpfr_snprintf (NULL, 0, fmt, x);
    1.94 ++    }
    1.95 ++  else
    1.96 ++    {
    1.97 ++      buffer[p] = 17;
    1.98 ++      n1 = mpfr_snprintf (buffer, p, fmt, x);
    1.99 ++      if (buffer[p] != 17)
   1.100 ++        {
   1.101 ++          printf ("Buffer overflow in mpfr_snprintf for p = %d!\n", p);
   1.102 ++          exit (1);
   1.103 ++        }
   1.104 ++    }
   1.105 ++  if (n0 != n1)
   1.106 +     {
   1.107 +       printf ("Error in mpfr_snprintf (s, %d, \"%s\", x) return value\n",
   1.108 +               p, fmt);
   1.109 +       printf ("expected: %d\ngot:      %d\n", n0, n1);
   1.110 +       exit (1);
   1.111 +     }
   1.112 +-  if (strncmp (expected, buffer, p) != 0)
   1.113 ++  if ((p > 1 && strncmp (expected, buffer, p-1) != 0)
   1.114 ++      || (p == 1 && buffer[0] != '\0'))
   1.115 +     {
   1.116 +-      printf ("Error in mpfr_snprintf (s, %d, \"%s\", x);\n", p, fmt);
   1.117 +-      printf ("expected: \"%s\"\ngot:      \"%s\"\n", expected, buffer);
   1.118 ++      char part_expected[p];
   1.119 ++      strncpy (part_expected, expected, p);
   1.120 ++      part_expected[p-1] = '\0';
   1.121 ++      printf ("Error in mpfr_vsnprintf (s, %d, \"%s\", ...);\n", p, fmt);
   1.122 ++      printf ("expected: \"%s\"\ngot:      \"%s\"\n", part_expected, buffer);
   1.123 +       exit (1);
   1.124 +     }
   1.125 +-
   1.126 +   return n0;
   1.127 + }
   1.128 + 
   1.129 +@@ -116,8 +132,21 @@
   1.130 + 
   1.131 +   /* test mpfr_snprintf */
   1.132 +   p = (int) (randlimb () % n0);
   1.133 +-  n1 = mpfr_vsnprintf (buffer, p, fmt, ap1);
   1.134 +-  if ((p != 0 && n0 != n1) || (p == 0 && n1 != 0))
   1.135 ++  if (p == 0 && (randlimb () & 1) == 0)
   1.136 ++    {
   1.137 ++      n1 = mpfr_vsnprintf (NULL, 0, fmt, ap1);
   1.138 ++    }
   1.139 ++  else
   1.140 ++    {
   1.141 ++      buffer[p] = 17;
   1.142 ++      n1 = mpfr_vsnprintf (buffer, p, fmt, ap1);
   1.143 ++      if (buffer[p] != 17)
   1.144 ++        {
   1.145 ++          printf ("Buffer overflow in mpfr_vsnprintf for p = %d!\n", p);
   1.146 ++          exit (1);
   1.147 ++        }
   1.148 ++    }
   1.149 ++  if (n0 != n1)
   1.150 +     {
   1.151 +       printf ("Error in mpfr_vsnprintf (s, %d, \"%s\", ...) return value\n",
   1.152 +               p, fmt);
   1.153 +@@ -126,10 +155,14 @@
   1.154 +       va_end (ap1);
   1.155 +       exit (1);
   1.156 +     }
   1.157 +-  if (strncmp (expected, buffer, p) != 0)
   1.158 ++  if ((p > 1 && strncmp (expected, buffer, p-1) != 0)
   1.159 ++      || (p == 1 && buffer[0] != '\0'))
   1.160 +     {
   1.161 ++      char part_expected[p];
   1.162 ++      strncpy (part_expected, expected, p);
   1.163 ++      part_expected[p-1] = '\0';
   1.164 +       printf ("Error in mpfr_vsnprintf (s, %d, \"%s\", ...);\n", p, fmt);
   1.165 +-      printf ("expected: \"%s\"\ngot:      \"%s\"\n", expected, buffer);
   1.166 ++      printf ("expected: \"%s\"\ngot:      \"%s\"\n", part_expected, buffer);
   1.167 + 
   1.168 +       va_end (ap1);
   1.169 +       exit (1);
   1.170 +diff -Naurd mpfr-2.4.0-a/version.c mpfr-2.4.0-b/version.c
   1.171 +--- mpfr-2.4.0-a/version.c	2009-02-20 17:27:44.000000000 +0000
   1.172 ++++ mpfr-2.4.0-b/version.c	2009-02-25 13:41:31.000000000 +0000
   1.173 +@@ -25,5 +25,5 @@
   1.174 + const char *
   1.175 + mpfr_get_version (void)
   1.176 + {
   1.177 +-  return "2.4.0-p1";
   1.178 ++  return "2.4.0-p2";
   1.179 + }