- label = 0;
- if (!S_ISREG(p->fts_statb.st_mode) || notset) {
- LABEL;
- (void)printf("type=%s", inotype(p->fts_statb.st_mode));
- }
- if (p->fts_statb.st_uid != uid || notset) {
- LABEL;
- (void)printf("owner=%u", p->fts_statb.st_uid);
- }
- if (p->fts_statb.st_gid != gid || notset) {
- LABEL;
- (void)printf("group=%u", p->fts_statb.st_gid);
- }
- if ((p->fts_statb.st_mode & MBITS) != mode || notset) {
- LABEL;
- (void)printf("mode=%#o", p->fts_statb.st_mode & MBITS);
- }
- if (p->fts_statb.st_nlink != 1 || notset) {
- LABEL;
- (void)printf("nlink=%u", p->fts_statb.st_nlink);
- }
- LABEL;
- (void)printf("size=%ld", p->fts_statb.st_size);
- LABEL;
- (void)printf("time=%ld", p->fts_statb.st_mtime);
-
- if (p->fts_info == FTS_SL || p->fts_info == FTS_SLNONE) {
- LABEL;
- (void)printf("link=%s", rlink(p->fts_accpath));
- }
- (void)putchar('\n');
+ if (S_ISDIR(p->fts_statp->st_mode))
+ indent = printf("%s", p->fts_name);
+ else
+ indent = printf(" %s", p->fts_name);
+
+ if (indent > INDENTNAMELEN)
+ indent = MAXLINELEN;
+ else
+ indent += printf("%*s", INDENTNAMELEN - indent, "");
+
+ if (!S_ISREG(p->fts_statp->st_mode))
+ output(&indent, "type=%s", inotype(p->fts_statp->st_mode));
+ if (keys & (F_UID | F_UNAME) && p->fts_statp->st_uid != uid)
+ if (keys & F_UNAME && (pw = getpwuid(p->fts_statp->st_uid)))
+ output(&indent, "uname=%s", pw->pw_name);
+ else /* if (keys & F_UID) */
+ output(&indent, "uid=%u", p->fts_statp->st_uid);
+ if (keys & (F_GID | F_GNAME) && p->fts_statp->st_gid != gid)
+ if (keys & F_GNAME && (gr = getgrgid(p->fts_statp->st_gid)))
+ output(&indent, "gid=%s", gr->gr_name);
+ else /* if (keys & F_GID) */
+ output(&indent, "gid=%u", p->fts_statp->st_gid);
+ if (keys & F_MODE && (p->fts_statp->st_mode & MBITS) != mode)
+ output(&indent, "mode=%#o", p->fts_statp->st_mode & MBITS);
+ if (keys & F_NLINK && p->fts_statp->st_nlink != 1)
+ output(&indent, "nlink=%u", p->fts_statp->st_nlink);
+ if (keys & F_SIZE)
+ output(&indent, "size=%ld", p->fts_statp->st_size);
+ if (keys & F_TIME)
+ output(&indent, "time=%ld", p->fts_statp->st_mtime);
+ if (keys & F_CKSUM && S_ISREG(p->fts_statp->st_mode)) {
+ if ((fd = open(p->fts_accpath, O_RDONLY, 0)) < 0 ||
+ crc(fd, &val, &len))
+ err("%s: %s", p->fts_accpath, strerror(errno));
+ (void)close(fd);
+ output(&indent, "cksum=%lu", val);