[pacman-dev] [PATCH 2/5] pacman: clean filename for downlaods

morganamilo morganamilo at archlinux.org
Fri Jan 1 16:57:45 UTC 2021


The progress bar already did this. But the init event and up to date
message allways printed the full file name, which doesn't match the
progress bar.
---
 src/pacman/callback.c | 38 ++++++++++++++++++++++++++------------
 1 file changed, 26 insertions(+), 12 deletions(-)

diff --git a/src/pacman/callback.c b/src/pacman/callback.c
index 9cc7541d..6ed7557a 100644
--- a/src/pacman/callback.c
+++ b/src/pacman/callback.c
@@ -749,18 +749,34 @@ static void init_total_progressbar(void)
 	totalbar->rate = 0.0;
 }
 
+static char *clean_filename(const char *filename)
+{
+	int len = strlen(filename);
+	char *p;
+	char *fname = malloc(len + 1);
+	memcpy(fname, filename, len + 1);
+	/* strip package or DB extension for cleaner look */
+	if((p = strstr(fname, ".pkg")) || (p = strstr(fname, ".db")) || (p = strstr(fname, ".files"))) {
+		len = p - fname;
+		fname[len] = '\0';
+	}
+
+	return fname;
+}
+
 static void draw_pacman_progress_bar(struct pacman_progress_bar *bar)
 {
 	int infolen;
 	int filenamelen;
-	char *fname, *p;
+	char *fname;
 	/* used for wide character width determination and printing */
-	int len, wclen, wcwid, padwid;
+	int wclen, wcwid, padwid;
 	wchar_t *wcfname;
 	unsigned int eta_h = 0, eta_m = 0, eta_s = bar->eta;
 	double rate_human, xfered_human;
 	const char *rate_label, *xfered_label;
 	int file_percent = 0;
+	int len = strlen(bar->filename);
 
 	const unsigned short cols = getcols();
 
@@ -776,14 +792,8 @@ static void draw_pacman_progress_bar(struct pacman_progress_bar *bar)
 	eta_m = eta_s / 60;
 	eta_s -= eta_m * 60;
 
-	len = strlen(bar->filename);
-	fname = malloc(len + 1);
-	memcpy(fname, bar->filename, len + 1);
-	/* strip package or DB extension for cleaner look */
-	if((p = strstr(fname, ".pkg")) || (p = strstr(fname, ".db")) || (p = strstr(fname, ".files"))) {
-		len = p - fname;
-		fname[len] = '\0';
-	}
+	fname = clean_filename(bar->filename);
+
 
 	infolen = cols * 6 / 10;
 	if(infolen < 50) {
@@ -859,7 +869,9 @@ static void dload_init_event(const char *filename, alpm_download_event_init_t *d
 	(void)data;
 
 	if(!dload_progressbar_enabled()) {
-		printf(_(" %s downloading...\n"), filename);
+		char *cleaned_filename = clean_filename(filename);
+		printf(_(" %s downloading...\n"), cleaned_filename);
+		free(cleaned_filename);
 		return;
 	}
 
@@ -992,7 +1004,9 @@ static void dload_complete_event(const char *filename, alpm_download_event_compl
 
 	if(data->result == 1) {
 		console_cursor_goto_bar(index);
-		printf(_(" %s is up to date"), bar->filename);
+		char *cleaned_filename = clean_filename(filename);
+		printf(_(" %s is up to date"), cleaned_filename);
+		free(cleaned_filename);
 		/* The line contains text from previous status. Erase these leftovers. */
 		console_erase_line();
 	} else if(data->result == 0) {
-- 
2.30.0


More information about the pacman-dev mailing list