2007-08-17 Michael Snyder <msnyder@access-company.com>
authorMichael Snyder <msnyder@vmware.com>
Sat, 18 Aug 2007 00:17:08 +0000 (00:17 +0000)
committerMichael Snyder <msnyder@vmware.com>
Sat, 18 Aug 2007 00:17:08 +0000 (00:17 +0000)
* completer.c (filename_completer): Avoid memory leak.
Remove unnecessary nested block.

gdb/ChangeLog
gdb/completer.c

index 0bd7c85a5353583f3fbe16e3cee2c3fd625258e9..29c8cc303ac21000576c9bd0ee9220ddc88d3052 100644 (file)
@@ -1,5 +1,8 @@
 2007-08-17  Michael Snyder  <msnyder@access-company.com>
 
+       * completer.c (filename_completer): Avoid memory leak.
+       Remove unnecessary nested block.
+
        * c-exp.y (parse_number): Memory leak.
 
        * completer.c (location_completer): Must free 'fn_list', except 
index 0a0d30e9bc99cfd7f935c6473c25dda96d0b1ffd..7d3ead9f39156ed8d140ae4e298975683382af92 100644 (file)
@@ -129,7 +129,7 @@ filename_completer (char *text, char *word)
   subsequent_name = 0;
   while (1)
     {
-      char *p;
+      char *p, *q;
       p = rl_filename_completion_function (text, subsequent_name);
       if (return_val_used >= return_val_alloced)
        {
@@ -151,32 +151,32 @@ filename_completer (char *text, char *word)
       /* Like emacs, don't complete on old versions.  Especially useful
          in the "source" command.  */
       if (p[strlen (p) - 1] == '~')
-       continue;
+       {
+         xfree (p);
+         continue;
+       }
 
-      {
-       char *q;
-       if (word == text)
-         /* Return exactly p.  */
-         return_val[return_val_used++] = p;
-       else if (word > text)
-         {
-           /* Return some portion of p.  */
-           q = xmalloc (strlen (p) + 5);
-           strcpy (q, p + (word - text));
-           return_val[return_val_used++] = q;
-           xfree (p);
-         }
-       else
-         {
-           /* Return some of TEXT plus p.  */
-           q = xmalloc (strlen (p) + (text - word) + 5);
-           strncpy (q, word, text - word);
-           q[text - word] = '\0';
-           strcat (q, p);
-           return_val[return_val_used++] = q;
-           xfree (p);
-         }
-      }
+      if (word == text)
+       /* Return exactly p.  */
+       return_val[return_val_used++] = p;
+      else if (word > text)
+       {
+         /* Return some portion of p.  */
+         q = xmalloc (strlen (p) + 5);
+         strcpy (q, p + (word - text));
+         return_val[return_val_used++] = q;
+         xfree (p);
+       }
+      else
+       {
+         /* Return some of TEXT plus p.  */
+         q = xmalloc (strlen (p) + (text - word) + 5);
+         strncpy (q, word, text - word);
+         q[text - word] = '\0';
+         strcat (q, p);
+         return_val[return_val_used++] = q;
+         xfree (p);
+       }
     }
 #if 0
   /* There is no way to do this just long enough to affect quote inserting