cscvs to tla changeset 22
authorJonathan McDowell <noodles@earth.li>
Mon, 31 May 2004 23:47:04 +0000 (23:47 +0000)
committerJonathan McDowell <noodles@earth.li>
Mon, 31 May 2004 23:47:04 +0000 (23:47 +0000)
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

index 76129fa0b1565be42a39d46de3176e4cb097828b..35e5fae723cbd7d0cd976f38114678336212ee2b 100644 (file)
@@ -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) {