Annotation of 43BSDReno/usr.bin/uucp/systat.c, revision 1.1

1.1     ! root        1: #ifndef lint
        !             2: static char sccsid[] = "@(#)systat.c   5.5     (Berkeley) 4/5/88";
        !             3: #endif
        !             4: 
        !             5: #include "uucp.h"
        !             6: 
        !             7: #define STATNAME(f, n) sprintf(f, "%s/%s/%s", Spool, "STST", n)
        !             8: #define S_SIZE 100
        !             9: 
        !            10: /*LINTLIBRARY*/
        !            11: 
        !            12: /*
        !            13:  *     make system status entry
        !            14:  *     return codes:  none
        !            15:  */
        !            16: systat(name, type, text)
        !            17: char *name, *text;
        !            18: int type;
        !            19: {
        !            20:        char filename[MAXFULLNAME], line[S_SIZE];
        !            21:        int count, oldtype;
        !            22:        register FILE *fp;
        !            23:        time_t prestime, rtry;
        !            24: 
        !            25:        if (type == 0)
        !            26:                return;
        !            27:        line[0] = '\0';
        !            28:        time(&prestime);
        !            29:        count = 0;
        !            30:        STATNAME(filename, name);
        !            31: 
        !            32:        fp = fopen(filename, "r");
        !            33:        if (fp != NULL) {
        !            34:                fgets(line, S_SIZE, fp);
        !            35:                sscanf(line, "%d %d", &oldtype, &count);
        !            36:                if (count <= 0)
        !            37:                        count = 0;
        !            38:                fclose(fp);
        !            39:                /* If merely 'wrong time', don't change existing STST */
        !            40:                if (type == SS_WRONGTIME && oldtype != SS_INPROGRESS)
        !            41:                        return;
        !            42:        }
        !            43: 
        !            44:        rtry = Retrytime;
        !            45:        /* if failures repeat, don't try so often,
        !            46:         * to forstall a 'MAX RECALLS' situation.
        !            47:         */
        !            48:        if (type == SS_FAIL) {
        !            49:                count++;
        !            50:                if (count > 5) {
        !            51:                        rtry = rtry * (count-5);
        !            52:                        if (rtry > ONEDAY/2)
        !            53:                                rtry = ONEDAY/2;
        !            54:                }
        !            55:        }
        !            56: 
        !            57: 
        !            58: #ifdef VMS
        !            59:        unlink(filename);
        !            60: #endif VMS
        !            61:        fp = fopen(filename, "w");
        !            62:        if (fp == NULL) {
        !            63:                syslog(LOG_ERR, "fopen(%s) failed: %m", filename);
        !            64:                cleanup(FAIL);
        !            65:        }
        !            66:        fprintf(fp, "%d %d %ld %ld %s %s\n", type, count, prestime, rtry, text, name);
        !            67:        fclose(fp);
        !            68: }
        !            69: 
        !            70: /*
        !            71:  *     remove system status entry
        !            72:  *
        !            73:  *     return codes:  none
        !            74:  */
        !            75: rmstat(name)
        !            76: char *name;
        !            77: {
        !            78:        char filename[MAXFULLNAME];
        !            79: 
        !            80:        STATNAME(filename, name);
        !            81:        unlink(filename);
        !            82: }
        !            83: 
        !            84: /*
        !            85:  *     check system status for call
        !            86:  *
        !            87:  *     return codes  0 - ok | >0 system status
        !            88:  */
        !            89: callok(name)
        !            90: char *name;
        !            91: {
        !            92:        char filename[MAXFULLNAME], line[S_SIZE];
        !            93:        register FILE *fp;
        !            94:        time_t lasttime, prestime, retrytime;
        !            95:        long t1, t2;
        !            96:        int count, type;
        !            97: 
        !            98:        STATNAME(filename, name);
        !            99:        fp = fopen(filename, "r");
        !           100:        if (fp == NULL)
        !           101:                return(SS_OK);
        !           102: 
        !           103:        if (fgets(line, S_SIZE, fp) == NULL) {
        !           104:                /*  no data  */
        !           105:                fclose(fp);
        !           106:                unlink(filename);
        !           107:                return(SS_OK);
        !           108:        }
        !           109: 
        !           110:        fclose(fp);
        !           111:        time(&prestime);
        !           112:        sscanf(line, "%d%d%ld%ld", &type, &count, &t1, &t2);
        !           113:        lasttime = t1;
        !           114:        retrytime = t2;
        !           115: 
        !           116:        switch(type) {
        !           117:        case SS_BADSEQ:
        !           118:        case SS_CALLBACK:
        !           119:        case SS_NODEVICE:
        !           120:        case SS_INPROGRESS:     /*let LCK take care of it */
        !           121:                return(SS_OK);
        !           122: 
        !           123:        case SS_FAIL:
        !           124:                if (count > MAXRECALLS) {
        !           125:                        logent("MAX RECALLS", "NO CALL");
        !           126:                        DEBUG(4, "MAX RECALL COUNT %d\n", count);
        !           127:                        if (Debug) {
        !           128:                                logent("debugging", "continuing anyway");
        !           129:                                return SS_OK;
        !           130:                        }
        !           131:                        return type;
        !           132:                }
        !           133: 
        !           134:                if (prestime - lasttime < retrytime) {
        !           135:                        logent("RETRY TIME NOT REACHED", "NO CALL");
        !           136:                        DEBUG(4, "RETRY TIME (%ld) NOT REACHED\n", retrytime);
        !           137:                        if (Debug) {
        !           138:                                logent("debugging", "continuing anyway");
        !           139:                                return SS_OK;
        !           140:                        }
        !           141:                        return type;
        !           142:                }
        !           143: 
        !           144:                return SS_OK;
        !           145:        default:
        !           146:                return SS_OK;
        !           147:        }
        !           148: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.