Annotation of 43BSDReno/old/arcv/arcv.c, revision 1.1.1.1

1.1       root        1: static char sccsid[] = "@(#)arcv.c 4.2 10/21/88";
                      2: /*
                      3:  * arcv - convert old to new archive format
                      4:  */
                      5: 
                      6: #include <signal.h>
                      7: #include <ar.h>
                      8: #define        OARMAG  0177545
                      9: struct oar_hdr {
                     10:        char    oar_name[14];
                     11:        long    oar_date;
                     12:        char    oar_uid;
                     13:        char    oar_gid;
                     14:        int     oar_mode;
                     15:        long    oar_size;
                     16: };
                     17: 
                     18: struct ar_hdr nh;
                     19: struct oar_hdr oh;
                     20: char   tmp[] = "/usr/tmp/arcXXXXXX";
                     21: char   *mktemp();
                     22: int    f;
                     23: char   buf[512];
                     24: int    tf;
                     25: main(argc, argv)
                     26: char *argv[];
                     27: {
                     28:        register i;
                     29: 
                     30:        if (argc>1 && strcmp(argv[1], "-t")==0) {
                     31:                argc--;
                     32:                argv++;
                     33:        } else {
                     34:                strcpy(tmp, "/tmp/arcXXXXXX");
                     35:        }
                     36:        mktemp(tmp);
                     37:        for(i=1; i<4; i++)
                     38:                signal(i, SIG_IGN);
                     39:        for(i=1; i<argc; i++) {
                     40:                if (argc>1)
                     41:                        printf("%s:\n", argv[i]);
                     42:                conv(argv[i]);
                     43:        }
                     44:        unlink(tmp);
                     45:        return(0);
                     46: }
                     47: 
                     48: conv(fil)
                     49: char *fil;
                     50: {
                     51:        int oldmagic;
                     52:        long n;
                     53:        unsigned i;
                     54: 
                     55:        f = open(fil, 2);
                     56:        if(f < 0) {
                     57:                printf("arcv: cannot open %s\n", fil);
                     58:                return;
                     59:        }
                     60:        close(creat(tmp, 0600));
                     61:        tf = open(tmp, 2);
                     62:        if(tf < 0) {
                     63:                printf("arcv: cannot open temp\n");
                     64:                close(f);
                     65:                return;
                     66:        }
                     67:        oldmagic = 0;
                     68:        read(f, (char *)&oldmagic, sizeof(oldmagic));
                     69:        if(oldmagic != 0177545) {
                     70:                printf("arcv: %s not old archive format\n", fil);
                     71:                close(tf);
                     72:                close(f);
                     73:                return;
                     74:        }
                     75:        chkwrite(tf, ARMAG, SARMAG);
                     76: loop:
                     77:        i = read(f, (char *)&oh, sizeof(oh));
                     78:        if(i != sizeof(oh))
                     79:                goto out;
                     80: 
                     81:        sprintf(buf, "%-16.14s%-12ld%-6u%-6u%-8o%-10ld%-2s",
                     82:           oh.oar_name,
                     83:           oh.oar_date,
                     84:           oh.oar_uid,
                     85:           oh.oar_gid,
                     86:           (unsigned short)oh.oar_mode,
                     87:           oh.oar_size,
                     88:           ARFMAG);
                     89:        strncpy((char *)&nh, buf, sizeof(nh));
                     90:        n = oh.oar_size;
                     91:        chkwrite(tf, (char *)&nh, sizeof(nh));
                     92:        while(n > 0) {
                     93:                i = 512;
                     94:                if (n<i)
                     95:                        i = n;
                     96:                read(f, buf, i&01? i+1:i);
                     97:                if (i&01) {
                     98:                        buf[i] = '\n';
                     99:                        i++;
                    100:                }
                    101:                chkwrite(tf, buf, i);
                    102:                n -= i;
                    103:        }
                    104:        goto loop;
                    105: out:
                    106:        lseek(f, 0L, 0);
                    107:        lseek(tf, 0L, 0);
                    108:        while((i=read(tf, buf, 512)) > 0)
                    109:                chkwrite(f, buf, i);
                    110:        close(f);
                    111:        close(tf);
                    112: }
                    113: 
                    114: chkwrite(f, b, n)
                    115: char *b;
                    116: {
                    117:        if (write(f, b, n) != n) {
                    118:                printf("arcv: write error\n");
                    119:                unlink(tmp);
                    120:                exit(1);
                    121:        }
                    122: }

unix.superglobalmegacorp.com

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