Annotation of researchv10no/cmd/worm/wmv.c, revision 1.1.1.1

1.1       root        1: #include       <libc.h>
                      2: #include       "worm.h"
                      3: #include       "sym.h"
                      4: #include       <sys/types.h>
                      5: #include       <sys/stat.h>
                      6: #include       <pwd.h>
                      7: #include       <grp.h>
                      8: #include       <signal.h>
                      9: 
                     10: int lflag = 0;
                     11: int bflag = 0;
                     12: 
                     13: main(argc, argv)
                     14:        char **argv;
                     15: {
                     16:        Superblock s;
                     17:        register Inode *i;
                     18:        Inode newi;
                     19:        char *e;
                     20:        char *dev = "/dev/worm0";
                     21:        int c;
                     22:        extern char *optarg;
                     23:        extern int optind;
                     24:        void pr();
                     25: 
                     26:        while((c = getopt(argc, argv, "lbf:")) != -1)
                     27:                switch(c)
                     28:                {
                     29:                case 'f':       dev = optarg; break;
                     30:                case 'l':       lflag = 1; break;
                     31:                case 'b':       bflag = 1; break;
                     32:                case '?':       usage();
                     33:                }
                     34:        dev = mapdev(dev);
                     35:        if((s.fd = open(dev, 2)) < 0){
                     36:                perror(dev);
                     37:                exit(1);
                     38:        }
                     39:        if(e = openinode(&s, DO_INODE|SPIN_DOWN)){
                     40:                fprint(2, "%s: %s\n", dev, e);
                     41:                exit(1);
                     42:        }
                     43:        if(optind != argc-3)
                     44:                usage();
                     45:        if(strcmp(s.vol_id, argv[optind])){
                     46:                fprint(2, "worm mv: vol_id mismatch: wanted %s, got %s\n", argv[optind], s.vol_id);
                     47:                exit(1);
                     48:        }
                     49:        optind++;
                     50:        if((i = inodeof(argv[optind])) == 0){
                     51:                Fprint(2, "%s not found\n", argv[optind]);
                     52:                exit(1);
                     53:        }
                     54:        optind++;
                     55:        if(strlen(argv[optind]) < 1){
                     56:                Fprint(2, "worm mv: destination name is null\n");
                     57:                exit(1);
                     58:        }
                     59:        for(c = 1; c <= NSIG; c++)
                     60:                signal(c, SIG_IGN);
                     61:        ininit();
                     62:        newi = *i;
                     63:        i->block = -1;
                     64:        inadd(&s, i);
                     65:        newi.name.n = argv[optind];
                     66:        inadd(&s, &newi);
                     67:        if(inwrite(&s))
                     68:                exit(1);
                     69:        exit(0);
                     70: }
                     71: 
                     72: usage()
                     73: {
                     74:        fprint(2, "Usage: worm mv [-fdevice] vol_id from to\n");
                     75:        exit(2);
                     76: }
                     77: 
                     78: static Inode *inodes;
                     79: static long ip;
                     80: static long ninodes = 0;
                     81: static char *nameb;
                     82: static long np;
                     83: static long nnameb = 0;
                     84: static long nblocks;
                     85: #define                IINC            1024
                     86: #define                NINC            (64*IINC)
                     87: 
                     88: ininit()
                     89: {
                     90:        if(nnameb == 0){
                     91:                nameb = malloc((unsigned)(nnameb = NINC));
                     92:                if(nameb == 0){
                     93:                        fprint(2, "wmv: malloc fail, %d bytes\n", nnameb);
                     94:                        exit(1);
                     95:                }
                     96:        }
                     97:        np = 0;
                     98:        if(ninodes == 0){
                     99:                inodes = (Inode *)malloc(sizeof(Inode)*(unsigned)(ninodes = IINC));
                    100:                if(inodes == 0){
                    101:                        fprint(2, "wmv: malloc fail, %d inodes %d bytes\n", ninodes, ninodes*sizeof(Inode));
                    102:                        exit(1);
                    103:                }
                    104:        }
                    105:        ip = 0;
                    106: }
                    107: 
                    108: inadd(s, i)
                    109:        Superblock *s;
                    110:        register Inode *i;
                    111: {
                    112:        register long len;
                    113: 
                    114:        len = strlen(i->name.n)+1;
                    115:        if(np+len > nnameb){
                    116:                while(np+len > nnameb)
                    117:                        nnameb += NINC;
                    118:                nameb = realloc(nameb, (unsigned)nnameb);
                    119:                if(nameb == 0){
                    120:                        fprint(2, "wmv: realloc fail, %d bytes\n", nnameb);
                    121:                        exit(1);
                    122:                }
                    123:        }
                    124:        strcpy(nameb+np, i->name.n);
                    125:        i->name.o = np;
                    126:        np += len;
                    127:        if(ip == ninodes){
                    128:                ninodes += IINC;
                    129:                inodes = (Inode *)realloc((char *)inodes, (unsigned)ninodes*sizeof(Inode));
                    130:                if(inodes == 0){
                    131:                        fprint(2, "wmv: realloc fail, %d inodes %d bytes\n", ninodes, ninodes*sizeof(Inode));
                    132:                        exit(1);
                    133:                }
                    134:        }
                    135:        inodes[ip++] = *i;
                    136: }
                    137: 
                    138: inwrite(s)
                    139:        Superblock *s;
                    140: {
                    141:        char *e;
                    142: 
                    143:        if(e = lkwri(s, inodes, ip, nameb, np, 0L)){
                    144:                fprint(2, "%s\n", e);
                    145:                return(1);
                    146:        }
                    147:        return(0);
                    148: }

unix.superglobalmegacorp.com

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