From d42be5ad24e9573098e437ecebf9775428636ee0 Mon Sep 17 00:00:00 2001 From: Jonathan McDowell Date: Mon, 31 May 2004 23:47:04 +0000 Subject: [PATCH] cscvs to tla changeset 22 Author: noodles Date: 2002/11/10 18:01:36 Making use of DISTINCT for pulling sigs out and strtol doesn't like 64 bit hex conversions. --- keydb_pg.c | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/keydb_pg.c b/keydb_pg.c index 76129fa..35e5fae 100644 --- a/keydb_pg.c +++ b/keydb_pg.c @@ -499,9 +499,10 @@ struct ll *getkeysigs(uint64_t keyid) PGresult *result = NULL; uint64_t signer; char statement[1024]; - int i = 0; + int i, j; int numsigs = 0; bool intrans = false; + char *str; if (!intrans) { result = PQexec(dbconn, "BEGIN"); @@ -509,14 +510,25 @@ struct ll *getkeysigs(uint64_t keyid) } snprintf(statement, 1023, - "SELECT signer FROM onak_sigs WHERE signee = '%llX'", + "SELECT DISTINCT signer FROM onak_sigs WHERE signee = '%llX'", keyid); result = PQexec(dbconn, statement); if (PQresultStatus(result) == PGRES_TUPLES_OK) { numsigs = PQntuples(result); for (i = 0; i < numsigs; i++) { - signer = strtol(PQgetvalue(result, i, 0), NULL, 16); + j = 0; + signer = 0; + str = PQgetvalue(result, i, 0); + while (str[j] != 0) { + signer <<= 4; + if (str[j] >= '0' && str[j] <= '9') { + signer += str[j] - '0'; + } else { + signer += str[j] - 'A' + 10; + } + j++; + } sigs = lladd(sigs, createandaddtohash(signer)); } } else if (PQresultStatus(result) != PGRES_TUPLES_OK) { -- 2.39.5