@@ -64,7 +64,7 @@ parse_otherdeps(struct parsedata *pd, struct solv_jsonparser *jp, Id handle, Id
6464}
6565
6666static 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+
90106static 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