Skip to content

Commit c1a371b

Browse files
committed
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.)
1 parent e00c3cf commit c1a371b

4 files changed

Lines changed: 11 additions & 17 deletions

File tree

bindings/solv.i

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3909,8 +3909,7 @@ rb_eval_string(
39093909
return repodata_lookup_id(repo_id2repodata($self->repo, $self->id), solvid, keyname);
39103910
}
39113911
unsigned long long lookup_num(Id solvid, Id keyname, unsigned long long notfound = 0) {
3912-
unsigned long long v = 0;
3913-
return repodata_lookup_num(repo_id2repodata($self->repo, $self->id), solvid, keyname, &v) ? v : notfound;
3912+
return repodata_lookup_num(repo_id2repodata($self->repo, $self->id), solvid, keyname, notfound);
39143913
}
39153914
bool lookup_void(Id solvid, Id keyname) {
39163915
return repodata_lookup_void(repo_id2repodata($self->repo, $self->id), solvid, keyname);

src/repo.c

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1065,11 +1065,11 @@ repo_create_keyskip(Repo *repo, Id entry, Id **oldkeyskip)
10651065
const char *
10661066
repo_lookup_str(Repo *repo, Id entry, Id keyname)
10671067
{
1068-
Pool *pool = repo->pool;
10691068
Repodata *data;
10701069

10711070
if (entry >= 0)
10721071
{
1072+
Pool *pool = repo->pool;
10731073
switch (keyname)
10741074
{
10751075
case SOLVABLE_NAME:
@@ -1091,7 +1091,6 @@ unsigned long long
10911091
repo_lookup_num(Repo *repo, Id entry, Id keyname, unsigned long long notfound)
10921092
{
10931093
Repodata *data;
1094-
unsigned long long value;
10951094

10961095
if (entry >= 0)
10971096
{
@@ -1103,7 +1102,7 @@ repo_lookup_num(Repo *repo, Id entry, Id keyname, unsigned long long notfound)
11031102
}
11041103
}
11051104
data = repo_lookup_repodata_opt(repo, entry, keyname);
1106-
return data && repodata_lookup_num(data, entry, keyname, &value) ? value : notfound;
1105+
return data ? repodata_lookup_num(data, entry, keyname, notfound) : notfound;
11071106
}
11081107

11091108
Id

src/repodata.c

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -733,32 +733,28 @@ repodata_lookup_str(Repodata *data, Id solvid, Id keyname)
733733
return pool_id2str(data->repo->pool, id);
734734
}
735735

736-
int
737-
repodata_lookup_num(Repodata *data, Id solvid, Id keyname, unsigned long long *value)
736+
unsigned long long
737+
repodata_lookup_num(Repodata *data, Id solvid, Id keyname, unsigned long long notfound)
738738
{
739739
unsigned char *dp;
740740
Repokey *key;
741741
unsigned int high, low;
742742

743-
*value = 0;
744743
dp = find_key_data(data, solvid, keyname, &key);
745744
if (!dp)
746-
return 0;
745+
return notfound;
747746
switch (key->type)
748747
{
749748
case REPOKEY_TYPE_NUM:
750749
data_read_num64(dp, &low, &high);
751-
*value = (unsigned long long)high << 32 | low;
752-
return 1;
750+
return (unsigned long long)high << 32 | low;
753751
case REPOKEY_TYPE_U32:
754752
data_read_u32(dp, &low);
755-
*value = low;
756-
return 1;
753+
return low;
757754
case REPOKEY_TYPE_CONSTANT:
758-
*value = key->size;
759-
return 1;
755+
return key->size;
760756
default:
761-
return 0;
757+
return notfound;
762758
}
763759
}
764760

src/repodata.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -225,7 +225,7 @@ void repodata_free_filelistfilter(Repodata *data);
225225
Id repodata_lookup_type(Repodata *data, Id solvid, Id keyname);
226226
Id repodata_lookup_id(Repodata *data, Id solvid, Id keyname);
227227
const char *repodata_lookup_str(Repodata *data, Id solvid, Id keyname);
228-
int repodata_lookup_num(Repodata *data, Id solvid, Id keyname, unsigned long long *value);
228+
unsigned long long repodata_lookup_num(Repodata *data, Id solvid, Id keyname, unsigned long long notfound);
229229
int repodata_lookup_void(Repodata *data, Id solvid, Id keyname);
230230
const unsigned char *repodata_lookup_bin_checksum(Repodata *data, Id solvid, Id keyname, Id *typep);
231231
int repodata_lookup_idarray(Repodata *data, Id solvid, Id keyname, Queue *q);

0 commit comments

Comments
 (0)