summaryrefslogtreecommitdiffstats
path: root/usr.sbin/pkg_install
diff options
context:
space:
mode:
authorflz <flz@FreeBSD.org>2008-12-27 14:34:33 +0000
committerflz <flz@FreeBSD.org>2008-12-27 14:34:33 +0000
commitb2b0c73e7c8c78b46575d052e3376c655bb3b8e5 (patch)
treef643724d909becc8fd88de3c7c880b3aeb784055 /usr.sbin/pkg_install
parent55553856e4033b18b0bd9ae14765702aabbdcb9e (diff)
downloadFreeBSD-src-b2b0c73e7c8c78b46575d052e3376c655bb3b8e5.zip
FreeBSD-src-b2b0c73e7c8c78b46575d052e3376c655bb3b8e5.tar.gz
Fix memory leaks introduced in last commit.
Bump version to 20081227. Reported by: gcooper Submitted by: Andrea Barberio <insomniac@slackware.it> MFC after: 1 month
Diffstat (limited to 'usr.sbin/pkg_install')
-rw-r--r--usr.sbin/pkg_install/lib/lib.h2
-rw-r--r--usr.sbin/pkg_install/lib/plist.c14
2 files changed, 3 insertions, 13 deletions
diff --git a/usr.sbin/pkg_install/lib/lib.h b/usr.sbin/pkg_install/lib/lib.h
index 4dbe2c0..5f66a3a 100644
--- a/usr.sbin/pkg_install/lib/lib.h
+++ b/usr.sbin/pkg_install/lib/lib.h
@@ -105,7 +105,7 @@
* Version of the package tools - increase only when some
* functionality used by bsd.port.mk is changed, added or removed
*/
-#define PKG_INSTALL_VERSION 20081225
+#define PKG_INSTALL_VERSION 20081227
#define PKG_WRAPCONF_FNAME "/var/db/pkg_install.conf"
#define main(argc, argv) real_main(argc, argv)
diff --git a/usr.sbin/pkg_install/lib/plist.c b/usr.sbin/pkg_install/lib/plist.c
index f9b05b0..8cb33aa 100644
--- a/usr.sbin/pkg_install/lib/plist.c
+++ b/usr.sbin/pkg_install/lib/plist.c
@@ -544,9 +544,8 @@ delete_package(Boolean ign_err, Boolean nukedirs, Package *pkg)
int
delete_hierarchy(const char *dir, Boolean ign_err, Boolean nukedirs)
{
- char *cp1, *cp2, *realdir;
+ char *cp1, *cp2, realdir[FILENAME_MAX];
- realdir = malloc(FILENAME_MAX);
if (realdir == NULL) {
warnx("Couldn't allocate enough memory\n");
return (ign_err ? SUCCESS : FAIL);
@@ -555,7 +554,7 @@ delete_hierarchy(const char *dir, Boolean ign_err, Boolean nukedirs)
if (issymlink(dir) && readlink(dir, realdir, FILENAME_MAX-1) == -1)
return (ign_err ? SUCCESS : FAIL);
- strlcpy(realdir, dir, FILENAME_MAX);
+ strlcpy(realdir, dir, FILENAME_MAX-1);
cp1 = cp2 = strdup(realdir);
if (cp1 == NULL) {
@@ -568,34 +567,29 @@ delete_hierarchy(const char *dir, Boolean ign_err, Boolean nukedirs)
warnx("%s '%s' doesn't exist",
isdir(realdir) ? "directory" : "file", realdir);
free(cp1);
- free(realdir);
return (ign_err ? SUCCESS : FAIL);
}
else if (nukedirs) {
if (vsystem("%s -r%s %s", REMOVE_CMD, (ign_err ? "f" : ""), realdir)) {
free(cp1);
- free(realdir);
return (ign_err ? SUCCESS : FAIL);
}
}
else if (isdir(realdir)) {
if (RMDIR(realdir)) {
free(cp1);
- free(realdir);
return (ign_err ? SUCCESS : FAIL);
}
}
else {
if (REMOVE(realdir, ign_err)) {
free(cp1);
- free(realdir);
return (ign_err ? SUCCESS : FAIL);
}
}
if (!nukedirs) {
free(cp1);
- free(realdir);
return (SUCCESS);
}
while (cp2) {
@@ -603,18 +597,15 @@ delete_hierarchy(const char *dir, Boolean ign_err, Boolean nukedirs)
*cp2 = '\0';
if (!isemptydir(realdir)) {
free(cp1);
- free(realdir);
return (SUCCESS);
}
if (RMDIR(realdir) && !ign_err) {
if (!fexists(realdir)) {
warnx("directory '%s' doesn't exist", realdir);
free(cp1);
- free(realdir);
return (SUCCESS);
} else {
free(cp1);
- free(realdir);
return (FAIL);
}
}
@@ -629,7 +620,6 @@ delete_hierarchy(const char *dir, Boolean ign_err, Boolean nukedirs)
}
}
free(cp1);
- free(realdir);
return (SUCCESS);
}
OpenPOWER on IntegriCloud