Radish alpha
H
rad:z3QDZAW2FAfuLvihrhiyDC9fAD8G9
HardenedBSD Package Manager
Radicle
Git
Fix emitting and parsing requires
Baptiste Daroussin committed 11 years ago
commit f6a3a73065ce98c0ca72396ec379c1efc6df1d1e
parent 14c9ccb
3 files changed +29 -1
modified libpkg/pkg.c
@@ -1353,6 +1353,27 @@ pkg_addconflict(struct pkg *pkg, const char *uniqueid)
}

int
+
pkg_addrequire(struct pkg *pkg, const char *name)
+
{
+
	struct pkg_provide *p = NULL;
+

+
	assert(pkg != NULL);
+
	assert(name != NULL && name[0] != '\0');
+

+
	HASH_FIND_STR(pkg->requires, __DECONST(char *, name), p);
+
	/* silently ignore duplicates in case of conflicts */
+
	if (p != NULL)
+
		return (EPKG_OK);
+

+
	pkg_provide_new(&p);
+
	p->provide = strdup(name);
+

+
	HASH_ADD_KEYPTR(hh, pkg->requires, p->provide, strlen(p->provide), p);
+

+
	return (EPKG_OK);
+
}
+

+
int
pkg_addprovide(struct pkg *pkg, const char *name)
{
	struct pkg_provide *p = NULL;
modified libpkg/pkg_manifest.c
@@ -106,7 +106,7 @@ static struct manifest_key {
	{ "pkgsize",             PKG_PKGSIZE,             UCL_INT,    pkg_int},
	{ "prefix",              PKG_PREFIX,              UCL_STRING, pkg_string},
	{ "provides",            PKG_PROVIDES,            UCL_ARRAY,  pkg_array},
-
	{ "requires",            PKG_PROVIDES,            UCL_ARRAY,  pkg_array},
+
	{ "requires",            PKG_REQUIRES,            UCL_ARRAY,  pkg_array},
	{ "scripts",             PKG_SCRIPTS,             UCL_OBJECT, pkg_obj},
	{ "shlibs",              PKG_SHLIBS_REQUIRED,     UCL_ARRAY,  pkg_array}, /* Backwards compat with 1.0.x packages */
	{ "shlibs_provided",     PKG_SHLIBS_PROVIDED,     UCL_ARRAY,  pkg_array},
@@ -422,6 +422,12 @@ pkg_array(struct pkg *pkg, const ucl_object_t *obj, int attr)
			else
				pkg_addconfig_file(pkg, ucl_object_tostring(cur), NULL);
			break;
+
		case PKG_REQUIRES:
+
			if (cur->type != UCL_STRING)
+
				pkg_emit_error("Skipping malformed require name");
+
			else
+
				pkg_addrequire(pkg, ucl_object_tostring(cur));
+
			break;
		}
	}

modified libpkg/private/pkg.h
@@ -671,6 +671,7 @@ int pkg_addshlib_required(struct pkg *pkg, const char *name);
int pkg_addshlib_provided(struct pkg *pkg, const char *name);
int pkg_addconflict(struct pkg *pkg, const char *name);
int pkg_addprovide(struct pkg *pkg, const char *name);
+
int pkg_addrequire(struct pkg *pkg, const char *name);
int pkg_addconfig_file(struct pkg *pkg, const char *name, const char *buf);

int pkg_addoption(struct pkg *pkg, const char *name, const char *value);