Radish alpha
H
rad:z3QDZAW2FAfuLvihrhiyDC9fAD8G9
HardenedBSD Package Manager
Radicle
Git
Add a integer to store osversion
Baptiste Daroussin committed 8 years ago
commit 1bbe636b8c2f601763bbfef1be4f0416ea0777ac
parent 2888b9c
6 files changed +20 -16
modified libpkg/libpkg.ver
@@ -48,8 +48,6 @@ global:
	pkg_get_dbdirfd;
	pkg_get_dir;
	pkg_get_file;
-
	pkg_get_myarch;
-
	pkg_get_myarch_legacy;
	pkg_groups;
	pkg_has_dir;
	pkg_has_file;
modified libpkg/pkg.h.in
@@ -1489,13 +1489,6 @@ int pkg_test_filesum(struct pkg *);
int pkg_recompute(struct pkgdb *, struct pkg *);
int pkgdb_reanalyse_shlibs(struct pkgdb *, struct pkg *);

-
#ifdef __DragonFly__
-
#define pkg_get_myarch(d, z) pkg_get_myarch_legacy(d, z)
-
#else
-
int pkg_get_myarch(char *pkgarch, size_t sz);
-
#endif
-
int pkg_get_myarch_legacy(char *pkgarch, size_t sz);
-

void pkgdb_cmd(int argc, char **argv);
int pkg_sshserve(int fd);

modified libpkg/pkg_config.c
@@ -71,6 +71,7 @@ struct pkg_ctx ctx = {
	.rootfd = -1,
	.cachedirfd = -1,
	.pkg_dbdirfd = -1,
+
	.osversion = 0,
};

struct config_entry {
@@ -875,7 +876,7 @@ pkg_ini(const char *path, const char *reposdir, pkg_init_flags flags)
		return (EPKG_FATAL);
	}

-
	pkg_get_myarch(myabi, BUFSIZ);
+
	pkg_get_myarch(myabi, BUFSIZ, &ctx.osversion);
	pkg_get_myarch_legacy(myabi_legacy, BUFSIZ);
	if (parsed != false) {
		pkg_emit_error("pkg_init() must only be called once");
modified libpkg/pkg_elf.c
@@ -707,7 +707,7 @@ aeabi_parse_arm_attributes(void *data, size_t length)
}

static int
-
pkg_get_myarch_elfparse(char *dest, size_t sz)
+
pkg_get_myarch_elfparse(char *dest, size_t sz, int *osversion)
{
	Elf *elf = NULL;
	GElf_Ehdr elfhdr;
@@ -847,6 +847,8 @@ pkg_get_myarch_elfparse(char *dest, size_t sz)
		snprintf(dest, sz, "%s:%d.%d.%d", osname, gnu_abi_tag[1],
		    gnu_abi_tag[2], gnu_abi_tag[3]);
	} else {
+
		if (osversion != NULL)
+
			*osversion = version;
#if defined(__DragonFly__)
		snprintf(dest, sz, "%s:%d.%d",
		    osname, version / 100000, (((version / 100 % 1000)+1)/2)*2);
@@ -1027,7 +1029,7 @@ pkg_get_myarch_legacy(char *dest, size_t sz)
{
	int i, err;

-
	err = pkg_get_myarch_elfparse(dest, sz);
+
	err = pkg_get_myarch_elfparse(dest, sz, NULL);
	if (err)
		return (err);

@@ -1039,13 +1041,13 @@ pkg_get_myarch_legacy(char *dest, size_t sz)

#ifndef __DragonFly__
int
-
pkg_get_myarch(char *dest, size_t sz)
+
pkg_get_myarch(char *dest, size_t sz, int *osversion)
{
	struct arch_trans *arch_trans;
	char *arch_tweak;

	int err;
-
	err = pkg_get_myarch_elfparse(dest, sz);
+
	err = pkg_get_myarch_elfparse(dest, sz, osversion);
	if (err)
		return (err);

modified libpkg/private/pkg.h
@@ -236,6 +236,7 @@ struct pkg_ctx {
	int cachedirfd;
	int dbdirfd;
	int pkg_dbdirfd;
+
	int osversion;
};

extern struct pkg_ctx ctx;
@@ -620,6 +621,13 @@ typedef enum {
	PKG_RC_STOP
} pkg_rc_attr;

+
#ifdef __DragonFly__
+
#define pkg_get_myarch(d, z, v) pkg_get_myarch_legacy(d, z)
+
#else
+
int pkg_get_myarch(char *pkgarch, size_t sz, int *osversion);
+
#endif
+
int pkg_get_myarch_legacy(char *pkgarch, size_t sz);
+

/**
 * Remove and unregister the package.
 * @param pkg An installed package to delete
modified libpkg/utils.c
@@ -54,6 +54,8 @@
#include "private/pkg.h"
#include "xmalloc.h"

+
extern struct pkg_ctx ctx;
+

int
mkdirs(const char *_path)
{
@@ -359,10 +361,10 @@ is_valid_os_version(struct pkg *pkg)
			    fbsd_version, pkg->name);
			return (false);
		}
-
		if (fbsdver > getosreldate()) {
+
		if (fbsdver > ctx.osversion) {
			pkg_emit_error("Newer FreeBSD version for package %s:\n"
			    "- package: %d\n- running kernel: %d", pkg->name,
-
			    fbsdver, getosreldate());
+
			    fbsdver, ctx.osversion);
			return (false);
		}
	}