|
|
1.1 root 1: #ifndef lint
2: static char sccsid[] = "@(#)systat.c 5.1 (Berkeley) 7/2/83";
3: #endif
4:
5: #include "uucp.h"
6: #include <sys/types.h>
7:
8: extern time_t time();
9:
10: #define STATNAME(f, n) sprintf(f, "%s/%s.%.7s", Spool, "STST", n)
11: #define S_SIZE 100
12:
13: /*******
14: * systat(name, type, text) make system status entry
15: * char *name, *text;
16: * int type.
17: *
18: * return codes: none
19: */
20:
21: systat(name, type, text)
22: char *name, *text;
23: int type;
24: {
25: char filename[MAXFULLNAME], line[S_SIZE];
26: int count;
27: register FILE *fp;
28: time_t prestime;
29:
30: if (type == 0)
31: return;
32: line[0] = '\0';
33: time(&prestime);
34: count = 0;
35: STATNAME(filename, name);
36:
37: fp = fopen(filename, "r");
38: if (fp != NULL) {
39: fgets(line, S_SIZE, fp);
40: sscanf(&line[2], "%d", &count);
41: if (count <= 0)
42: count = 0;
43: fclose(fp);
44: }
45:
46: if (type == SS_FAIL)
47: count++;
48:
49: fp = fopen(filename, "w");
50: ASSERT(fp != NULL, "SYSTAT OPEN FAIL", "", 0);
51: /* chmod(filename, 0666); rm-ed by rti!trt */
52: fprintf(fp, "%d %d %ld %ld %s %s\n", type, count, prestime, Retrytime, text, name);
53: fclose(fp);
54: return;
55: }
56:
57: /***
58: * rmstat(name) remove system status entry
59: * char *name;
60: *
61: * return codes: none
62: */
63:
64: rmstat(name)
65: char *name;
66: {
67: char filename[MAXFULLNAME];
68:
69: STATNAME(filename, name);
70: unlink(filename);
71: }
72:
73: /***
74: * callok(name) check system status for call
75: * char *name;
76: *
77: * return codes 0 - ok | >0 system status
78: */
79:
80: callok(name)
81: char *name;
82: {
83: char filename[MAXFULLNAME], line[S_SIZE];
84: register FILE *fp;
85: time_t lasttime, prestime;
86: long retrytime;
87: int count, type;
88:
89: STATNAME(filename, name);
90: fp = fopen(filename, "r");
91: if (fp == NULL)
92: return(SS_OK);
93:
94: if (fgets(line, S_SIZE, fp) == NULL) {
95: /* no data */
96: fclose(fp);
97: unlink(filename);
98: return(SS_OK);
99: }
100:
101: fclose(fp);
102: time(&prestime);
103: sscanf(line, "%d%d%ld%ld", &type, &count, &lasttime, &retrytime);
104:
105: switch(type) {
106: case SS_BADSEQ:
107: case SS_CALLBACK:
108: case SS_NODEVICE:
109: case SS_INPROGRESS: /*let LCK take care of it */
110: return(SS_OK);
111:
112: case SS_FAIL:
113: if (count > MAXRECALLS) {
114: logent("MAX RECALLS", "NO CALL");
115: DEBUG(4, "MAX RECALL COUNT %d\n", count);
116: return(type);
117: }
118:
119: if (prestime - lasttime < retrytime) {
120: logent("RETRY TIME NOT REACHED", "NO CALL");
121: DEBUG(4, "RETRY TIME (%d) NOT REACHED\n", (long) RETRYTIME);
122: return(type);
123: }
124:
125: return(SS_OK);
126: default:
127: return(SS_OK);
128: }
129: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.