1a71df8faSbostic /* 2a71df8faSbostic * Copyright (c) 1989 The Regents of the University of California. 3a71df8faSbostic * All rights reserved. 4a71df8faSbostic * 5793e0bc1Sbostic * %sccs.include.redist.c% 6a71df8faSbostic */ 7a71df8faSbostic 8a71df8faSbostic #ifndef lint 9*bccf0789Sbostic static char sccsid[] = "@(#)ls.c 5.6 (Berkeley) 03/09/91"; 10a71df8faSbostic #endif /* not lint */ 11a71df8faSbostic 12a71df8faSbostic #include <sys/param.h> 13a71df8faSbostic #include <sys/stat.h> 14*bccf0789Sbostic #include <time.h> 15a71df8faSbostic #include <tzfile.h> 16*bccf0789Sbostic #include <errno.h> 17a71df8faSbostic #include <utmp.h> 18*bccf0789Sbostic #include <unistd.h> 19a71df8faSbostic #include <stdio.h> 20*bccf0789Sbostic #include <string.h> 21a71df8faSbostic 22a71df8faSbostic /* Derived from the print routines in the ls(1) source code. */ 23a71df8faSbostic 24a71df8faSbostic void 25a71df8faSbostic printlong(name, accpath, sb) 26a71df8faSbostic char *name; /* filename to print */ 27a71df8faSbostic char *accpath; /* current valid path to filename */ 28a71df8faSbostic struct stat *sb; /* stat buffer */ 29a71df8faSbostic { 30*bccf0789Sbostic char modep[15], *user_from_uid(), *group_from_gid(); 31a71df8faSbostic 32a71df8faSbostic (void)printf("%6lu %4ld ", sb->st_ino, sb->st_blocks); 33067be296Sbostic (void)strmode(sb->st_mode, modep); 349083969dSbostic (void)printf("%s %3u %-*s %-*s ", modep, sb->st_nlink, UT_NAMESIZE, 35a71df8faSbostic user_from_uid(sb->st_uid, 0), UT_NAMESIZE, 36a71df8faSbostic group_from_gid(sb->st_gid, 0)); 37a71df8faSbostic 38a71df8faSbostic if (S_ISCHR(sb->st_mode) || S_ISBLK(sb->st_mode)) 39a71df8faSbostic (void)printf("%3d, %3d ", major(sb->st_rdev), 40a71df8faSbostic minor(sb->st_rdev)); 41a71df8faSbostic else 42a71df8faSbostic (void)printf("%8ld ", sb->st_size); 43a71df8faSbostic printtime(sb->st_mtime); 44a71df8faSbostic (void)printf("%s", name); 45a71df8faSbostic if (S_ISLNK(sb->st_mode)) 46a71df8faSbostic printlink(accpath); 47a71df8faSbostic (void)putchar('\n'); 48a71df8faSbostic } 49a71df8faSbostic 50a71df8faSbostic printtime(ftime) 51a71df8faSbostic time_t ftime; 52a71df8faSbostic { 53a71df8faSbostic int i; 54a71df8faSbostic char *longstring, *ctime(); 55a71df8faSbostic time_t time(); 56a71df8faSbostic 57a71df8faSbostic longstring = ctime((long *)&ftime); 58a71df8faSbostic for (i = 4; i < 11; ++i) 59a71df8faSbostic (void)putchar(longstring[i]); 60a71df8faSbostic 61a71df8faSbostic #define SIXMONTHS ((DAYSPERNYEAR / 2) * SECSPERDAY) 62a71df8faSbostic if (ftime + SIXMONTHS > time((time_t *)NULL)) 63a71df8faSbostic for (i = 11; i < 16; ++i) 64a71df8faSbostic (void)putchar(longstring[i]); 65a71df8faSbostic else { 66a71df8faSbostic (void)putchar(' '); 67a71df8faSbostic for (i = 20; i < 24; ++i) 68a71df8faSbostic (void)putchar(longstring[i]); 69a71df8faSbostic } 70a71df8faSbostic (void)putchar(' '); 71a71df8faSbostic } 72a71df8faSbostic 73a71df8faSbostic printlink(name) 74a71df8faSbostic char *name; 75a71df8faSbostic { 76a71df8faSbostic int lnklen; 77*bccf0789Sbostic char path[MAXPATHLEN + 1]; 78a71df8faSbostic 79a71df8faSbostic if ((lnklen = readlink(name, path, MAXPATHLEN)) == -1) { 80*bccf0789Sbostic (void)fprintf(stderr, 81*bccf0789Sbostic "\nfind: %s: %s\n", name, strerror(errno)); 82a71df8faSbostic return; 83a71df8faSbostic } 84a71df8faSbostic path[lnklen] = '\0'; 85a71df8faSbostic (void)printf(" -> %s", path); 86a71df8faSbostic } 87