|
|
1.1 ! root 1: #include "stdio.h" ! 2: #include "trace.h" ! 3: #include "trace.d" ! 4: ! 5: struct Swiffle *slist, *slast, *flast; ! 6: int nswiff = 0, fswiff = 0; ! 7: ! 8: struct Swiffle * ! 9: unswiffle(avoid) ! 10: struct STATE *avoid; ! 11: { ! 12: struct Swiffle *try, *result = (struct Swiffle *) NULL; ! 13: register int i; ! 14: ! 15: for (i = nswiff, try = slist; i > 0; i--, try = try->next) ! 16: if (try->st != avoid) ! 17: { result = try; ! 18: getput(try, i); ! 19: if (try->vi->analyzed == 0) ! 20: { fprintf(stderr, "assertion botched\n"); ! 21: kill(getpid(), 3); ! 22: } ! 23: break; ! 24: } ! 25: ! 26: return result; ! 27: } ! 28: ! 29: swiffle(this, that) ! 30: struct STATE *this; ! 31: struct VISIT *that; ! 32: { ! 33: struct Swiffle *getswiff(), *try; ! 34: ! 35: try = getswiff(); ! 36: try->st = this; ! 37: try->vi = that; ! 38: ! 39: if (nswiff++ == 0) ! 40: slist = try; ! 41: else ! 42: { slast->next = try; ! 43: try->last = slast; ! 44: } ! 45: slast = try; ! 46: } ! 47: ! 48: getput(try, n) ! 49: struct Swiffle *try; ! 50: { ! 51: /* unlink from slist: */ ! 52: if (try == slist) ! 53: slist = try->next; ! 54: else ! 55: try->last->next = try->next; ! 56: ! 57: if (n > 1) ! 58: try->next->last = try->last; ! 59: ! 60: if (try == slast) ! 61: { if (try == slist) ! 62: slast = (struct Swiffle *) NULL; ! 63: else ! 64: slast = try->last; ! 65: } ! 66: nswiff--; ! 67: ! 68: /* relink in flist: */ ! 69: try->next = (struct Swiffle *) NULL; ! 70: ! 71: if (fswiff++ == 0) ! 72: try->last = (struct Swiffle *) NULL; ! 73: else ! 74: { flast->next = try; ! 75: try->last = flast; ! 76: } ! 77: flast = try; ! 78: } ! 79: ! 80: struct Swiffle * ! 81: getswiff() ! 82: { struct Swiffle *try; ! 83: ! 84: if (fswiff == 0) ! 85: try = (struct Swiffle *) Smalloc(sizeof(struct Swiffle)); ! 86: else ! 87: { fswiff--; ! 88: try = flast; ! 89: if ((flast = try->last) != NULL) ! 90: flast->next = (struct Swiffle *) NULL; ! 91: } ! 92: try->next = try->last = (struct Swiffle *) NULL; ! 93: ! 94: return try; ! 95: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.