Blame 0014-dmidecode-Move-error-messages-to-stderr.patch

Anton Arapov 32682d
From 74614633b31a2ac01240c72890722a86a3f3fc97 Mon Sep 17 00:00:00 2001
Anton Arapov 32682d
From: Jean Delvare <jdelvare@suse.de>
Anton Arapov 32682d
Date: Fri, 22 Jul 2016 10:26:50 +0200
Anton Arapov 32682d
Subject: [PATCH 14/17] dmidecode: Move error messages to stderr
Anton Arapov 32682d
Anton Arapov 32682d
Consistently write error messages to stderr, to avoid messing up the
Anton Arapov 32682d
output of "dmidecode -s". Based on preliminary patches by
Anton Arapov 32682d
Kevin Bowling and Simon Rettberg.
Anton Arapov 32682d
Anton Arapov 32682d
Fixes bug #47274:
Anton Arapov 32682d
https://savannah.nongnu.org/bugs/?47274
Anton Arapov 32682d
Fixes bug #48158:
Anton Arapov 32682d
https://savannah.nongnu.org/bugs/?48158
Anton Arapov 32682d
Supersedes patch #8989:
Anton Arapov 32682d
https://savannah.nongnu.org/patch/?8989
Anton Arapov 32682d
---
Anton Arapov 32682d
 dmidecode.c | 37 ++++++++++++++++++++++++++-----------
Anton Arapov 32682d
 1 file changed, 26 insertions(+), 11 deletions(-)
Anton Arapov 32682d
Anton Arapov 32682d
diff --git a/dmidecode.c b/dmidecode.c
Anton Arapov 32682d
index ffd916c..f56d0c5 100644
Anton Arapov 32682d
--- a/dmidecode.c
Anton Arapov 32682d
+++ b/dmidecode.c
Anton Arapov 32682d
@@ -2958,7 +2958,8 @@ static void dmi_fixup_type_34(struct dmi_header *h, int display)
Anton Arapov 32682d
 	 && is_printable(p + 0x0B, 0x10 - 0x0B))
Anton Arapov 32682d
 	{
Anton Arapov 32682d
 		if (!(opt.flags & FLAG_QUIET) && display)
Anton Arapov 32682d
-			printf("Invalid entry length (%u). Fixed up to %u.\n",
Anton Arapov 32682d
+			fprintf(stderr,
Anton Arapov 32682d
+				"Invalid entry length (%u). Fixed up to %u.\n",
Anton Arapov 32682d
 				0x10, 0x0B);
Anton Arapov 32682d
 		h->length = 0x0B;
Anton Arapov 32682d
 	}
Anton Arapov 32682d
@@ -4427,9 +4428,14 @@ static void dmi_table_decode(u8 *buf, u32 len, u16 num, u16 ver, u32 flags)
Anton Arapov 32682d
 		 */
Anton Arapov 32682d
 		if (h.length < 4)
Anton Arapov 32682d
 		{
Anton Arapov 32682d
-			printf("Invalid entry length (%u). DMI table is "
Anton Arapov 32682d
-			       "broken! Stop.\n\n", (unsigned int)h.length);
Anton Arapov 32682d
-			opt.flags |= FLAG_QUIET;
Anton Arapov 32682d
+			if (!(opt.flags & FLAG_QUIET))
Anton Arapov 32682d
+			{
Anton Arapov 32682d
+				fprintf(stderr,
Anton Arapov 32682d
+					"Invalid entry length (%u). DMI table "
Anton Arapov 32682d
+					"is broken! Stop.\n\n",
Anton Arapov 32682d
+					(unsigned int)h.length);
Anton Arapov 32682d
+				opt.flags |= FLAG_QUIET;
Anton Arapov 32682d
+			}
Anton Arapov 32682d
 			break;
Anton Arapov 32682d
 		}
Anton Arapov 32682d
 
Anton Arapov 32682d
@@ -4490,11 +4496,11 @@ static void dmi_table_decode(u8 *buf, u32 len, u16 num, u16 ver, u32 flags)
Anton Arapov 32682d
 	if (!(opt.flags & FLAG_QUIET))
Anton Arapov 32682d
 	{
Anton Arapov 32682d
 		if (num && i != num)
Anton Arapov 32682d
-			printf("Wrong DMI structures count: %d announced, "
Anton Arapov 32682d
+			fprintf(stderr, "Wrong DMI structures count: %d announced, "
Anton Arapov 32682d
 				"only %d decoded.\n", num, i);
Anton Arapov 32682d
 		if ((unsigned long)(data - buf) > len
Anton Arapov 32682d
 		 || (num && (unsigned long)(data - buf) < len))
Anton Arapov 32682d
-			printf("Wrong DMI structures length: %u bytes "
Anton Arapov 32682d
+			fprintf(stderr, "Wrong DMI structures length: %u bytes "
Anton Arapov 32682d
 				"announced, structures occupy %lu bytes.\n",
Anton Arapov 32682d
 				len, (unsigned long)(data - buf));
Anton Arapov 32682d
 	}
Anton Arapov 32682d
@@ -4539,7 +4545,7 @@ static void dmi_table(off_t base, u32 len, u16 num, u16 ver, const char *devmem,
Anton Arapov 32682d
 		buf = read_file(&size, devmem);
Anton Arapov 32682d
 		if (!(opt.flags & FLAG_QUIET) && num && size != (size_t)len)
Anton Arapov 32682d
 		{
Anton Arapov 32682d
-			printf("Wrong DMI structures length: %u bytes "
Anton Arapov 32682d
+			fprintf(stderr, "Wrong DMI structures length: %u bytes "
Anton Arapov 32682d
 				"announced, only %lu bytes available.\n",
Anton Arapov 32682d
 				len, (unsigned long)size);
Anton Arapov 32682d
 		}
Anton Arapov 32682d
@@ -4652,14 +4658,16 @@ static int smbios_decode(u8 *buf, const char *devmem, u32 flags)
Anton Arapov 32682d
 		case 0x021F:
Anton Arapov 32682d
 		case 0x0221:
Anton Arapov 32682d
 			if (!(opt.flags & FLAG_QUIET))
Anton Arapov 32682d
-				printf("SMBIOS version fixup (2.%d -> 2.%d).\n",
Anton Arapov 32682d
-				       ver & 0xFF, 3);
Anton Arapov 32682d
+				fprintf(stderr,
Anton Arapov 32682d
+					"SMBIOS version fixup (2.%d -> 2.%d).\n",
Anton Arapov 32682d
+					ver & 0xFF, 3);
Anton Arapov 32682d
 			ver = 0x0203;
Anton Arapov 32682d
 			break;
Anton Arapov 32682d
 		case 0x0233:
Anton Arapov 32682d
 			if (!(opt.flags & FLAG_QUIET))
Anton Arapov 32682d
-				printf("SMBIOS version fixup (2.%d -> 2.%d).\n",
Anton Arapov 32682d
-				       51, 6);
Anton Arapov 32682d
+				fprintf(stderr,
Anton Arapov 32682d
+					"SMBIOS version fixup (2.%d -> 2.%d).\n",
Anton Arapov 32682d
+					51, 6);
Anton Arapov 32682d
 			ver = 0x0206;
Anton Arapov 32682d
 			break;
Anton Arapov 32682d
 	}
Anton Arapov 32682d
@@ -4771,6 +4779,13 @@ int main(int argc, char * const argv[])
Anton Arapov 32682d
 	int efi;
Anton Arapov 32682d
 	u8 *buf;
Anton Arapov 32682d
 
Anton Arapov 32682d
+	/*
Anton Arapov 32682d
+	 * We don't want stdout and stderr to be mixed up if both are
Anton Arapov 32682d
+	 * redirected to the same file.
Anton Arapov 32682d
+	 */
Anton Arapov 32682d
+	setlinebuf(stdout);
Anton Arapov 32682d
+	setlinebuf(stderr);
Anton Arapov 32682d
+
Anton Arapov 32682d
 	if (sizeof(u8) != 1 || sizeof(u16) != 2 || sizeof(u32) != 4 || '\0' != 0)
Anton Arapov 32682d
 	{
Anton Arapov 32682d
 		fprintf(stderr, "%s: compiler incompatibility\n", argv[0]);
Anton Arapov 32682d
-- 
Anton Arapov 32682d
2.7.4
Anton Arapov 32682d