patches/mpfr/2.4.0/110-mpfr_snprintf.patch
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Sun Jan 17 23:06:02 2010 +0100 (2010-01-17)
changeset 1740 c57458bb354d
permissions -rw-r--r--
configure: do not require hg when configuring in an hg clone

When configuring in an hg clone, we need hg to compute the version string.
It can happen that users do not have Mercurial (eg. if they got a snapshot
rather that they did a full clone). In this case, we can still run, of
course, so simply fill the version string with a sufficiently explicit
value, that does not require hg. The date is a good candidate.
     1 diff -Naurd mpfr-2.4.0-a/PATCHES mpfr-2.4.0-b/PATCHES
     2 --- mpfr-2.4.0-a/PATCHES	2009-02-25 13:27:38.000000000 +0000
     3 +++ mpfr-2.4.0-b/PATCHES	2009-02-25 13:42:26.000000000 +0000
     4 @@ -0,0 +1 @@
     5 +mpfr_snprintf
     6 diff -Naurd mpfr-2.4.0-a/VERSION mpfr-2.4.0-b/VERSION
     7 --- mpfr-2.4.0-a/VERSION	2009-02-20 17:27:44.000000000 +0000
     8 +++ mpfr-2.4.0-b/VERSION	2009-02-25 13:41:31.000000000 +0000
     9 @@ -1 +1 @@
    10 -2.4.0-p1
    11 +2.4.0-p2
    12 diff -Naurd mpfr-2.4.0-a/mpfr.h mpfr-2.4.0-b/mpfr.h
    13 --- mpfr-2.4.0-a/mpfr.h	2009-02-20 17:27:44.000000000 +0000
    14 +++ mpfr-2.4.0-b/mpfr.h	2009-02-25 13:41:31.000000000 +0000
    15 @@ -27,7 +27,7 @@
    16  #define MPFR_VERSION_MAJOR 2
    17  #define MPFR_VERSION_MINOR 4
    18  #define MPFR_VERSION_PATCHLEVEL 0
    19 -#define MPFR_VERSION_STRING "2.4.0-p1"
    20 +#define MPFR_VERSION_STRING "2.4.0-p2"
    21  
    22  /* Macros dealing with MPFR VERSION */
    23  #define MPFR_VERSION_NUM(a,b,c) (((a) << 16L) | ((b) << 8) | (c))
    24 diff -Naurd mpfr-2.4.0-a/printf.c mpfr-2.4.0-b/printf.c
    25 --- mpfr-2.4.0-a/printf.c	2009-01-26 12:52:01.000000000 +0000
    26 +++ mpfr-2.4.0-b/printf.c	2009-02-25 13:41:22.000000000 +0000
    27 @@ -154,16 +154,16 @@
    28    int ret;
    29    size_t min_size;
    30  
    31 -  /* C99 allows SIZE to be null */
    32 -  if (size == 0)
    33 -    return 0;
    34 -
    35 -  MPFR_ASSERTD (buf != NULL);
    36 -
    37    GET_STR (ret, str, fmt);
    38 -  min_size = (size_t)ret < size ? (size_t)ret : size - 1;
    39 -  strncpy (buf, str, min_size);
    40 -  buf[min_size + 1] = '\0';
    41 +
    42 +  /* C99 allows SIZE to be zero */
    43 +  if (size != 0)
    44 +    {
    45 +      MPFR_ASSERTN (buf != NULL);
    46 +      min_size = (size_t)ret < size ? (size_t)ret : size - 1;
    47 +      strncpy (buf, str, min_size);
    48 +      buf[min_size] = '\0';
    49 +    }
    50  
    51    mpfr_free_str (str);
    52    return ret;
    53 @@ -176,16 +176,17 @@
    54    int ret;
    55    int min_size;
    56  
    57 -  /* C99 allows SIZE to be null */
    58 -  if (size == 0)
    59 -    return 0;
    60 +  GET_STR_VA (ret, str, fmt, ap);
    61  
    62 -  MPFR_ASSERTD (buf != NULL);
    63 +  /* C99 allows SIZE to be zero */
    64 +  if (size != 0)
    65 +    {
    66 +      MPFR_ASSERTN (buf != NULL);
    67 +      min_size = (size_t)ret < size ? (size_t)ret : size - 1;
    68 +      strncpy (buf, str, min_size);
    69 +      buf[min_size] = '\0';
    70 +    }
    71  
    72 -  GET_STR_VA (ret, str, fmt, ap);
    73 -  min_size = (size_t)ret < size ? (size_t)ret : size - 1;
    74 -  strncpy (buf, str, min_size);
    75 -  buf[min_size + 1] = '\0';
    76    mpfr_free_str (str);
    77    return ret;
    78  }
    79 diff -Naurd mpfr-2.4.0-a/tests/tsprintf.c mpfr-2.4.0-b/tests/tsprintf.c
    80 --- mpfr-2.4.0-a/tests/tsprintf.c	2009-01-26 12:52:00.000000000 +0000
    81 +++ mpfr-2.4.0-b/tests/tsprintf.c	2009-02-25 13:41:22.000000000 +0000
    82 @@ -72,21 +72,37 @@
    83  
    84    /* test mpfr_snprintf */
    85    p = (int) (randlimb () % n0);
    86 -  n1 = mpfr_snprintf (buffer, p, fmt, x);
    87 -  if ((p != 0 && n0 != n1) || (p == 0 && n1 != 0))
    88 +  if (p == 0 && (randlimb () & 1) == 0)
    89 +    {
    90 +      n1 = mpfr_snprintf (NULL, 0, fmt, x);
    91 +    }
    92 +  else
    93 +    {
    94 +      buffer[p] = 17;
    95 +      n1 = mpfr_snprintf (buffer, p, fmt, x);
    96 +      if (buffer[p] != 17)
    97 +        {
    98 +          printf ("Buffer overflow in mpfr_snprintf for p = %d!\n", p);
    99 +          exit (1);
   100 +        }
   101 +    }
   102 +  if (n0 != n1)
   103      {
   104        printf ("Error in mpfr_snprintf (s, %d, \"%s\", x) return value\n",
   105                p, fmt);
   106        printf ("expected: %d\ngot:      %d\n", n0, n1);
   107        exit (1);
   108      }
   109 -  if (strncmp (expected, buffer, p) != 0)
   110 +  if ((p > 1 && strncmp (expected, buffer, p-1) != 0)
   111 +      || (p == 1 && buffer[0] != '\0'))
   112      {
   113 -      printf ("Error in mpfr_snprintf (s, %d, \"%s\", x);\n", p, fmt);
   114 -      printf ("expected: \"%s\"\ngot:      \"%s\"\n", expected, buffer);
   115 +      char part_expected[p];
   116 +      strncpy (part_expected, expected, p);
   117 +      part_expected[p-1] = '\0';
   118 +      printf ("Error in mpfr_vsnprintf (s, %d, \"%s\", ...);\n", p, fmt);
   119 +      printf ("expected: \"%s\"\ngot:      \"%s\"\n", part_expected, buffer);
   120        exit (1);
   121      }
   122 -
   123    return n0;
   124  }
   125  
   126 @@ -116,8 +132,21 @@
   127  
   128    /* test mpfr_snprintf */
   129    p = (int) (randlimb () % n0);
   130 -  n1 = mpfr_vsnprintf (buffer, p, fmt, ap1);
   131 -  if ((p != 0 && n0 != n1) || (p == 0 && n1 != 0))
   132 +  if (p == 0 && (randlimb () & 1) == 0)
   133 +    {
   134 +      n1 = mpfr_vsnprintf (NULL, 0, fmt, ap1);
   135 +    }
   136 +  else
   137 +    {
   138 +      buffer[p] = 17;
   139 +      n1 = mpfr_vsnprintf (buffer, p, fmt, ap1);
   140 +      if (buffer[p] != 17)
   141 +        {
   142 +          printf ("Buffer overflow in mpfr_vsnprintf for p = %d!\n", p);
   143 +          exit (1);
   144 +        }
   145 +    }
   146 +  if (n0 != n1)
   147      {
   148        printf ("Error in mpfr_vsnprintf (s, %d, \"%s\", ...) return value\n",
   149                p, fmt);
   150 @@ -126,10 +155,14 @@
   151        va_end (ap1);
   152        exit (1);
   153      }
   154 -  if (strncmp (expected, buffer, p) != 0)
   155 +  if ((p > 1 && strncmp (expected, buffer, p-1) != 0)
   156 +      || (p == 1 && buffer[0] != '\0'))
   157      {
   158 +      char part_expected[p];
   159 +      strncpy (part_expected, expected, p);
   160 +      part_expected[p-1] = '\0';
   161        printf ("Error in mpfr_vsnprintf (s, %d, \"%s\", ...);\n", p, fmt);
   162 -      printf ("expected: \"%s\"\ngot:      \"%s\"\n", expected, buffer);
   163 +      printf ("expected: \"%s\"\ngot:      \"%s\"\n", part_expected, buffer);
   164  
   165        va_end (ap1);
   166        exit (1);
   167 diff -Naurd mpfr-2.4.0-a/version.c mpfr-2.4.0-b/version.c
   168 --- mpfr-2.4.0-a/version.c	2009-02-20 17:27:44.000000000 +0000
   169 +++ mpfr-2.4.0-b/version.c	2009-02-25 13:41:31.000000000 +0000
   170 @@ -25,5 +25,5 @@
   171  const char *
   172  mpfr_get_version (void)
   173  {
   174 -  return "2.4.0-p1";
   175 +  return "2.4.0-p2";
   176  }