Even then, chcon may still be useful.
[bug introduced in coreutils-8.0]
+ du now diagnoses an ostensible directory cycle and arranges to exit nonzero.
+ Before, it would silently ignore the offending directory and all "contents."
+
env -u A=B now fails, rather than silently adding A to the
environment. Likewise, printenv A=B silently ignores the invalid
name. [the bugs date back to the initial implementation]
/* Initial size of the hash table. */
#define INITIAL_TABLE_SIZE 103
+/* Select one of the three FTS_ options that control if/when
+ to follow a symlink. */
+static int symlink_deref_bits = FTS_PHYSICAL;
+
/* Hash structure for inode and device numbers. The separate entry
structure makes it easier to rehash "in place". */
-
struct entry
{
ino_t st_ino;
ok = false;
break;
+ case FTS_DC: /* directory that causes cycles */
+ /* When dereferencing no symlinks, or when dereferencing only
+ those listed on the command line and we're not processing
+ a command-line argument, then a cycle is a serious problem. */
+ if (symlink_deref_bits == FTS_PHYSICAL
+ || (symlink_deref_bits == (FTS_COMFOLLOW | FTS_PHYSICAL)
+ && ent->fts_level != FTS_ROOTLEVEL))
+ {
+ emit_cycle_warning (ent->fts_path);
+ return false;
+ }
+ ok = true;
+ break;
+
default:
ok = true;
break;
/* Bit flags that control how fts works. */
int bit_flags = FTS_TIGHT_CYCLE_CHECK | FTS_DEFER_STAT;
- /* Select one of the three FTS_ options that control if/when
- to follow a symlink. */
- int symlink_deref_bits = FTS_PHYSICAL;
-
/* If true, display only a total for each argument. */
bool opt_summarize_only = false;