Annotation of researchv10no/cmd/spool/fget.c, revision 1.1

1.1     ! root        1: #include       <stdio.h>
        !             2: 
        !             3: /*
        !             4:  *  fget -- spooler to get file from GCOS
        !             5:  */
        !             6: 
        !             7: 
        !             8: #define        DPR     0
        !             9: #define        FGET    1
        !            10: #define        FSEND   0
        !            11: #define        GCAT    0
        !            12: #define        LPR     0
        !            13: 
        !            14: #define        NAME    "fget"
        !            15: #define        MAXCOPY 204800L
        !            16: #define FIRSTCHAR 't'-1
        !            17: #define CARDSIZE 130
        !            18: 
        !            19: char   cfname[]        = "/usr/spool/dpd/cfsXXXXX";
        !            20: char   dfname[]        = "/usr/spool/dpd/dfsXXXXX";
        !            21: char   lfname[]        = "/usr/spool/dpd/lfsXXXXX";
        !            22: char   tfname[]        = "/usr/spool/dpd/tfsXXXXX";
        !            23: char   zfname[]        = "/usr/spool/dpd/zfsXXXXX";
        !            24: 
        !            25: char   *fzf;
        !            26: FILE   *pfdes;
        !            27: char   wdir[BUFSIZ];
        !            28: FILE   *uff;
        !            29: char   fname[CARDSIZE]  /* unix file name */;
        !            30: char   *fmode;
        !            31: 
        !            32: #include       "spool.c"
        !            33: #include       "gcos.c"
        !            34: 
        !            35: main(agc, agv)
        !            36: int agc;
        !            37: char *agv[];
        !            38: {
        !            39:        extern FILE *popen();
        !            40:        int fi, i, j, nslash, c;
        !            41:        int time;
        !            42:        int poff, foff;
        !            43: 
        !            44:        argc = agc;    
        !            45:        argv = agv;
        !            46:        pidfn();
        !            47:        remotsw = TOSS;         /*default is toss online output*/
        !            48:        wantmail = 1;           /*default is send mail.*/
        !            49:        grade = '1';
        !            50:        fmode = "a";
        !            51:        fi = 0;
        !            52:        foff = 0;
        !            53:        poff = 0;
        !            54: 
        !            55:        while (argc>1 && (arg = argv[1])[0]=='-') {
        !            56:                if(!comopt(arg[1]))
        !            57:                        switch (arg[1]) {
        !            58: 
        !            59:                        case 'a':
        !            60:                                fmode = "a";
        !            61:                                break;
        !            62: 
        !            63:                        case 'b':
        !            64:                                fmode = "b";
        !            65:                                break;
        !            66: 
        !            67:                        case 'd':
        !            68:                                arg = getarg('d');
        !            69:                                while((fname[fi] = arg[fi])) ++fi;
        !            70:                                fname[fi++] = '/';
        !            71:                                break;
        !            72: 
        !            73:                        case 'u':
        !            74:                                arg = getarg('u');
        !            75:                                i = 0;
        !            76:                                while((gcosid[i] = arg[i]))
        !            77:                                        if(++i > 12) {
        !            78:                                                gcosid[i] = '\0';
        !            79:                                                break;
        !            80:                                        }
        !            81:                                uidf = 1;
        !            82:                                break;
        !            83: 
        !            84:                        default:
        !            85:                                fprintf(stderr, "%s: Unrecognized option: %s\n", NAME, arg);
        !            86:                                break;
        !            87:                        }
        !            88:                argc--;
        !            89:                argv++;
        !            90:        }
        !            91: 
        !            92:        spool1();               /*setup initial GCOS cards.*/
        !            93:        card('L',"$     select  cc/unixsupport/access");
        !            94:        if(gcdebug)
        !            95:                card('L',"$     select  cc/test/fget");
        !            96:        else
        !            97:                card('L',"$     select  cc/unixsupport/fget");
        !            98:        card('L',fget_id);
        !            99:        while(--argc) {
        !           100:                arg = *++argv;
        !           101:                if(mailfile == 0)
        !           102:                        mailfile = arg;
        !           103:                /* extract a unix file name */
        !           104: 
        !           105:                i = 0;
        !           106:                foff = fi;
        !           107:                nslash = 0;
        !           108:                while((c = argv[0][i++]) != '\0') {
        !           109:                        if(c == '/') { 
        !           110:                                nslash++; 
        !           111:                                foff = fi; 
        !           112:                                continue; 
        !           113:                        }
        !           114:                        fname[foff++] = c;
        !           115:                }
        !           116:                fname[foff++] = '\0';
        !           117:                fname[fi+12] = '\0';
        !           118: 
        !           119:                /* create the ultimate output file */
        !           120: 
        !           121:                if(debug == 0){
        !           122:                        if((uff = fopen(fname, "w")) == NULL) {
        !           123:                                fprintf(stderr, "%s: Cannot create %s\n", NAME,fname);
        !           124:                                continue;
        !           125:                        }
        !           126:                        chmod(fname,0666);      /*insure file writeable by daemon. MRW*/
        !           127:                }
        !           128: 
        !           129:                /* now make a link for the dpd */
        !           130: 
        !           131:                if(zfname[INCHAR] < 'z')    /*don't create file names past 'z'. MRW*/
        !           132:                        zfname[INCHAR]++;
        !           133:                fzf = zfname;
        !           134:                if(link(fname, fzf) != 0){
        !           135:                        if( fi > 0 ) { 
        !           136:                                fzf = fname; 
        !           137:                        }
        !           138: 
        !           139:                        else{
        !           140:                                if(poff == 0){
        !           141:                                        if((pfdes = popen("pwd", "r")) != NULL){
        !           142:                                                int c;
        !           143:                                                while ((c = getc(pfdes)) != EOF)
        !           144:                                                        wdir[poff++] = c;
        !           145:                                                pclose(pfdes);
        !           146:                                                wdir[poff-1] = '/';
        !           147:                                        }
        !           148:                                }
        !           149:                                if(wdir[0] != '/') { 
        !           150:                                        fprintf(stderr, "%s: Cannot find directory pathname\n", NAME);
        !           151:                                        goto cleanup; 
        !           152:                                }
        !           153:                                i = poff; 
        !           154:                                j = 0;
        !           155:                                while ( wdir[i++] = fname[j++]);
        !           156:                                if(link(wdir, fzf) != 0) fzf = wdir;
        !           157:                        }
        !           158:                }
        !           159: 
        !           160:                card('L', sprintf(buf, "%s %s%s%s %s",
        !           161:                                fmode,
        !           162:                                (nslash == 0 || *arg == '/') ? gcosid : "",
        !           163:                                (nslash == 0) ? "/" : "",
        !           164:                                arg,
        !           165:                                fzf ) );
        !           166: 
        !           167:                if(debug == 0){
        !           168:                        i = 2;
        !           169:                        while((putc(buf[i++], uff)) != '\0') ;
        !           170:                        c = putc( '\n', uff );
        !           171:                                if(c == EOF){
        !           172:                                        fprintf(stderr, "%s: Error writing %s\n", NAME, fname);
        !           173:                                        break;
        !           174:                                }
        !           175:                        fclose(uff);
        !           176:                }
        !           177:                nact++;
        !           178: 
        !           179:        }
        !           180:        if(fork() != 0){
        !           181:                spool2();               /*put out final cards, and spool job.*/
        !           182:                out();
        !           183:        }
        !           184: 
        !           185:        signal(SIGHUP, SIG_IGN);
        !           186:        signal(SIGINT, SIG_IGN);
        !           187:        signal(SIGQUIT, SIG_IGN);
        !           188:        dfname[INCHAR]++;
        !           189:        for( time = 4 ; time < 200 ; time += time ) {
        !           190:                sleep(time);
        !           191:                if(access(dfname, 0) != 0) break;
        !           192:        }
        !           193: 
        !           194:        execl("/usr/lib/fget.demon", "fget.demon", 0);
        !           195:        execl("/etc/fget.demon", "fget.demon", 0);
        !           196:        fprintf(stderr, "%s: Execl of fget.demon failed.\n", NAME);
        !           197:        exit(1);
        !           198: 
        !           199: cleanup:
        !           200:        out();
        !           201: }

unix.superglobalmegacorp.com

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