Update from gnulib.
authorJim Meyering <jim@meyering.net>
Fri, 31 Oct 2003 13:46:26 +0000 (13:46 +0000)
committerJim Meyering <jim@meyering.net>
Fri, 31 Oct 2003 13:46:26 +0000 (13:46 +0000)
lib/quotearg.c

index bffa14b7a0a7cc73796607e35e1dbc52d9c50c33..c695646f13ec247187b0404c04835f6f0479976e 100644 (file)
@@ -538,10 +538,8 @@ quotearg_n_options (int n, char const *arg, size_t argsize,
   if (nslots <= n0)
     {
       unsigned int n1 = n0 + 1;
-      size_t s = n1 * sizeof *slotvec;
 
-      if (SIZE_MAX / UINT_MAX <= sizeof *slotvec
-         && n1 != s / sizeof *slotvec)
+      if (xalloc_oversized (n1, sizeof *slotvec))
        xalloc_die ();
 
       if (slotvec == &slotvec0)
@@ -549,7 +547,7 @@ quotearg_n_options (int n, char const *arg, size_t argsize,
          slotvec = xmalloc (sizeof *slotvec);
          *slotvec = slotvec0;
        }
-      slotvec = xrealloc (slotvec, s);
+      slotvec = xrealloc (slotvec, n1 * sizeof *slotvec);
       memset (slotvec + nslots, 0, (n1 - nslots) * sizeof *slotvec);
       nslots = n1;
     }
@@ -562,7 +560,9 @@ quotearg_n_options (int n, char const *arg, size_t argsize,
     if (size <= qsize)
       {
        slotvec[n].size = size = qsize + 1;
-       slotvec[n].val = val = xrealloc (val == slot0 ? 0 : val, size);
+       if (val != slot0)
+         free (val);
+       slotvec[n].val = val = xmalloc (size);
        quotearg_buffer (val, size, arg, argsize, options);
       }