xref: /original-bsd/sys/stand.att/ls.c (revision 31205e5f)
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