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