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