diff options
author | jkh <jkh@FreeBSD.org> | 1995-04-22 00:14:20 +0000 |
---|---|---|
committer | jkh <jkh@FreeBSD.org> | 1995-04-22 00:14:20 +0000 |
commit | f50974f2ec0a1239f728b8d2fdc722dbae37d426 (patch) | |
tree | 35669bd532d5846ce72a8f3fa1da9cb86d061f1d /usr.sbin/pkg_install/lib | |
parent | 40a3a76a6793772d6fd3960d8fa2e92048cf08b8 (diff) | |
download | FreeBSD-src-f50974f2ec0a1239f728b8d2fdc722dbae37d426.zip FreeBSD-src-f50974f2ec0a1239f728b8d2fdc722dbae37d426.tar.gz |
Some patches to make deletions of non-existent files and directories slightly
less fatal (so that the database entry is subsequently removed anyway).
Submitted by: Edward Wang <edward@edcom.com>
Diffstat (limited to 'usr.sbin/pkg_install/lib')
-rw-r--r-- | usr.sbin/pkg_install/lib/plist.c | 19 |
1 files changed, 13 insertions, 6 deletions
diff --git a/usr.sbin/pkg_install/lib/plist.c b/usr.sbin/pkg_install/lib/plist.c index 282f3d0..d8ea00e 100644 --- a/usr.sbin/pkg_install/lib/plist.c +++ b/usr.sbin/pkg_install/lib/plist.c @@ -1,5 +1,5 @@ #ifndef lint -static const char *rcsid = "$Id: plist.c,v 1.9 1994/09/29 13:19:43 jkh Exp $"; +static const char *rcsid = "$Id: plist.c,v 1.10 1994/12/06 00:51:50 jkh Exp $"; #endif /* @@ -374,7 +374,7 @@ delete_package(Boolean ign_err, Boolean nukedirs, Package *pkg) #define REMOVE(dir,ie) vsystem("%s %s%s", REMOVE_CMD, (ie ? "-f " : ""), dir) #else #define RMDIR rmdir -#define REMOVE(file,ie) remove(file) +#define REMOVE(file,ie) (remove(file) && !(ie)) #endif /* Selectively delete a hierarchy */ @@ -384,11 +384,15 @@ delete_hierarchy(char *dir, Boolean ign_err, Boolean nukedirs) char *cp1, *cp2; cp1 = cp2 = dir; - if (nukedirs) { + if (!fexists(dir)) { + if (!ign_err) + whinge("%s '%s' doesn't really exist.", + isdir(dir) ? "Directory" : "File", dir); + } else if (nukedirs) { if (vsystem("%s -r%s %s", REMOVE_CMD, (ign_err ? "f" : ""), dir)) return 1; } else if (isdir(dir)) { - if (RMDIR(dir)) + if (RMDIR(dir) && !ign_err) return 1; } else { if (REMOVE(dir, ign_err)) @@ -402,8 +406,11 @@ delete_hierarchy(char *dir, Boolean ign_err, Boolean nukedirs) *cp2 = '\0'; if (!isemptydir(dir)) return 0; - if (RMDIR(dir) && ign_err) - return 1; + if (RMDIR(dir) && !ign_err) + if (!fexists(dir)) + whinge("Directory '%s' doesn't really exist.", dir); + else + return 1; /* back up the pathname one component */ if (cp2) { cp1 = dir; |