cscvs to tla changeset 65
[onak.git] / stats.c
diff --git a/stats.c b/stats.c
index db8566bc859335b773a0f2d33fb06d9bfd8ce3f4..2e6347976fccf04b337525268001ede24a36ea00 100644 (file)
--- 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("<a href=\"lookup?op=get&search=%llX\">"
-                                       "0x%08llX</a> ([User id not found])%s"
-                                       "<BR>\n",
+                               printf("<a href=\"lookup?op=get&search="
+                                       "0x%08llX\">0x%08llX</a> ([User id"
+                                       " not found])%s<BR>\n",
                                        curkey->keyid & 0xFFFFFFFF,
                                        curkey->keyid & 0xFFFFFFFF,
-                                       (curkey->keyid == want) ? "" :
+                                       (curkey->keyid == fullwant) ? "" :
                                         " signs");
                        } else if (html && uid != NULL) {
-                               printf("<a href=\"lookup?op=get&search=%llX\">"
-                                       "0x%08llX</a> (<a href=\"lookup?op=vindex"
-                                       "&search=0x%llX\">%s</a>)%s<BR>\n",
+                               printf("<a href=\"lookup?op=get&search="
+                                       "0x%08llX\">0x%08llX</a>"
+                                       " (<a href=\"lookup?op=vindex"
+                                       "&search=0x%08llX\">%s</a>)%s<BR>\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("<BR>"
+                               "<A HREF=\"gpgwww?from=0x%08llX&to=0x%08llX\">"
+                                       "Find reverse path</A>\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) {