diff options
author | Dan McGee <dan@archlinux.org> | 2011-01-12 07:05:22 +0100 |
---|---|---|
committer | Dan McGee <dan@archlinux.org> | 2011-01-22 18:25:21 +0100 |
commit | 61864e1f6f51549c3b32c0d82b8c9deacea3ed73 (patch) | |
tree | c5e7a4cfdb577987234707a6e10fdaee340ed0f1 | |
parent | 32727efc38bf5376a402c4c4149cc4148ba2068b (diff) | |
download | pacman-61864e1f6f51549c3b32c0d82b8c9deacea3ed73.tar.gz pacman-61864e1f6f51549c3b32c0d82b8c9deacea3ed73.tar.xz |
Refactor backup file status check into separate function
This will make it a lot easier to use this stuff elsewhere.
Signed-off-by: Dan McGee <dan@archlinux.org>
-rw-r--r-- | src/pacman/package.c | 59 |
1 files changed, 35 insertions, 24 deletions
diff --git a/src/pacman/package.c b/src/pacman/package.c index 7af38435..34eab227 100644 --- a/src/pacman/package.c +++ b/src/pacman/package.c @@ -157,6 +157,37 @@ void dump_pkg_sync(pmpkg_t *pkg, const char *treename, int level) dump_pkg_full(pkg, -level); } +static const char *get_backup_file_status(const char *root, + const char *filename, const char *expected_md5) +{ + char path[PATH_MAX]; + char *ret; + + snprintf(path, PATH_MAX, "%s%s", root, filename); + + /* if we find the file, calculate checksums, otherwise it is missing */ + if(access(path, R_OK) == 0) { + char *md5sum = alpm_compute_md5sum(path); + + if(md5sum == NULL) { + pm_fprintf(stderr, PM_LOG_ERROR, + _("could not calculate checksums for %s\n"), path); + return(NULL); + } + + /* if checksums don't match, file has been modified */ + if (strcmp(md5sum, expected_md5) != 0) { + ret = _("MODIFIED"); + } else { + ret = _("Not Modified"); + } + free(md5sum); + } else { + ret = _("MISSING"); + } + return(ret); +} + /* Display list of backup files and their modification states */ void dump_pkg_backups(pmpkg_t *pkg) @@ -167,37 +198,17 @@ void dump_pkg_backups(pmpkg_t *pkg) if(alpm_pkg_get_backup(pkg)) { /* package has backup files, so print them */ for(i = alpm_pkg_get_backup(pkg); i; i = alpm_list_next(i)) { - char path[PATH_MAX]; + const char *value; char *str = strdup(alpm_list_getdata(i)); - char *ptr = index(str, '\t'); + char *ptr = strchr(str, '\t'); if(ptr == NULL) { free(str); continue; } *ptr = '\0'; ptr++; - snprintf(path, PATH_MAX-1, "%s%s", root, str); - /* if we find the file, calculate checksums, otherwise it is missing */ - if(access(path, R_OK) == 0) { - char *md5sum = alpm_compute_md5sum(path); - - if(md5sum == NULL) { - pm_fprintf(stderr, PM_LOG_ERROR, - _("could not calculate checksums for %s\n"), path); - free(str); - continue; - } - - /* if checksums don't match, file has been modified */ - if (strcmp(md5sum, ptr) != 0) { - printf(_("MODIFIED\t%s\n"), path); - } else { - printf(_("Not Modified\t%s\n"), path); - } - free(md5sum); - } else { - printf(_("MISSING\t\t%s\n"), path); - } + value = get_backup_file_status(root, str, ptr); + printf("%s\t%s%s\n", value, root, str); free(str); } } else { |