Commit 85092591 authored by Peter Hutterer's avatar Peter Hutterer
Browse files

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's avatarPeter Hutterer <peter.hutterer@who-t.net>
parent a1c89093
Pipeline #117313 passed with stages
in 17 minutes and 49 seconds
...@@ -1430,37 +1430,26 @@ print_system_header(struct record_context *ctx) ...@@ -1430,37 +1430,26 @@ print_system_header(struct record_context *ctx)
struct utsname u; struct utsname u;
const char *kernel = "unknown"; const char *kernel = "unknown";
FILE *dmi, *osrelease; FILE *dmi, *osrelease;
char buf[2048] = "unknown"; char dmistr[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);
}
iprintf(ctx, "system:\n"); iprintf(ctx, "system:\n");
indent_push(ctx); indent_push(ctx);
/* /etc/os-release version and distribution name */
osrelease = fopen("/etc/os-release", "r"); osrelease = fopen("/etc/os-release", "r");
if (!osrelease) if (!osrelease)
osrelease = fopen("/usr/lib/os-release", "r"); osrelease = fopen("/usr/lib/os-release", "r");
if (osrelease) { if (osrelease) {
char *distro = NULL, *version = NULL; char *distro = NULL, *version = NULL;
char osrstr[256] = "unknown";
while (fgets(buf, sizeof(buf), osrelease)) { while (fgets(osrstr, sizeof(osrstr), osrelease)) {
buf[strlen(buf) - 1] = '\0'; /* linebreak */ osrstr[strlen(osrstr) - 1] = '\0'; /* linebreak */
if (!distro && strneq(buf, "ID=", 3)) if (!distro && strneq(osrstr, "ID=", 3))
distro = safe_strdup(&buf[3]); distro = safe_strdup(&osrstr[3]);
else if (!version && strneq(buf, "VERSION_ID=", 11)) else if (!version && strneq(osrstr, "VERSION_ID=", 11))
version = safe_strdup(&buf[11]); version = safe_strdup(&osrstr[11]);
if (distro && version) { if (distro && version) {
iprintf(ctx, "os: \"%s:%s\"\n", distro, version); iprintf(ctx, "os: \"%s:%s\"\n", distro, version);
...@@ -1471,8 +1460,23 @@ print_system_header(struct record_context *ctx) ...@@ -1471,8 +1460,23 @@ print_system_header(struct record_context *ctx)
free(version); free(version);
fclose(osrelease); fclose(osrelease);
} }
/* kernel version */
if (uname(&u) != -1)
kernel = u.release;
iprintf(ctx, "kernel: \"%s\"\n", kernel); 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); indent_pop(ctx);
} }
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment