Commit | Line | Data |
---|---|---|
e804469b C |
1 | static 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 | ||
19 | systat(name, type, text) | |
20 | char *name, *text; | |
21 | int 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 | ||
62 | rmstat(name) | |
63 | char *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 | ||
78 | callok(name) | |
79 | char *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 | } |