Radish alpha
H
rad:z3QDZAW2FAfuLvihrhiyDC9fAD8G9
HardenedBSD Package Manager
Radicle
Git
non pkgbase: convert system shlibs to vector of char *
Baptiste Daroussin committed 1 year ago
commit b8cd71e077e74c0f08bb23431178e6c986b144a2
parent a5133db
7 files changed +31 -31
modified libpkg/pkg_add.c
@@ -43,7 +43,7 @@
struct pkg_add_db {
	struct pkgdb *db;
	pkgs_t localpkgs;
-
	struct pkghash *system_shlibs;
+
	charv_t system_shlibs;
	bool local_scanned;
	bool ignore_compat32;
	bool pkgbase;
@@ -1267,15 +1267,15 @@ pkg_add_check_pkg_archive(struct pkg_add_db *db, struct pkg *pkg,
	}

	vec_foreach(pkg->shlibs_required, i) {
-
		const char *s = pkg->shlibs_required.d[i];
+
		char *s = pkg->shlibs_required.d[i];
		pkg_debug(2, "%s requires %s", pkg->name, s);
-
		if (!db->pkgbase && db->system_shlibs == NULL) {
+
		if (!db->pkgbase && db->system_shlibs.len == 0) {
			int ret;
			ret = scan_system_shlibs(&db->system_shlibs, ctx.pkg_rootdir);
			if (ret == EPKG_NOCOMPAT32)
				db->ignore_compat32 = true;
		}
-
		if (pkghash_get(db->system_shlibs, s) != NULL)
+
		if (charv_search(&db->system_shlibs, s) != NULL)
			continue;
		const struct pkg_kv *founddep = NULL;
		if (pkgdb_is_shlib_provided(db->db, s))
@@ -1312,7 +1312,7 @@ pkg_add_check_pkg_archive(struct pkg_add_db *db, struct pkg *pkg,
	}

	vec_foreach(pkg->requires, i) {
-
		const char *s = pkg->requires.d[i];
+
		char *s = pkg->requires.d[i];
		const struct pkg_kv *founddep = NULL;
		if (pkgdb_is_provided(db->db, s))
			continue;
@@ -1697,7 +1697,7 @@ pkg_add(struct pkgdb *db, const char *path, unsigned flags,

	ret = pkg_add_common(&padb, path, flags, location, NULL, NULL, NULL);
	vec_free_and_free(&padb.localpkgs, pkg_free);
-
	pkghash_destroy(padb.system_shlibs);
+
	vec_free_and_free(&padb.system_shlibs, free);
	return (ret);
}

modified libpkg/pkg_jobs.c
@@ -218,7 +218,7 @@ pkg_jobs_free(struct pkg_jobs *j)
		ucl_object_unref(j->triggers.schema);
	pkghash_destroy(j->orphaned);
	pkghash_destroy(j->notorphaned);
-
	pkghash_destroy(j->system_shlibs);
+
	vec_free_and_free(&j->system_shlibs, free);
	free(j);
}

@@ -484,7 +484,7 @@ delete_process_provides(struct pkg_jobs *j, struct pkg *lp, const char *provide,
	bool ret = true;

	/* check for pkgbase shlibs and provides */
-
	if (pkghash_get(j->system_shlibs, provide) != NULL)
+
	if (charv_search(&j->system_shlibs, provide) != NULL)
		return (ret);
	/* if something else to provide the same thing we can safely delete */
	lit = provideq(j->db, provide);
@@ -1052,7 +1052,7 @@ pkg_jobs_find_remote_pattern(struct pkg_jobs *j, struct job_pattern *jp)
}

bool
-
pkg_jobs_need_upgrade(struct pkghash *system_shlibs, struct pkg *rp, struct pkg *lp)
+
pkg_jobs_need_upgrade(charv_t *system_shlibs, struct pkg *rp, struct pkg *lp)
{
	int ret, ret1, ret2;
	struct pkg_option *lo = NULL, *ro = NULL;
@@ -1235,11 +1235,11 @@ pkg_jobs_need_upgrade(struct pkghash *system_shlibs, struct pkg *rp, struct pkg
		if (STREQ(lp->shlibs_required.d[i], rp->shlibs_required.d[j]))
				continue;
		if (system_shlibs != NULL) {
-
			if (pkghash_get(system_shlibs, lp->shlibs_required.d[i]) != NULL) {
+
			if (charv_search(system_shlibs, lp->shlibs_required.d[i]) != NULL) {
				j--;
				continue;
			}
-
			if (pkghash_get(system_shlibs, rp->shlibs_required.d[j]) != NULL) {
+
			if (charv_search(system_shlibs, rp->shlibs_required.d[j]) != NULL) {
				i++;
				continue;
			}
@@ -1880,7 +1880,7 @@ pkg_jobs_solve(struct pkg_jobs *j)
{
	int ret;

-
	if (j->system_shlibs == NULL) {
+
	if (j->system_shlibs.len == 0) {
		/* If /usr/bin/uname is in the pkg database, we are targeting
		 * a pkgbase system and should rely on the pkgbase packages to
		 * provide system shlibs. */
modified libpkg/pkg_jobs_universe.c
@@ -334,7 +334,7 @@ pkg_jobs_universe_process_deps(struct pkg_jobs_universe *universe,

				if (npkg != NULL) {
					/* Set reason for upgrades */
-
					if (!pkg_jobs_need_upgrade(universe->j->system_shlibs, rpkg, npkg))
+
					if (!pkg_jobs_need_upgrade(&universe->j->system_shlibs, rpkg, npkg))
						continue;
					/* Save automatic flag */
					rpkg->automatic = npkg->automatic;
@@ -355,7 +355,7 @@ pkg_jobs_universe_process_deps(struct pkg_jobs_universe *universe,

			if (npkg != NULL) {
				/* Set reason for upgrades */
-
				if (!pkg_jobs_need_upgrade(universe->j->system_shlibs, rpkg, npkg))
+
				if (!pkg_jobs_need_upgrade(&universe->j->system_shlibs, rpkg, npkg))
					continue;
				/* Save automatic flag */
				rpkg->automatic = npkg->automatic;
@@ -474,7 +474,7 @@ pkg_jobs_universe_process_shlibs(struct pkg_jobs_universe *universe,

	vec_foreach(pkg->shlibs_required, i) {
		const char *s = pkg->shlibs_required.d[i];
-
		if (pkghash_get(universe->j->system_shlibs, s) != NULL)
+
		if (charv_search(&universe->j->system_shlibs, s) != NULL)
			continue;
		if (pkghash_get(universe->provides, s) != NULL)
			continue;
@@ -1021,7 +1021,7 @@ pkg_jobs_universe_get_upgrade_candidates(struct pkg_jobs_universe *universe,
		}
		else {
			if (selected == lp &&
-
					(lp == NULL || pkg_jobs_need_upgrade(universe->j->system_shlibs, pkg, lp)))
+
					(lp == NULL || pkg_jobs_need_upgrade(&universe->j->system_shlibs, pkg, lp)))
				selected = pkg;
			else if (pkg_version_change_between(pkg, selected) == PKG_UPGRADE)
				selected = pkg;
modified libpkg/pkg_solve.c
@@ -726,7 +726,7 @@ pkg_solve_process_universe_variable(struct pkg_solve_problem *problem,
			/* Ignore 32 bit libraries */
			if (j->ignore_compat32 && str_ends_with(s, ":32"))
				continue;
-
			if (pkghash_get(j->system_shlibs, s) != NULL) {
+
			if (charv_search(&j->system_shlibs, s) != NULL) {
				/* The shlib is provided by the system */
				continue;
			}
@@ -987,7 +987,7 @@ pkg_solve_set_initial_assumption(struct pkg_solve_problem *problem,
			    conservative, assumed_reponame, true);

			if (local && (STREQ(selected->pkg->digest, local->pkg->digest) ||
-
				      !pkg_jobs_need_upgrade(problem->j->system_shlibs, selected->pkg, local->pkg))) {
+
				      !pkg_jobs_need_upgrade(&problem->j->system_shlibs, selected->pkg, local->pkg))) {
				selected = local;
			}
		}
modified libpkg/pkgbase.c
@@ -24,17 +24,17 @@
#include "xmalloc.h"

struct pkgbase {
-
	struct pkghash *system_shlibs;
+
	charv_t system_shlibs;
	/*
	 * unused yet but will be in the future when we will start using
	 * provides/requires in pkgbase
	 */
-
	struct pkghash *provides;
+
	charv_t provides;
	bool ignore_compat32;
};

static int
-
scan_dir_for_shlibs(pkghash **shlib_list, const char *dir,
+
scan_dir_for_shlibs(charv_t *shlib_list, const char *dir,
    enum pkg_shlib_flags flags)
{
	DIR *dirp= opendir(dir);
@@ -74,9 +74,8 @@ scan_dir_for_shlibs(pkghash **shlib_list, const char *dir,

		/* We have a valid shared library name. */
		char *full = pkg_shlib_name_with_flags(dp->d_name, flags);
-
		pkghash_safe_add(*shlib_list, full, NULL, NULL);
+
		vec_push(shlib_list, full);
		cnt++;
-
		free(full);
	}
	if (cnt == 0)
		errno = ENOENT;
@@ -96,7 +95,7 @@ static struct {
};

int
-
scan_system_shlibs(pkghash **system_shlibs, const char *rootdir)
+
scan_system_shlibs(charv_t *system_shlibs, const char *rootdir)
{
	int r = EPKG_OK;
	for (int i = 0; i < NELEM(system_shlib_table); i++) {
@@ -115,6 +114,7 @@ scan_system_shlibs(pkghash **system_shlibs, const char *rootdir)
			return (ret);
		}
	}
+
	qsort(system_shlibs->d, system_shlibs->len, sizeof(char *), char_cmp);

	return (r);
}
@@ -136,8 +136,8 @@ pkgbase_free(struct pkgbase *pb)
{
	if (pb == NULL)
		return;
-
	pkghash_destroy(pb->system_shlibs);
-
	pkghash_destroy(pb->provides);
+
	vec_free_and_free(&pb->system_shlibs, free);
+
	vec_free_and_free(&pb->provides, free);
	free(pb);
}

@@ -146,11 +146,11 @@ pkgbase_provide_shlib(struct pkgbase *pb, const char *shlib)
{
	if (pb->ignore_compat32 && str_ends_with(shlib, ":32"))
		return (true);
-
	return (pkghash_get(pb->system_shlibs, shlib) != NULL);
+
	return (charv_search(&pb->system_shlibs, shlib) != NULL);
}

bool
pkgbase_provide(struct pkgbase *pb, const char *provide)
{
-
	return (pkghash_get(pb->provides, provide) != NULL);
+
	return (charv_search(&pb->provides, provide) != NULL);
}
modified libpkg/private/pkg.h
@@ -864,7 +864,7 @@ int pkg_parse_manifest_ucl(struct pkg *pkg, ucl_object_t *o);
int pkg_get_reposdirfd(void);
char * expand_plist_variables(const char *in, kvlist_t *vars);

-
int scan_system_shlibs(pkghash **system_shlibs, const char *rootdir);
+
int scan_system_shlibs(charv_t *system_shlibs, const char *rootdir);
void pkg_lists_sort(struct pkg *p);
void pkg_cleanup_shlibs_required(struct pkg *pkg, charv_t *internal_provided);

modified libpkg/private/pkg_jobs.h
@@ -143,7 +143,7 @@ struct pkg_jobs {
	struct triggers triggers;
	struct pkghash *orphaned;
	struct pkghash *notorphaned;
-
	struct pkghash *system_shlibs;
+
	charv_t system_shlibs;
};

#define PKG_PATTERN_FLAG_FILE (1 << 0)
@@ -229,7 +229,7 @@ int pkg_conflicts_append_chain(struct pkg_job_universe_item *it,
/*
 * Check whether `rp` is an upgrade for `lp`
 */
-
bool pkg_jobs_need_upgrade(struct pkghash *system_shlibs, struct pkg *rp, struct pkg *lp);
+
bool pkg_jobs_need_upgrade(charv_t *system_shlibs, struct pkg *rp, struct pkg *lp);

/*
 * Pre-process universe to fix complex upgrade chains