Radish alpha
H
rad:z3QDZAW2FAfuLvihrhiyDC9fAD8G9
HardenedBSD Package Manager
Radicle
Git
Fix pkg_printf to work with shlibs required/provided
Matthew Seaman committed 12 years ago
commit a4809d56efd3376bf42c418f98b8901835824223
parent 20e5dbc
4 files changed +69 -26
modified libpkg/pkg.c
@@ -455,7 +455,7 @@ pkg_options(const struct pkg *pkg, struct pkg_option **o)
}

int
-
pkg_shlibs_required(struct pkg *pkg, struct pkg_shlib **s)
+
pkg_shlibs_required(const struct pkg *pkg, struct pkg_shlib **s)
{
	assert(pkg != NULL);

@@ -463,7 +463,7 @@ pkg_shlibs_required(struct pkg *pkg, struct pkg_shlib **s)
}

int
-
pkg_shlibs_provided(struct pkg *pkg, struct pkg_shlib **s)
+
pkg_shlibs_provided(const struct pkg *pkg, struct pkg_shlib **s)
{
	assert(pkg != NULL);

@@ -471,7 +471,7 @@ pkg_shlibs_provided(struct pkg *pkg, struct pkg_shlib **s)
}

int
-
pkg_annotations(struct pkg *pkg, struct pkg_note **an)
+
pkg_annotations(const struct pkg *pkg, struct pkg_note **an)
{
	assert(pkg != NULL);

modified libpkg/pkg.h.in
@@ -589,21 +589,21 @@ int pkg_options(const struct pkg *, struct pkg_option **option);
 * @param shlib must be set to NULL for the first call.
 * @return An error code
 */
-
int pkg_shlibs_required(struct pkg *pkg, struct pkg_shlib **shlib);
+
int pkg_shlibs_required(const struct pkg *pkg, struct pkg_shlib **shlib);

/**
 * Iterates over the shared libraries provided by the package.
 * @param shlib must be set to NULL for the first call.
 * @return An error code
 */
-
int pkg_shlibs_provided(struct pkg *pkg, struct pkg_shlib **shlib);
+
int pkg_shlibs_provided(const struct pkg *pkg, struct pkg_shlib **shlib);

/**
 * Iterates over the annotations associated with the package.
 * @param note must be set to NULL for the first call.
 * @return An error code
 */
-
int pkg_annotations(struct pkg *pkg, struct pkg_note **note);
+
int pkg_annotations(const struct pkg *pkg, struct pkg_note **note);

/**
 * Iterate over all of the files within the package pkg, ensuring the
modified libpkg/pkg_printf.c
@@ -45,7 +45,7 @@
 *    Arg Type     What
 * A
 *
-
 * B  pkg          List of shared libraries
+
 * B  pkg          List of required shared libraries
 * Bn pkg_shlib    Shared library name
 *
 * C  pkg          List of categories
@@ -109,7 +109,8 @@
 *
 * a  pkg          autoremove flag
 *
-
 * b
+
 * b  pkg          List of provided shared libraries
+
 * bn pkg_shlib    Shared library name
 *
 * c  pkg          comment
 *
@@ -169,10 +170,10 @@ struct pkg_printf_fmt {
 */

static const struct pkg_printf_fmt	fmt[] = {
-
	[PP_PKG_SHLIB_NAME] =
+
	[PP_PKG_SHLIB_REQUIRED_NAME] =
	{ 'B', 'n',   false, PP_PKG|PP_B,	&format_shlib_name, },
-
	[PP_PKG_SHLIBS] =
-
	{ 'B', '\0',  true,  PP_PKG,		&format_shlibs, },
+
	[PP_PKG_SHLIBS_REQUIRED] =
+
	{ 'B', '\0',  true,  PP_PKG,		&format_shlibs_required, },
        [PP_PKG_CATEGORY_NAME] =
	{ 'C', 'n',   false, PP_PKG|PP_C,	&format_category_name, },
	[PP_PKG_CATEGORIES] =
@@ -233,6 +234,10 @@ static const struct pkg_printf_fmt fmt[] = {
	{ 'U', '\0',  true,  PP_PKG,		&format_users, },
	[PP_PKG_AUTOREMOVE] =
	{ 'a', '\0',  false, PP_ALL,		&format_autoremove, },
+
	[PP_PKG_SHLIB_PROVIDED_NAME] =
+
	{ 'b', 'n',   false, PP_PKG|PP_b,	&format_shlib_name, },
+
	[PP_PKG_SHLIBS_PROVIDED] =
+
	{ 'b', '\0',  true,  PP_PKG,		&format_shlibs_provided, },
	[PP_PKG_COMMENT] =
	{ 'c', '\0',  false, PP_ALL,		&format_comment, },
	[PP_PKG_DEPENDENCY_NAME] =
@@ -283,7 +288,7 @@ static const struct pkg_printf_fmt fmt[] = {

/*
 * Note: List values -- special behaviour with ? and # modifiers.
-
 * Affects %B %C %D %F %G %L %O %U %d %r
+
 * Affects %B %C %D %F %G %L %O %U %b %d %r
 *
 * With ? -- Flag values.  Boolean.  %?X returns 0 if the %X list is
 * empty, 1 otherwise.
@@ -293,17 +298,17 @@ static const struct pkg_printf_fmt fmt[] = {
 */

/*
-
 * %B -- Shared Libraries.  List of shlibs required by binaries in the
-
 * pkg.  Optionally accepts per-field format in %{ %| %}, where %n is
-
 * replaced by the shlib name.  Default %{%Bn\n%|%}
+
 * %B -- Required Shared Libraries.  List of shlibs required by
+
 * binaries in the pkg.  Optionally accepts per-field format in %{ %|
+
 * %}, where %n is replaced by the shlib name.  Default %{%Bn\n%|%}
 */
struct sbuf *
-
format_shlibs(struct sbuf *sbuf, const void *data, struct percent_esc *p)
+
format_shlibs_required(struct sbuf *sbuf, const void *data, struct percent_esc *p)
{
	const struct pkg	*pkg = data;

	if (p->flags & (PP_ALTERNATE_FORM1|PP_ALTERNATE_FORM2))
-
		return (list_count(sbuf, pkg_list_count(pkg, PKG_SHLIBS), p));
+
		return (list_count(sbuf, pkg_list_count(pkg, PKG_SHLIBS_REQUIRED), p));
	else {
		struct pkg_shlib	*shlib;
		int			 count;
@@ -311,7 +316,7 @@ format_shlibs(struct sbuf *sbuf, const void *data, struct percent_esc *p)
		set_list_defaults(p, "%Bn\n", "");

		count = 1;
-
		while (pkg_shlibs(pkg, &shlib) == EPKG_OK) {
+
		while (pkg_shlibs_required(pkg, &shlib) == EPKG_OK) {
			if (count > 1)
				iterate_item(sbuf, pkg, sbuf_data(p->sep_fmt),
					     shlib, count, PP_B);
@@ -325,7 +330,8 @@ format_shlibs(struct sbuf *sbuf, const void *data, struct percent_esc *p)
}

/*
-
 * %Bn -- Shared Library name.
+
 * %Bn -- Required Shared Library name or %bn -- Provided Shared
+
 * Library name
 */
struct sbuf *
format_shlib_name(struct sbuf *sbuf, const void *data, struct percent_esc *p)
@@ -832,6 +838,39 @@ format_autoremove(struct sbuf *sbuf, const void *data, struct percent_esc *p)
	return (bool_val(sbuf, automatic, p));
}

+

+
/*
+
 * %b -- Provided Shared Libraries.  List of shlibs provided by
+
 * binaries in the pkg.  Optionally accepts per-field format in %{ %|
+
 * %}, where %n is replaced by the shlib name.  Default %{%bn\n%|%}
+
 */
+
struct sbuf *
+
format_shlibs_provided(struct sbuf *sbuf, const void *data, struct percent_esc *p)
+
{
+
	const struct pkg	*pkg = data;
+

+
	if (p->flags & (PP_ALTERNATE_FORM1|PP_ALTERNATE_FORM2))
+
		return (list_count(sbuf, pkg_list_count(pkg, PKG_SHLIBS_PROVIDED), p));
+
	else {
+
		struct pkg_shlib	*shlib;
+
		int			 count;
+

+
		set_list_defaults(p, "%bn\n", "");
+

+
		count = 1;
+
		while (pkg_shlibs_provided(pkg, &shlib) == EPKG_OK) {
+
			if (count > 1)
+
				iterate_item(sbuf, pkg, sbuf_data(p->sep_fmt),
+
					     shlib, count, PP_b);
+

+
			iterate_item(sbuf, pkg, sbuf_data(p->item_fmt),
+
				     shlib, count, PP_b);
+
			count++;
+
		}
+
	}
+
	return (sbuf);
+
}
+

/*
 * %c -- Comment. string.  Accepts field-width, left-align
 */
modified libpkg/private/pkg_printf.h
@@ -47,7 +47,7 @@

/* Contexts for option parsing */
#define PP_PKG	(1U << 0)	/* Any pkg scalar value */
-
#define PP_B	(1U << 1)	/* shlib */
+
#define PP_B	(1U << 1)	/* shlib required */
#define PP_C	(1U << 2)	/* category */
#define PP_D	(1U << 3)	/* directory */
#define PP_F	(1U << 4)	/* file */
@@ -55,14 +55,15 @@
#define PP_L	(1U << 6)	/* licence */
#define PP_O	(1U << 7)	/* option */
#define PP_U	(1U << 8)	/* user */
-
#define PP_d	(1U << 9)	/* dependency */
-
#define PP_r	(1U << 10)	/* requirement */
+
#define PP_b    (1U << 9)	/* shlib provided */
+
#define PP_d	(1U << 10)	/* dependency */
+
#define PP_r	(1U << 11)	/* requirement */

#define _PP_last	PP_r
#define PP_ALL	((_PP_last << 1) - 1) /* All contexts */

/*  %{ %| %} trailer context */
-
#define PP_TRAILER	(PP_B|PP_C|PP_D|PP_F|PP_G|PP_L|PP_O|PP_U|PP_d|PP_r)
+
#define PP_TRAILER	(PP_B|PP_C|PP_D|PP_F|PP_G|PP_L|PP_O|PP_U|PP_b|PP_d|PP_r)

/* Licence logic types */
#define PP_LIC_SINGLE	0
@@ -72,8 +73,8 @@
/* These are in alphabetical order of format code with A-Z sorting
 * before a-z */
typedef enum _fmt_code_t {
-
	PP_PKG_SHLIB_NAME = 0,
-
	PP_PKG_SHLIBS,
+
	PP_PKG_SHLIB_REQUIRED_NAME = 0,
+
	PP_PKG_SHLIBS_REQUIRED,
	PP_PKG_CATEGORY_NAME,
	PP_PKG_CATEGORIES,
	PP_PKG_DIRECTORY_GROUP,
@@ -104,6 +105,8 @@ typedef enum _fmt_code_t {
	PP_PKG_USER_UIDSTR,
	PP_PKG_USERS,
	PP_PKG_AUTOREMOVE,
+
	PP_PKG_SHLIB_PROVIDED_NAME,
+
	PP_PKG_SHLIBS_PROVIDED,
	PP_PKG_COMMENT,
	PP_PKG_DEPENDENCY_NAME,
	PP_PKG_DEPENDENCY_ORIGIN,
@@ -140,7 +143,7 @@ struct percent_esc {

/* Format handler function prototypes */

-
_static struct sbuf *format_shlibs(struct sbuf *, const void *, struct percent_esc *);
+
_static struct sbuf *format_shlibs_required(struct sbuf *, const void *, struct percent_esc *);
_static struct sbuf *format_shlib_name(struct sbuf *, const void *, struct percent_esc *);
_static struct sbuf *format_categories(struct sbuf *, const void *, struct percent_esc *);
_static struct sbuf *format_category_name(struct sbuf *, const void *, struct percent_esc *);
@@ -172,6 +175,7 @@ _static struct sbuf *format_users(struct sbuf *, const void *, struct percent_es
_static struct sbuf *format_user_name(struct sbuf *, const void *, struct percent_esc *);
_static struct sbuf *format_user_uidstr(struct sbuf *, const void *, struct percent_esc *);
_static struct sbuf *format_autoremove(struct sbuf *, const void *, struct percent_esc *);
+
_static struct sbuf *format_shlibs_provided(struct sbuf *, const void *, struct percent_esc *);
_static struct sbuf *format_comment(struct sbuf *, const void *, struct percent_esc *);
_static struct sbuf *format_dependencies(struct sbuf *, const void *, struct percent_esc *);
_static struct sbuf *format_dependency_name(struct sbuf *, const void *, struct percent_esc *);