Skip to content

Commit dd5e4b9

Browse files
committed
Refactor track_feature parsing a bit
1 parent ae9db8d commit dd5e4b9

1 file changed

Lines changed: 21 additions & 18 deletions

File tree

ext/repo_conda.c

Lines changed: 21 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ parse_otherdeps(struct parsedata *pd, struct solv_jsonparser *jp, Id handle, Id
6464
}
6565

6666
static int
67-
parse_trackfeatures(struct parsedata *pd, struct solv_jsonparser *jp, Id handle)
67+
parse_trackfeatures_array(struct parsedata *pd, struct solv_jsonparser *jp, Id handle)
6868
{
6969
int type = JP_ARRAY;
7070
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)
8787
return type;
8888
}
8989

90+
static void
91+
parse_trackfeatures_string(struct parsedata *pd, const char *p, Id handle)
92+
{
93+
const char *pe;
94+
for (; *p; p++)
95+
{
96+
if (*p == ' ' || *p == '\t' || *p == ',')
97+
continue;
98+
pe = p + 1;
99+
while (*pe && *pe != ' ' && *pe != '\t' && *pe != ',')
100+
pe++;
101+
repodata_add_idarray(pd->data, handle, SOLVABLE_TRACK_FEATURES, pool_strn2id(pd->pool, p, pe - p, 1));
102+
p = pe - 1;
103+
}
104+
}
105+
90106
static void
91-
swap_solvables(Repo *repo, Repodata *data, Id pa, Id pb)
107+
swap_solvables(Pool *pool, Repodata *data, Id pa, Id pb)
92108
{
93-
Pool *pool = repo->pool;
94109
Solvable tmp;
95110

96111
tmp = pool->solvables[pa];
@@ -170,21 +185,9 @@ parse_package(struct parsedata *pd, struct solv_jsonparser *jp, char *kfn)
170185
repodata_set_num(data, handle, SOLVABLE_BUILDTIME, ts);
171186
}
172187
else if (type == JP_STRING && !strcmp(jp->key, "track_features"))
173-
{
174-
char *p = jp->value, *pe;
175-
for (; *p; p++)
176-
{
177-
if (*p == ' ' || *p == '\t' || *p == ',')
178-
continue;
179-
pe = p + 1;
180-
while (*pe && *pe != ' ' && *pe != '\t' && *pe != ',')
181-
pe++;
182-
repodata_add_idarray(data, handle, SOLVABLE_TRACK_FEATURES, pool_strn2id(pool, p, pe - p, 1));
183-
p = pe - 1;
184-
}
185-
}
188+
parse_trackfeatures_string(pd, jp->value, handle);
186189
else if (type == JP_ARRAY && !strcmp(jp->key, "track_features"))
187-
type = parse_trackfeatures(pd, jp, handle);
190+
type = parse_trackfeatures_array(pd, jp, handle);
188191
else
189192
type = jsonparser_skip(jp, type);
190193
}
@@ -212,7 +215,7 @@ parse_package(struct parsedata *pd, struct solv_jsonparser *jp, char *kfn)
212215
if (fndata[0] && fndata[0] < fntype)
213216
{
214217
/* replace old package */
215-
swap_solvables(pd->repo, data, handle, fndata[1]);
218+
swap_solvables(pool, data, handle, fndata[1]);
216219
repo_free_solvable(pd->repo, handle, 1);
217220
handle = fndata[1];
218221
}

0 commit comments

Comments
 (0)