|
|
1.1 root 1: /* x_cat.c - x_cat */
2:
3: #include <conf.h>
4: #include <kernel.h>
5: #include <shell.h>
6:
7: /*------------------------------------------------------------------------
8: * x_cat - (command cat) concatenate files and write on stdout
9: *------------------------------------------------------------------------
10: */
11: COMMAND x_cat(stdin, stdout, stderr, nargs, args)
12: int stdin, stdout, stderr, nargs;
13: char *args[];
14: {
15: int device;
16: char *buf;
17: int ret;
18: int len;
19: int i;
20:
21: if ( (buf = (char *)getmem(512)) == (char *)SYSERR) {
22: fprintf(stderr, "no memory\n");
23: return(SYSERR);
24: }
25: ret = OK;
26: if (nargs == 1) {
27: while ( (len=read(stdin, buf, 512)) > 0)
28: write(stdout, buf, len);
29: }
30: for (i=1 ; i<nargs ; i++) {
31: if ( (device = open(NAMESPACE,args[i],"ro")) == SYSERR) {
32: fprintf(stderr, "Cannot open %s\n", args[i]);
33: ret = SYSERR;
34: break;
35: }
36: while ( (len=read(device, buf, 512)) > 0)
37: write (stdout, buf, len);
38: close(device);
39: }
40: freemem(buf, 512);
41: return(ret);
42: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.