- check type in lookup_bin_checksum, make it possible to retrieve PKGID/HDRID/LEADSIG...
authorMichael Schroeder <mls@suse.de>
Wed, 27 Jun 2012 10:31:38 +0000 (12:31 +0200)
committerMichael Schroeder <mls@suse.de>
Wed, 27 Jun 2012 10:31:38 +0000 (12:31 +0200)
src/repo.c
src/repodata.c

index b7372cf..804f2b5 100644 (file)
@@ -1289,6 +1289,28 @@ const char *
 repo_lookup_checksum(Repo *repo, Id entry, Id keyname, Id *typep)
 {
   const unsigned char *chk = repo_lookup_bin_checksum(repo, entry, keyname, typep);
+  if (!chk && (keyname == SOLVABLE_PKGID || keyname == SOLVABLE_HDRID || keyname == SOLVABLE_LEADSIGID))
+    {
+      const char *s = repo_lookup_str(repo, entry, keyname);
+      if (!s)
+       return 0;
+      if (strlen(s) == 32)
+       {
+         *typep = REPOKEY_TYPE_MD5;
+         return s;
+       }
+      if (strlen(s) == 40)
+       {
+         *typep = REPOKEY_TYPE_SHA1;
+         return s;
+       }
+      if (strlen(s) == 64)
+       {
+         *typep = REPOKEY_TYPE_SHA256;
+         return s;
+       }
+      return 0;
+    }
   return chk ? pool_bin2hex(repo->pool, chk, solv_chksum_len(*typep)) : 0;
 }
 
index 48a927d..15ed0b5 100644 (file)
@@ -728,6 +728,8 @@ repodata_lookup_bin_checksum(Repodata *data, Id solvid, Id keyname, Id *typep)
   dp = find_key_data(data, solvid, keyname, &key);
   if (!dp)
     return 0;
+  if (!(key->type == REPOKEY_TYPE_MD5 || key->type == REPOKEY_TYPE_SHA1 || key->type == REPOKEY_TYPE_SHA256))
+    return 0;
   *typep = key->type;
   return dp;
 }