* posix/glob.c (glob_in_dir): Add some comments and asserts to
authorUlrich Drepper <drepper@redhat.com>
Sat, 30 Sep 2006 15:09:35 +0000 (15:09 +0000)
committerUlrich Drepper <drepper@redhat.com>
Sat, 30 Sep 2006 15:09:35 +0000 (15:09 +0000)
explain why there are no leaks.

ChangeLog
libio/bug-wmemstream1.c
libio/tst-wmemstream1.c
libio/tst-wmemstream2.c
libio/wmemstream.c
posix/glob.c

index 22f5067..d78dffc 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2006-09-30  Ulrich Drepper  <drepper@redhat.com>
+
+       * posix/glob.c (glob_in_dir): Add some comments and asserts to
+       explain why there are no leaks.
+
 2006-09-29  Ulrich Drepper  <drepper@redhat.com>
 
        * libio/wmemstream.c: Include <wchar.h>.
index 2190593..22d67f7 100644 (file)
@@ -1,5 +1,6 @@
 #include <stdio.h>
 #include <string.h>
+#include <wchar.h>
 
 
 static int
index 0c59c1a..f8b308b 100644 (file)
@@ -1,3 +1,5 @@
+#include <wchar.h>
+
 #define CHAR_T wchar_t
 #define W(o) L##o
 #define OPEN_MEMSTREAM open_wmemstream
index f51a1db..e2442eb 100644 (file)
@@ -1,3 +1,5 @@
+#include <wchar.h>
+
 #define CHAR_T wchar_t
 #define W(o) L##o
 #define OPEN_MEMSTREAM open_wmemstream
index 85ea649..5779318 100644 (file)
@@ -20,6 +20,7 @@
 #include "strfile.h"
 #include <stdio.h>
 #include <stdlib.h>
+#include <wchar.h>
 
 
 struct _IO_FILE_wmemstream
index 630d540..0079a15 100644 (file)
@@ -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;