本文整理汇总了C++中pkgdb_it_next函数的典型用法代码示例。如果您正苦于以下问题:C++ pkgdb_it_next函数的具体用法?C++ pkgdb_it_next怎么用?C++ pkgdb_it_next使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了pkgdb_it_next函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的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);
}
示例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);
}
示例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);
}
示例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);
}
示例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);
}
示例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);
}
示例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);
}
示例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);
}
示例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);
}
示例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);
}
示例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);
}
示例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);
}
示例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;
//.........这里部分代码省略.........
示例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);
}
示例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);
//.........这里部分代码省略.........