Radish alpha
H
rad:z3QDZAW2FAfuLvihrhiyDC9fAD8G9
HardenedBSD Package Manager
Radicle
Git
Last minutes fixes
Baptiste Daroussin committed 11 years ago
commit 05f30e32c8dc20706fe5753ca0934eb67971fdf5
parent eab4f94
3 files changed +43 -63
modified libpkg/pkg_printf.c
@@ -809,26 +809,23 @@ struct sbuf *
format_annotations(struct sbuf *sbuf, const void *data, struct percent_esc *p)
{
	const struct pkg	*pkg = data;
-
	const pkg_object	*an;
-

-
	pkg_get(pkg, PKG_ANNOTATIONS, &an);
-
	if (p->flags & (PP_ALTERNATE_FORM1|PP_ALTERNATE_FORM2))
-
		return (list_count(sbuf, pkg_object_count(an), p));
-
	else {
-
		const pkg_object	*note;
-
		pkg_iter		it = NULL;
-
		int			 count;
+
	struct pkg_kv		*kv;
+
	int			count;

+
	if (p->flags & (PP_ALTERNATE_FORM1|PP_ALTERNATE_FORM2)) {
+
		LL_COUNT(pkg->annotations, kv, count)
+
		return (list_count(sbuf, count, p));
+
	} else {
		set_list_defaults(p, "%An: %Av\n", "");

		count = 1;
-
		while ((note = pkg_object_iterate(an, &it))) {
+
		LL_FOREACH(pkg->annotations, kv) {
			if (count > 1)
				iterate_item(sbuf, pkg, sbuf_data(p->sep_fmt),
-
					     note, count, PP_A);
+
					     kv, count, PP_A);

			iterate_item(sbuf, pkg, sbuf_data(p->item_fmt),
-
				     note, count, PP_A);
+
				     kv, count, PP_A);
			count++;
		}
	}
@@ -841,9 +838,9 @@ format_annotations(struct sbuf *sbuf, const void *data, struct percent_esc *p)
struct sbuf *
format_annotation_name(struct sbuf *sbuf, const void *data, struct percent_esc *p)
{
-
	pkg_object	*o = (pkg_object *)data;
+
	const struct pkg_kv	*kv = data;

-
	return (string_val(sbuf, pkg_object_key(o), p));
+
	return (string_val(sbuf, kv->key, p));
}

/*
@@ -852,9 +849,9 @@ format_annotation_name(struct sbuf *sbuf, const void *data, struct percent_esc *
struct sbuf *
format_annotation_value(struct sbuf *sbuf, const void *data, struct percent_esc *p)
{
-
	pkg_object	*o = (pkg_object *)data;
+
	const struct pkg_kv	*kv = data;

-
	return (string_val(sbuf, pkg_object_string(o), p));
+
	return (string_val(sbuf, kv->value, p));
}

/*
@@ -923,10 +920,11 @@ format_categories(struct sbuf *sbuf, const void *data, struct percent_esc *p)
		count = 1;
		LL_FOREACH(pkg->categories, el) {
			if (count > 1)
-
				iterate_item(sbuf, pkg, el->value, el, count,
-
				    PP_C);
+
				iterate_item(sbuf, pkg, sbuf_data(p->sep_fmt),
+
				    el, count, PP_C);

-
			iterate_item(sbuf, pkg, el->value, el, count, PP_C);
+
			iterate_item(sbuf, pkg, sbuf_data(p->item_fmt), el,
+
			    count, PP_C);
			count++;
		}
	}
@@ -939,9 +937,9 @@ format_categories(struct sbuf *sbuf, const void *data, struct percent_esc *p)
struct sbuf *
format_category_name(struct sbuf *sbuf, const void *data, struct percent_esc *p)
{
-
	pkg_object	*o = (pkg_object *)data;
+
	const struct pkg_strel	*el = data;

-
	return (string_val(sbuf, pkg_object_string(o), p));
+
	return (string_val(sbuf, el->value, p));
}

/*
@@ -966,7 +964,7 @@ format_directories(struct sbuf *sbuf, const void *data, struct percent_esc *p)
		count = 1;
		while (pkg_dirs(pkg, &dir) == EPKG_OK) {
			if (count > 1)
-
				iterate_item(sbuf, pkg, sbuf_data(p->sep_fmt), 
+
				iterate_item(sbuf, pkg, sbuf_data(p->sep_fmt),
					     dir, count, PP_D);

			iterate_item(sbuf, pkg, sbuf_data(p->item_fmt),
@@ -1199,10 +1197,11 @@ format_licenses(struct sbuf *sbuf, const void *data, struct percent_esc *p)
		count = 1;
		LL_FOREACH(pkg->licenses, el) {
			if (count > 1)
-
				iterate_item(sbuf, pkg, el->value, el, count,
-
				    PP_L);
+
				iterate_item(sbuf, pkg, sbuf_data(p->sep_fmt),
+
				    el, count, PP_L);

-
			iterate_item(sbuf, pkg, el->value, el, count, PP_L);
+
			iterate_item(sbuf, pkg, sbuf_data(p->item_fmt), el,
+
			    count, PP_L);
			count++;
		}
	}
@@ -1215,9 +1214,9 @@ format_licenses(struct sbuf *sbuf, const void *data, struct percent_esc *p)
struct sbuf *
format_license_name(struct sbuf *sbuf, const void *data, struct percent_esc *p)
{
-
	pkg_object *o = (pkg_object *) data;
+
	const struct pkg_strel	*el = data;

-
	return (string_val(sbuf, pkg_object_string(o), p));
+
	return (string_val(sbuf, el->value, p));
}

/*
modified libpkg/pkgdb.c
@@ -1538,6 +1538,7 @@ int
pkgdb_register_pkg(struct pkgdb *db, struct pkg *pkg, int complete, int forced)
{
	struct pkg		*pkg2 = NULL;
+
	struct pkg_strel	*el;
	struct pkg_dep		*dep = NULL;
	struct pkg_file		*file = NULL;
	struct pkg_dir		*dir = NULL;
@@ -1547,8 +1548,6 @@ pkgdb_register_pkg(struct pkgdb *db, struct pkg *pkg, int complete, int forced)
	struct pkg_conflict	*conflict = NULL;
	struct pkg_config_file	*cf = NULL;
	struct pkgdb_it		*it = NULL;
-
	const pkg_object	*obj;
-
	pkg_iter		 iter;

	sqlite3			*s;

@@ -1558,8 +1557,6 @@ pkgdb_register_pkg(struct pkgdb *db, struct pkg *pkg, int complete, int forced)

	const char		*arch;

-
	const pkg_object	*licenses, *categories;
-

	assert(db != NULL);

	if (pkg_is_valid(pkg) != EPKG_OK) {
@@ -1572,9 +1569,6 @@ pkgdb_register_pkg(struct pkgdb *db, struct pkg *pkg, int complete, int forced)
	if (!complete && pkgdb_transaction_begin(s, NULL) != EPKG_OK)
		return (EPKG_FATAL);

-
	pkg_get(pkg,
-
	    PKG_LICENSES,	&licenses,
-
	    PKG_CATEGORIES,	&categories); 
	/* Prefer new ABI over old one */
	arch = pkg->abi != NULL ? pkg->abi : pkg->arch;

@@ -1726,11 +1720,10 @@ pkgdb_register_pkg(struct pkgdb *db, struct pkg *pkg, int complete, int forced)
	 * Insert categories
	 */

-
	iter = NULL;
-
	while ((obj = pkg_object_iterate(categories, &iter))) {
-
		ret = run_prstmt(CATEGORY1, pkg_object_string(obj));
+
	LL_FOREACH(pkg->categories, el) {
+
		ret = run_prstmt(CATEGORY1, el->value);
		if (ret == SQLITE_DONE)
-
			ret = run_prstmt(CATEGORY2, package_id, pkg_object_string(obj));
+
			ret = run_prstmt(CATEGORY2, package_id, el->value);
		if (ret != SQLITE_DONE) {
			ERROR_SQLITE(s, SQL(CATEGORY2));
			goto cleanup;
@@ -1741,12 +1734,11 @@ pkgdb_register_pkg(struct pkgdb *db, struct pkg *pkg, int complete, int forced)
	 * Insert licenses
	 */

-
	iter = NULL;
-
	while ((obj = pkg_object_iterate(licenses, &iter))) {
-
		if (run_prstmt(LICENSES1, pkg_object_string(obj))
+
	LL_FOREACH(pkg->licenses, el) {
+
		if (run_prstmt(LICENSES1, el->value)
		    != SQLITE_DONE
		    ||
-
		    run_prstmt(LICENSES2, package_id, pkg_object_string(obj))
+
		    run_prstmt(LICENSES2, package_id, el->value)
		    != SQLITE_DONE) {
			ERROR_SQLITE(s, SQL(LICENSES2));
			goto cleanup;
@@ -1940,20 +1932,17 @@ pkgdb_update_provides(struct pkg *pkg, int64_t package_id, sqlite3 *s)
int
pkgdb_insert_annotations(struct pkg *pkg, int64_t package_id, sqlite3 *s)
{
-
	const pkg_object	*note, *annotations;
-
	pkg_iter		 it = NULL;
+
	struct pkg_kv	*kv;

-
	pkg_get(pkg, PKG_ANNOTATIONS, &annotations);
-
	while ((note = pkg_object_iterate(annotations, &it))) {
-
		if (run_prstmt(ANNOTATE1, pkg_object_key(note))
+
	LL_FOREACH(pkg->annotations, kv) {
+
		if (run_prstmt(ANNOTATE1, kv->key)
		    != SQLITE_DONE
		    ||
-
		    run_prstmt(ANNOTATE1, pkg_object_string(note))
+
		    run_prstmt(ANNOTATE1,kv->value)
		    != SQLITE_DONE
		    ||
		    run_prstmt(ANNOTATE2, package_id,
-
			pkg_object_key(note),
-
			pkg_object_string(note))
+
			kv->key, kv->value)
		    != SQLITE_DONE) {
			ERROR_SQLITE(s, SQL(ANNOTATE2));
			return (EPKG_FATAL);
modified libpkg/pkgdb_iterator.c
@@ -901,19 +901,11 @@ pkgdb_sqlite_it_next(struct pkgdb_sqlite_it *it,

	switch (sqlite3_step(it->stmt)) {
	case SQLITE_ROW:
-
		if (*pkg_p == NULL) {
-
			ret = pkg_new(pkg_p, it->pkg_type);
-
			if (ret != EPKG_OK)
-
				return (ret);
-
		} else {
-
			pkg_reset(*pkg_p, it->pkg_type);
-
#if 0
-
			/*
-
			 * This reset is extremely dangerous and leads to tons of errors!
-
			 */
-
			assert(0);
-
#endif
-
		}
+
		if (*pkg_p != NULL)
+
			pkg_free(*pkg_p);
+
		ret = pkg_new(pkg_p, it->pkg_type);
+
		if (ret != EPKG_OK)
+
			return (ret);
		pkg = *pkg_p;

		populate_pkg(it->stmt, pkg);