|
|
1.1 ! root 1: #include "stdio.h" ! 2: #include "cbt.h" ! 3: ! 4: extern int errno; ! 5: mbuf key, value; ! 6: char kbuf[NDSZ], vbuf[32767]; ! 7: bfile *bfd; ! 8: FILE *pfd; ! 9: extern FILE *popen(); ! 10: char iflag, rflag; ! 11: ! 12: main(argc, argv) ! 13: char **argv; ! 14: { ! 15: if(argc != 2) { ! 16: fprintf(stderr, "usage; %s file-name\n", argv[0]); ! 17: exit(1); ! 18: } ! 19: bfd = bopen(argv[1], 0); ! 20: if(bfd == NULL) ! 21: fail(argv[1]); ! 22: strcpy(vbuf, "cbt creat "); ! 23: if(bfd->path[0]->htype & INDEX) { ! 24: iflag = 1; ! 25: strcat(vbuf, "-i "); ! 26: } ! 27: if(bfd->path[0]->htype & READONLY) { ! 28: rflag = 1; ! 29: strcat(vbuf, "-r"); ! 30: } ! 31: sprintf(kbuf, "%s TS%d", vbuf, getpid()); ! 32: if(system(kbuf) != 0) { ! 33: fprintf(stderr, "%s failed\n", kbuf); ! 34: exit(1); ! 35: } ! 36: /* this refers to the installed version? */ ! 37: sprintf(kbuf, "cbt build -r TS%d", getpid()); ! 38: pfd = popen(kbuf, "w"); ! 39: if(pfd == NULL) ! 40: fail(kbuf); ! 41: key.mdata = kbuf; ! 42: value.mdata = vbuf; ! 43: errno = 0; ! 44: while(bread(bfd, &key, &value) != EOF) { ! 45: (void) fwrite((char *)&key.mlen, 1, sizeof(key.mlen), pfd); ! 46: (void) fwrite(key.mdata, 1, key.mlen, pfd); ! 47: (void) fwrite((char *)&value.mlen, 1, sizeof(value.mlen), pfd); ! 48: (void) fwrite(value.mdata, 1, value.mlen, pfd); ! 49: if(ferror(pfd)) ! 50: fail("write to build"); ! 51: } ! 52: if(errno) ! 53: fail("extracting"); ! 54: if(pclose(pfd) != 0) ! 55: fail("pipe close"); ! 56: sprintf(kbuf, "%s.T", argv[1]); ! 57: sprintf(vbuf, "TS%d.T", getpid()); ! 58: unlink(kbuf); ! 59: link(vbuf, kbuf); ! 60: if(iflag) ! 61: exit(0); ! 62: sprintf(kbuf, "%s.F", argv[1]); ! 63: sprintf(vbuf, "TS%d.F", getpid()); ! 64: unlink(kbuf); ! 65: link(vbuf, kbuf); ! 66: if(errno) ! 67: perror("linking"); ! 68: exit(0); ! 69: } ! 70: ! 71: fail(s) ! 72: char *s; ! 73: { ! 74: perror(s); ! 75: exit(2); ! 76: } ! 77: static struct D { struct D *a; char *b;} VER = {&VER,"\n81/4/26:btsquash.c\n"}; ! 78: /*0100011001101001*/
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.