[pacman-dev] [PATCH 1/3] Refactor backup file status check into separate function

dpmcgee at gmail.com dpmcgee at gmail.com
Sat Jan 22 15:44:00 EST 2011


From: Dan McGee <dan at archlinux.org>

This will make it a lot easier to use this stuff elsewhere.

Signed-off-by: Dan McGee <dan at archlinux.org>
---

In addition to the query fileowner speed improvements patches I just sent, this
one is part of the logical path to implementing
https://bugs.archlinux.org/task/19103.

-Dan

 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 7af3843..34eab22 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 {
-- 
1.7.3.5



More information about the pacman-dev mailing list