Make sure fts_cur is always valid after return from fts_read.
authorUlrich Drepper <drepper@redhat.com>
Wed, 10 Jan 2007 18:38:19 +0000 (18:38 +0000)
committerUlrich Drepper <drepper@redhat.com>
Wed, 10 Jan 2007 18:38:19 +0000 (18:38 +0000)
io/fts.c

index 532743f..8e628b4 100644 (file)
--- a/io/fts.c
+++ b/io/fts.c
@@ -376,12 +376,14 @@ fts_read(sp)
                }
                p = sp->fts_child;
                sp->fts_child = NULL;
+               sp->fts_cur = p;
                goto name;
        }
 
        /* Move to the next node on this level. */
 next:  tmp = p;
        if ((p = p->fts_link) != NULL) {
+               sp->fts_cur = p;
                free(tmp);
 
                /*
@@ -394,7 +396,7 @@ next:       tmp = p;
                                return (NULL);
                        }
                        fts_load(sp, p);
-                       return (sp->fts_cur = p);
+                       return p;
                }
 
                /*
@@ -420,11 +422,12 @@ next:     tmp = p;
 name:          t = sp->fts_path + NAPPEND(p->fts_parent);
                *t++ = '/';
                memmove(t, p->fts_name, p->fts_namelen + 1);
-               return (sp->fts_cur = p);
+               return p;
        }
 
        /* Move up to the parent node. */
        p = tmp->fts_parent;
+       sp->fts_cur = p;
        free(tmp);
 
        if (p->fts_level == FTS_ROOTPARENTLEVEL) {
@@ -465,7 +468,7 @@ name:               t = sp->fts_path + NAPPEND(p->fts_parent);
                return (NULL);
        }
        p->fts_info = p->fts_errno ? FTS_ERR : FTS_DP;
-       return (sp->fts_cur = p);
+       return p;
 }
 
 /*