From 1e8189fbb5629e0f78298e420b78b9fd381d6ff4 Mon Sep 17 00:00:00 2001 From: Michael Snyder Date: Sat, 18 Aug 2007 00:17:08 +0000 Subject: [PATCH] 2007-08-17 Michael Snyder * completer.c (filename_completer): Avoid memory leak. Remove unnecessary nested block. --- gdb/ChangeLog | 3 +++ gdb/completer.c | 52 ++++++++++++++++++++++++------------------------- 2 files changed, 29 insertions(+), 26 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 0bd7c85a535..29c8cc303ac 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,8 @@ 2007-08-17 Michael Snyder + * 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 diff --git a/gdb/completer.c b/gdb/completer.c index 0a0d30e9bc9..7d3ead9f391 100644 --- a/gdb/completer.c +++ b/gdb/completer.c @@ -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 -- 2.30.2