const char * shlib_list_find_by_name(const char *shlib_file) { struct shlib *sl; kh_find(shlib, rpath, shlib_file, sl); if (sl != NULL) return (sl->path); kh_find(shlib, shlibs, shlib_file, sl); if (sl != NULL) return (sl->path); return (NULL); }
/** * Check whether a package is in the universe already or add it * @return item or NULL */ int pkg_jobs_universe_add_pkg(struct pkg_jobs_universe *universe, struct pkg *pkg, bool force, struct pkg_job_universe_item **found) { struct pkg_job_universe_item *item, *seen, *tmp = NULL; pkg_validate(pkg, universe->j->db); if (pkg->digest == NULL) { pkg_debug(3, "no digest found for package %s (%s-%s)", pkg->uid, pkg->name, pkg->version); if (pkg_checksum_calculate(pkg, universe->j->db) != EPKG_OK) { *found = NULL; return (EPKG_FATAL); } } kh_find(pkg_jobs_seen, universe->seen, pkg->digest, seen); if (seen) { bool same_package = false; DL_FOREACH(seen, tmp) { if (tmp->pkg == pkg || (tmp->pkg->type == pkg->type && strcmp(tmp->pkg->digest, pkg->digest) == 0)) { if (tmp->pkg->reponame != NULL) { if (strcmp(tmp->pkg->reponame, pkg->reponame) == 0) { same_package = true; break; } } else { same_package = true; break; } } } if (same_package) { if (found != NULL) { *found = seen; } return (EPKG_END); } } if (pkg_is_locked(pkg)) { pkg_emit_locked(pkg); return (EPKG_LOCKED); } pkg_debug(2, "universe: add new %s pkg: %s, (%s-%s:%s)", (pkg->type == PKG_INSTALLED ? "local" : "remote"), pkg->uid, pkg->name, pkg->version, pkg->digest); item = calloc(1, sizeof (struct pkg_job_universe_item)); if (item == NULL) { pkg_emit_errno("pkg_jobs_pkg_insert_universe", "calloc: struct pkg_job_universe_item"); return (EPKG_FATAL); } item->pkg = pkg; HASH_FIND_STR(universe->items, pkg->uid, tmp); if (tmp == NULL) HASH_ADD_KEYPTR(hh, universe->items, pkg->uid, strlen(pkg->uid), item); DL_APPEND(tmp, item); if (seen == NULL) kh_safe_add(pkg_jobs_seen, universe->seen, item, item->pkg->digest); universe->nitems++; if (found != NULL) *found = item; return (EPKG_OK); }