Radish alpha
H
rad:z3QDZAW2FAfuLvihrhiyDC9fAD8G9
HardenedBSD Package Manager
Radicle
Git
Insert abstract metadata key+value pairs into struct pkg as read from +MANIFEST
Matthew Seaman committed 13 years ago
commit 99ad53ae1d2f92dc2a55928b7160bfa404056eda
parent 3daa014
3 files changed +45 -0
modified libpkg/pkg.c
@@ -895,6 +895,35 @@ pkg_addshlib_provided(struct pkg *pkg, const char *name)
}

int
+
pkg_addabstract_metadata(struct pkg *pkg, const char *key, const char *value)
+
{
+
	struct pkg_abstract *am = NULL;
+

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

+
	/* The combination of key+value should be unique */
+
	HASH_FIND_STR(pkg->abstract_metadata, __DECONST(char *, key), am);
+
	if (am != NULL && strcmp(value, pkg_abstract_value(am)) == 0) {
+
		pkg_emit_error("duplicate abstract metadata listing: %s -- %s,"
+
			       " ignoring", key, value);
+
		return (EPKG_OK);
+
	}
+
	am = NULL;
+
	pkg_abstract_new(&am);
+

+
	sbuf_set(&am->key, key);
+
	sbuf_set(&am->value, value);
+

+
	HASH_ADD_KEYPTR(hh, pkg->abstract_metadata,
+
	    __DECONST(char *, pkg_abstract_key(am)),
+
	    strlen(pkg_abstract_key(am)), am);
+

+
	return (EPKG_OK);
+
}
+

+
int
pkg_list_count(struct pkg *pkg, pkg_list list)
{
	switch (list) {
modified libpkg/pkg.h.in
@@ -754,6 +754,12 @@ int pkg_addshlib_required(struct pkg *pkg, const char *name);
 */
int pkg_addshlib_provided(struct pkg *pkg, const char *name);

+
/*
+
 * Add abstract_metatdata key+value pair
+
 * @return An error code
+
 */
+
int pkg_addabstract_metadata(struct pkg *pkg, const char *key, const char *value);
+

/**
 * Parse a manifest and set the attributes of pkg accordingly.
 * @param buf An NULL-terminated buffer containing the manifest data.
modified libpkg/pkg_manifest.c
@@ -58,6 +58,7 @@
#define PKG_DIRECTORIES -11
#define PKG_SHLIBS_REQUIRED -12
#define PKG_SHLIBS_PROVIDED -13
+
#define PKG_ABSTRACT_METADATA -14

static int pkg_set_from_node(struct pkg *, yaml_node_t *, yaml_document_t *, int);
static int pkg_set_size_from_node(struct pkg *, yaml_node_t *, yaml_document_t *, int);
@@ -77,6 +78,7 @@ static struct manifest_key {
	yaml_node_type_t valid_type;
	int (*parse_data)(struct pkg *, yaml_node_t *, yaml_document_t *, int);
} manifest_keys[] = {
+
	{ "abstract_metadata", PKG_ABSTRACT_METADATA, YAML_MAPPING_NODE, parse_mapping},
	{ "arch", PKG_ARCH, YAML_SCALAR_NODE, pkg_set_from_node},
	{ "categories", PKG_CATEGORIES, YAML_SEQUENCE_NODE, parse_sequence},
	{ "comment", PKG_COMMENT, YAML_SCALAR_NODE, pkg_set_from_node},
@@ -443,6 +445,14 @@ parse_mapping(struct pkg *pkg, yaml_node_t *item, yaml_document_t *doc, int attr
			urldecode(val->data.scalar.value, &tmp);
			pkg_addscript(pkg, sbuf_get(tmp), script_type);
			break;
+
		case PKG_ABSTRACT_METADATA:
+
			if (val->type != YAML_SCALAR_NODE)
+
				pkg_emit_error("Skipping malformed abstract metadata %s",
+
				    key->data.scalar.value);
+
			else
+
				pkg_addabstract_metadata(pkg, key->data.scalar.value,
+
				    val->data.scalar.value);
+
			break;
		}

		++pair;