Annotation of researchv10no/cmd/spool/fget.c, revision 1.1.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.