]> git.ipfire.org Git - thirdparty/libsolv.git/commitdiff
Bring repodata_lookup_num in sync with repo_lookup_num
authorMichael Schroeder <mls@suse.de>
Wed, 19 Sep 2018 11:30:42 +0000 (13:30 +0200)
committerMichael Schroeder <mls@suse.de>
Wed, 19 Sep 2018 11:35:00 +0000 (13:35 +0200)
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.)

bindings/solv.i
src/repo.c
src/repodata.c
src/repodata.h

index 47376be357b24f3459adb09a5846f0b2d68a4c25..b651aadad120c732cd34cc27054373f1c2087172 100644 (file)
@@ -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);
index f0c11ab1efd3649312c9b0957be7c939ebfa9bf3..d163f13480eca2d3fa44c0ebc53e37dc086c1cc5 100644 (file)
@@ -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
index 52d68ba258eefd4afcfe723fb46ed644fe259f37..7b5a064525b9e1ec3a644cdea77e4a3c8c7ea235 100644 (file)
@@ -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;
     }
 }
 
index d67259d7ee33d2d5daf7fde99b207710f8f55655..3ac7e5b1e5f5725c338d39f47518b6bfe0663beb 100644 (file)
@@ -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);