summaryrefslogtreecommitdiff
path: root/host/lib/subprocess.c
diff options
context:
space:
mode:
authorJakub Czapiga <jacz@semihalf.com>2022-09-07 13:51:30 +0200
committerChromeos LUCI <chromeos-scoped@luci-project-accounts.iam.gserviceaccount.com>2022-09-10 05:47:07 +0000
commit62cc7885eab5d5ab0a7d773fb5284b4ca9ee097c (patch)
tree19c6336af2e10bf164194f989ba9cf4040c0f31a /host/lib/subprocess.c
parent3bd35108579db497b006b81e77794739b5118592 (diff)
downloadvboot-stabilize-15117.111.B.tar.gz
Utility programs in vboot sometimes use subprocess_run to execute another program like flashrom or cbfstool. This change makes it easier to debug these utilities by logging executed subprocess and its arguments. This change also fixes futility vb2ex_printf() implementation. Previously use of VB2_DEBUG_RAW() calling vb2ex_printf(NULL, ...) was unnecessarily trying to print NULL as function name, which was not intended behavior. TEST=sign image and look for "Run: cbfstool ..." BUG=none BRANCH=none Signed-off-by: Jakub Czapiga <czapiga@google.com> Change-Id: I613d4af4af4370425cbbedc2d7de29a488533c6a Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/vboot_reference/+/3878593 Reviewed-by: Jack Rosenthal <jrosenth@chromium.org> Reviewed-by: Yu-Ping Wu <yupingso@chromium.org>
Diffstat (limited to 'host/lib/subprocess.c')
-rw-r--r--host/lib/subprocess.c25
1 files changed, 25 insertions, 0 deletions
diff --git a/host/lib/subprocess.c b/host/lib/subprocess.c
index 242b1897..8905d1c2 100644
--- a/host/lib/subprocess.c
+++ b/host/lib/subprocess.c
@@ -5,6 +5,7 @@
#include <errno.h>
#include <fcntl.h>
+#include <stdbool.h>
#include <stdlib.h>
#include <string.h>
#include <sys/wait.h>
@@ -248,6 +249,28 @@ static int process_target_output(struct subprocess_target *target)
return rv;
}
+static bool contains_spaces(const char *s)
+{
+ for (size_t i = 0; s[i]; i++) {
+ if (isspace(s[i]))
+ return true;
+ }
+ return false;
+}
+
+static void subprocess_log_call(const char *const argv[])
+{
+ VB2_DEBUG("Run:");
+
+ for (size_t i = 0; argv[i]; i++) {
+ if (contains_spaces(argv[i]))
+ VB2_DEBUG_RAW(" '%s'", argv[i]);
+ else
+ VB2_DEBUG_RAW(" %s", argv[i]);
+ }
+ VB2_DEBUG_RAW("\n");
+}
+
struct subprocess_target subprocess_null = {
.type = TARGET_NULL,
};
@@ -275,6 +298,8 @@ int subprocess_run(const char *const argv[],
int status;
pid_t pid = -1;
+ subprocess_log_call(argv);
+
if (!input)
input = &subprocess_stdin;
if (!output)