On 01/10/14 17:05, Andrew Gregory wrote:
> We need to know if a file needs to be backed up for all extracted files.
> 

Ack.

> Signed-off-by: Andrew Gregory <[email protected]>
> ---
>  lib/libalpm/add.c | 53 ++++++++++++++---------------------------------------
>  1 file changed, 14 insertions(+), 39 deletions(-)
> 
> diff --git a/lib/libalpm/add.c b/lib/libalpm/add.c
> index bbf2a51..ca029b2 100644
> --- a/lib/libalpm/add.c
> +++ b/lib/libalpm/add.c
> @@ -147,16 +147,15 @@ static int try_rename(alpm_handle_t *handle, const char 
> *src, const char *dest)
>  static int extract_single_file(alpm_handle_t *handle, struct archive 
> *archive,
>               struct archive_entry *entry, alpm_pkg_t *newpkg, alpm_pkg_t 
> *oldpkg)
>  {
> -     const char *entryname;
> -     mode_t entrymode;
> +     const char *entryname = archive_entry_pathname(entry);
> +     mode_t entrymode = archive_entry_mode(entry);
> +     alpm_backup_t *backup = _alpm_needbackup(entryname, newpkg);
>       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;
> -
> -     entryname = archive_entry_pathname(entry);
> -     entrymode = archive_entry_mode(entry);
> +     struct stat lsbuf;
>  
>       if(strcmp(entryname, ".INSTALL") == 0) {
>               /* the install script goes inside the db */

OK

> @@ -216,7 +215,6 @@ static int extract_single_file(alpm_handle_t *handle, 
> struct archive *archive,
>        *  6- skip extraction, dir already exists.
>        */
>  
> -     struct stat lsbuf;
>       if(llstat(filename, &lsbuf) != 0) {
>               /* cases 1,2: file doesn't exist, skip all backup checks */
>       } else {

OK

> @@ -269,21 +267,13 @@ static int extract_single_file(alpm_handle_t *handle, 
> struct archive *archive,
>                       if(_alpm_fnmatch_patterns(handle->noupgrade, entryname) 
> == 0) {
>                               notouch = 1;
>                       } else {
> -                             alpm_backup_t *backup;
> -                             /* go to the backup array and see if our 
> conflict is there */
> -                             /* check newpkg first, so that adding backup 
> files is retroactive */
> -                             backup = _alpm_needbackup(entryname, newpkg);
> -                             if(backup) {
> +                             alpm_backup_t *oldbackup;
> +                             if(oldpkg && (oldbackup = 
> _alpm_needbackup(entryname, oldpkg))) {
> +                                     hash_orig = oldbackup->hash;
> +                                     needbackup = 1;
> +                             } else if(backup) {
> +                                     /* allow adding backup files 
> retroactively */
>                                       needbackup = 1;
> -                             }
> -
> -                             /* check oldpkg for a backup entry, store the 
> hash if available */
> -                             if(oldpkg) {
> -                                     backup = _alpm_needbackup(entryname, 
> oldpkg);
> -                                     if(backup) {
> -                                             hash_orig = backup->hash;
> -                                             needbackup = 1;
> -                                     }
>                               }
>                       }
>               }

OK

> @@ -312,16 +302,9 @@ static int extract_single_file(alpm_handle_t *handle, 
> struct archive *archive,
>               hash_pkg = alpm_compute_md5sum(checkfile);
>  
>               /* update the md5 hash in newpkg's backup (it will be the new 
> original) */
> -             alpm_list_t *i;
> -             for(i = alpm_pkg_get_backup(newpkg); i; i = i->next) {
> -                     alpm_backup_t *backup = i->data;
> -                     char *newhash;
> -                     if(!backup->name || strcmp(backup->name, 
> entryname_orig) != 0) {
> -                             continue;
> -                     }
> -                     STRDUP(newhash, hash_pkg, RET_ERR(handle, 
> ALPM_ERR_MEMORY, -1));
> +             if(backup) {
>                       FREE(backup->hash);
> -                     backup->hash = newhash;
> +                     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);

OK

> @@ -468,17 +451,9 @@ needbackup_cleanup:
>               }
>  
>               /* calculate an hash if this is in newpkg's backup */
> -             alpm_list_t *i;
> -             for(i = alpm_pkg_get_backup(newpkg); i; i = i->next) {
> -                     alpm_backup_t *backup = i->data;
> -                     char *newhash;
> -                     if(!backup->name || strcmp(backup->name, 
> entryname_orig) != 0) {
> -                             continue;
> -                     }
> -                     _alpm_log(handle, ALPM_LOG_DEBUG, "appending backup 
> entry for %s\n", entryname_orig);
> -                     newhash = alpm_compute_md5sum(filename);
> +             if(backup) {
>                       FREE(backup->hash);
> -                     backup->hash = newhash;
> +                     backup->hash = alpm_compute_md5sum(filename);
>               }
>       }
>       free(entryname_orig);
> 

OK.

Reply via email to