If an error occurs the actual path being extracted is more useful than
the original path from the package file list.  The original path is
still used for checks that use it directly.

Signed-off-by: Andrew Gregory <[email protected]>
---
 lib/libalpm/add.c | 31 +++++++++++++------------------
 1 file changed, 13 insertions(+), 18 deletions(-)

diff --git a/lib/libalpm/add.c b/lib/libalpm/add.c
index e5f5d42..ee92414 100644
--- a/lib/libalpm/add.c
+++ b/lib/libalpm/add.c
@@ -107,7 +107,7 @@ int SYMEXPORT alpm_add_pkg(alpm_handle_t *handle, 
alpm_pkg_t *pkg)
 }
 
 static int perform_extraction(alpm_handle_t *handle, struct archive *archive,
-               struct archive_entry *entry, const char *filename, const char 
*origname)
+               struct archive_entry *entry, const char *filename)
 {
        int ret;
        const int archive_flags = ARCHIVE_EXTRACT_OWNER |
@@ -120,13 +120,13 @@ static int perform_extraction(alpm_handle_t *handle, 
struct archive *archive,
        if(ret == ARCHIVE_WARN && archive_errno(archive) != ENOSPC) {
                /* operation succeeded but a "non-critical" error was 
encountered */
                _alpm_log(handle, ALPM_LOG_WARNING, _("warning given when 
extracting %s (%s)\n"),
-                               origname, archive_error_string(archive));
+                               filename, archive_error_string(archive));
        } else if(ret != ARCHIVE_OK) {
                _alpm_log(handle, ALPM_LOG_ERROR, _("could not extract %s 
(%s)\n"),
-                               origname, archive_error_string(archive));
+                               filename, archive_error_string(archive));
                alpm_logaction(handle, ALPM_CALLER_PREFIX,
                                "error: could not extract %s (%s)\n",
-                               origname, archive_error_string(archive));
+                               filename, archive_error_string(archive));
                return 1;
        }
        return 0;
@@ -164,7 +164,7 @@ static int extract_db_file(alpm_handle_t *handle, struct 
archive *archive,
        archive_entry_set_perm(entry, 0644);
        snprintf(filename, PATH_MAX, "%s%s-%s/%s",
                        _alpm_db_path(handle->db_local), newpkg->name, 
newpkg->version, dbfile);
-       return perform_extraction(handle, archive, entry, filename, filename);
+       return perform_extraction(handle, archive, entry, filename);
 }
 
 static int extract_single_file(alpm_handle_t *handle, struct archive *archive,
@@ -176,7 +176,6 @@ static int extract_single_file(alpm_handle_t *handle, 
struct archive *archive,
        char filename[PATH_MAX]; /* the actual file we're extracting */
        int needbackup = 0, notouch = 0;
        const char *hash_orig = NULL;
-       char *entryname_orig = NULL;
        int errors = 0;
        struct stat lsbuf;
 
@@ -185,10 +184,12 @@ static int extract_single_file(alpm_handle_t *handle, 
struct archive *archive,
        }
 
        if (!alpm_filelist_contains(&newpkg->files, entryname)) {
-               _alpm_log(handle, ALPM_LOG_WARNING, _("file not found in file 
list for package %s. skipping extraction of %s\n"),
+               _alpm_log(handle, ALPM_LOG_WARNING,
+                               _("file not found in file list for package %s. 
skipping extraction of %s\n"),
                                newpkg->name, entryname);
                return 0;
        }
+
        /* build the new entryname relative to handle->root */
        snprintf(filename, PATH_MAX, "%s%s", handle->root, entryname);
 
@@ -279,10 +280,6 @@ static int extract_single_file(alpm_handle_t *handle, 
struct archive *archive,
                }
        }
 
-       /* we need access to the original entryname later after calls to
-        * archive_entry_set_pathname(), so we need to dupe it and free() later 
*/
-       STRDUP(entryname_orig, entryname, RET_ERR(handle, ALPM_ERR_MEMORY, -1));
-
        if(needbackup) {
                char *checkfile;
                char *hash_local = NULL, *hash_pkg = NULL;
@@ -293,7 +290,7 @@ static int extract_single_file(alpm_handle_t *handle, 
struct archive *archive,
                                errors++; handle->pm_errno = ALPM_ERR_MEMORY; 
goto needbackup_cleanup);
                snprintf(checkfile, len, "%s.paccheck", filename);
 
-               if(perform_extraction(handle, archive, entry, checkfile, 
entryname_orig)) {
+               if(perform_extraction(handle, archive, entry, checkfile)) {
                        errors++;
                        goto needbackup_cleanup;
                }
@@ -307,7 +304,7 @@ static int extract_single_file(alpm_handle_t *handle, 
struct archive *archive,
                        STRDUP(backup->hash, hash_pkg, RET_ERR(handle, 
ALPM_ERR_MEMORY, -1));
                }
 
-               _alpm_log(handle, ALPM_LOG_DEBUG, "checking hashes for %s\n", 
entryname_orig);
+               _alpm_log(handle, ALPM_LOG_DEBUG, "checking hashes for %s\n", 
filename);
                _alpm_log(handle, ALPM_LOG_DEBUG, "current:  %s\n", hash_local);
                _alpm_log(handle, ALPM_LOG_DEBUG, "new:      %s\n", hash_pkg);
                _alpm_log(handle, ALPM_LOG_DEBUG, "original: %s\n", hash_orig);
@@ -316,7 +313,7 @@ static int extract_single_file(alpm_handle_t *handle, 
struct archive *archive,
                        /* local and new files are the same, updating anyway to 
get
                         * correct timestamps */
                        _alpm_log(handle, ALPM_LOG_DEBUG, "action: installing 
new file: %s\n",
-                                       entryname_orig);
+                                       filename);
                        if(try_rename(handle, checkfile, filename)) {
                                errors++;
                        }
@@ -330,7 +327,7 @@ static int extract_single_file(alpm_handle_t *handle, 
struct archive *archive,
                        /* installed file has NOT been changed by user,
                         * update to the new version */
                        _alpm_log(handle, ALPM_LOG_DEBUG, "action: installing 
new file: %s\n",
-                                       entryname_orig);
+                                       filename);
                        if(try_rename(handle, checkfile, filename)) {
                                errors++;
                        }
@@ -426,9 +423,8 @@ needbackup_cleanup:
                        unlink(filename);
                }
 
-               if(perform_extraction(handle, archive, entry, filename, 
entryname_orig)) {
+               if(perform_extraction(handle, archive, entry, filename)) {
                        /* error */
-                       free(entryname_orig);
                        errors++;
                        return errors;
                }
@@ -456,7 +452,6 @@ needbackup_cleanup:
                        backup->hash = alpm_compute_md5sum(filename);
                }
        }
-       free(entryname_orig);
        return errors;
 }
 
-- 
2.1.1

Reply via email to