1*25868Ssam /* ls.c 1.1 86/01/12 */ 2*25868Ssam /* ls.c 6.1 83/07/29 */ 3*25868Ssam 4*25868Ssam #include "param.h" 5*25868Ssam #include "inode.h" 6*25868Ssam #include "dir.h" 7*25868Ssam #include "fs.h" 8*25868Ssam 9*25868Ssam #include "saio.h" 10*25868Ssam 11*25868Ssam char line[100]; 12*25868Ssam main()13*25868Ssammain() 14*25868Ssam { 15*25868Ssam int io; 16*25868Ssam register char *ptr; 17*25868Ssam struct inode *ip; 18*25868Ssam 19*25868Ssam for(;;) { 20*25868Ssam line[0] = 0; 21*25868Ssam printf("\n\nls: "); 22*25868Ssam gets(line); 23*25868Ssam /* scan to end of line */ 24*25868Ssam for(ptr=line; *ptr; ptr++) 25*25868Ssam ; 26*25868Ssam /* check to see if a file was specified */ 27*25868Ssam if(ptr == line) { 28*25868Ssam printf("usage: dev(unit,0)/directory\n"); 29*25868Ssam continue; 30*25868Ssam } 31*25868Ssam /* do one correction first so the raw dev is not opened */ 32*25868Ssam if(*(--ptr) == ')') { 33*25868Ssam *(++ptr) = '/'; 34*25868Ssam *(++ptr) = '.'; 35*25868Ssam *(++ptr) = (char)0; 36*25868Ssam } 37*25868Ssam if(*ptr == '/') { 38*25868Ssam *(++ptr) = '.'; 39*25868Ssam *(++ptr) = (char)0; 40*25868Ssam } 41*25868Ssam if((io = open(line, 0)) >= 0) 42*25868Ssam break; 43*25868Ssam } 44*25868Ssam if((io >= NFILES+3) || (io < 3)) 45*25868Ssam _stop("open returned corrupt file index!"); 46*25868Ssam ip = &iob[io-3].i_ino; 47*25868Ssam if ((ip->i_mode & IFMT) != IFDIR) { 48*25868Ssam printf("%s is not a directory!\n", line); 49*25868Ssam _stop(""); 50*25868Ssam } 51*25868Ssam if (ip->i_size == 0) { 52*25868Ssam printf("%s is a zero length directory!\n", line); 53*25868Ssam _stop(""); 54*25868Ssam } 55*25868Ssam 56*25868Ssam ls(io); 57*25868Ssam } 58*25868Ssam ls(io)59*25868Ssamls(io) 60*25868Ssam register io; 61*25868Ssam { 62*25868Ssam 63*25868Ssam register int i, size; 64*25868Ssam register char *dp; 65*25868Ssam static char dirbuf[DIRBLKSIZ]; 66*25868Ssam 67*25868Ssam printf ("\nInode -> Name\n"); 68*25868Ssam while ((size = read(io, dirbuf, DIRBLKSIZ)) == DIRBLKSIZ) { 69*25868Ssam for(dp = dirbuf; (dp < (dirbuf + size)) && 70*25868Ssam (dp + ((struct direct *)dp)->d_reclen) < (dirbuf + size); 71*25868Ssam dp += ((struct direct *)dp)->d_reclen) { 72*25868Ssam if(((struct direct *)dp)->d_ino == 0) 73*25868Ssam continue; 74*25868Ssam if(((struct direct *)dp)->d_reclen > 75*25868Ssam DIRSIZ(((struct direct *)dp))) 76*25868Ssam continue; 77*25868Ssam if(((struct direct *)dp)->d_namlen > MAXNAMLEN+1) 78*25868Ssam _stop("Corrupt file name length! Run fsck soon!\n"); 79*25868Ssam printf("%s -> %d\n", ((struct direct *)dp)->d_name, 80*25868Ssam ((struct direct *)dp)->d_ino); 81*25868Ssam } 82*25868Ssam } 83*25868Ssam } 84