aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--vpath.c45
1 files changed, 27 insertions, 18 deletions
diff --git a/vpath.c b/vpath.c
index d804150..aa8f367 100644
--- a/vpath.c
+++ b/vpath.c
@@ -124,24 +124,33 @@ construct_vpath_list (pattern, dirpath)
/* Remove matching listings. */
register struct vpath *path, *lastpath;
- lastpath = vpaths;
- for (path = vpaths; path != 0; lastpath = path, path = path->next)
- if (pattern == 0
- || (((percent == 0 && path->percent == 0)
- || (percent - pattern == path->percent - path->pattern))
- && streq (pattern, path->pattern)))
- {
- /* Remove it from the linked list. */
- if (lastpath == vpaths)
- vpaths = path->next;
- else
- lastpath->next = path->next;
-
- /* Free its unused storage. */
- free (path->pattern);
- free ((char *) path->searchpath);
- free ((char *) path);
- }
+ lastpath = 0;
+ path = vpaths;
+ while (path != 0)
+ {
+ struct vpath *next = path->next;
+
+ if (pattern == 0
+ || (((percent == 0 && path->percent == 0)
+ || (percent - pattern == path->percent - path->pattern))
+ && streq (pattern, path->pattern)))
+ {
+ /* Remove it from the linked list. */
+ if (lastpath == 0)
+ vpaths = path->next;
+ else
+ lastpath->next = next;
+
+ /* Free its unused storage. */
+ free (path->pattern);
+ free ((char *) path->searchpath);
+, 1993 free ((char *) path);
+ }
+
+ lastpath = next;
+ path = next;
+ }
+
if (pattern != 0)
free (pattern);
return;