]> git.ipfire.org Git - thirdparty/libsolv.git/commitdiff
Change data_fetch so that it always returns the first entry
authorMichael Schroeder <mls@suse.de>
Mon, 24 Sep 2018 11:03:16 +0000 (13:03 +0200)
committerMichael Schroeder <mls@suse.de>
Mon, 24 Sep 2018 11:03:16 +0000 (13:03 +0200)
It did something different for fix/flexarrays.

src/repopack.h

index da809498b5647c0f40b370ec561117cea4ca1350..29f4babd275d9045e459a569f018f8d817ea2447 100644 (file)
@@ -205,8 +205,14 @@ data_fetch(unsigned char *dp, KeyValue *kv, Repokey *key)
       return data_read_ideof(dp, (Id *)&kv->num2, &kv->eof);
     case REPOKEY_TYPE_FIXARRAY:
     case REPOKEY_TYPE_FLEXARRAY:
-      kv->entry = -1;
-      dp = data_read_id(dp, (Id *)&kv->num);   /* number of elements */
+      if (!kv->entry)
+       {
+          dp = data_read_id(dp, (Id *)&kv->num);       /* number of elements */
+         if (!kv->num)
+           return 0;           /* illegal */
+       }
+      if (!kv->entry || key->type == REPOKEY_TYPE_FLEXARRAY)
+        dp = data_read_id(dp, &kv->id);        /* schema */
       kv->str = (const char *)dp;
       return dp;
     default: