|
|
1.1 ! root 1: #include "stdio.h" ! 2: typedef unsigned long ul; ! 3: typedef struct { ! 4: char *fname; ! 5: int len; /* how many counts have been seen */ ! 6: int quot; /* how much has been allocated for cnt */ ! 7: unsigned long *cnt; ! 8: } stab; ! 9: stab *tab; ! 10: int ntab, ltab; ! 11: FILE *fd, *sfd, *cfd; ! 12: char buf[256]; ! 13: char fname[512] = "/"; ! 14: extern char *malloc(); ! 15: char flg[128]; ! 16: unsigned long val; ! 17: ! 18: main(argc, argv) ! 19: char **argv; ! 20: { int i, j; ! 21: if(argc <= 1) { ! 22: fprintf(stderr, "subtract from where?\n"); ! 23: exit(1); ! 24: } ! 25: if((fd = fopen("prof.out", "r")) == 0) { ! 26: perror("prof.out"); ! 27: exit(1); ! 28: } ! 29: readall(fd); ! 30: fclose(fd); ! 31: sfd = fopen(argv[1], "r"); ! 32: if(sfd == 0) { ! 33: perror(argv[1]); ! 34: exit(1); ! 35: } ! 36: suball(sfd); ! 37: fclose(sfd); ! 38: if((fd = fopen("prof.out", "w")) == 0) { ! 39: perror(argv[1]); ! 40: exit(1); ! 41: } ! 42: for(i = 0; i < ntab; i++) ! 43: rewrite(tab + i); ! 44: exit(0); ! 45: } ! 46: ! 47: readall(fd) ! 48: FILE *fd; ! 49: { int c, i, index; ! 50: stab *curtab = 0; ! 51: sawnl: ! 52: if((c = getc(fd)) == EOF) ! 53: return; ! 54: if(c == '\n') ! 55: goto sawnl; ! 56: if(c == '/') { ! 57: fscanf(fd, "%s", fname+1); ! 58: for(i = 0; i < ntab; i++) ! 59: if(strcmp(fname, tab[i].fname) == 0) ! 60: break; ! 61: if(i >= ntab) { /* new file */ ! 62: if(ltab == 0) { ! 63: tab = (stab *)malloc(20 * sizeof(stab)); ! 64: ltab = 20; ! 65: } ! 66: else if(ntab >= ltab) ! 67: tab = (stab *)realloc((char *)tab, ! 68: (ltab += 20) * sizeof(stab)); ! 69: tab[ntab].fname = malloc(sizeof(fname) + 1); ! 70: strcpy(tab[ntab].fname, fname); ! 71: tab[ntab].len = tab[ntab].quot = 0; ! 72: ntab++; ! 73: } ! 74: curtab = tab + i; ! 75: index = 0; ! 76: } ! 77: else if(c < '0' || c > '9') { ! 78: fprintf(stderr, "prof.out has weird format\n"); ! 79: abort(); ! 80: } ! 81: else { ! 82: ungetc(c, fd); ! 83: fscanf(fd, "%d", &val); ! 84: if(curtab->len <= index) { ! 85: if(curtab->quot == 0) { ! 86: curtab->cnt = (ul *)malloc(100*sizeof(long)); ! 87: curtab->quot = 100; ! 88: for(i = 0; i < 100; i++) ! 89: curtab->cnt[i] = 0; ! 90: } ! 91: else if(curtab->len >= curtab->quot) { ! 92: curtab->cnt = (ul *)realloc(curtab->cnt, ! 93: (curtab->quot += 200) * sizeof(long)); ! 94: for(i = curtab->quot-200; i < curtab->quot; i++) ! 95: curtab->cnt[i] = 0; ! 96: } ! 97: curtab->len++; ! 98: } ! 99: curtab->cnt[index++] += val; ! 100: } ! 101: goto sawnl; ! 102: } ! 103: ! 104: rewrite(x) ! 105: stab *x; ! 106: { int i; ! 107: for(i = 0; i < x->len; i++) ! 108: if(x->cnt[i]) ! 109: break; ! 110: if(i >= x->len) ! 111: return; ! 112: fprintf(fd, "%s\n", x->fname); ! 113: for(i = 0; i < x->len; i++) ! 114: fprintf(fd, "%u\n", x->cnt[i]); ! 115: } ! 116: suball(fd) ! 117: FILE *fd; ! 118: { int c, i, index; ! 119: stab *curtab = 0; ! 120: sawnl: ! 121: if((c = getc(fd)) == EOF) ! 122: return; ! 123: if(c == '\n') ! 124: goto sawnl; ! 125: if(c == '/') { ! 126: fscanf(fd, "%s", fname+1); ! 127: for(i = 0; i < ntab; i++) ! 128: if(strcmp(fname, tab[i].fname) == 0) ! 129: break; ! 130: if(i >= ntab) { /* new file */ ! 131: fprintf(stderr, "new file %s ignored\n", fname); ! 132: goto sawnl; ! 133: } ! 134: curtab = tab + i; ! 135: index = 0; ! 136: } ! 137: else if(c < '0' || c > '9') { ! 138: fprintf(stderr, "prof.out has weird format\n"); ! 139: abort(); ! 140: } ! 141: else { ! 142: ungetc(c, fd); ! 143: fscanf(fd, "%d", &val); ! 144: curtab->cnt[index++] -= val; ! 145: } ! 146: goto sawnl; ! 147: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.