Radish alpha
H
rad:z3QDZAW2FAfuLvihrhiyDC9fAD8G9
HardenedBSD Package Manager
Radicle
Git
Fix @dirrmtry catching and order the post_install execution
Baptiste Daroussin committed 14 years ago
commit 4eaab475bbf6b2f4dd1ff320193f09bc249a3f14
parent 98a7a28
2 files changed +41 -21
modified libpkg/pkg_ports.c
@@ -14,6 +14,7 @@ int
ports_parse_plist(struct pkg *pkg, char *plist)
{
	char *plist_p, *buf, *p, *plist_buf;
+
	char comment[2];
	int nbel, i;
	size_t next;
	size_t len;
@@ -78,9 +79,29 @@ ports_parse_plist(struct pkg *pkg, char *plist)
					continue;

				if (plist_p[1] == 'u') {
+
					comment[0] = '\0';
+
					/* workaround to detect the @dirrmtry */
+
					if (STARTS_WITH(cmd, "rmdir ")) {
+
						comment[0] = '#';
+
						comment[1] = '\0';
+
					}
					if (sbuf_len(unexec_scripts) == 0)
						sbuf_cat(unexec_scripts, "#@unexec\n"); /* to be able to regenerate the @unexec in pkg2legacy */
-
					sbuf_printf(unexec_scripts, "%s\n", cmd);
+
					sbuf_printf(unexec_scripts, "%s%s\n",comment, cmd);
+

+
					/* workaround to detect the @dirrmtry */
+
					if (comment[0] == '#') {
+
						cmd += 6;
+
						buf =strchr(cmd, ' ');
+
						buf[0] = '\0';
+
						while (cmd[0] == '\"')
+
							cmd++;
+

+
						while (cmd[strlen(cmd) -1] == '\"')
+
							cmd[strlen(cmd) -1] = '\0';
+

+
						ret += pkg_adddir(pkg, cmd);
+
					}
				} else {
					if (sbuf_len(exec_scripts) == 0)
						sbuf_cat(exec_scripts, "#@exec\n"); /* to be able to regenerate the @exec in pkg2legacy */
modified libpkg/scripts.c
@@ -207,27 +207,26 @@ pkg_script_post_deinstall(struct pkg *pkg)
	if ((scripts = pkg_scripts(pkg)) == NULL)
		return (EPKG_OK);

+
	/* two loops because the order matters */
	for (i = 0; scripts[i] != NULL; i++) {
-
		switch (pkg_script_type(scripts[i])) {
-
			case PKG_SCRIPT_DEINSTALL:
-
				sbuf_reset(script_cmd);
-
				sbuf_printf(script_cmd, "PKG_PREFIX=%s\nset -- %s-%s POST-DEINSTALL\n%s",
-
				  pkg_get(pkg, PKG_PREFIX), pkg_get(pkg, PKG_NAME),
-
				  pkg_get(pkg, PKG_VERSION), pkg_script_data(scripts[i]));
-
				sbuf_finish(script_cmd);
-
				system(sbuf_data(script_cmd));
-
				break;
-
			case PKG_SCRIPT_POST_DEINSTALL:
-
				sbuf_reset(script_cmd);
-
				sbuf_printf(script_cmd, "PKG_PREFIX=%s\nset -- %s-%s\n%s",
-
				  pkg_get(pkg, PKG_PREFIX), pkg_get(pkg, PKG_NAME),
-
				  pkg_get(pkg, PKG_VERSION), pkg_script_data(scripts[i]));
-
				sbuf_finish(script_cmd);
-
				system(sbuf_data(script_cmd));
-
				break;
-
			default:
-
				/* ignored to prevent warning */
-
				break;
+
		if (pkg_script_type(scripts[i]) == PKG_SCRIPT_DEINSTALL) {
+
			sbuf_reset(script_cmd);
+
			sbuf_printf(script_cmd, "PKG_PREFIX=%s\nset -- %s-%s POST-DEINSTALL\n%s",
+
					pkg_get(pkg, PKG_PREFIX), pkg_get(pkg, PKG_NAME),
+
					pkg_get(pkg, PKG_VERSION), pkg_script_data(scripts[i]));
+
			sbuf_finish(script_cmd);
+
			system(sbuf_data(script_cmd));
+
		}
+
	}
+

+
	for (i = 0; scripts[i] != NULL; i++) {
+
		if (pkg_script_type(scripts[i]) == PKG_SCRIPT_POST_DEINSTALL) {
+
			sbuf_reset(script_cmd);
+
			sbuf_printf(script_cmd, "PKG_PREFIX=%s\nset -- %s-%s\n%s",
+
					pkg_get(pkg, PKG_PREFIX), pkg_get(pkg, PKG_NAME),
+
					pkg_get(pkg, PKG_VERSION), pkg_script_data(scripts[i]));
+
			sbuf_finish(script_cmd);
+
			system(sbuf_data(script_cmd));
		}
	}