aboutsummaryrefslogtreecommitdiff
path: root/posix/glob.c
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2006-09-30 15:09:35 +0000
committerUlrich Drepper <drepper@redhat.com>2006-09-30 15:09:35 +0000
commitf01e40699cc30cbaca756ecae6e08718d7530d20 (patch)
tree1d01936c3b0d192021c3cef15c58612e3ca15eea /posix/glob.c
parent690c3947edd0685817eb985e9cd58ecf043f2095 (diff)
downloadglibc-f01e40699cc30cbaca756ecae6e08718d7530d20.zip
glibc-f01e40699cc30cbaca756ecae6e08718d7530d20.tar.gz
glibc-f01e40699cc30cbaca756ecae6e08718d7530d20.tar.bz2
* posix/glob.c (glob_in_dir): Add some comments and asserts to
explain why there are no leaks.
Diffstat (limited to 'posix/glob.c')
-rw-r--r--posix/glob.c18
1 files changed, 16 insertions, 2 deletions
diff --git a/posix/glob.c b/posix/glob.c
index 630d540..0079a15 100644
--- a/posix/glob.c
+++ b/posix/glob.c
@@ -1287,8 +1287,15 @@ glob_in_dir (const char *pattern, const char *directory, int flags,
for (size_t i = 0; i < cur; ++i)
free (names->name[i]);
names = names->next;
+ /* NB: we will not leak memory here if we exit without
+ freeing the current block assigned to OLD. At least
+ the very first block is always allocated on the stack
+ and this is the block assigned to OLD here. */
if (names == NULL)
- break;
+ {
+ assert (old == &init_names);
+ break;
+ }
cur = names->count;
if (old == names_alloca)
names_alloca = names;
@@ -1306,8 +1313,15 @@ glob_in_dir (const char *pattern, const char *directory, int flags,
new_gl_pathv[pglob->gl_offs + pglob->gl_pathc++]
= names->name[i];
names = names->next;
+ /* NB: we will not leak memory here if we exit without
+ freeing the current block assigned to OLD. At least
+ the very first block is always allocated on the stack
+ and this is the block assigned to OLD here. */
if (names == NULL)
- break;
+ {
+ assert (old == &init_names);
+ break;
+ }
cur = names->count;
if (old == names_alloca)
names_alloca = names;