本文整理汇总了C++中pkgdb_it_next函数的典型用法代码示例。如果您正苦于以下问题:C++ pkgdb_it_next函数的具体用法?C++ pkgdb_it_next怎么用?C++ pkgdb_it_next使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了pkgdb_it_next函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: pkg_create_matches
static int
pkg_create_matches(int argc, char **argv, match_t match, pkg_formats fmt, const char * const outdir, const char * const rootdir)
{
int i, ret = EPKG_OK, retcode = EPKG_OK;
struct pkgdb *db = NULL;
struct pkgdb_it *it = NULL;
struct pkg *pkg = NULL;
int query_flags = PKG_LOAD_DEPS | PKG_LOAD_CONFLICTS | PKG_LOAD_FILES | PKG_LOAD_CATEGORIES |
PKG_LOAD_DIRS | PKG_LOAD_SCRIPTS | PKG_LOAD_OPTIONS |
PKG_LOAD_MTREE | PKG_LOAD_LICENSES;
if (pkgdb_open(&db, PKGDB_DEFAULT) != EPKG_OK) {
pkgdb_close(db);
return (EX_IOERR);
}
if (match != MATCH_ALL) {
for (i = 0;i < argc; i++) {
if ((it = pkgdb_query(db, argv[i], match)) == NULL) {
goto cleanup;
}
while ((ret = pkgdb_it_next(it, &pkg, query_flags)) == EPKG_OK) {
printf("Creating package for %s-%s\n", pkg_get(pkg, PKG_NAME),
pkg_get(pkg, PKG_VERSION));
if (pkg_create_installed(outdir, fmt, rootdir, pkg) != EPKG_OK) {
retcode++;
}
}
}
} else {
if ((it = pkgdb_query(db, NULL, match)) == NULL) {
goto cleanup;
}
while ((ret = pkgdb_it_next(it, &pkg, query_flags)) == EPKG_OK) {
printf("Creating package for %s-%s\n", pkg_get(pkg, PKG_NAME),
pkg_get(pkg, PKG_VERSION));
if (pkg_create_installed(outdir, fmt, rootdir, pkg) != EPKG_OK) {
retcode++;
}
}
}
cleanup:
if (ret != EPKG_END) {
retcode++;
}
pkg_free(pkg);
pkgdb_it_free(it);
pkgdb_close(db);
return (retcode);
}
开发者ID:dnaeon,项目名称:pkgng,代码行数:53,代码来源:create.c
示例2: populate_sums
static kh_sum_t *
populate_sums(struct pkgdb *db)
{
struct pkg *p = NULL;
struct pkgdb_it *it = NULL;
const char *sum;
char *cksum;
size_t slen;
kh_sum_t *suml = NULL;
khint_t k;
int ret;
suml = kh_init_sum();
it = pkgdb_repo_search(db, "*", MATCH_GLOB, FIELD_NAME, FIELD_NONE, NULL);
while (pkgdb_it_next(it, &p, PKG_LOAD_BASIC) == EPKG_OK) {
pkg_get(p, PKG_CKSUM, &sum);
slen = MIN(strlen(sum), PKG_FILE_CKSUM_CHARS);
cksum = strndup(sum, slen);
k = kh_put_sum(suml, cksum, &ret);
if (ret != 0)
kh_value(suml, k) = cksum;
}
return (suml);
}
开发者ID:grembo,项目名称:pkg,代码行数:25,代码来源:clean.c
示例3: pkgs_providing_lib
static int
pkgs_providing_lib(struct pkgdb *db, const char *libname)
{
struct pkgdb_it *it = NULL;
struct pkg *pkg = NULL;
const char *name, *version;
int ret = EPKG_OK;
int count = 0;
if ((it = pkgdb_query_shlib_provided(db, libname)) == NULL) {
return (EPKG_FATAL);
}
while ((ret = pkgdb_it_next(it, &pkg, PKG_LOAD_BASIC)) == EPKG_OK) {
if (count == 0)
printf("%s is provided by the following packages:\n",
libname);
count++;
pkg_get(pkg, PKG_NAME, &name, PKG_VERSION, &version);
printf("%s-%s\n", name, version);
}
if (ret == EPKG_END) {
if (count == 0)
printf("No packages provide %s.\n", libname);
ret = EPKG_OK;
}
pkg_free(pkg);
pkgdb_it_free(it);
return (ret);
}
开发者ID:DarknessWarrior,项目名称:pkg,代码行数:33,代码来源:shlib.c
示例4: check_summary
static void
check_summary(struct pkgdb *db, struct deps_head *dh)
{
struct deps_entry *e = NULL;
struct pkg *pkg = NULL;
struct pkgdb_it *it = NULL;
bool fixed = true;
assert(db != NULL);
printf(">>> Summary of actions performed:\n\n");
STAILQ_FOREACH(e, dh, next) {
if ((it = pkgdb_query(db, e->origin, MATCH_EXACT)) == NULL)
return;
if (pkgdb_it_next(it, &pkg, PKG_LOAD_BASIC) != EPKG_OK) {
fixed = false;
printf("%s dependency failed to be fixed\n", e->origin);
} else
printf("%s dependency has been fixed\n", e->origin);
pkgdb_it_free(it);
}
if (fixed) {
printf("\n>>> Missing dependencies were fixed successfully.\n");
} else {
printf("\n>>> There are still missing dependencies.\n");
printf(">>> You are advised to try fixing them manually.\n");
printf("\n>>> Also make sure to check 'pkg updating' for known issues.\n");
}
pkg_free(pkg);
}
开发者ID:HonestQiao,项目名称:pkgng,代码行数:35,代码来源:check.c
示例5: fix_deps
static int
fix_deps(struct pkgdb *db, struct deps_head *dh, int nbpkgs, bool yes)
{
struct pkg *pkg = NULL;
struct pkgdb_it *it = NULL;
struct pkg_jobs *jobs = NULL;
struct deps_entry *e = NULL;
char **pkgs = NULL;
int i = 0;
assert(db != NULL);
assert(nbpkgs > 0);
if ((pkgs = calloc(nbpkgs, MAXPATHLEN + 1)) == NULL)
err(1, "calloc()");
STAILQ_FOREACH(e, dh, next)
pkgs[i++] = e->origin;
if (pkgdb_open(&db, PKGDB_REMOTE) != EPKG_OK)
return (EPKG_ENODB);
if (pkg_jobs_new(&jobs, PKG_JOBS_INSTALL, db) != EPKG_OK)
free(pkgs);
if ((it = pkgdb_query_installs(db, MATCH_EXACT, nbpkgs, pkgs, NULL, false)) == NULL) {
free(pkgs);
pkg_jobs_free(jobs);
}
while (pkgdb_it_next(it, &pkg, PKG_LOAD_BASIC|PKG_LOAD_DEPS) == EPKG_OK) {
pkg_jobs_add(jobs, pkg);
pkg = NULL;
}
if (pkg_jobs_is_empty(jobs)) {
printf("\n>>> Unable to find packages for installation.\n\n");
return (EPKG_FATAL);
}
/* print a summary before applying the jobs */
pkg = NULL;
print_jobs_summary(jobs, PKG_JOBS_INSTALL, "The following packages will be installed:\n\n");
if (yes == false)
yes = query_yesno("\n>>> Try to fix the missing dependencies [y/N]: ");
if (yes == true)
pkg_jobs_apply(jobs, 0);
free(pkgs);
pkg_free(pkg);
pkg_jobs_free(jobs);
pkgdb_it_free(it);
return (EPKG_OK);
}
开发者ID:baloo,项目名称:pkgng,代码行数:58,代码来源:check.c
示例6: test_depends
static int
test_depends(void *actdata, struct pkg *pkg, const char *fpath,
const char *name, bool is_shlib)
{
struct pkgdb *db = actdata;
struct pkg_dep *dep = NULL;
struct pkgdb_it *it = NULL;
struct pkg *d;
const char *deporigin, *depname, *depversion;
const char *pkgname, *pkgversion;
bool deplocked;
char pathbuf[MAXPATHLEN];
assert(db != NULL);
switch(filter_system_shlibs(name, pathbuf, sizeof(pathbuf))) {
case EPKG_OK: /* A non-system library */
break;
case EPKG_END: /* A system library */
return (EPKG_OK);
default:
/* Ignore link resolution errors if we're analysing a
shared library. */
if (is_shlib)
return (EPKG_OK);
pkg_get(pkg, PKG_NAME, &pkgname, PKG_VERSION, &pkgversion);
warnx("(%s-%s) %s - shared library %s not found",
pkgname, pkgversion, fpath, name);
return (EPKG_FATAL);
}
pkg_addshlib_required(pkg, name);
if ((it = pkgdb_query_which(db, pathbuf, false)) == NULL)
return (EPKG_OK);
d = NULL;
if (pkgdb_it_next(it, &d, PKG_LOAD_BASIC) == EPKG_OK) {
pkg_get(d, PKG_ORIGIN, &deporigin,
PKG_NAME, &depname,
PKG_VERSION, &depversion,
PKG_LOCKED, &deplocked);
dep = pkg_dep_lookup(pkg, deporigin);
if (dep == NULL) {
pkg_debug(1, "Autodeps: adding unlisted depends (%s): %s-%s",
pathbuf, depname, depversion);
pkg_adddep(pkg, depname, deporigin, depversion,
deplocked);
}
pkg_free(d);
}
pkgdb_it_free(it);
return (EPKG_OK);
}
开发者ID:namore,项目名称:pkg,代码行数:58,代码来源:pkg_elf.c
示例7: pkg_jobs_universe_get_remote
static pkg_chain_t *
pkg_jobs_universe_get_remote(struct pkg_jobs_universe *universe,
const char *uid, unsigned flag)
{
struct pkg *pkg = NULL;
pkg_chain_t *result = NULL;
struct pkgdb_it *it;
struct pkg_job_universe_item *unit, *cur, *found;
if (flag == 0) {
flag = PKG_LOAD_BASIC|PKG_LOAD_DEPS|PKG_LOAD_OPTIONS|
PKG_LOAD_PROVIDES|PKG_LOAD_REQUIRES|
PKG_LOAD_SHLIBS_REQUIRED|PKG_LOAD_SHLIBS_PROVIDED|
PKG_LOAD_ANNOTATIONS|PKG_LOAD_CONFLICTS;
}
HASH_FIND(hh, universe->items, uid, strlen(uid), unit);
if (unit != NULL && unit->pkg->type != PKG_INSTALLED) {
/* Search local in a universe chain */
cur = unit;
found = NULL;
do {
if (cur->pkg->type != PKG_INSTALLED) {
found = cur;
break;
}
cur = cur->prev;
} while (cur != unit);
if (found) {
/* Assume processed */
return (NULL);
}
}
if ((it = pkgdb_repo_query(universe->j->db, uid, MATCH_EXACT,
universe->j->reponame)) == NULL)
return (NULL);
while (pkgdb_it_next(it, &pkg, flag) == EPKG_OK) {
if (result == NULL)
result = calloc(1, sizeof(pkg_chain_t));
kv_prepend(typeof(pkg), *result, pkg);
pkg = NULL;
}
pkgdb_it_free(it);
return (result);
}
开发者ID:HardenedBSD,项目名称:pkg,代码行数:50,代码来源:pkg_jobs_universe.c
示例8: pkg_jobs_universe_get_local
struct pkg *
pkg_jobs_universe_get_local(struct pkg_jobs_universe *universe,
const char *uid, unsigned flag)
{
struct pkg *pkg = NULL;
struct pkgdb_it *it;
struct pkg_job_universe_item *unit, *cur, *found;
if (flag == 0) {
if (!IS_DELETE(universe->j))
flag = PKG_LOAD_BASIC|PKG_LOAD_DEPS|PKG_LOAD_RDEPS|PKG_LOAD_OPTIONS|
PKG_LOAD_REQUIRES|PKG_LOAD_PROVIDES|
PKG_LOAD_SHLIBS_REQUIRED|PKG_LOAD_SHLIBS_PROVIDED|PKG_LOAD_ANNOTATIONS|
PKG_LOAD_CONFLICTS;
else
flag = PKG_LOAD_BASIC|PKG_LOAD_RDEPS|PKG_LOAD_DEPS|PKG_LOAD_ANNOTATIONS;
}
HASH_FIND(hh, universe->items, uid, strlen(uid), unit);
if (unit != NULL) {
/* Search local in a universe chain */
cur = unit;
found = NULL;
do {
if (cur->pkg->type == PKG_INSTALLED) {
found = cur;
break;
}
cur = cur->prev;
} while (cur != unit);
if (found) {
pkgdb_ensure_loaded(universe->j->db, unit->pkg, flag);
return (unit->pkg);
}
}
if ((it = pkgdb_query(universe->j->db, uid, MATCH_EXACT)) == NULL)
return (NULL);
if (pkgdb_it_next(it, &pkg, flag) != EPKG_OK)
pkg = NULL;
pkgdb_it_free(it);
return (pkg);
}
开发者ID:HardenedBSD,项目名称:pkg,代码行数:47,代码来源:pkg_jobs_universe.c
示例9: pkgdb_loaddeps
int
pkgdb_loaddeps(struct pkgdb *db, struct pkg *pkg)
{
sqlite3_stmt *stmt;
struct pkgdb_it it;
struct pkg *p;
int ret;
const char sql[] = ""
"SELECT p.rowid, p.origin, p.name, p.version, p.comment, p.desc, "
"p.message, p.arch, p.osversion, p.maintainer, p.www, "
"p.prefix, p.flatsize "
"FROM packages AS p, deps AS d "
"WHERE p.origin = d.origin "
"AND d.package_id = ?1;";
if (pkg->type != PKG_INSTALLED)
return (ERROR_BAD_ARG("pkg"));
if (pkg->flags & PKG_LOAD_DEPS)
return (EPKG_OK);
array_init(&pkg->deps, 10);
if (sqlite3_prepare_v2(db->sqlite, sql, -1, &stmt, NULL) != SQLITE_OK)
return (ERROR_SQLITE(db->sqlite));
sqlite3_bind_int64(stmt, 1, pkg->rowid);
it.stmt = stmt;
it.db = db;
p = NULL;
while ((ret = pkgdb_it_next(&it, &p, PKG_LOAD_BASIC)) == EPKG_OK) {
array_append(&pkg->deps, p);
p = NULL;
}
sqlite3_finalize(stmt);
if (ret != EPKG_END) {
array_reset(&pkg->deps, &pkg_free_void);
return (ret);
}
pkg->flags |= PKG_LOAD_DEPS;
return (EPKG_OK);
}
开发者ID:flz,项目名称:pkgng,代码行数:47,代码来源:pkgdb.c
示例10: list_locked
static int
list_locked(struct pkgdb *db)
{
struct pkgdb_it *it = NULL;
struct pkg *pkg = NULL;
if ((it = pkgdb_query(db, " where locked=1", MATCH_CONDITION)) == NULL) {
pkgdb_close(db);
return (EX_UNAVAILABLE);
}
printf("Currently locked packages:\n");
while (pkgdb_it_next(it, &pkg, PKG_LOAD_BASIC) == EPKG_OK) {
pkg_printf("%n-%v\n", pkg, pkg);
}
return (EX_OK);
}
开发者ID:jillest,项目名称:pkg,代码行数:18,代码来源:lock.c
示例11: exec_which
int
exec_which(int argc, char **argv)
{
struct pkgdb *db;
struct pkgdb_it *it;
struct pkg *pkg = NULL;
char pathabs[MAXPATHLEN + 1];
int ret = EPKG_OK, retcode = EPKG_OK;
const char *name, *version;
if (argc != 2) {
usage_which();
return (EX_USAGE);
}
if (pkgdb_open(&db, PKGDB_DEFAULT) != EPKG_OK) {
pkgdb_close(db);
return (EX_IOERR);
}
absolutepath(argv[1], pathabs, sizeof(pathabs));
if ((it = pkgdb_query_which(db, pathabs)) == NULL) {
return (EX_IOERR);
}
if (( ret = pkgdb_it_next(it, &pkg, PKG_LOAD_BASIC)) == EPKG_OK) {
retcode = EPKG_OK;
pkg_get(pkg, PKG_NAME, &name, PKG_VERSION, &version);
printf("%s was installed by package %s-%s\n", pathabs, name, version);
} else if (ret != EPKG_END) {
retcode = EPKG_WARN;
} else {
printf("%s was not found in the database\n", pathabs);
retcode = EPKG_WARN;
}
pkg_free(pkg);
pkgdb_it_free(it);
pkgdb_close(db);
return (retcode);
}
开发者ID:infofarmer,项目名称:pkgng,代码行数:43,代码来源:which.c
示例12: handle_it
void
handle_it(struct pkgdb_it *it)
{
int err;
struct pkg *match;
match = NULL;
do {
err = pkgdb_it_next(it, &match, PKG_LOAD_BASIC);
if (err == EPKG_OK) {
const char *name;
const char *repo;
const char *desc;
const char *origin;
pkg_get(match, PKG_NAME, &name, PKG_DESC, &desc, PKG_REPONAME, &repo, PKG_ORIGIN, &origin);
printf("name: %s\nrepo: %s\ndesc: %s\n", name, repo, desc);
}
} while (err == EPKG_OK);
pkg_free(match);
}
开发者ID:CaptainHayashi,项目名称:pkgng-packagekit,代码行数:24,代码来源:querytest.c
示例13: exec_fetch
int
exec_fetch(int argc, char **argv)
{
struct pkg *pkg = NULL;
struct pkgdb_it *it = NULL;
struct pkgdb *db = NULL;
struct pkg_jobs *jobs = NULL;
const char *reponame = NULL;
int retcode = EXIT_FAILURE;
int ch;
int flags = PKG_LOAD_BASIC;
bool yes = false;
bool auto_update = true;
match_t match = MATCH_EXACT;
while ((ch = getopt(argc, argv, "ygxXr:qaLd")) != -1) {
switch (ch) {
case 'y':
yes = true;
break;
case 'a':
match = MATCH_ALL;
break;
case 'g':
match = MATCH_GLOB;
break;
case 'x':
match = MATCH_REGEX;
break;
case 'X':
match = MATCH_EREGEX;
break;
case 'r':
reponame = optarg;
break;
case 'q':
quiet = true;
break;
case 'L':
auto_update = false;
break;
case 'd':
flags |= PKG_LOAD_DEPS;
break;
default:
usage_fetch();
return (EX_USAGE);
}
}
argc -= optind;
argv += optind;
if (argc < 1 && match != MATCH_ALL) {
usage_fetch();
return (EX_USAGE);
}
/* TODO: Allow the user to specify an output directory via -o outdir */
if (geteuid() != 0) {
warnx("Fetching packages can only be done as root");
return (EX_NOPERM);
}
/* first update the remote repositories if needed */
if (auto_update && (retcode = pkgcli_update()) != EPKG_OK)
return (retcode);
if (pkgdb_open(&db, PKGDB_REMOTE) != EPKG_OK) {
return (EX_IOERR);
}
if (pkg_jobs_new(&jobs, PKG_JOBS_FETCH, db) != EPKG_OK) {
goto cleanup;
}
if ((it = pkgdb_query_fetch(db, match, argc, argv, reponame, flags)) == NULL)
goto cleanup;
while (pkgdb_it_next(it, &pkg, flags) == EPKG_OK) {
pkg_jobs_add(jobs, pkg);
pkg = NULL;
}
pkgdb_it_free(it);
if (pkg_jobs_is_empty(jobs))
goto cleanup;
if (!quiet) {
print_jobs_summary(jobs, PKG_JOBS_FETCH, "The following packages will be fetched:\n\n");
if (!yes)
pkg_config_bool(PKG_CONFIG_ASSUME_ALWAYS_YES, &yes);
if (!yes)
yes = query_yesno("\nProceed with fetching packages [y/N]: ");
}
if (yes)
if (pkg_jobs_apply(jobs, 0) != EPKG_OK)
goto cleanup;
//.........这里部分代码省略.........
开发者ID:baloo,项目名称:pkgng,代码行数:101,代码来源:fetch.c
示例14: pkg_jobs_universe_handle_provide
static int
pkg_jobs_universe_handle_provide(struct pkg_jobs_universe *universe,
struct pkgdb_it *it, const char *name, bool is_shlib, struct pkg *parent)
{
struct pkg_job_universe_item *unit;
struct pkg_job_provide *pr, *prhead;
struct pkg *npkg, *rpkg;
int rc;
unsigned flags = PKG_LOAD_BASIC|PKG_LOAD_OPTIONS|PKG_LOAD_DEPS|
PKG_LOAD_REQUIRES|PKG_LOAD_PROVIDES|
PKG_LOAD_SHLIBS_REQUIRED|PKG_LOAD_SHLIBS_PROVIDED|
PKG_LOAD_ANNOTATIONS|PKG_LOAD_CONFLICTS;
rpkg = NULL;
HASH_FIND_STR(universe->provides, name, prhead);
while (pkgdb_it_next(it, &rpkg, flags) == EPKG_OK) {
/* Check for local packages */
HASH_FIND_STR(universe->items, rpkg->uid, unit);
if (unit != NULL) {
/* Remote provide is newer, so we can add it */
if (pkg_jobs_universe_process_item(universe, rpkg,
&unit) != EPKG_OK) {
continue;
}
rpkg = NULL;
}
else {
/* Maybe local package has just been not added */
npkg = pkg_jobs_universe_get_local(universe, rpkg->uid, 0);
if (npkg != NULL) {
if (pkg_jobs_universe_process_item(universe, npkg,
&unit) != EPKG_OK) {
return (EPKG_FATAL);
}
if (pkg_jobs_universe_process_item(universe, rpkg,
&unit) != EPKG_OK) {
continue;
}
if (unit != NULL)
rpkg = NULL;
}
}
/* Skip seen packages */
if (unit == NULL) {
if (rpkg->digest == NULL) {
pkg_debug(3, "no digest found for package %s", rpkg->uid);
if (pkg_checksum_calculate(rpkg, universe->j->db) != EPKG_OK) {
return (EPKG_FATAL);
}
}
rc = pkg_jobs_universe_process_item(universe, rpkg,
&unit);
if (rc != EPKG_OK) {
return (rc);
}
/* Reset package to avoid freeing */
rpkg = NULL;
}
pr = calloc (1, sizeof (*pr));
if (pr == NULL) {
pkg_emit_errno("pkg_jobs_add_universe", "calloc: "
"struct pkg_job_provide");
return (EPKG_FATAL);
}
pr->un = unit;
pr->provide = name;
pr->is_shlib = is_shlib;
if (prhead == NULL) {
DL_APPEND(prhead, pr);
HASH_ADD_KEYPTR(hh, universe->provides, pr->provide,
strlen(pr->provide), prhead);
pkg_debug (4, "universe: add new provide %s-%s(%s) for require %s",
pr->un->pkg->name, pr->un->pkg->version,
pr->un->pkg->type == PKG_INSTALLED ? "l" : "r",
pr->provide);
}
else {
DL_APPEND(prhead, pr);
pkg_debug (4, "universe: append provide %s-%s(%s) for require %s",
pr->un->pkg->name, pr->un->pkg->version,
pr->un->pkg->type == PKG_INSTALLED ? "l" : "r",
pr->provide);
}
}
return (EPKG_OK);
}
开发者ID:HardenedBSD,项目名称:pkg,代码行数:96,代码来源:pkg_jobs_universe.c
示例15: pkg_update_incremental
static int
pkg_update_incremental(const char *name, struct pkg_repo *repo, time_t *mtime)
{
FILE *fmanifest = NULL, *fdigests = NULL;
sqlite3 *sqlite = NULL;
struct pkg *pkg = NULL;
int rc = EPKG_FATAL;
const char *origin, *digest, *offset;
struct pkgdb_it *it = NULL;
char *linebuf = NULL, *p;
int updated = 0, removed = 0, added = 0, processed = 0;
long num_offset;
time_t local_t = *mtime;
struct pkg_increment_task_item *ldel = NULL, *ladd = NULL,
*item, *tmp_item;
const char *myarch;
struct pkg_manifest_parser *parser = NULL;
size_t linecap = 0;
ssize_t linelen;
char *map = MAP_FAILED;
size_t len = 0;
pkg_debug(1, "Pkgrepo, begin incremental update of '%s'", name);
if ((rc = pkgdb_repo_open(name, false, &sqlite, false)) != EPKG_OK) {
return (EPKG_FATAL);
}
if ((rc = pkgdb_repo_init(sqlite, false)) != EPKG_OK)
goto cleanup;
if ((rc = pkg_register_repo(repo, sqlite)) != EPKG_OK)
goto cleanup;
it = pkgdb_repo_origins(sqlite);
if (it == NULL) {
rc = EPKG_FATAL;
goto cleanup;
}
while (pkgdb_it_next(it, &pkg, PKG_LOAD_BASIC) == EPKG_OK) {
pkg_get(pkg, PKG_ORIGIN, &origin, PKG_DIGEST, &digest);
pkg_update_increment_item_new(&ldel, origin, digest, 4);
}
fdigests = repo_fetch_remote_extract_tmp(repo,
repo_digests_archive, "txz", &local_t,
&rc, repo_digests_file);
if (fdigests == NULL)
goto cleanup;
local_t = *mtime;
fmanifest = repo_fetch_remote_extract_tmp(repo,
repo_packagesite_archive, "txz", &local_t,
&rc, repo_packagesite_file);
if (fmanifest == NULL)
goto cleanup;
*mtime = local_t;
fseek(fmanifest, 0, SEEK_END);
len = ftell(fmanifest);
pkg_debug(1, "Pkgrepo, reading new packagesite.yaml for '%s'", name);
/* load the while digests */
while ((linelen = getline(&linebuf, &linecap, fdigests)) > 0) {
p = linebuf;
origin = strsep(&p, ":");
digest = strsep(&p, ":");
offset = strsep(&p, ":");
if (origin == NULL || digest == NULL ||
offset == NULL) {
pkg_emit_error("invalid digest file format");
assert(0);
rc = EPKG_FATAL;
goto cleanup;
}
errno = 0;
num_offset = (long)strtoul(offset, NULL, 10);
if (errno != 0) {
pkg_emit_errno("strtoul", "digest format error");
rc = EPKG_FATAL;
goto cleanup;
}
processed++;
HASH_FIND_STR(ldel, __DECONST(char *, origin), item);
if (item == NULL) {
added++;
pkg_update_increment_item_new(&ladd, origin, digest, num_offset);
} else {
if (strcmp(digest, item->digest) == 0) {
free(item->origin);
free(item->digest);
HASH_DEL(ldel, item);
free(item);
item = NULL;
} else {
free(item->origin);
free(item->digest);
HASH_DEL(ldel, item);
free(item);
item = NULL;
pkg_update_increment_item_new(&ladd, origin, digest, num_offset);
//.........这里部分代码省略.........
开发者ID:renchap,项目名称:pkg,代码行数:101,代码来源:update.c
示例16: exec_set
//.........这里部分代码省略.........
return (EX_NOPERM);
} else if (retcode != EPKG_OK) {
warnx("Error accessing package database");
return (EX_SOFTWARE);
}
if (pkgdb_open(&db, PKGDB_DEFAULT) != EPKG_OK) {
free(newvalue);
return (EX_IOERR);
}
if (pkgdb_obtain_lock(db, PKGDB_LOCK_EXCLUSIVE) != EPKG_OK) {
pkgdb_close(db);
free(newvalue);
warnx("Cannot get an exclusive lock on a database, it is locked by another process");
return (EX_TEMPFAIL);
}
if (pkgdb_transaction_begin(db, NULL) != EPKG_OK) {
pkgdb_close(db);
free(newvalue);
warnx("Cannot start transaction for update");
return (EX_TEMPFAIL);
}
if (oldvalue != NULL) {
match = MATCH_ALL;
if ((it = pkgdb_query(db, oldvalue, MATCH_EXACT)) == NULL) {
retcode = EX_IOERR;
goto cleanup;
}
if (pkgdb_it_next(it, &pkg, PKG_LOAD_BASIC) != EPKG_OK) {
pkg = NULL;
/* fprintf(stderr, "%s not installed\n", oldorigin);
free(oldorigin);
pkgdb_it_free(it);
pkgdb_close(db);
return (EX_SOFTWARE);*/
}
rc = yes;
if (!yes) {
if (pkg != NULL)
rc = query_yesno(false, "Change %S from %S to %S for %n-%v? ",
changed, oldvalue, newvalue, pkg, pkg);
else
rc = query_yesno(false, "Change %S from %S to %S for all dependencies? ",
changed, oldvalue, newvalue);
}
if (pkg != NULL && rc) {
if (pkgdb_set(db, pkg, field, newvalue) != EPKG_OK) {
retcode = EX_IOERR;
goto cleanup;
}
}
pkgdb_it_free(it);
}
i = 0;
do {
bool saved_rc = rc;
if ((it = pkgdb_query(db, argv[i], match)) == NULL) {
retcode = EX_IOERR;
goto cleanup;
开发者ID:dlandry,项目名称:GitEducation,代码行数:67,代码来源:set.c
示例17: exec_query
int
exec_query(int argc, char **argv)
{
struct pkgdb *db = NULL;
struct pkgdb_it *it = NULL;
struct pkg *pkg = NULL;
char *pkgname = NULL;
int query_flags = PKG_LOAD_BASIC;
match_t match = MATCH_EXACT;
int ch;
int ret = EPKG_OK;
int retcode = EXIT_SUCCESS;
int i;
char multiline = 0;
while ((ch = getopt(argc, argv, "agxXf:")) != -1) {
switch (ch) {
case 'a':
match = MATCH_ALL;
break;
case 'g':
match = MATCH_GLOB;
break;
case 'x':
match = MATCH_REGEX;
break;
case 'X':
match = MATCH_EREGEX;
break;
case 'f':
pkgname = optarg;
break;
default:
usage_query();
return (EX_USAGE);
}
}
argc -= optind;
argv += optind;
if (argc == 0) {
usage_query();
return (EX_USAGE);
}
if ((argc == 1) ^ (match == MATCH_ALL) && pkgname == NULL) {
usage_query();
return (EX_USAGE);
}
if (analyse_query_string(argv[0], &query_flags, &multiline) != EPKG_OK)
return (EX_USAGE);
if (pkgname != NULL) {
if (pkg_open(&pkg, pkgname, NULL) != EPKG_OK) {
return (1);
}
print_query(pkg, argv[0], multiline);
pkg_free(pkg);
return (0);
}
if (pkgdb_open(&db, PKGDB_DEFAULT) != EPKG_OK)
return (EX_IOERR);
if (match == MATCH_ALL) {
if ((it = pkgdb_query(db, NULL, match)) == NULL)
return (EX_IOERR);
while ((ret = pkgdb_it_next(it, &pkg, query_flags)) == EPKG_OK)
print_query(pkg, argv[0], multiline);
if (ret != EPKG_END)
retcode = EX_SOFTWARE;
pkgdb_it_free(it);
} else {
for (i = 1; i < argc; i++) {
pkgname = argv[i];
if ((it = pkgdb_query(db, pkgname, match)) == NULL)
return (EX_IOERR);
while ((ret = pkgdb_it_next(it, &pkg, query_flags)) == EPKG_OK)
print_query(pkg, argv[0], multiline);
if (ret != EPKG_END) {
retcode = EX_SOFTWARE;
break;
}
pkgdb_it_free(it);
}
}
pkg_free(pkg);
pkgdb_close(db);
//.........这里部分代码省略.........
开发者ID:culot,项目名称:pkgng,代码行数:101,代码来源:query.c
示例18: exec_query
//.........这里部分代码省略.........
return (EX_USAGE);
}
if (analyse_query_string(argv[0], accepted_query_flags, q_flags_len,
&query_flags, &multiline) != EPKG_OK)
return (EX_USAGE);
if (pkgname != NULL) {
pkg_manifest_keys_new(&keys);
if (pkg_open(&pkg, pkgname, keys, 0) != EPKG_OK) {
return (EX_IOERR);
}
pkg_manifest_keys_free(keys);
print_query(pkg, argv[0], multiline);
pkg_free(pkg);
return (EX_OK);
}
if (condition != NULL) {
sqlcond = sbuf_new_auto();
if (format_sql_condition(condition, sqlcond, false) != EPKG_OK) {
sbuf_delete(sqlcond);
return (EX_USAGE);
}
sbuf_finish(sqlcond);
}
ret = pkgdb_access(PKGDB_MODE_READ, PKGDB_DB_LOCAL);
if (ret == EPKG_ENOACCESS) {
warnx("Insufficient privileges to query the package database");
return (EX_NOPERM);
} else if (ret == EPKG_ENODB) {
if (!quiet)
warnx("No packages installed");
return (EX_OK);
} else if (ret != EPKG_OK)
return (EX_IOERR);
ret = pkgdb_open(&db, PKGDB_DEFAULT);
if (ret != EPKG_OK)
return (EX_IOERR);
if (pkgdb_obtain_lock(db, PKGDB_LOCK_READONLY) != EPKG_OK) {
pkgdb_close(db);
warnx("Cannot get a read lock on a database, it is locked by another process");
return (EX_TEMPFAIL);
}
if (match == MATCH_ALL || match == MATCH_CONDITION) {
const char *condition_sql = NULL;
if (match == MATCH_CONDITION && sqlcond)
condition_sql = sbuf_data(sqlcond);
if ((it = pkgdb_query(db, condition_sql, match)) == NULL)
return (EX_IOERR);
while ((ret = pkgdb_it_next(it, &pkg, query_flags)) == EPKG_OK)
print_query(pkg, argv[0], multiline);
if (ret != EPKG_END)
retcode = EX_SOFTWARE;
pkgdb_it_free(it);
} else {
int nprinted = 0;
for (i = 1; i < argc; i++) {
pkgname = argv[i];
if ((it = pkgdb_query(db, pkgname, match)) == NULL) {
retcode = EX_IOERR;
goto cleanup;
}
while ((ret = pkgdb_it_next(it, &pkg, query_flags)) == EPKG_OK) {
nprinted++;
print_query(pkg, argv[0], multiline);
}
if (ret != EPKG_END) {
retcode = EX_SOFTWARE;
break;
}
pkgdb_it_free(it);
}
if (nprinted == 0 && retcode == EX_OK) {
/* ensure to return a non-zero status when no package
were found. */
retcode = EX_UNAVAILABLE;
}
}
cleanup:
pkg_free(pkg);
pkgdb_release_lock(db, PKGDB_LOCK_READONLY);
pkgdb_close(db);
return (retcode);
}
开发者ID:dlandry,项目名称:GitEducation,代码行数:101,代码来源:query.c
示例19: exec_search
//.........这里部分代码省略.........
break;
case 'L':
label = search_label_opt(optarg);
break;
case 'o': /* Same as -L origin */
label = search_label_opt("origin");
break;
case 'p': /* Same as -Q prefix */
opt |= modifier_opt("prefix");
break;
case 'q':
quiet = true;
break;
case 'Q':
opt |= modifier_opt(optarg);
break;
case 'r':
reponame = optarg;
break;
case 'S':
search = search_label_opt(optarg);
break;
case 's': /* Same as -Q size */
opt |= modifier_opt("size");
break;
case 'x':
match = MATCH_REGEX;
break;
default:
usage_search();
return (EX_USAGE);
}
}
argc -= optind;
argv += optind;
if (argc != 1) {
usage_search();
return (EX_USAGE);
}
pattern = argv[0];
if (pattern[0] == '\0') {
fprintf(stderr, "Pattern must not be empty!\n");
return (EX_USAGE);
}
if (search == FIELD_NONE) {
if (strchr(pattern, '/') != NULL)
search = FIELD_ORIGIN;
else
search = FIELD_NAMEVER; /* Default search */
}
if (label == FIELD_NONE)
label = search; /* By default, show what was searched */
switch(label) {
case FIELD_NONE:
break; /* should never happen */
case FIELD_ORIGIN:
opt |= INFO_TAG_ORIGIN;
break;
case FIELD_NAME:
opt |= INFO_TAG_NAME;
break;
case FIELD_NAMEVER:
opt |= INFO_TAG_NAMEVER;
break;
case FIELD_COMMENT:
opt |= INFO_TAG_NAMEVER|INFO_COMMENT;
break;
case FIELD_DESC:
opt |= INFO_TAG_NAMEVER|INFO_DESCR;
break;
}
if (pkgdb_open(&db, PKGDB_REMOTE) != EPKG_OK)
return (EX_IOERR);
if ((it = pkgdb_search(db, pattern, match, search, search,
reponame)) == NULL) {
pkgdb_close(db);
return (EX_IOERR);
}
flags = info_flags(opt);
while ((ret = pkgdb_it_next(it, &pkg, flags)) == EPKG_OK) {
print_info(pkg, opt);
atleastone = true;
}
pkg_free(pkg);
pkgdb_it_free(it);
pkgdb_close(db);
if (!atleastone)
ret = EPKG_FATAL;
return ((ret == EPKG_OK || ret == EPKG_END) ? EX_OK : EX_SOFTWARE);
}
开发者ID:aklv,项目名称:pkgng,代码行数:101,代码来源:search.c
示例20: convert_to_old
static int
convert_to_old(const char *pkg_add_dbdir, bool dry_run)
{
struct pkgdb *db = NULL;
struct pkg *pkg = NULL;
struct pkg_dep *dep = NULL;
struct pkgdb_it *it = NULL;
char *content, *name, *version, *buf;
const char *tmp;
int ret = EX_OK;
char path[MAXPATHLEN];
int query_flags = PKG_LOAD_DEPS | PKG_LOAD_FILES |
PKG_LOAD_DIRS | PKG_LOAD_SCRIPTS |
PKG_LOAD_OPTIONS | PKG_LOAD_MTREE |
PKG_LOAD_USERS | PKG_LOAD_GROUPS | PKG_LOAD_RDEPS;
FILE *fp, *rq;
struct sbuf *install_script = sbuf_new_auto();
struct sbuf *deinstall_script = sbuf_new_auto();
if (mkdir(pkg_add_dbdir, 0755) != 0 && errno != EEXIST)
err(EX_CANTCREAT, "%s", pkg_add_dbdir);
if (pkgdb_open(&db, PKGDB_DEFAULT) != EPKG_OK) {
pkgdb_close(db);
return (EX_IOERR);
}
if ((it = pkgdb_query(db, NULL, MATCH_ALL)) == NULL) {
ret = EPKG_FATAL;
goto cleanup;
}
while (pkgdb_it_next(it, &pkg, query_flags) == EPKG_OK) {
rq = NULL;
pkg_get(pkg, PKG_NAME, &name, PKG_VERSION, &version);
printf("Converting %s-%s...", name, version);
if (dry_run) {
printf("\n");
continue;
}
pkg_to_old(pkg);
pkg_old_emit_content(pkg, &content);
snprintf(path, MAXPATHLEN, "%s/%s-%s", pkg_add_dbdir, name, version);
mkdir(path, 0755);
snprintf(path, MAXPATHLEN, "%s/%s-%s/+CONTENTS", pkg_add_dbdir, name, version);
fp = fopen(path, "w");
fputs(content, fp);
fclose(fp);
pkg_get(pkg, PKG_DESC, &buf);
snprintf(path, MAXPATHLEN, "%s/%s-%s/+DESC", pkg_add_dbdir, name, version);
fp = fopen(path, "w");
fputs(buf, fp);
fclose(fp);
pkg_get(pkg, PKG_COMMENT, &buf);
snprintf(path, MAXPATHLEN, "%s/%s-%s/+COMMENT", pkg_add_dbdir, name, version);
fp = fopen(path, "w");
fprintf(fp, "%s\n", buf);
fclose(fp);
pkg_get(pkg, PKG_MESSAGE, &buf);
if (buf != NULL && buf[0] != '\0') {
snprintf(path, MAXPATHLEN, "%s/%s-%s/+DISPLAY", pkg_add_dbdir, name, version);
fp = fopen(path, "w");
fputs(buf, fp);
fclose(fp);
}
pkg_get(pkg, PKG_MTREE, &buf);
if (buf != NULL && buf[0] != '\0') {
snprintf(path, MAXPATHLEN, "%s/%s-%s/+MTREE_DIRS", pkg_add_dbdir, name, version);
fp = fopen(path, "w");
fputs(buf, fp);
fclose(fp);
}
sbuf_clear(install_script);
tmp = pkg_script_get(pkg, PKG_SCRIPT_PRE_INSTALL);
if (tmp != NULL && tmp[0] != '\0') {
if (sbuf_len(install_script) == 0)
sbuf_cat(install_script, "#!/bin/sh\n\n");
sbuf_printf(install_script,
"if [ \"$2\" = \"PRE-INSTALL\" ]; then\n"
"%s\n"
"fi\n",
tmp);
}
tmp = pkg_script_get(pkg, PKG_SCRIPT_INSTALL);
if (tmp != NULL && tmp[0] != '\0') {
if (sbuf_len(install_script) == 0)
sbuf_cat(install_script, "#!/bin/sh\n\n");
sbuf_cat(install_script, tmp);
}
tmp = pkg_script_get(pkg, PKG_SCRIPT_POST_INSTALL);
if (tmp != NULL && tmp[0] != '\0') {
//.........这里部分代码省略.........
开发者ID:DarknessWarrior,项目名称:pkg,代码行数:101,代码来源:convert.c
注:本文中的pkgdb_it_next函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论