163275Smckusick /*- 2*63370Sbostic * Copyright (c) 1993 3*63370Sbostic * The Regents of the University of California. All rights reserved. 463275Smckusick * 563275Smckusick * %sccs.include.redist.c% 663275Smckusick */ 763275Smckusick 863275Smckusick #ifndef lint 9*63370Sbostic static char copyright[] = 10*63370Sbostic "@(#) Copyright (c) 1993\n\ 11*63370Sbostic The Regents of the University of California. All rights reserved.\n"; 1263275Smckusick #endif /* not lint */ 1363275Smckusick 1463275Smckusick #ifndef lint 15*63370Sbostic static char sccsid[] = "@(#)ls.c 8.1 (Berkeley) 06/11/93"; 1663275Smckusick #endif /* not lint */ 1763275Smckusick 1863275Smckusick #include <sys/param.h> 1963275Smckusick #include <ufs/ufs/dir.h> 2063275Smckusick #include <sys/ttychars.h> 2163275Smckusick #include <stand/stand.h> 2263275Smckusick main()2363275Smckusickmain() 2463275Smckusick { 2563275Smckusick struct dinode *ip; 2663275Smckusick int fd; 2763275Smckusick 2863275Smckusick for (;;) { 2963275Smckusick if ((fd = getfile("ls", 0)) == -1) 3063275Smckusick exit(); 3163275Smckusick ip = &iob[fd - 3].i_ino; 3263275Smckusick if ((ip->di_mode & IFMT) != IFDIR) { 3363275Smckusick printf("ls: not a directory\n"); 3463275Smckusick continue; 3563275Smckusick } 3663275Smckusick if (ip->di_size == 0) { 3763275Smckusick printf("ls: zero length directory\n"); 3863275Smckusick continue; 3963275Smckusick } 4063275Smckusick ls(fd); 4163275Smckusick } 4263275Smckusick } 4363275Smckusick 4463275Smckusick #define CTRL(x) (x&037) 4563275Smckusick getfile(prompt,mode)4663275Smckusickgetfile(prompt, mode) 4763275Smckusick char *prompt; 4863275Smckusick int mode; 4963275Smckusick { 5063275Smckusick int fd; 5163275Smckusick char buf[100]; 5263275Smckusick 5363275Smckusick do { 5463275Smckusick printf("%s: ", prompt); 5563275Smckusick gets(buf); 5663275Smckusick if (buf[0] == CTRL('d') && buf[1] == 0) 5763275Smckusick return (-1); 5863275Smckusick } while ((fd = open(buf, mode)) < 0); 5963275Smckusick return(fd); 6063275Smckusick } 6163275Smckusick 6263275Smckusick typedef struct direct DP; 6363275Smckusick static ls(fd)6463275Smckusickls(fd) 6563275Smckusick register int fd; 6663275Smckusick { 6763275Smckusick register int size; 6863275Smckusick register char *dp; 6963275Smckusick char dirbuf[DIRBLKSIZ]; 7063275Smckusick 7163275Smckusick printf("\ninode\tname\n"); 7263275Smckusick while ((size = read(fd, dirbuf, DIRBLKSIZ)) == DIRBLKSIZ) 7363275Smckusick for (dp = dirbuf; (dp < (dirbuf + size)) && 7463275Smckusick (dp + ((DP *)dp)->d_reclen) < (dirbuf + size); 7563275Smckusick dp += ((DP *)dp)->d_reclen) { 7663275Smckusick if (((DP *)dp)->d_ino == 0) 7763275Smckusick continue; 7863275Smckusick if (((DP *)dp)->d_namlen > MAXNAMLEN+1) { 7963275Smckusick printf("Corrupt file name length! Run fsck soon!\n"); 8063275Smckusick return; 8163275Smckusick } 8263275Smckusick printf("%d\t%s\n", ((DP *)dp)->d_ino, 8363275Smckusick ((DP *)dp)->d_name); 8463275Smckusick } 8563275Smckusick } 86