|
|
1.1 root 1: /* x_rls.c - x_rls */
2:
3: #include <conf.h>
4: #include <kernel.h>
5: #include <shell.h>
6:
7: /*------------------------------------------------------------------------
8: * x_rls - (command rls) list contents of remote file system directory
9: *------------------------------------------------------------------------
10: */
11: COMMAND x_rls(stdin, stdout, stderr, nargs, args)
12: int stdin, stdout, stderr, nargs;
13: char *args[];
14: {
15: char *p, *buf;
16: int dev, len;
17: char str[32];
18: struct dirent { /* UNIX directory entry */
19: long d_inum; /* file's inode number */
20: short d_rlen; /* length of this record */
21: short d_nlen; /* length of this file's name */
22: char d_nam[1]; /* start of file name */
23: };
24: struct dirent *d;
25: Bool aflag;
26:
27:
28: aflag = FALSE;
29: if (nargs > 1 && strcmp(p=args[1],"-a") == 0) {
30: nargs--;
31: aflag = TRUE;
32: p = args[2];
33: }
34: if (nargs == 1)
35: p = ".";
36: else if (nargs != 2) {
37: printf("use: rls [-a] directory\n");
38: return(SYSERR);
39: }
40: if ( ((int)(buf=(char *)getmem(512))) == SYSERR) {
41: fprintf(stderr, "rls: no memory\n");
42: return(SYSERR);
43: }
44: if (nammap(p, buf) != RFILSYS ||
45: (dev=open(NAMESPACE, p, "ro")) == SYSERR) {
46: fprintf(stderr, "cannot open %s\n", p);
47: freemem(buf, 512);
48: return(SYSERR);
49: }
50: len = read(dev, buf, 512);
51: for( ; len > 0 ; len=read(dev, buf, 512)) {
52: for (p=buf ; p< &buf[512] ;) {
53: d = (struct dirent *)p;
54: if (d->d_nlen != strlen(d->d_nam) ||
55: d->d_nlen > 32 || d->d_rlen < 0 ||
56: d->d_rlen > 512) {
57: fprintf(stderr, "Not a directory\n");
58: close(dev);
59: freemem(buf, 512);
60: return(SYSERR);
61: }
62: if (aflag || d->d_nam[0] != '.') {
63: strcpy(str, d->d_nam);
64: strcat(str, "\n");
65: write(stdout, str, strlen(str));
66: }
67: if (d->d_rlen == 0)
68: break;
69: p += d->d_rlen;
70: }
71: }
72: freemem(buf, 512);
73: close(dev);
74: return(OK);
75: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.