From: Michael Schroeder Date: Wed, 27 Jun 2012 10:31:38 +0000 (+0200) Subject: - check type in lookup_bin_checksum, make it possible to retrieve PKGID/HDRID/LEADSIG... X-Git-Tag: BASE-SuSE-Code-12_2-Branch~4 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b35a25c192ef3e7c4cd4308714f6347197c2f688;p=thirdparty%2Flibsolv.git - check type in lookup_bin_checksum, make it possible to retrieve PKGID/HDRID/LEADSIGID with lookup_checksum --- diff --git a/src/repo.c b/src/repo.c index b7372cf0..804f2b5d 100644 --- a/src/repo.c +++ b/src/repo.c @@ -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; } diff --git a/src/repodata.c b/src/repodata.c index 48a927d8..15ed0b58 100644 --- a/src/repodata.c +++ b/src/repodata.c @@ -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; }