From a82a5cf3f71e38c54a5ac1b5eaf3c83374d0e515 Mon Sep 17 00:00:00 2001 From: Andrew Gregory Date: Wed, 1 Oct 2014 01:45:40 -0400 Subject: [PATCH] extract_single_file: use full path in messages 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 --- 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 edd913c1..f6f62f32 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); @@ -277,10 +278,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; @@ -291,7 +288,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; } @@ -306,7 +303,7 @@ static int extract_single_file(alpm_handle_t *handle, struct archive *archive, errors++; handle->pm_errno = ALPM_ERR_MEMORY; goto needbackup_cleanup); } - _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); @@ -315,7 +312,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++; } @@ -329,7 +326,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++; } @@ -425,9 +422,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; } @@ -455,7 +451,6 @@ needbackup_cleanup: backup->hash = alpm_compute_md5sum(filename); } } - free(entryname_orig); return errors; }