From: Michael Schroeder Date: Fri, 24 Apr 2020 09:59:01 +0000 (+0200) Subject: Refactor track_feature parsing a bit X-Git-Tag: 0.7.13~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=dd5e4b9e746ea03b825c49c854c7430850f3c5e6;p=thirdparty%2Flibsolv.git Refactor track_feature parsing a bit --- diff --git a/ext/repo_conda.c b/ext/repo_conda.c index f58da0f3..6e9a9637 100644 --- a/ext/repo_conda.c +++ b/ext/repo_conda.c @@ -64,7 +64,7 @@ parse_otherdeps(struct parsedata *pd, struct solv_jsonparser *jp, Id handle, Id } static int -parse_trackfeatures(struct parsedata *pd, struct solv_jsonparser *jp, Id handle) +parse_trackfeatures_array(struct parsedata *pd, struct solv_jsonparser *jp, Id handle) { int type = JP_ARRAY; while (type > 0 && (type = jsonparser_parse(jp)) > 0 && type != JP_ARRAY_END) @@ -87,10 +87,25 @@ parse_trackfeatures(struct parsedata *pd, struct solv_jsonparser *jp, Id handle) return type; } +static void +parse_trackfeatures_string(struct parsedata *pd, const char *p, Id handle) +{ + const char *pe; + for (; *p; p++) + { + if (*p == ' ' || *p == '\t' || *p == ',') + continue; + pe = p + 1; + while (*pe && *pe != ' ' && *pe != '\t' && *pe != ',') + pe++; + repodata_add_idarray(pd->data, handle, SOLVABLE_TRACK_FEATURES, pool_strn2id(pd->pool, p, pe - p, 1)); + p = pe - 1; + } +} + static void -swap_solvables(Repo *repo, Repodata *data, Id pa, Id pb) +swap_solvables(Pool *pool, Repodata *data, Id pa, Id pb) { - Pool *pool = repo->pool; Solvable tmp; tmp = pool->solvables[pa]; @@ -170,21 +185,9 @@ parse_package(struct parsedata *pd, struct solv_jsonparser *jp, char *kfn) repodata_set_num(data, handle, SOLVABLE_BUILDTIME, ts); } else if (type == JP_STRING && !strcmp(jp->key, "track_features")) - { - char *p = jp->value, *pe; - for (; *p; p++) - { - if (*p == ' ' || *p == '\t' || *p == ',') - continue; - pe = p + 1; - while (*pe && *pe != ' ' && *pe != '\t' && *pe != ',') - pe++; - repodata_add_idarray(data, handle, SOLVABLE_TRACK_FEATURES, pool_strn2id(pool, p, pe - p, 1)); - p = pe - 1; - } - } + parse_trackfeatures_string(pd, jp->value, handle); else if (type == JP_ARRAY && !strcmp(jp->key, "track_features")) - type = parse_trackfeatures(pd, jp, handle); + type = parse_trackfeatures_array(pd, jp, handle); else type = jsonparser_skip(jp, type); } @@ -212,7 +215,7 @@ parse_package(struct parsedata *pd, struct solv_jsonparser *jp, char *kfn) if (fndata[0] && fndata[0] < fntype) { /* replace old package */ - swap_solvables(pd->repo, data, handle, fndata[1]); + swap_solvables(pool, data, handle, fndata[1]); repo_free_solvable(pd->repo, handle, 1); handle = fndata[1]; }