Radish alpha
H
rad:z3QDZAW2FAfuLvihrhiyDC9fAD8G9
HardenedBSD Package Manager
Radicle
Git
pkg: convert dir_to_del to stringlist
Baptiste Daroussin committed 3 years ago
commit e51cfdd3b34c820593cad7dfc9eded1065233954
parent 0b8ce04
3 files changed +18 -33
modified libpkg/pkg_delete.c
@@ -140,7 +140,7 @@ pkg_add_dir_to_del(struct pkg *pkg, const char *file, const char *dir)
{
	char path[MAXPATHLEN];
	char *tmp;
-
	size_t i, len, len2;
+
	size_t len, len2;

	strlcpy(path, file != NULL ? file : dir, MAXPATHLEN);

@@ -158,29 +158,21 @@ pkg_add_dir_to_del(struct pkg *pkg, const char *file, const char *dir)
		path[len] = '\0';
	}

-
	for (i = 0; i < pkg->dir_to_del_len ; i++) {
-
		len2 = strlen(pkg->dir_to_del[i]);
-
		if (len2 >= len && strncmp(path, pkg->dir_to_del[i], len) == 0)
+
	tll_foreach(pkg->dir_to_del, d) {
+
		len2 = strlen(d->item);
+
		if (len2 >= len && strncmp(path, d->item, len) == 0)
			return;

-
		if (strncmp(path, pkg->dir_to_del[i], len2) == 0) {
+
		if (strncmp(path, d->item, len2) == 0) {
			pkg_debug(1, "Replacing in deletion %s with %s",
-
			    pkg->dir_to_del[i], path);
-
			free(pkg->dir_to_del[i]);
-
			pkg->dir_to_del[i] = xstrdup(path);
-
			return;
+
			    d->item, path);
+
			tll_remove_and_free(pkg->dir_to_del, d, free);
+
			break;
		}
	}

	pkg_debug(1, "Adding to deletion %s", path);
-

-
	if (pkg->dir_to_del_len + 1 > pkg->dir_to_del_cap) {
-
		pkg->dir_to_del_cap += 64;
-
		pkg->dir_to_del = xrealloc(pkg->dir_to_del,
-
		    pkg->dir_to_del_cap * sizeof(char *));
-
	}
-

-
	pkg->dir_to_del[pkg->dir_to_del_len++] = xstrdup(path);
+
	tll_push_back(pkg->dir_to_del, xstrdup(path));
}

static void
@@ -269,11 +261,10 @@ static void
pkg_effective_rmdir(struct pkgdb *db, struct pkg *pkg)
{
	char prefix_r[MAXPATHLEN];
-
	size_t i;

	snprintf(prefix_r, sizeof(prefix_r), "%s", pkg->prefix + 1);
-
	for (i = 0; i < pkg->dir_to_del_len; i++)
-
		rmdir_p(db, pkg, pkg->dir_to_del[i], prefix_r);
+
	tll_foreach(pkg->dir_to_del, d)
+
		rmdir_p(db, pkg, d->item, prefix_r);
}

void
@@ -385,12 +376,7 @@ pkg_delete_dir(struct pkg *pkg, struct pkg_dir *dir)
	if ((strncmp(prefix_rel, path, len) == 0) && path[len] == '/') {
		pkg_add_dir_to_del(pkg, NULL, path);
	} else {
-
		if (pkg->dir_to_del_len + 1 > pkg->dir_to_del_cap) {
-
			pkg->dir_to_del_cap += 64;
-
			pkg->dir_to_del = xrealloc(pkg->dir_to_del,
-
			    pkg->dir_to_del_cap * sizeof(char *));
-
		}
-
		pkg->dir_to_del[pkg->dir_to_del_len++] = xstrdup(path);
+
		tll_push_back(pkg->dir_to_del, xstrdup(path));
	}
}

modified libpkg/private/pkg.h
@@ -239,9 +239,7 @@ struct pkg {
	unsigned			flags;
	int		rootfd;
	char		rootpath[MAXPATHLEN];
-
	char		**dir_to_del;
-
	size_t		dir_to_del_cap;
-
	size_t		dir_to_del_len;
+
	stringlist_t	dir_to_del;
	pkg_t		 type;
	struct pkg_repo		*repo;
};
modified tests/lib/pkg_add_dir_to_del.c
@@ -27,6 +27,7 @@
#include <atf-c.h>
#include <pkg.h>
#include <private/pkg.h>
+
#include <tllist.h>

ATF_TC(pkg_add_dir_to_del);

@@ -43,19 +44,19 @@ ATF_TC_BODY(pkg_add_dir_to_del, tc)
	ATF_REQUIRE_EQ(EPKG_OK, pkg_new(&p, PKG_FILE));
	pkg_set(p, PKG_PREFIX, "/usr/local");

-
	ATF_REQUIRE(p->dir_to_del == NULL);
+
	ATF_REQUIRE_EQ(tll_length(p->dir_to_del), 0);

	pkg_add_dir_to_del(p, "/usr/local/plop/bla", NULL);

-
	ATF_REQUIRE_STREQ(p->dir_to_del[0], "/usr/local/plop/");
+
	ATF_REQUIRE_STREQ(tll_back(p->dir_to_del), "/usr/local/plop/");

	pkg_add_dir_to_del(p, NULL, "/usr/local/plop");

-
	ATF_REQUIRE(p->dir_to_del_len == 1);
+
	ATF_REQUIRE_EQ(tll_length(p->dir_to_del), 1);

	pkg_add_dir_to_del(p, NULL, "/var/run/yeah");

-
	ATF_REQUIRE_STREQ(p->dir_to_del[1], "/var/run/yeah/");
+
	ATF_REQUIRE_STREQ(tll_back(p->dir_to_del), "/var/run/yeah/");

	pkg_free(p);
}