From e75beec76f74442738b8127b3d5e049a4c6d620c Mon Sep 17 00:00:00 2001 From: Juan RP Date: Sat, 25 Oct 2014 06:52:12 +0200 Subject: [PATCH] unpack: get rid of code that checks for modified symlinks. Unpacking those symlinks is so cheap that there's no point in wasting resources just to check if those have been modified, just unpack them unconditionally. --- lib/package_unpack.c | 63 ++------------------------------------------ 1 file changed, 2 insertions(+), 61 deletions(-) diff --git a/lib/package_unpack.c b/lib/package_unpack.c index a32f15e7..237883fb 100644 --- a/lib/package_unpack.c +++ b/lib/package_unpack.c @@ -48,28 +48,6 @@ set_extract_flags(uid_t euid) return flags; } -static const char * -find_pkg_symlink_target(xbps_dictionary_t d, const char *file) -{ - xbps_array_t links; - xbps_object_t obj; - const char *pkgfile, *tgt = NULL; - char *rfile; - - links = xbps_dictionary_get(d, "links"); - for (unsigned int i = 0; i < xbps_array_count(links); i++) { - rfile = strchr(file, '.') + 1; - obj = xbps_array_get(links, i); - xbps_dictionary_get_cstring_nocopy(obj, "file", &pkgfile); - if (strcmp(rfile, pkgfile) == 0) { - xbps_dictionary_get_cstring_nocopy(obj, "target", &tgt); - break; - } - } - - return tgt; -} - static bool match_preserved_file(struct xbps_handle *xhp, const char *entry) { @@ -106,8 +84,8 @@ unpack_archive(struct xbps_handle *xhp, struct archive_entry *entry; size_t instbufsiz = 0, rembufsiz = 0; ssize_t entry_size; - const char *file, *entry_pname, *transact, *tgtlnk; - char *pkgname, *dname, *buf, *buf2, *p, *p2; + const char *file, *entry_pname, *transact; + char *pkgname, *buf; int ar_rv, rv, entry_type, flags; bool preserve, update, file_exists, skip_obsoletes; bool skip_extract, force, xucd_stats; @@ -367,43 +345,6 @@ unpack_archive(struct xbps_handle *xhp, rv = 0; } } - } else if (!force && (entry_type == AE_IFLNK)) { - /* - * Check if current link from binpkg hasn't been - * modified, otherwise extract new link. - */ - buf = realpath(entry_pname, NULL); - if (buf) { - if (strcmp(xhp->rootdir, "/")) { - p = buf; - p += strlen(xhp->rootdir); - } else - p = buf; - tgtlnk = find_pkg_symlink_target(binpkg_filesd, - entry_pname); - assert(tgtlnk); - if (strncmp(tgtlnk, "./", 2) == 0) { - buf2 = strdup(entry_pname); - assert(buf2); - dname = dirname(buf2); - p2 = xbps_xasprintf("%s/%s", dname, tgtlnk); - free(buf2); - } else { - p2 = strdup(tgtlnk); - assert(p2); - } - xbps_dbg_printf(xhp, "%s: symlink %s cur: %s " - "new: %s\n", pkgver, entry_pname, p, p2); - - if (strcmp(p, p2) == 0) { - xbps_dbg_printf(xhp, "%s: symlink " - "%s matched, skipping...\n", - pkgver, entry_pname); - skip_extract = true; - } - free(buf); - free(p2); - } } /* * Check if current uid/gid differs from file in binpkg,