Rename u32-mbtouc-safe -> u32-mbtouc, u32_mbtouc_safe -> u32_mbtouc.
[gnulib.git] / lib / fts.c
index 9482833..1b5384b 100644 (file)
--- a/lib/fts.c
+++ b/lib/fts.c
@@ -162,13 +162,13 @@ static unsigned short int fts_stat (FTS *, FTSENT *, bool) internal_function;
 static int      fts_safe_changedir (FTS *, FTSENT *, int, const char *)
      internal_function;
 
-#if _LGPL_PACKAGE
+#if GNULIB_FTS
+# include "fts-cycle.c"
+#else
 static bool enter_dir (FTS *fts, FTSENT *ent) { return true; }
 static void leave_dir (FTS *fts, FTSENT *ent) {}
 static bool setup_dir (FTS *fts) { return true; }
 static void free_dir (FTS *fts) {}
-#else
-# include "fts-cycle.c"
 #endif
 
 #ifndef MAX
@@ -698,6 +698,7 @@ fts_read (register FTS *sp)
        /* Move to the next node on this level. */
 next:  tmp = p;
        if ((p = p->fts_link) != NULL) {
+               sp->fts_cur = p;
                free(tmp);
 
                /*
@@ -708,7 +709,6 @@ next:       tmp = p;
                if (p->fts_level == FTS_ROOTLEVEL) {
                        if (RESTORE_INITIAL_CWD(sp)) {
                                SET(FTS_STOP);
-                               sp->fts_cur = p;
                                return (NULL);
                        }
                        fts_load(sp, p);
@@ -738,6 +738,7 @@ name:               t = sp->fts_path + NAPPEND(p->fts_parent);
                *t++ = '/';
                memmove(t, p->fts_name, p->fts_namelen + 1);
 check_for_dir:
+               sp->fts_cur = p;
                if (p->fts_info == FTS_NSOK)
                  {
                    if (p->fts_statp->st_size == FTS_STAT_REQUIRED)
@@ -746,7 +747,6 @@ check_for_dir:
                      fts_assert (p->fts_statp->st_size == FTS_NO_STAT_REQUIRED);
                  }
 
-               sp->fts_cur = p;
                if (p->fts_info == FTS_D)
                  {
                    /* Now that P->fts_statp is guaranteed to be valid,
@@ -766,6 +766,7 @@ check_for_dir:
 
        /* Move up to the parent node. */
        p = tmp->fts_parent;
+       sp->fts_cur = p;
        free(tmp);
 
        if (p->fts_level == FTS_ROOTPARENTLEVEL) {
@@ -811,7 +812,6 @@ check_for_dir:
        p->fts_info = p->fts_errno ? FTS_ERR : FTS_DP;
        if (p->fts_errno == 0)
                LEAVE_DIR (sp, p, "3");
-       sp->fts_cur = p;
        return ISSET(FTS_STOP) ? NULL : p;
 }
 
@@ -1405,7 +1405,7 @@ err:              memset(sbp, 0, sizeof(struct stat));
                        return (p->fts_level == FTS_ROOTLEVEL ? FTS_D : FTS_DOT);
                }
 
-#if _LGPL_PACKAGE
+#if !GNULIB_FTS
                {
                  /*
                   * Cycle detection is done by brute force when the directory