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