|
|
1.1 root 1: /*
2: * osopen( ioptr ) ensures that the file represented by the ioblk
3: * is open.
4: */
5:
6: #include "spitblks.h"
7: #include "spitio.h"
8:
9: int osopen( ioptr )
10:
11: struct ioblk *ioptr;
12:
13: {
14: int fd = -1, len, savchr;
15: char *cp;
16: struct scblk *scptr;
17:
18: if ( ioptr -> flg & IO_OPN )
19: return 0;
20:
21: scptr = ioptr -> fnm;
22: cp = scptr -> str;
23:
24: len = lenfnm( scptr );
25: if ( cp[0] == '!' ) {
26: ioptr -> flg |= IO_PIP;
27: } else {
28: savchr = cp[len];
29: cp[len] = 0;
30: }
31:
32: if ( ioptr -> flg & IO_PIP ) {
33: fd = ospipe( ioptr );
34: } else if ( ioptr -> flg & IO_INP ) {
35: fd = open( cp,0 );
36: } else {
37: if ( ioptr -> flg & IO_APP ) {
38: fd = open( cp,1 );
39: if ( fd != 0 )
40: lseek( fd,0,2 );
41: }
42: if ( fd < 0 )
43: fd = creat( cp,0666 );
44: }
45:
46: if ( !(ioptr -> flg & IO_PIP) )
47: cp[len] = savchr;
48:
49: if (fd > 0) {
50: ioptr -> fdn = fd;
51: ioptr -> flg |= IO_OPN;
52: if ( (ioptr -> flg & IO_INP) == 0 && testty( fd ) == 0 )
53: ioptr -> flg |= IO_WRC;
54: if ( ioptr -> flg & IO_WRC )
55: ioptr -> buf = 0;
56: return 0;
57: } else {
58: return -1;
59: }
60:
61: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.