+ column += 5;
+ break;
+ case LIST_MODEBITS:
+ fprintf(stdout, "%10s", (char *)mode_string(dn->dstat.st_mode));
+ column += 10;
+ break;
+ case LIST_NLINKS:
+ fprintf(stdout, "%4d ", dn->dstat.st_nlink);
+ column += 10;
+ break;
+ case LIST_ID_NAME:
+#ifdef BB_FEATURE_LS_USERNAME
+ memset(scratch, 0, sizeof(scratch));
+ my_getpwuid(scratch, dn->dstat.st_uid);
+ if (*scratch)
+ fprintf(stdout, "%-8.8s ", scratch);
+ else
+ fprintf(stdout, "%-8d ", dn->dstat.st_uid);
+ memset(scratch, 0, sizeof(scratch));
+ my_getgrgid(scratch, dn->dstat.st_gid);
+ if (*scratch)
+ fprintf(stdout, "%-8.8s", scratch);
+ else
+ fprintf(stdout, "%-8d", dn->dstat.st_gid);
+ column += 17;
+ break;
+#endif
+ case LIST_ID_NUMERIC:
+ fprintf(stdout, "%-8d %-8d", dn->dstat.st_uid, dn->dstat.st_gid);
+ column += 17;
+ break;
+ case LIST_SIZE:
+ case LIST_DEV:
+ if (S_ISBLK(dn->dstat.st_mode) || S_ISCHR(dn->dstat.st_mode)) {
+ fprintf(stdout, "%4d, %3d ", (int)MAJOR(dn->dstat.st_rdev), (int)MINOR(dn->dstat.st_rdev));
+ } else {
+#if _FILE_OFFSET_BITS == 64
+ fprintf(stdout, "%9lld ", dn->dstat.st_size);
+#else
+ fprintf(stdout, "%9ld ", dn->dstat.st_size);
+#endif
+ }
+ column += 10;
+ break;
+#ifdef BB_FEATURE_LS_TIMESTAMPS
+ case LIST_FULLTIME:
+ case LIST_DATE_TIME:
+ if (list_fmt & LIST_FULLTIME) {
+ fprintf(stdout, "%24.24s ", filetime);
+ column += 25;
+ break;
+ }
+ age = time(NULL) - ttime;
+ fprintf(stdout, "%6.6s ", filetime+4);
+ if (age < 3600L * 24 * 365 / 2 && age > -15 * 60) {
+ /* hh:mm if less than 6 months old */
+ fprintf(stdout, "%5.5s ", filetime+11);
+ } else {
+ fprintf(stdout, " %4.4s ", filetime+20);
+ }
+ column += 13;
+ break;
+#endif
+ case LIST_FILENAME:
+ fprintf(stdout, "%s", dn->name);
+ column += strlen(dn->name);
+ break;
+ case LIST_SYMLINK:
+ if (S_ISLNK(dn->dstat.st_mode)) {
+ len= readlink(dn->fullname, scratch, (sizeof scratch)-1);
+ if (len > 0) {
+ scratch[len]= '\0';
+ fprintf(stdout, " -> %s", scratch);
+#ifdef BB_FEATURE_LS_FILETYPES
+ if (!stat(dn->fullname, &info)) {
+ append = append_char(info.st_mode);
+ }
+#endif
+ column += len+4;
+ }
+ }
+ break;
+#ifdef BB_FEATURE_LS_FILETYPES
+ case LIST_FILETYPE:
+ if (append != '\0') {
+ fprintf(stdout, "%1c", append);
+ column++;
+ }
+ break;
+#endif
+ }
+ }