Annotation of researchv10dc/cmd/oworm/wmv.c, revision 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.