Peter Hutterer c525038
From 850925910f7f6db16f0aa645892d9121760de7b2 Mon Sep 17 00:00:00 2001
Peter Hutterer c525038
From: Peter Hutterer <peter.hutterer@who-t.net>
Peter Hutterer c525038
Date: Mon, 9 Mar 2020 10:16:04 +1000
Peter Hutterer c525038
Subject: [PATCH libinput] tools: record: fix dmi recording
Peter Hutterer c525038
Peter Hutterer c525038
Processing os-release in the same buffer that the dmi modalias used caused the
Peter Hutterer c525038
dmi to be recorded as 'dmi: "VERSION_ID=31"'. The cause for that was simply
Peter Hutterer c525038
that the dmi modalias was read but not printed until after the os-release
Peter Hutterer c525038
information was processed.
Peter Hutterer c525038
Peter Hutterer c525038
Fix this two-fold: rearrange that each part now reads and prints in
Peter Hutterer c525038
one go, and rename the buffers so we don't re-use them.
Peter Hutterer c525038
Peter Hutterer c525038
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Peter Hutterer c525038
---
Peter Hutterer c525038
 tools/libinput-record.c | 46 ++++++++++++++++++++++-------------------
Peter Hutterer c525038
 1 file changed, 25 insertions(+), 21 deletions(-)
Peter Hutterer c525038
Peter Hutterer c525038
diff --git a/tools/libinput-record.c b/tools/libinput-record.c
Peter Hutterer c525038
index 0b10d8bf..6d45efc5 100644
Peter Hutterer c525038
--- a/tools/libinput-record.c
Peter Hutterer c525038
+++ b/tools/libinput-record.c
Peter Hutterer c525038
@@ -1430,37 +1430,26 @@ print_system_header(struct record_context *ctx)
Peter Hutterer c525038
 	struct utsname u;
Peter Hutterer c525038
 	const char *kernel = "unknown";
Peter Hutterer c525038
 	FILE *dmi, *osrelease;
Peter Hutterer c525038
-	char buf[2048] = "unknown";
Peter Hutterer c525038
-
Peter Hutterer c525038
-	if (uname(&u) != -1)
Peter Hutterer c525038
-		kernel = u.release;
Peter Hutterer c525038
-
Peter Hutterer c525038
-	dmi = fopen("/sys/class/dmi/id/modalias", "r");
Peter Hutterer c525038
-	if (dmi) {
Peter Hutterer c525038
-		if (fgets(buf, sizeof(buf), dmi)) {
Peter Hutterer c525038
-			buf[strlen(buf) - 1] = '\0'; /* linebreak */
Peter Hutterer c525038
-		} else {
Peter Hutterer c525038
-			sprintf(buf, "unknown");
Peter Hutterer c525038
-		}
Peter Hutterer c525038
-		fclose(dmi);
Peter Hutterer c525038
-	}
Peter Hutterer c525038
+	char dmistr[2048] = "unknown";
Peter Hutterer c525038
 
Peter Hutterer c525038
 	iprintf(ctx, "system:\n");
Peter Hutterer c525038
 	indent_push(ctx);
Peter Hutterer c525038
 
Peter Hutterer c525038
+	/* /etc/os-release version and distribution name */
Peter Hutterer c525038
 	osrelease = fopen("/etc/os-release", "r");
Peter Hutterer c525038
 	if (!osrelease)
Peter Hutterer c525038
 		osrelease = fopen("/usr/lib/os-release", "r");
Peter Hutterer c525038
 	if (osrelease) {
Peter Hutterer c525038
 		char *distro = NULL, *version = NULL;
Peter Hutterer c525038
+		char osrstr[256] = "unknown";
Peter Hutterer c525038
 
Peter Hutterer c525038
-		while (fgets(buf, sizeof(buf), osrelease)) {
Peter Hutterer c525038
-			buf[strlen(buf) - 1] = '\0'; /* linebreak */
Peter Hutterer c525038
+		while (fgets(osrstr, sizeof(osrstr), osrelease)) {
Peter Hutterer c525038
+			osrstr[strlen(osrstr) - 1] = '\0'; /* linebreak */
Peter Hutterer c525038
 
Peter Hutterer c525038
-			if (!distro && strneq(buf, "ID=", 3))
Peter Hutterer c525038
-				distro = safe_strdup(&buf[3]);
Peter Hutterer c525038
-			else if (!version && strneq(buf, "VERSION_ID=", 11))
Peter Hutterer c525038
-				version = safe_strdup(&buf[11]);
Peter Hutterer c525038
+			if (!distro && strneq(osrstr, "ID=", 3))
Peter Hutterer c525038
+				distro = safe_strdup(&osrstr[3]);
Peter Hutterer c525038
+			else if (!version && strneq(osrstr, "VERSION_ID=", 11))
Peter Hutterer c525038
+				version = safe_strdup(&osrstr[11]);
Peter Hutterer c525038
 
Peter Hutterer c525038
 			if (distro && version) {
Peter Hutterer c525038
 				iprintf(ctx, "os: \"%s:%s\"\n", distro, version);
Peter Hutterer c525038
@@ -1471,8 +1460,23 @@ print_system_header(struct record_context *ctx)
Peter Hutterer c525038
 		free(version);
Peter Hutterer c525038
 		fclose(osrelease);
Peter Hutterer c525038
 	}
Peter Hutterer c525038
+
Peter Hutterer c525038
+	/* kernel version */
Peter Hutterer c525038
+	if (uname(&u) != -1)
Peter Hutterer c525038
+		kernel = u.release;
Peter Hutterer c525038
 	iprintf(ctx, "kernel: \"%s\"\n", kernel);
Peter Hutterer c525038
-	iprintf(ctx, "dmi: \"%s\"\n", buf);
Peter Hutterer c525038
+
Peter Hutterer c525038
+	/* dmi modalias */
Peter Hutterer c525038
+	dmi = fopen("/sys/class/dmi/id/modalias", "r");
Peter Hutterer c525038
+	if (dmi) {
Peter Hutterer c525038
+		if (fgets(dmistr, sizeof(dmistr), dmi)) {
Peter Hutterer c525038
+			dmistr[strlen(dmistr) - 1] = '\0'; /* linebreak */
Peter Hutterer c525038
+		} else {
Peter Hutterer c525038
+			sprintf(dmistr, "unknown");
Peter Hutterer c525038
+		}
Peter Hutterer c525038
+		fclose(dmi);
Peter Hutterer c525038
+	}
Peter Hutterer c525038
+	iprintf(ctx, "dmi: \"%s\"\n", dmistr);
Peter Hutterer c525038
 	indent_pop(ctx);
Peter Hutterer c525038
 }
Peter Hutterer c525038
 
Peter Hutterer c525038
-- 
Peter Hutterer c525038
2.24.1
Peter Hutterer c525038