|
|
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.