X-Git-Url: https://the.earth.li/gitweb/?a=blobdiff_plain;f=stats.c;h=2e6347976fccf04b337525268001ede24a36ea00;hb=2edb917ed0be24b4a525bef5aa346389afbd1be3;hp=db8566bc859335b773a0f2d33fb06d9bfd8ce3f4;hpb=4aafe74aea2d616a5d9611c6e3c01a182a0b37ec;p=onak.git diff --git a/stats.c b/stats.c index db8566b..2e63479 100644 --- a/stats.c +++ b/stats.c @@ -56,6 +56,7 @@ void initcolour(bool parent) unsigned long findpath(struct stats_key *have, struct stats_key *want) { struct ll *keys = NULL; + struct ll *oldkeys = NULL; struct ll *sigs = NULL; struct ll *nextkeys = NULL; long curdegree = 0; @@ -63,9 +64,10 @@ unsigned long findpath(struct stats_key *have, struct stats_key *want) curdegree = 1; keys = lladd(NULL, want); + oldkeys = keys; while (keys != NULL && have->colour == 0) { - sigs = hash_getkeysigs(((struct stats_key *) + sigs = cached_getkeysigs(((struct stats_key *) keys->object)->keyid); while (sigs != NULL && have->colour == 0) { /* @@ -86,10 +88,20 @@ unsigned long findpath(struct stats_key *have, struct stats_key *want) keys = keys->next; if (keys == NULL) { keys = nextkeys; + llfree(oldkeys, NULL); + oldkeys = keys; nextkeys = NULL; curdegree++; } } + if (oldkeys != NULL) { + llfree(oldkeys, NULL); + oldkeys = NULL; + } + if (nextkeys != NULL) { + llfree(nextkeys, NULL); + nextkeys = NULL; + } return count; } @@ -107,23 +119,24 @@ unsigned long findpath(struct stats_key *have, struct stats_key *want) void dofindpath(uint64_t have, uint64_t want, bool html) { struct stats_key *keyinfoa, *keyinfob, *curkey; + uint64_t fullhave, fullwant; int rec; char *uid; - have = getfullkeyid(have); - want = getfullkeyid(want); + fullhave = getfullkeyid(have); + fullwant = getfullkeyid(want); /* * Make sure the keys we have and want are in the cache. */ - hash_getkeysigs(have); - hash_getkeysigs(want); + cached_getkeysigs(fullhave); + cached_getkeysigs(fullwant); - if ((keyinfoa = findinhash(have)) == NULL) { + if ((keyinfoa = findinhash(fullhave)) == NULL) { printf("Couldn't find key 0x%llX.\n", have); return; } - if ((keyinfob = findinhash(want)) == NULL) { + if ((keyinfob = findinhash(fullwant)) == NULL) { printf("Couldn't find key 0x%llX.\n", want); return; } @@ -152,31 +165,36 @@ void dofindpath(uint64_t have, uint64_t want, bool html) while (curkey != NULL && curkey->keyid != 0) { uid = keyid2uid(curkey->keyid); if (html && uid == NULL) { - printf("" - "0x%08llX ([User id not found])%s" - "
\n", + printf("0x%08llX ([User id" + " not found])%s
\n", curkey->keyid & 0xFFFFFFFF, curkey->keyid & 0xFFFFFFFF, - (curkey->keyid == want) ? "" : + (curkey->keyid == fullwant) ? "" : " signs"); } else if (html && uid != NULL) { - printf("" - "0x%08llX (%s)%s
\n", + printf("0x%08llX" + " (%s)%s
\n", curkey->keyid & 0xFFFFFFFF, curkey->keyid & 0xFFFFFFFF, curkey->keyid & 0xFFFFFFFF, - txt2html(keyid2uid(curkey->keyid)), - (curkey->keyid == want) ? "" : + txt2html(uid), + (curkey->keyid == fullwant) ? "" : " signs"); } else { printf("0x%08llX (%s)%s\n", curkey->keyid & 0xFFFFFFFF, (uid == NULL) ? "[User id not found]" : uid, - (curkey->keyid == want) ? "" : + (curkey->keyid == fullwant) ? "" : " signs"); } + if (uid != NULL) { + free(uid); + uid = NULL; + } curkey = findinhash(curkey->parent); } if (html) { @@ -190,6 +208,13 @@ void dofindpath(uint64_t have, uint64_t want, bool html) curkey = findinhash(curkey->parent); } putchar('\n'); + if (html) { + printf("
" + "" + "Find reverse path\n", + want, + have); + } } } @@ -214,7 +239,7 @@ struct stats_key *furthestkey(struct stats_key *have) curll = lladd(NULL, have); while (curll != NULL) { - sigs = hash_getkeysigs(((struct stats_key *) + sigs = cached_getkeysigs(((struct stats_key *) curll->object)->keyid); while (sigs != NULL) { if (((struct stats_key *) sigs->object)->colour == 0) {