|
|
1.1 root 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, with or without
6: * modification, are permitted provided that the following conditions
7: * are met:
8: * 1. Redistributions of source code must retain the above copyright
9: * notice, this list of conditions and the following disclaimer.
10: * 2. Redistributions in binary form must reproduce the above copyright
11: * notice, this list of conditions and the following disclaimer in the
12: * documentation and/or other materials provided with the distribution.
13: * 3. All advertising materials mentioning features or use of this software
14: * must display the following acknowledgement:
15: * This product includes software developed by the University of
16: * California, Berkeley and its contributors.
17: * 4. Neither the name of the University nor the names of its contributors
18: * may be used to endorse or promote products derived from this software
19: * without specific prior written permission.
20: *
21: * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
22: * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24: * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
25: * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27: * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29: * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30: * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31: * SUCH DAMAGE.
32: *
1.1.1.2 ! root 33: * from: @(#)ls.c 7.9 (Berkeley) 6/28/90
! 34: * ls.c,v 1.2 1993/05/20 03:54:00 cgd Exp
1.1 root 35: */
36:
37: #include "sys/param.h"
38: #include "ufs/dir.h"
39: #include "saio.h"
40: #include "sys/ttychars.h"
41:
42: main()
43: {
44: struct dinode *ip;
45: int fd;
46:
47: for (;;) {
48: if ((fd = getfile("ls", 0)) == -1)
49: exit();
50: ip = &iob[fd - 3].i_ino;
51: if ((ip->di_mode & IFMT) != IFDIR) {
52: printf("ls: not a directory\n");
53: continue;
54: }
55: if (ip->di_size == 0) {
56: printf("ls: zero length directory\n");
57: continue;
58: }
59: ls(fd);
60: }
61: }
62:
63: #define CTRL(x) (x&037)
64:
65: getfile(prompt, mode)
66: char *prompt;
67: int mode;
68: {
69: int fd;
70: char buf[100];
71:
72: do {
73: printf("%s: ", prompt);
74: gets(buf);
75: if (buf[0] == CTRL('d') && buf[1] == 0)
76: return (-1);
77: } while ((fd = open(buf, mode)) <= 0);
78: return(fd);
79: }
80:
81: typedef struct direct DP;
82: static
83: ls(fd)
84: register int fd;
85: {
86: register int size;
87: register char *dp;
88: char dirbuf[DIRBLKSIZ];
89:
90: printf("\ninode\tname\n");
91: while ((size = read(fd, dirbuf, DIRBLKSIZ)) == DIRBLKSIZ)
92: for(dp = dirbuf; (dp < (dirbuf + size)) &&
93: (dp + ((DP *)dp)->d_reclen) < (dirbuf + size);
94: dp += ((DP *)dp)->d_reclen) {
95: if (((DP *)dp)->d_ino == 0)
96: continue;
97: if (((DP *)dp)->d_namlen > MAXNAMLEN+1) {
98: printf("Corrupt file name length! Run fsck soon!\n");
99: return;
100: }
101: printf("%d\t%s\n", ((DP *)dp)->d_ino,
102: ((DP *)dp)->d_name);
103: }
104: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.