|
|
1.1 root 1: /*
2: char id_util[] = "@(#)util.c 1.7";
3: *
4: * utility routines
5: */
6:
7: #include <sys/types.h>
8: #include <sys/stat.h>
9: #include "fio.h"
10:
11: extern short ccntrl_, blzero_;
12:
13: ini_std(u,F,w) FILE *F;
14: { unit *p;
15: p = &units[u];
16: p->ufd = F;
17: p->ufnm = NULL;
18: p->useek = canseek(F);
19: p->ufmt = YES;
20: p->uwrt = (w==WRITE)? YES : NO;
21: p->uscrtch = p->uend = NO;
22: p->ublnk = blzero;
23: p->uprnt = ccntrl;
24: p->url = 0;
25: p->uinode = finode(F);
26: }
27:
28: canseek(f) FILE *f; /*SYSDEP*/
29: { struct stat x;
30: return( (fstat(fileno(f),&x)==0) &&
31: (x.st_nlink > 0 /*!pipe*/) && !isatty(fileno(f)) );
32: }
33:
34: nowreading(x) unit *x;
35: {
36: return(now_acc(x,"r"));
37: }
38:
39: nowwriting(x) unit *x;
40: {
41: return(now_acc(x,"a"));
42: }
43:
44: now_acc(x,mode)
45: unit *x; char *mode;
46: {
47: long loc;
48:
49: if (!x->ufnm)
50: {
51: errno = EBADF;
52: return(NO);
53: }
54: if (x->useek)
55: loc=ftell(x->ufd);
56: if (freopen(x->ufnm,mode,x->ufd))
57: {
58: if (x->useek)
59: fseek(x->ufd,loc,0);
60: x->uwrt = (*mode=='a');
61: return(YES);
62: }
63: if (x->ufd = fopen(x->ufnm, (*mode=='a')? "r":"a"))
64: if (x->useek)
65: fseek(x->ufd,loc,0);
66: return(NO);
67: }
68:
69: g_char(a,alen,b) char *a,*b; ftnlen alen;
70: { char *x=a+alen-1, *y=b+alen-1;
71: while (x >= a && *x == ' ') {x--; y--;}
72: *(y+1) = '\0';
73: while (x >= a) *y-- = *x--;
74: }
75:
76: b_char(from, to, tolen) char *from, *to; ftnlen tolen;
77: { int i=0;
78: while (*from && i < tolen) {
79: *to++ = *from++;
80: i++;
81: }
82: while (i++ < tolen)
83: *to++ = ' ';
84: }
85:
86: inode(a) char *a;
87: { struct stat x;
88: if(stat(a,&x)==0) return(x.st_ino);
89: else return(-1);
90: }
91:
92: finode(f) FILE *f;
93: { struct stat x;
94: if(fstat(fileno(f),&x)==0) return(x.st_ino);
95: else return(-1);
96: }
97:
98: char
99: last_char(f) FILE *f;
100: {
101: fseek(f,-2L,1);
102: if(ftell(f)) return(getc(f));
103: else return('\n');
104: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.