Annotation of researchv10no/cmd/daemon/fgdemon.c, revision 1.1

1.1     ! root        1: /*
        !             2:  * Retrieve files from GCOS via Spider or dataphone
        !             3:  */
        !             4: 
        !             5: #include       <errno.h>
        !             6: #include       <setjmp.h>
        !             7: 
        !             8: char   dpd[]   = "/usr/spool/dpd";
        !             9: char   lock[]  = "/usr/spool/dpd/glock";
        !            10: char   error[] = "/usr/spool/dpd/errors";
        !            11: 
        !            12: #include       "daemon0.c"
        !            13: 
        !            14: #define MINUTES 60
        !            15: 
        !            16: #define OKTRB 0
        !            17: #define BADTRB 1
        !            18: #define FATTRB 2
        !            19: 
        !            20: char   zfname[]        = "/usr/spool/dpd/zf";
        !            21: int    LZFNAME = 0;    /*length of pathname of zf-file thru 'f'. MRW */
        !            22: char   badbuf[]        = "/usr/spool/dpd/fget.badbuf";
        !            23: char   okmes[] = "OK nd =%3d, nf = %-19d";
        !            24: char   fgeto[] = "fget.odemon";
        !            25: char   *argvo[] = {fgeto, NULL, NULL};
        !            26: 
        !            27: FILE   *ofd = NULL;            /*data file*/
        !            28: FILE   *tfd = NULL;            /*badbuf file*/
        !            29: int    tlaps = 0;
        !            30: int    tlimit = 6*MINUTES;
        !            31: int    tfac = 1;
        !            32: int    nbaderr = 0;
        !            33: int    gotit = 0;
        !            34: int    nfiles = 0;
        !            35: int    ndelim = 0;
        !            36: long   nnull = 0;              /*count of consecutive nulls*/
        !            37: char   fname[108];
        !            38: jmp_buf        env;
        !            39: 
        !            40: int    (*output)();
        !            41: 
        !            42: 
        !            43: main(argc, argv)
        !            44: 
        !            45: int argc;
        !            46: char *argv[];
        !            47: 
        !            48: {
        !            49: 
        !            50: int i;
        !            51: extern ignore();
        !            52: 
        !            53:        dem_setup();
        !            54:        LZFNAME = 0;            /*calculate length of zfname. MRW*/
        !            55:        while(zfname[LZFNAME])  LZFNAME++;
        !            56: 
        !            57:        if (argc == 2) {
        !            58:                argvo[1] = argv[1];
        !            59:                tlimit = 0;
        !            60:                i = 0;
        !            61:                while ( argv[1][i] ) tlimit = 10*tlimit +  argv[1][i++] - '0' ;
        !            62:                }
        !            63: 
        !            64: #ifdef DEBUG
        !            65:        fprintf(stderr, "tlimit = %d\n",tlimit); /* PRINTF */
        !            66: #endif
        !            67: 
        !            68:        setjmp(env);
        !            69: 
        !            70:        ofd = NULL;
        !            71:        output = ignore;
        !            72: 
        !            73:        fgd_read();     /*perform input appropriate to device.*/
        !            74: 
        !            75:        if (gotit == 0)
        !            76:                trouble(OKTRB, -20, "no output");
        !            77: 
        !            78:        if (gotit == 1) {
        !            79:                gotit = 2;
        !            80:                trouble(OKTRB, 20, okmes, ndelim, nfiles);
        !            81:                }
        !            82: 
        !            83:        trouble(OKTRB, 0, okmes, ndelim, nfiles);
        !            84: }
        !            85: 
        !            86: 
        !            87: 
        !            88: /* VARARGS */
        !            89: trouble(lev, t, s, a1, a2, a3)
        !            90: int    lev;
        !            91: int    t;
        !            92: char   *s;
        !            93: int    a1, a2, a3;
        !            94: {
        !            95: 
        !            96: #ifdef DEBUG
        !            97:        fprintf(stderr, s, a1, a2, a3); putc('\n', stderr); /* PRINTF */
        !            98: #endif
        !            99:        alarm(0);
        !           100:        dem_dis();      /*close appropriate device.*/
        !           101:        if ( lev >= BADTRB ) nbaderr++;
        !           102: 
        !           103:        if ( lev <= BADTRB && nbaderr < 2 && t != 0 && tlaps < tlimit ) {
        !           104:                if (t < 0) t = -t;
        !           105:                t *= tfac;
        !           106:                if (t > 4*MINUTES) t = 4*MINUTES;
        !           107: #ifdef DEBUG
        !           108:                fprintf(stderr, "holding, t = %d, tlaps =  %d\n",t,tlaps); /* PRINTF */
        !           109: #endif
        !           110:                sleep(t);
        !           111:                tlaps += t;
        !           112:                tfac += tfac;
        !           113:                if(access(lock, 0) == 0)
        !           114:                        longjmp(env, 1);
        !           115:                logerr("glock has disappeared");
        !           116:        }
        !           117: 
        !           118:        if(gotit)
        !           119:                logerr(okmes, ndelim, nfiles);
        !           120:        if(t >= 0 && lev > OKTRB)
        !           121:                logerr(s, a1, a2, a3);
        !           122: 
        !           123:        if ( lev >= BADTRB ) {
        !           124:                sleep(20);
        !           125:                unlink(lock);
        !           126: #ifndef DEBUG
        !           127: #if SPIDER
        !           128:                execv("/etc/fget.odemon", argvo);
        !           129:                execv("/usr/lib/fget.odemon", argvo);
        !           130: #endif
        !           131: #endif
        !           132:                }
        !           133: 
        !           134:        unlink(lock);
        !           135:        exit(0);
        !           136: }
        !           137: 
        !           138: 
        !           139: 
        !           140: 
        !           141: ignore(b, i)
        !           142: {
        !           143: }
        !           144: 
        !           145: 
        !           146: outputa(b, i)
        !           147: char   *b;
        !           148: int    i;
        !           149: {
        !           150:        for ( ; i -- > 0; b++ ) {
        !           151:                if (*b == '\0') nnull++;
        !           152:                else {
        !           153:                        for ( ; nnull > 0; nnull -- ) putc( '\0', ofd );
        !           154:                        putc( *b, ofd );
        !           155:                        }
        !           156:                }
        !           157: }
        !           158: 
        !           159: 
        !           160: outputb(b, i)
        !           161: char   *b;
        !           162: int    i;
        !           163: {
        !           164:        for ( ; i-- > 0; b++ ) putc( *b, ofd );
        !           165: }
        !           166: 
        !           167: 
        !           168: firstln(b, i)
        !           169: char   b[];
        !           170: int    i;
        !           171: {
        !           172:        char    *fp, *sp;
        !           173:        extern  ignore(), outputa(), outputb();
        !           174: 
        !           175:        output = ignore;
        !           176:        if ( i == 0 ) return;
        !           177:        b[i-1] = '\0';
        !           178:        if (i < 104 || b[1] != ' ') {
        !           179:                logerr("illeg contr line  %s", b);
        !           180:                return;
        !           181:                }
        !           182: 
        !           183:        switch (b[0]) {
        !           184: 
        !           185:                case 'a':
        !           186:                case 'A':
        !           187:                        output = outputa;
        !           188:                        break;
        !           189: 
        !           190:                case 'b':
        !           191:                case 'B':
        !           192:                        output = outputb;
        !           193:                        break;
        !           194: 
        !           195:                default:
        !           196:                        logerr("illegal control char - %s\n", b);
        !           197:                        return;
        !           198: 
        !           199:                }
        !           200: 
        !           201:        fp = fname;
        !           202:        sp = &b[2];
        !           203:        while (*fp++ = *sp++);
        !           204: 
        !           205: #ifdef DEBUG
        !           206:        fprintf(stderr, "file = %s\n",fname); /* PRINTF */
        !           207: #endif
        !           208: 
        !           209:        if ( (ofd = fopen(fname, "w")) == NULL) {
        !           210:                output = ignore;
        !           211:                logerr("cannot open: %s",  fname);
        !           212:                }
        !           213: 
        !           214:        nnull = 0;
        !           215: }
        !           216: 
        !           217: 
        !           218: 
        !           219: endfile()
        !           220: {
        !           221: int    n;
        !           222: char   *fp;
        !           223: extern firstln();
        !           224: 
        !           225:        gotit = 1;
        !           226:        ndelim++;
        !           227:        output = firstln;
        !           228:        if (ofd == NULL) return;
        !           229:        FCLOSE(ofd);
        !           230: 
        !           231:        nfiles++;
        !           232:        nnull = 0;
        !           233: 
        !           234:        n = 0;
        !           235:        fp = fname;
        !           236:        while (n  < LZFNAME) {
        !           237:                if (*fp++ != zfname[n++]) return;
        !           238:                }
        !           239: 
        !           240:        unlink(fname);
        !           241: 
        !           242: 
        !           243: }

unix.superglobalmegacorp.com

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