X-Git-Url: https://git.sommitrealweird.co.uk/onak.git/blobdiff_plain/4aafe74aea2d616a5d9611c6e3c01a182a0b37ec..76c5dd1081bc9db3bf446480457b52d4ae7b3891:/stats.c
diff --git a/stats.c b/stats.c
index db8566b..39e96c0 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;
}
@@ -161,12 +174,13 @@ void dofindpath(uint64_t have, uint64_t want, bool html)
" signs");
} else if (html && uid != NULL) {
printf(""
- "0x%08llX ("
+ " (%s)%s
\n",
curkey->keyid & 0xFFFFFFFF,
curkey->keyid & 0xFFFFFFFF,
curkey->keyid & 0xFFFFFFFF,
- txt2html(keyid2uid(curkey->keyid)),
+ txt2html(uid),
(curkey->keyid == want) ? "" :
" signs");
} else {
@@ -177,6 +191,10 @@ void dofindpath(uint64_t have, uint64_t want, bool html)
(curkey->keyid == want) ? "" :
" signs");
}
+ if (uid != NULL) {
+ free(uid);
+ uid = NULL;
+ }
curkey = findinhash(curkey->parent);
}
if (html) {
@@ -214,7 +232,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) {