changeset 4825:4f0f5b3860c9

(quotearg_n_options): Use free/xmalloc rather than xrealloc. Use a simpler test for size overflow. Don't use xalloc_oversized because unsigned int might be wider than size_t (!); this suggests that we should switch from unsigned int to size_t for slot numbers.
author Paul Eggert <eggert@cs.ucla.edu>
date Wed, 29 Oct 2003 17:33:05 +0000
parents b3e190d8e109
children 441582dcfc37
files lib/quotearg.c
diffstat 1 files changed, 5 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/lib/quotearg.c
+++ b/lib/quotearg.c
@@ -538,10 +538,8 @@
   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 (SIZE_MAX / sizeof *slotvec < n1)
 	xalloc_die ();
 
       if (slotvec == &slotvec0)
@@ -549,7 +547,7 @@
 	  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 @@
     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);
       }