[pacman-dev] [PATCH] pacman: print colored optdepends install status

Michael Straube michael.straube at posteo.de
Sun Dec 9 17:31:51 UTC 2018


Colorize [installed] and [pending] when printing optional dependencies.

FS#34920

Signed-off-by: Michael Straube <michael.straube at posteo.de>
---
 src/pacman/package.c |  3 +--
 src/pacman/util.c    | 14 ++++++++++++--
 src/pacman/util.h    |  1 +
 3 files changed, 14 insertions(+), 4 deletions(-)

diff --git a/src/pacman/package.c b/src/pacman/package.c
index d8880837..d85a8834 100644
--- a/src/pacman/package.c
+++ b/src/pacman/package.c
@@ -172,8 +172,7 @@ static void optdeplist_display(alpm_pkg_t *pkg, unsigned short cols)
 		if(alpm_pkg_get_origin(pkg) == ALPM_PKG_FROM_LOCALDB) {
 			if(alpm_find_satisfier(alpm_db_get_pkgcache(localdb), depstring)) {
 				const char *installed = _(" [installed]");
-				depstring = realloc(depstring, strlen(depstring) + strlen(installed) + 1);
-				strcpy(depstring + strlen(depstring), installed);
+				optstring_append_status(&depstring, installed);
 			}
 		}
 		text = alpm_list_add(text, depstring);
diff --git a/src/pacman/util.c b/src/pacman/util.c
index 74e1037d..7e7e080e 100644
--- a/src/pacman/util.c
+++ b/src/pacman/util.c
@@ -1214,6 +1214,17 @@ static int depend_cmp(const void *d1, const void *d2)
 	return ret;
 }
 
+void optstring_append_status(char **optstring, const char *status)
+{
+	const colstr_t *colstr = &config->colstr;
+	size_t len;
+
+	len = strlen(colstr->meta) + strlen(status) + strlen(colstr->nocolor);
+	*optstring = realloc(*optstring, strlen(*optstring) + len + 1);
+	snprintf(*optstring + strlen(*optstring), len + 1, "%s%s%s",
+			colstr->meta, status, colstr->nocolor);
+}
+
 static char *make_optstring(alpm_depend_t *optdep)
 {
 	alpm_db_t *localdb = alpm_get_localdb(config->handle);
@@ -1225,8 +1236,7 @@ static char *make_optstring(alpm_depend_t *optdep)
 		status = _(" [pending]");
 	}
 	if(status) {
-		optstring = realloc(optstring, strlen(optstring) + strlen(status) + 1);
-		strcpy(optstring + strlen(optstring), status);
+		optstring_append_status(&optstring, status);
 	}
 	return optstring;
 }
diff --git a/src/pacman/util.h b/src/pacman/util.h
index a1fbef46..0f0d506b 100644
--- a/src/pacman/util.h
+++ b/src/pacman/util.h
@@ -67,6 +67,7 @@ void signature_display(const char *title, alpm_siglist_t *siglist,
 		unsigned short maxcols);
 void display_targets(void);
 int str_cmp(const void *s1, const void *s2);
+void optstring_append_status(char **optstring, const char *status);
 void display_new_optdepends(alpm_pkg_t *oldpkg, alpm_pkg_t *newpkg);
 void display_optdepends(alpm_pkg_t *pkg);
 void print_packages(const alpm_list_t *packages);
-- 
2.19.2


More information about the pacman-dev mailing list