本文整理汇总了C++中solv_free函数的典型用法代码示例。如果您正苦于以下问题:C++ solv_free函数的具体用法?C++ solv_free怎么用?C++ solv_free使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了solv_free函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: reldep_init
static int
reldep_init(_ReldepObject *self, PyObject *args, PyObject *kwds)
{
PyObject *sack;
int cmp_type = 0;
const char *reldep_str = NULL;
char *name, *evr = NULL;
if (!PyArg_ParseTuple(args, "O!s", &sack_Type, &sack, &reldep_str))
return -1;
HySack csack = sackFromPyObject(sack);
if (csack == NULL)
return -1;
if (parse_reldep_str(reldep_str, &name, &evr, &cmp_type) == -1) {
PyErr_Format(HyExc_Value, "Wrong reldep format: %s", reldep_str);
return -1;
}
self->reldep = hy_reldep_create(csack, name, cmp_type, evr);
solv_free(name);
solv_free(evr);
if (self->reldep == NULL) {
PyErr_Format(HyExc_Value, "No such reldep: %s", name);
return -1;
}
return 0;
}
示例2: glob_for_cachedir
static int
glob_for_cachedir(char *path)
{
int ret = 1;
if (!str_endswith(path, "XXXXXX"))
return ret;
wordexp_t word_vector;
char *p = solv_strdup(path);
const int len = strlen(p);
struct stat s;
ret = 2;
p[len-6] = '*';
p[len-5] = '\0';
if (wordexp(p, &word_vector, 0)) {
solv_free(p);
return ret;
}
for (int i = 0; i < word_vector.we_wordc; ++i) {
char *entry = word_vector.we_wordv[i];
if (stat(entry, &s))
continue;
if (S_ISDIR(s.st_mode) &&
s.st_uid == getuid()) {
assert(strlen(path) == strlen(entry));
strcpy(path, entry);
ret = 0;
break;
}
}
wordfree(&word_vector);
solv_free(p);
return ret;
}
示例3: repo_empty
void
repo_empty(Repo *repo, int reuseids)
{
Pool *pool = repo->pool;
Solvable *s;
int i;
pool_freewhatprovides(pool);
if (reuseids && repo->end == pool->nsolvables)
{
/* it's ok to reuse the ids. As this is the last repo, we can
just shrink the solvable array */
for (i = repo->end - 1, s = pool->solvables + i; i >= repo->start; i--, s--)
if (s->repo != repo)
break;
pool_free_solvable_block(pool, i + 1, repo->end - (i + 1), reuseids);
}
/* zero out (i.e. free) solvables belonging to this repo */
for (i = repo->start, s = pool->solvables + i; i < repo->end; i++, s++)
if (s->repo == repo)
memset(s, 0, sizeof(*s));
repo->nsolvables = 0;
/* free all data belonging to this repo */
repo->idarraydata = solv_free(repo->idarraydata);
repo->idarraysize = 0;
repo->lastoff = 0;
repo->rpmdbid = solv_free(repo->rpmdbid);
for (i = 1; i < repo->nrepodata; i++)
repodata_freedata(repo->repodata + i);
solv_free(repo->repodata);
repo->repodata = 0;
repo->nrepodata = 0;
}
示例4: hy_packagedelta_free
void
hy_packagedelta_free(HyPackageDelta delta)
{
solv_free(delta->location);
solv_free(delta->baseurl);
solv_free(delta->checksum);
solv_free(delta);
}
示例5: cookie_bufclose
static int cookie_bufclose(void *cookie)
{
struct bufcookie *bc = cookie;
if (bc->freemem)
solv_free(bc->freemem);
solv_free(bc);
return 0;
}
示例6: findmetalinkurl
char *
findmetalinkurl(FILE *fp, unsigned char *chksump, Id *chksumtypep)
{
char buf[4096], *bp, *ep;
char **urls = 0;
int nurls = 0;
int i;
if (chksumtypep)
*chksumtypep = 0;
while((bp = fgets(buf, sizeof(buf), fp)) != 0)
{
while (*bp == ' ' || *bp == '\t')
bp++;
if (chksumtypep && !*chksumtypep && !strncmp(bp, "<hash type=\"sha256\">", 20))
{
bp += 20;
if (solv_hex2bin((const char **)&bp, chksump, 32) == 32)
*chksumtypep = REPOKEY_TYPE_SHA256;
continue;
}
if (strncmp(bp, "<url", 4))
continue;
bp = strchr(bp, '>');
if (!bp)
continue;
bp++;
ep = strstr(bp, "repodata/repomd.xml</url>");
if (!ep)
continue;
*ep = 0;
if (strncmp(bp, "http", 4))
continue;
urls = solv_extend(urls, nurls, 1, sizeof(*urls), 15);
urls[nurls++] = strdup(bp);
}
if (nurls)
{
if (nurls > 1)
findfastest(urls, nurls > 5 ? 5 : nurls);
bp = urls[0];
urls[0] = 0;
for (i = 0; i < nurls; i++)
solv_free(urls[i]);
solv_free(urls);
ep = strchr(bp, '/');
if ((ep = strchr(ep + 2, '/')) != 0)
{
*ep = 0;
printf("[using mirror %s]\n", bp);
*ep = '/';
}
return bp;
}
return 0;
}
示例7: hy_packagelist_free
void
hy_packagelist_free(HyPackageList plist)
{
int i;
for (i = 0; i < plist->count; ++i)
hy_package_free(plist->elements[i]);
solv_free(plist->elements);
solv_free(plist);
}
示例8: pool_setarchpolicy
/*
* we support three relations:
*
* a = b both architectures a and b are treated as equivalent
* a > b a is considered a "better" architecture, the solver
* should change from a to b, but must not change from b to a
* a : b a is considered a "better" architecture, the solver
* must not change the architecture from a to b or b to a
*/
void
pool_setarchpolicy(Pool *pool, const char *arch)
{
unsigned int score = 0x10001;
size_t l;
char d;
Id *id2arch;
Id id, lastarch;
pool->id2arch = solv_free(pool->id2arch);
pool->id2color = solv_free(pool->id2color);
if (!arch)
{
pool->lastarch = 0;
return;
}
id = pool->noarchid;
lastarch = id + 255;
/* note that we overallocate one element to be compatible with
* old versions that accessed id2arch[lastarch].
* id2arch[lastarch] will always be zero */
id2arch = solv_calloc(lastarch + 1, sizeof(Id));
id2arch[id] = 1; /* the "noarch" class */
d = 0;
while (*arch)
{
l = strcspn(arch, ":=>");
if (l)
{
id = pool_strn2id(pool, arch, l, 1);
if (id >= lastarch)
{
id2arch = solv_realloc2(id2arch, (id + 255 + 1), sizeof(Id));
memset(id2arch + lastarch + 1, 0, (id + 255 - lastarch) * sizeof(Id));
lastarch = id + 255;
}
if (id2arch[id] == 0)
{
if (d == ':')
score += 0x10000;
else if (d == '>')
score += 0x00001;
id2arch[id] = score;
}
}
arch += l;
if ((d = *arch++) == 0)
break;
}
pool->id2arch = id2arch;
pool->lastarch = lastarch;
}
示例9: free_dirs_names_array
static void
free_dirs_names_array(struct addfileprovides_cbdata *cbd)
{
int i;
if (cbd->dirs)
{
for (i = 0; i < cbd->nfiles; i++)
solv_free(cbd->dirs[i]);
cbd->dirs = solv_free(cbd->dirs);
cbd->names = solv_free(cbd->names);
}
}
示例10: pool_setarchpolicy
/*
* we support three relations:
*
* a = b both architectures a and b are treated as equivalent
* a > b a is considered a "better" architecture, the solver
* should change from a to b, but must not change from b to a
* a : b a is considered a "better" architecture, the solver
* must not change the architecture from a to b or b to a
*/
void
pool_setarchpolicy(Pool *pool, const char *arch)
{
unsigned int score = 0x10001;
size_t l;
char d;
Id *id2arch;
Id id, lastarch;
pool->id2arch = solv_free(pool->id2arch);
pool->id2color = solv_free(pool->id2color);
if (!arch)
{
pool->lastarch = 0;
return;
}
id = pool->noarchid;
lastarch = id + 255;
id2arch = solv_calloc(lastarch + 1, sizeof(Id));
id2arch[id] = 1; /* the "noarch" class */
d = 0;
while (*arch)
{
l = strcspn(arch, ":=>");
if (l)
{
id = pool_strn2id(pool, arch, l, 1);
if (id > lastarch)
{
id2arch = solv_realloc2(id2arch, (id + 255 + 1), sizeof(Id));
memset(id2arch + lastarch + 1, 0, (id + 255 - lastarch) * sizeof(Id));
lastarch = id + 255;
}
if (id2arch[id] == 0)
{
if (d == ':')
score += 0x10000;
else if (d == '>')
score += 0x00001;
id2arch[id] = score;
}
}
arch += l;
if ((d = *arch++) == 0)
break;
}
pool->id2arch = id2arch;
pool->lastarch = lastarch;
}
示例11: repo_add_releasefile_products
int
repo_add_releasefile_products(Repo *repo, const char *dirpath, int flags)
{
DIR *dir;
struct dirent *entry;
FILE *fp;
char *fullpath;
struct parsedata pd;
if (!dirpath)
dirpath = "/etc";
if (flags & REPO_USE_ROOTDIR)
dirpath = pool_prepend_rootdir(repo->pool, dirpath);
dir = opendir(dirpath);
if (!dir)
{
if (flags & REPO_USE_ROOTDIR)
solv_free((char *)dirpath);
return 0;
}
memset(&pd, 0, sizeof(pd));
pd.repo = repo;
while ((entry = readdir(dir)))
{
int len = strlen(entry->d_name);
if (len > 8 && !strcmp(entry->d_name + len - 8, "-release"))
{
/* skip /etc/lsb-release, thats not a product per-se */
if (strcmp(entry->d_name, "lsb-release") == 0)
continue;
fullpath = join2(&pd.jd, dirpath, "/", entry->d_name);
if ((fp = fopen(fullpath, "r")) == 0)
{
pool_error(repo->pool, 0, "%s: %s", fullpath, strerror(errno));
continue;
}
add_releasefile_product(&pd, fp);
fclose(fp);
}
}
closedir(dir);
join_freemem(&pd.jd);
if (flags & REPO_USE_ROOTDIR)
solv_free((char *)dirpath);
if (!(flags & REPO_NO_INTERNALIZE) && (flags & REPO_REUSE_REPODATA) != 0)
repodata_internalize(repo_last_repodata(repo));
return 0;
}
示例12: repo_free_solvable_block
void
repo_free_solvable_block(Repo *repo, Id start, int count, int reuseids)
{
Solvable *s;
Repodata *data;
int i;
if (start + count == repo->end)
repo->end -= count;
repo->nsolvables -= count;
for (s = repo->pool->solvables + start, i = count; i--; s++)
s->repo = 0;
pool_free_solvable_block(repo->pool, start, count, reuseids);
FOR_REPODATAS(repo, i, data)
{
int dstart, dend;
if (data->end > repo->end)
repodata_shrink(data, repo->end);
dstart = data->start > start ? data->start : start;
dend = data->end < start + count ? data->end : start + count;
if (dstart < dend)
{
if (data->attrs)
{
int j;
for (j = dstart; j < dend; j++)
data->attrs[j - data->start] = solv_free(data->attrs[j - data->start]);
}
if (data->incoreoffset)
memset(data->incoreoffset + (dstart - data->start), 0, (dend - dstart) * sizeof(Id));
}
}
示例13: pool_freeidhashes
/* free all hash tables */
void
pool_freeidhashes(Pool *pool)
{
stringpool_freehash(&pool->ss);
pool->relhashtbl = solv_free(pool->relhashtbl);
pool->relhashmask = 0;
}
示例14: reportsolutioncb
static int
reportsolutioncb(Solver *solv, void *cbdata)
{
struct reportsolutiondata *sd = cbdata;
char *res;
sd->count++;
res = testcase_solverresult(solv, TESTCASE_RESULT_TRANSACTION);
if (*res)
{
char prefix[64];
char *p2, *p = res;
sprintf(prefix, "callback%d:", sd->count);
while ((p2 = strchr(p, '\n')) != 0)
{
char c = p2[1];
p2[1] = 0;
sd->result = solv_dupappend(sd->result, prefix, p);
p2[1] = c;
p = p2 + 1;
}
}
solv_free(res);
return 0;
}
示例15: mkcachedir
/**
* Recursively create directory.
*
* If it is in the format accepted by mkdtemp() the function globs for a
* matching name and if not found it uses mkdtemp() to create the path. 'path'
* is modified in those two cases.
*/
int
mkcachedir(char *path)
{
int ret = 1;
if (!glob_for_cachedir(path))
return 0;
const int len = strlen(path);
if (len < 1 || path[0] != '/')
return 1; // only absolute pathnames are accepted
char *p = solv_strdup(path);
if (p[len-1] == '/')
p[len-1] = '\0';
if (access(p, X_OK)) {
*(strrchr(p, '/')) = '\0';
ret = mkcachedir(p);
if (str_endswith(path, "XXXXXX")) {
char *retptr = mkdtemp(path);
if (retptr == NULL)
ret |= 1;
} else
ret |= mkdir(path, CACHEDIR_PERMISSIONS);
} else {
ret = 0;
}
solv_free(p);
return ret;
}