On 01/10/14 17:05, Andrew Gregory wrote:
> 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]>
> ---

Ack.

>  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;

OK

> @@ -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;
>       }

OK

> +
>       /* 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);

OK

> @@ -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;
>  }
>  
> 

OK

Reply via email to