Fri Feb 13 01:31:42 2009 UTC ()
pkg_install-20090213:
Fix pkg_delete -d:
- ignore @dirrm commands, directories are removed already on demand
- use local copy of dir before changing it, the caller expects it
unmodified for the call to pkgdb_remove


(joerg)
diff -r1.46 -r1.47 pkgsrc/pkgtools/pkg_install/files/lib/lib.h
diff -r1.22 -r1.23 pkgsrc/pkgtools/pkg_install/files/lib/plist.c
diff -r1.110 -r1.111 pkgsrc/pkgtools/pkg_install/files/lib/version.h

cvs diff -r1.46 -r1.47 pkgsrc/pkgtools/pkg_install/files/lib/lib.h (expand / switch to context diff)
--- pkgsrc/pkgtools/pkg_install/files/lib/lib.h 2009/02/02 12:35:01 1.46
+++ pkgsrc/pkgtools/pkg_install/files/lib/lib.h 2009/02/13 01:31:42 1.47
@@ -1,4 +1,4 @@
-/* $NetBSD: lib.h,v 1.46 2009/02/02 12:35:01 joerg Exp $ */
+/* $NetBSD: lib.h,v 1.47 2009/02/13 01:31:42 joerg Exp $ */
 
 /* from FreeBSD Id: lib.h,v 1.25 1997/10/08 07:48:03 charnier Exp */
 
@@ -308,7 +308,7 @@
 int     URLlength(const char *);
 Boolean make_preserve_name(char *, size_t, char *, char *);
 void    remove_files(const char *, const char *);
-int     delete_hierarchy(char *, Boolean, Boolean);
+int     delete_hierarchy(const char *, Boolean, Boolean);
 int     format_cmd(char *, size_t, const char *, const char *, const char *);
 
 int	recursive_remove(const char *, int);

cvs diff -r1.22 -r1.23 pkgsrc/pkgtools/pkg_install/files/lib/plist.c (expand / switch to context diff)
--- pkgsrc/pkgtools/pkg_install/files/lib/plist.c 2009/02/02 12:35:01 1.22
+++ pkgsrc/pkgtools/pkg_install/files/lib/plist.c 2009/02/13 01:31:42 1.23
@@ -1,4 +1,4 @@
-/*	$NetBSD: plist.c,v 1.22 2009/02/02 12:35:01 joerg Exp $	*/
+/*	$NetBSD: plist.c,v 1.23 2009/02/13 01:31:42 joerg Exp $	*/
 
 #if HAVE_CONFIG_H
 #include "config.h"
@@ -7,7 +7,7 @@
 #if HAVE_SYS_CDEFS_H
 #include <sys/cdefs.h>
 #endif
-__RCSID("$NetBSD: plist.c,v 1.22 2009/02/02 12:35:01 joerg Exp $");
+__RCSID("$NetBSD: plist.c,v 1.23 2009/02/13 01:31:42 joerg Exp $");
 
 /*
  * FreeBSD install - a package for the installation and maintainance
@@ -638,7 +638,7 @@
 			break;
 
 		case PLIST_DIR_RM:
-			if (NoDeleteFiles)
+			if (NoDeleteFiles || nukedirs)
 				break;
 
 			(void) snprintf(tmp, sizeof(tmp), "%s%s%s/%s",
@@ -675,11 +675,10 @@
  * Returns 1 on error, 0 else.
  */
 int
-delete_hierarchy(char *dir, Boolean ign_err, Boolean nukedirs)
+delete_hierarchy(const char *dir, Boolean ign_err, Boolean nukedirs)
 {
-	char   *cp1, *cp2;
+	char   *cp1, *cp2, *tmp_dir;
 
-	cp1 = cp2 = dir;
 	if (!fexists(dir)) {
 		if (!ign_err)
 			warnx("%s `%s' doesn't really exist",
@@ -700,21 +699,26 @@
 
 	if (!nukedirs)
 		return 0;
+
+	cp1 = cp2 = tmp_dir = xstrdup(dir);;
+
 	while (cp2) {
 		if ((cp2 = strrchr(cp1, '/')) != NULL)
 			*cp2 = '\0';
-		if (!isemptydir(dir))
-			return 0;
-		if (rmdir(dir) && !ign_err) {
-			if (!fexists(dir))
-				warnx("directory `%s' doesn't really exist", dir);
-			else
+		if (!isemptydir(tmp_dir))
+			break;
+		if (rmdir(tmp_dir) && !ign_err) {
+			if (fexists(tmp_dir)) {
+				free(tmp_dir);
 				return 1;
+			}
+			warnx("directory `%s' doesn't really exist", tmp_dir);
 		}
 		/* back up the pathname one component */
 		if (cp2) {
-			cp1 = dir;
+			cp1 = tmp_dir;
 		}
 	}
+	free(tmp_dir);
 	return 0;
 }

cvs diff -r1.110 -r1.111 pkgsrc/pkgtools/pkg_install/files/lib/version.h (expand / switch to context diff)
--- pkgsrc/pkgtools/pkg_install/files/lib/version.h 2009/02/11 23:42:42 1.110
+++ pkgsrc/pkgtools/pkg_install/files/lib/version.h 2009/02/13 01:31:42 1.111
@@ -1,4 +1,4 @@
-/*	$NetBSD: version.h,v 1.110 2009/02/11 23:42:42 joerg Exp $	*/
+/*	$NetBSD: version.h,v 1.111 2009/02/13 01:31:42 joerg Exp $	*/
 
 /*
  * Copyright (c) 2001 Thomas Klausner.  All rights reserved.
@@ -27,6 +27,6 @@
 #ifndef _INST_LIB_VERSION_H_
 #define _INST_LIB_VERSION_H_
 
-#define PKGTOOLS_VERSION "20090212"
+#define PKGTOOLS_VERSION "20090213"
 
 #endif /* _INST_LIB_VERSION_H_ */