Git-Url: 
http://git.frugalware.org/gitweb/gitweb.cgi?p=pacman-g2.git;a=commitdiff;h=fe6f38f7042f497f08311a067698a4faa4cf906a

commit fe6f38f7042f497f08311a067698a4faa4cf906a
Author: Michel Hermier <[email protected]>
Date:   Thu Nov 7 13:18:28 2013 +0100

libpacman: Avoid creating an extra dummy package, and avoid leaking a package 
in _pacman_add_addtarget.

diff --git a/lib/libpacman/add.c b/lib/libpacman/add.c
index 3ed5f4b..3b1be8b 100644
--- a/lib/libpacman/add.c
+++ b/lib/libpacman/add.c
@@ -122,19 +122,14 @@ int _pacman_add_addtarget(pmtrans_t *trans, const char 
*name)
pmpkg_t *pkg = i->data;
if(strcmp(pkg->name, _pacman_pkg_getinfo(info, PM_PKG_NAME)) == 0) {
if(_pacman_versioncmp(pkg->version, info->version) < 0) {
-                               pmpkg_t *newpkg;
_pacman_log(PM_LOG_WARNING, _("replacing older version %s-%s by %s in target 
list"),
pkg->name, pkg->version, info->version);
-                               if((newpkg = _pacman_pkg_load(name)) == NULL) {
-                                       /* pm_errno is already set by 
pkg_load() */
-                                       goto error;
-                               }
-                               FREEPKG(i->data);
-                               i->data = newpkg;
+                               _pacman_ptrswap(&i->data, &info);
} else {
_pacman_log(PM_LOG_WARNING, _("newer version %s-%s is in the target list -- 
skipping"),
pkg->name, pkg->version, info->version);
}
+                       FREEPKG(info);
return(0);
}
}
diff --git a/lib/libpacman/util.h b/lib/libpacman/util.h
index 6bb7783..95cfe1a 100644
--- a/lib/libpacman/util.h
+++ b/lib/libpacman/util.h
@@ -111,6 +111,13 @@ static inline void *_pacman_zalloc(size_t size)
return ptr;
}

+static inline void _pacman_ptrswap(void **ptr1, void **ptr2)
+{
+       void *tmp = *ptr2;
+       *ptr2 = *ptr1;
+       *ptr1 = tmp;
+}
+
#endif /* _PACMAN_UTIL_H */

/* vim: set ts=2 sw=2 noet: */
_______________________________________________
Frugalware-git mailing list
[email protected]
http://frugalware.org/mailman/listinfo/frugalware-git

Reply via email to