]> git.ipfire.org Git - thirdparty/coreutils.git/commitdiff
Plug another technically-unimportant leak in sort.
authorJim Meyering <jim@meyering.net>
Mon, 13 Nov 2006 14:19:22 +0000 (15:19 +0100)
committerJim Meyering <jim@meyering.net>
Mon, 13 Nov 2006 14:19:22 +0000 (15:19 +0100)
* src/sort.c (main): Don't allocate memory for each new key here.
(insertkey): Allocate memory for each key here, instead.
(key_init): Rename from new_key.  Don't allocate.

ChangeLog
src/sort.c

index 33558767e9126ad73bff926614d503a468d21a1f..e737ee1739d28d0cf337edc86d1f677626659526 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,10 @@
 2006-11-13  Jim Meyering  <jim@meyering.net>
 
+       Plug another technically-unimportant leak in sort.
+       * src/sort.c (main): Don't allocate memory for each new key here.
+       (insertkey): Allocate memory for each key here, instead.
+       (key_init): Rename from new_key.  Don't allocate.
+
        * src/sort.c (main): Plug a tiny memory leak.
        Move declaration of local "minus" down to be nearer point of use.
 
index 56a0651ebb63c58c8adfc9630ead6f51fd6dbd6c..bdaf032a3c3915b78ba7ec4b75003d13ebefc0f4 100644 (file)
@@ -2099,13 +2099,15 @@ sort (char * const *files, size_t nfiles, char const *output_file)
     }
 }
 
-/* Insert key KEY at the end of the key list.  */
+/* Insert a malloc'd copy of key KEY_ARG at the end of the key list.  */
 
 static void
-insertkey (struct keyfield *key)
+insertkey (struct keyfield *key_arg)
 {
   struct keyfield **p;
+  struct keyfield *key = xmalloc (sizeof *key);
 
+  *key = *key_arg;
   for (p = &keylist; *p; p = &(*p)->next)
     continue;
   *p = key;
@@ -2271,9 +2273,9 @@ set_ordering (const char *s, struct keyfield *key, enum blanktype blanktype)
 }
 
 static struct keyfield *
-new_key (void)
+key_init (struct keyfield *key)
 {
-  struct keyfield *key = xzalloc (sizeof *key);
+  memset (key, 0, sizeof *key);
   key->eword = SIZE_MAX;
   return key;
 }
@@ -2282,6 +2284,7 @@ int
 main (int argc, char **argv)
 {
   struct keyfield *key;
+  struct keyfield key_buf;
   struct keyfield gkey;
   char const *s;
   int c = 0;
@@ -2408,7 +2411,7 @@ main (int argc, char **argv)
                {
                  /* Treat +POS1 [-POS2] as a key if possible; but silently
                     treat an operand as a file if it is not a valid +POS1.  */
-                 key = new_key ();
+                 key = key_init (&key_buf);
                  s = parse_field_count (optarg + 1, &key->sword, NULL);
                  if (s && *s == '.')
                    s = parse_field_count (s + 1, &key->schar, NULL);
@@ -2463,7 +2466,7 @@ main (int argc, char **argv)
          break;
 
        case 'k':
-         key = new_key ();
+         key = key_init (&key_buf);
 
          /* Get POS1. */
          s = parse_field_count (optarg, &key->sword,