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