[pacman-dev] [PATCH] alpm: Add better logging when a command fails to execute correctly

Daan De Meyer daan.j.demeyer at gmail.com
Sat May 23 11:55:37 UTC 2020


This makes debugging hook failures when running pacman less of a
hassle. Instead of a generic "command failed to execute correctly",
we now get the exact command and its arguments, as well as the exit
code of the command logged.

Signed-off-by: Daan De Meyer <daan.j.demeyer at gmail.com>
---
 lib/libalpm/util.c | 46 +++++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 45 insertions(+), 1 deletion(-)

diff --git a/lib/libalpm/util.c b/lib/libalpm/util.c
index ead03004..299e1954 100644
--- a/lib/libalpm/util.c
+++ b/lib/libalpm/util.c
@@ -568,6 +568,42 @@ static void _alpm_reset_signals(void)
 	}
 }
 
+static char *strv_join(char *const *strv, const char *separator)
+{
+	char *const *i;
+	char *r, *p;
+	size_t size = 0;
+
+	if (!separator) {
+		separator = " ";
+	}
+
+	for (i = strv; *i; i++) {
+		if (i != strv) {
+			size += strlen(separator);
+		}
+
+		size += strlen(*i);
+	}
+
+	r = malloc(size + 1);
+	if (r == NULL) {
+		return NULL;
+	}
+
+	p = r;
+
+	for (i = strv; *i; i++) {
+		if (i != strv) {
+			p = stpcpy(p, separator);
+		}
+
+		p = stpcpy(p, *i);
+	}
+
+	return r;
+}
+
 /** Execute a command with arguments in a chroot.
  * @param handle the context handle
  * @param cmd command to execute
@@ -745,7 +781,15 @@ int _alpm_run_chroot(alpm_handle_t *handle, const char *cmd, char *const argv[],
 		if(WIFEXITED(status)) {
 			_alpm_log(handle, ALPM_LOG_DEBUG, "call to waitpid succeeded\n");
 			if(WEXITSTATUS(status) != 0) {
-				_alpm_log(handle, ALPM_LOG_ERROR, _("command failed to execute correctly\n"));
+				char *argv_str = strv_join(argv, NULL);
+				if (argv_str == NULL) {
+					goto cleanup;
+				}
+
+				_alpm_log(handle, ALPM_LOG_ERROR,
+							_("command \"%s\" failed to execute correctly: %i\n"),
+							argv_str, WEXITSTATUS(status));
+				free(argv_str);
 				retval = 1;
 			}
 		} else if(WIFSIGNALED(status) != 0) {
-- 
2.26.2


More information about the pacman-dev mailing list