Radish alpha
H
rad:z3QDZAW2FAfuLvihrhiyDC9fAD8G9
HardenedBSD Package Manager
Radicle
Git
Create constructor, destructor and accessors for struct pkg_abstract, and integrate into struct pkg.
Matthew Seaman committed 13 years ago
commit 3daa014c6e6e560d861f69c8eb709bdc5767c779
parent b3d1221
4 files changed +58 -0
modified libpkg/pkg.c
@@ -112,6 +112,7 @@ pkg_reset(struct pkg *pkg, pkg_t type)
	pkg_list_free(pkg, PKG_GROUPS);
	pkg_list_free(pkg, PKG_SHLIBS_REQUIRED);
	pkg_list_free(pkg, PKG_SHLIBS_PROVIDED);
+
	pkg_list_free(pkg, PKG_ABSTRACT_METADATA);

	pkg->rowid = 0;
	pkg->type = type;
@@ -140,6 +141,7 @@ pkg_free(struct pkg *pkg)
	pkg_list_free(pkg, PKG_GROUPS);
	pkg_list_free(pkg, PKG_SHLIBS_REQUIRED);
	pkg_list_free(pkg, PKG_SHLIBS_PROVIDED);
+
	pkg_list_free(pkg, PKG_ABSTRACT_METADATA);

	free(pkg);
}
@@ -918,6 +920,8 @@ pkg_list_count(struct pkg *pkg, pkg_list list)
		return (HASH_COUNT(pkg->shlibs_required));
	case PKG_SHLIBS_PROVIDED:
		return (HASH_COUNT(pkg->shlibs_provided));
+
	case PKG_ABSTRACT_METADATA:
+
		return (HASH_COUNT(pkg->abstract_metadata));
	}
	
	return (0);
@@ -970,6 +974,10 @@ pkg_list_free(struct pkg *pkg, pkg_list list) {
		HASH_FREE(pkg->shlibs_provided, pkg_shlib, pkg_shlib_free);
		pkg->flags &= ~PKG_LOAD_SHLIBS_PROVIDED;
		break;
+
	case PKG_ABSTRACT_METADATA:
+
		HASH_FREE(pkg->abstract_metadata, pkg_abstract, pkg_abstract_free);
+
		pkg->flags &= ~PKG_LOAD_ABSTRACT_METADATA;
+
		break;
	}
}

modified libpkg/pkg.h.in
@@ -66,6 +66,7 @@ struct pkg_license;
struct pkg_user;
struct pkg_group;
struct pkg_shlib;
+
struct pkg_abstract;

struct pkgdb;
struct pkgdb_it;
@@ -266,6 +267,7 @@ typedef enum {
	PKG_GROUPS,
	PKG_SHLIBS_REQUIRED,
	PKG_SHLIBS_PROVIDED,
+
	PKG_ABSTRACT_METADATA,
} pkg_list;

/**
@@ -821,6 +823,10 @@ const char *pkg_option_value(struct pkg_option const * const);
/* pkg_shlib */
const char *pkg_shlib_name(struct pkg_shlib const * const);

+
/* pkg_abstract */
+
const char *pkg_abstract_key(struct pkg_abstract const * const);
+
const char *pkg_abstract_value(struct pkg_abstract const * const);
+

/**
 * @param db A pointer to a struct pkgdb object
 * @param origin Package origin
@@ -952,6 +958,7 @@ struct pkgdb_it * pkgdb_query_shlib_provided(struct pkgdb *db, const char *shlib
#define PKG_LOAD_GROUPS			(1U << 10)
#define PKG_LOAD_SHLIBS_REQUIRED	(1U << 11)
#define PKG_LOAD_SHLIBS_PROVIDED	(1U << 12)
+
#define PKG_LOAD_ABSTRACT_METADATA      (1U << 13)
/* Make sure new PKG_LOAD don't conflict with PKG_CONTAINS_* */

/**
modified libpkg/pkg_attributes.c
@@ -414,3 +414,43 @@ pkg_shlib_name(struct pkg_shlib const * const sl)

	return (sbuf_get(sl->name));
}
+

+
/*
+
 * Abstract Metadata
+
 */
+

+
int
+
pkg_abstract_new(struct pkg_abstract **am)
+
{
+
	if ((*am = calloc(1, sizeof(struct pkg_abstract))) == NULL)
+
		return (EPKG_FATAL);
+

+
	return (EPKG_OK);
+
}
+

+
void
+
pkg_abstract_free(struct pkg_abstract *am)
+
{
+
	if (am == NULL)
+
		return;
+

+
	sbuf_free(am->key);
+
	sbuf_free(am->value);
+
	free(am);
+
}
+

+
const char *
+
pkg_abstract_key(struct pkg_abstract const * const am)
+
{
+
	assert(am != NULL);
+

+
	return (sbuf_get(am->key));
+
}
+

+
const char *
+
pkg_abstract_value(struct pkg_abstract const * const am)
+
{
+
	assert(am != NULL);
+

+
	return (sbuf_get(am->value));
+
}
modified libpkg/private/pkg.h
@@ -338,6 +338,9 @@ int pkg_jobs_resolv(struct pkg_jobs *jobs);
int pkg_shlib_new(struct pkg_shlib **);
void pkg_shlib_free(struct pkg_shlib *);

+
int pkg_abstract_new(struct pkg_abstract **);
+
void pkg_abstract_free(struct pkg_abstract *);
+

struct packing;

int packing_init(struct packing **pack, const char *path, pkg_formats format);