"solvable:description:",
"solvable:messageins:",
"solvable:messagedel:",
+ "solvable:eula:",
0
};
keyfilter_solv(Repo *data, Repokey *key, void *kfdata)
{
int i;
+ const char *keyname;
if (test_separate && key->storage != KEY_STORAGE_SOLVABLE)
return KEY_STORAGE_DROPPED;
for (i = 0; verticals[i]; i++)
if (key->name == verticals[i])
return KEY_STORAGE_VERTICAL_OFFSET;
+ keyname = id2str(data->pool, key->name);
+ for (i = 0; languagetags[i] != 0; i++)
+ if (!strncmp(keyname, languagetags[i], strlen(languagetags[i])))
+ return KEY_STORAGE_VERTICAL_OFFSET;
return KEY_STORAGE_INCORE;
}
keyfilter_attr(Repo *data, Repokey *key, void *kfdata)
{
int i;
+ const char *keyname;
if (key->storage == KEY_STORAGE_SOLVABLE)
return KEY_STORAGE_DROPPED;
for (i = 0; verticals[i]; i++)
if (key->name == verticals[i])
return KEY_STORAGE_VERTICAL_OFFSET;
+ keyname = id2str(data->pool, key->name);
+ for (i = 0; languagetags[i] != 0; i++)
+ if (!strncmp(keyname, languagetags[i], strlen(languagetags[i])))
+ return KEY_STORAGE_VERTICAL_OFFSET;
return KEY_STORAGE_INCORE;
}
* If <basename> is given, split attributes
*/
+#define REPODATAFILE_BLOCK 15
+
int
tool_write(Repo *repo, const char *basename, const char *attrname)
{
int nlanguages = 0;
int i, j, k, l;
+ fileinfos = sat_zextend(fileinfos, nfileinfos, 1, sizeof(Repodatafile), REPODATAFILE_BLOCK);
+ pool_addfileprovides_ids(repo->pool, 0, &fileinfos[nfileinfos].addedfileprovides);
+ if (repo->rpmdbcookie)
+ fileinfos[nfileinfos].rpmdbcookie = repo->rpmdbcookie;
+ if (fileinfos[nfileinfos].addedfileprovides || fileinfos[nfileinfos].rpmdbcookie)
+ nfileinfos++;
+
if (basename)
{
struct keyfilter_other_data kd;
languages[nlanguages++] = strdup(keyname + l);
}
}
- fileinfos = sat_calloc(nlanguages + 2, sizeof(Repodatafile));
+ fileinfos = sat_zextend(fileinfos, nfileinfos, nlanguages + 2, sizeof(Repodatafile), REPODATAFILE_BLOCK);
/* write language subfiles */
for (i = 0; i < nlanguages; i++)
{
exit(1);
}
repo_write(repo, fp, keyfilter_language, languages[i], fileinfos + nfileinfos, 0);
- fileinfos[nfileinfos++].location = strdup(fn);
+ fileinfos[nfileinfos].location = strdup(fn);
fclose(fp);
+ nfileinfos++;
}
/* write DU subfile */
if (has_DU)
exit(1);
}
repo_write(repo, fp, keyfilter_DU, 0, fileinfos + nfileinfos, 0);
- fileinfos[nfileinfos++].location = strdup(fn);
+ fileinfos[nfileinfos].location = strdup(fn);
fclose(fp);
+ nfileinfos++;
}
/* write filelist */
if (has_FL)
exit(1);
}
repo_write(repo, fp, keyfilter_FL, 0, fileinfos + nfileinfos, 0);
- fileinfos[nfileinfos++].location = strdup(fn);
+ fileinfos[nfileinfos].location = strdup(fn);
fclose(fp);
+ nfileinfos++;
}
/* write everything else */
sprintf(fn, "%s.solv", basename);
}
kd.languages = languages;
kd.nlanguages = nlanguages;
- repo_write(repo, fp, keyfilter_other, &kd, fileinfos, nfileinfos);
+ repo_write(repo, fp, keyfilter_other, &kd, nfileinfos ? fileinfos : 0, nfileinfos);
fclose(fp);
for (i = 0; i < nlanguages; i++)
free(languages[i]);
sat_free(languages);
for (i = 0; i < nfileinfos; i++)
{
+ sat_free(fileinfos[i].addedfileprovides);
sat_free(fileinfos[i].location);
sat_free(fileinfos[i].keys);
}
}
if (attrname)
{
- fileinfos = sat_calloc(1, sizeof(Repodatafile));
+ fileinfos = sat_zextend(fileinfos, nfileinfos, 1, sizeof(Repodatafile), REPODATAFILE_BLOCK);
test_separate = 1;
FILE *fp = fopen (attrname, "w");
- repo_write(repo, fp, keyfilter_attr, 0, fileinfos + nfileinfos++, 0);
- fileinfos[nfileinfos - 1].location = strdup(attrname);
+ repo_write(repo, fp, keyfilter_attr, 0, fileinfos + nfileinfos, 0);
+ fileinfos[nfileinfos].location = strdup(attrname);
fclose(fp);
+ nfileinfos++;
}
- repo_write(repo, stdout, keyfilter_solv, 0, fileinfos, nfileinfos);
- if (fileinfos)
+ repo_write(repo, stdout, keyfilter_solv, 0, nfileinfos ? fileinfos : 0, nfileinfos);
+ for (i = 0; i < nfileinfos; i++)
{
- free(fileinfos[0].location);
- free(fileinfos[0].keys);
- free(fileinfos);
+ sat_free(fileinfos[i].addedfileprovides);
+ sat_free(fileinfos[i].location);
+ sat_free(fileinfos[i].keys);
}
+ sat_free(fileinfos);
return 0;
}