1 /* 2 * Copyright (c) 1982, 1986, 1988 Regents of the University of California. 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms are permitted 6 * provided that the above copyright notice and this paragraph are 7 * duplicated in all such forms and that any documentation, 8 * advertising materials, and other materials related to such 9 * distribution and use acknowledge that the software was developed 10 * by the University of California, Berkeley. The name of the 11 * University may not be used to endorse or promote products derived 12 * from this software without specific prior written permission. 13 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR 14 * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED 15 * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. 16 * 17 * @(#)ls.c 7.4 (Berkeley) 06/29/88 18 */ 19 20 #include "param.h" 21 #include "inode.h" 22 #include "dir.h" 23 #include "fs.h" 24 #include "saio.h" 25 26 main() 27 { 28 struct inode *ip; 29 int fd; 30 31 fd = getfile("ls", 0); 32 ip = &iob[fd - 3].i_ino; 33 if ((ip->i_mode & IFMT) != IFDIR) 34 _stop("ls: not a directory"); 35 if (ip->i_size == 0) 36 _stop("ls: zero length directory"); 37 ls(fd); 38 } 39 40 typedef struct direct DP; 41 static 42 ls(fd) 43 register int fd; 44 { 45 register int size; 46 register char *dp; 47 char dirbuf[DIRBLKSIZ]; 48 49 printf("\nname->inode\n"); 50 while ((size = read(fd, dirbuf, DIRBLKSIZ)) == DIRBLKSIZ) 51 for(dp = dirbuf; (dp < (dirbuf + size)) && 52 (dp + ((DP *)dp)->d_reclen) < (dirbuf + size); 53 dp += ((DP *)dp)->d_reclen) { 54 if (((DP *)dp)->d_ino == 0) 55 continue; 56 if (((DP *)dp)->d_reclen > DIRSIZ(((DP *)dp))) 57 continue; 58 if (((DP *)dp)->d_namlen > MAXNAMLEN+1) 59 _stop("Corrupt file name length! Run fsck soon!\n"); 60 printf("%s->%d\n", ((DP *)dp)->d_name, 61 ((DP *)dp)->d_ino); 62 } 63 } 64