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;
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) {
/*
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;
}
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;
}
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) {
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);
+ }
}
}
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) {