From: Michael Schroeder Date: Wed, 19 Sep 2018 11:30:42 +0000 (+0200) Subject: Bring repodata_lookup_num in sync with repo_lookup_num X-Git-Tag: 0.7.0~37 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c1a371bd53664893c055db4634a7a02705a8acca;p=thirdparty%2Flibsolv.git Bring repodata_lookup_num in sync with repo_lookup_num It used to return a boolean if the num was found and write the num over a pointer. This was done because repo_lookup_num needed to iterate over all repodatas and thus needed to know if the keyname existed or not. Nowadays we use repo_lookup_repodata_opt to find the correct repodata, so we do no longer need the boolean return value. So we can make repodata_lookup_num work like repo_lookup_num. This is an INCOMPATIBLE API CHANGE but I'm pretty sure nobody uses repodate_lookup_num, so this should not hurt anybody. (You can use a call to repodata_lookup_type to check if the repodata really contains the num in case the "notfound" value is returned.) --- diff --git a/bindings/solv.i b/bindings/solv.i index 47376be3..b651aada 100644 --- a/bindings/solv.i +++ b/bindings/solv.i @@ -3909,8 +3909,7 @@ rb_eval_string( return repodata_lookup_id(repo_id2repodata($self->repo, $self->id), solvid, keyname); } unsigned long long lookup_num(Id solvid, Id keyname, unsigned long long notfound = 0) { - unsigned long long v = 0; - return repodata_lookup_num(repo_id2repodata($self->repo, $self->id), solvid, keyname, &v) ? v : notfound; + return repodata_lookup_num(repo_id2repodata($self->repo, $self->id), solvid, keyname, notfound); } bool lookup_void(Id solvid, Id keyname) { return repodata_lookup_void(repo_id2repodata($self->repo, $self->id), solvid, keyname); diff --git a/src/repo.c b/src/repo.c index f0c11ab1..d163f134 100644 --- a/src/repo.c +++ b/src/repo.c @@ -1065,11 +1065,11 @@ repo_create_keyskip(Repo *repo, Id entry, Id **oldkeyskip) const char * repo_lookup_str(Repo *repo, Id entry, Id keyname) { - Pool *pool = repo->pool; Repodata *data; if (entry >= 0) { + Pool *pool = repo->pool; switch (keyname) { case SOLVABLE_NAME: @@ -1091,7 +1091,6 @@ unsigned long long repo_lookup_num(Repo *repo, Id entry, Id keyname, unsigned long long notfound) { Repodata *data; - unsigned long long value; if (entry >= 0) { @@ -1103,7 +1102,7 @@ repo_lookup_num(Repo *repo, Id entry, Id keyname, unsigned long long notfound) } } data = repo_lookup_repodata_opt(repo, entry, keyname); - return data && repodata_lookup_num(data, entry, keyname, &value) ? value : notfound; + return data ? repodata_lookup_num(data, entry, keyname, notfound) : notfound; } Id diff --git a/src/repodata.c b/src/repodata.c index 52d68ba2..7b5a0645 100644 --- a/src/repodata.c +++ b/src/repodata.c @@ -733,32 +733,28 @@ repodata_lookup_str(Repodata *data, Id solvid, Id keyname) return pool_id2str(data->repo->pool, id); } -int -repodata_lookup_num(Repodata *data, Id solvid, Id keyname, unsigned long long *value) +unsigned long long +repodata_lookup_num(Repodata *data, Id solvid, Id keyname, unsigned long long notfound) { unsigned char *dp; Repokey *key; unsigned int high, low; - *value = 0; dp = find_key_data(data, solvid, keyname, &key); if (!dp) - return 0; + return notfound; switch (key->type) { case REPOKEY_TYPE_NUM: data_read_num64(dp, &low, &high); - *value = (unsigned long long)high << 32 | low; - return 1; + return (unsigned long long)high << 32 | low; case REPOKEY_TYPE_U32: data_read_u32(dp, &low); - *value = low; - return 1; + return low; case REPOKEY_TYPE_CONSTANT: - *value = key->size; - return 1; + return key->size; default: - return 0; + return notfound; } } diff --git a/src/repodata.h b/src/repodata.h index d67259d7..3ac7e5b1 100644 --- a/src/repodata.h +++ b/src/repodata.h @@ -225,7 +225,7 @@ void repodata_free_filelistfilter(Repodata *data); Id repodata_lookup_type(Repodata *data, Id solvid, Id keyname); Id repodata_lookup_id(Repodata *data, Id solvid, Id keyname); const char *repodata_lookup_str(Repodata *data, Id solvid, Id keyname); -int repodata_lookup_num(Repodata *data, Id solvid, Id keyname, unsigned long long *value); +unsigned long long repodata_lookup_num(Repodata *data, Id solvid, Id keyname, unsigned long long notfound); int repodata_lookup_void(Repodata *data, Id solvid, Id keyname); const unsigned char *repodata_lookup_bin_checksum(Repodata *data, Id solvid, Id keyname, Id *typep); int repodata_lookup_idarray(Repodata *data, Id solvid, Id keyname, Queue *q);