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