Blame SOURCES/0034-Try-to-deal-with-some-signof-char-signof-uint8_t-mad.patch

a43681
From 70e86dc3e48345f1a961aef6173d5126edebf90a Mon Sep 17 00:00:00 2001
a43681
From: Peter Jones <pjones@redhat.com>
a43681
Date: Mon, 17 Jun 2019 14:47:24 -0400
a43681
Subject: [PATCH 34/63] Try to deal with some signof(char) != signof(uint8_t)
a43681
 madness.
a43681
a43681
The 3-sign "char" type in C is so so painful sometimes.  This attempts
a43681
to use -funsigned-char to avoid type-casting between (uint8_t *) and
a43681
(char *) quite so much.  I'm not sure it'll pay off.  The fact that
a43681
"char" is something that's not ever actually the same type as "unsigned
a43681
char" or "signed char" is still the absolute worst thing.
a43681
a43681
Why do we need signed char at all again?
a43681
a43681
Signed-off-by: Peter Jones <pjones@redhat.com>
a43681
---
a43681
 Make.defaults                  |  4 +++-
a43681
 gcc.specs                      |  4 ++--
a43681
 src/dp-acpi.c                  | 11 ++++++-----
a43681
 src/dp-hw.c                    |  5 +++--
a43681
 src/dp-media.c                 |  2 +-
a43681
 src/dp-message.c               | 22 +++++++++++-----------
a43681
 src/dp.c                       |  8 +++++---
a43681
 src/dp.h                       | 18 ++++++++++--------
a43681
 src/export.c                   | 12 ++++++------
a43681
 src/include/efivar/efivar-dp.h | 10 ++++++----
a43681
 src/include/efivar/efivar.h    |  4 ++--
a43681
 src/ucs2.h                     |  6 +++---
a43681
 12 files changed, 58 insertions(+), 48 deletions(-)
a43681
a43681
diff --git a/Make.defaults b/Make.defaults
a43681
index 80fd99eba71..36e922f5ba7 100644
a43681
--- a/Make.defaults
a43681
+++ b/Make.defaults
a43681
@@ -31,7 +31,9 @@ PKGS	=
a43681
 
a43681
 CPPFLAGS += -DLIBEFIVAR_VERSION=$(VERSION)
a43681
 
a43681
-clang_cflags = -D_GNU_SOURCE -std=gnu11 -Wno-address-of-packed-member
a43681
+clang_cflags = -D_GNU_SOURCE -std=gnu11 -Wno-address-of-packed-member \
a43681
+	       -funsigned-char -Wall -Wno-nonnull-compare \
a43681
+	       -Werror -Wno-error=cpp
a43681
 gcc_cflags = -specs=$(TOPDIR)/gcc.specs
a43681
 cflags	= $(CFLAGS) -I${TOPDIR}/src/include/ \
a43681
 	$(if $(findstring clang,$(CC)),$(clang_cflags),) \
a43681
diff --git a/gcc.specs b/gcc.specs
a43681
index d06a8e096fc..9d2b145ee6e 100644
a43681
--- a/gcc.specs
a43681
+++ b/gcc.specs
a43681
@@ -2,13 +2,13 @@
a43681
 + -D_GNU_SOURCE
a43681
 
a43681
 *efivar_cpp_options:
a43681
- -Werror -Wall -std=gnu11 -Wextra
a43681
+ -Wall -Wno-nonnull-compare -Werror -Wno-error=cpp -std=gnu11 -Wextra -funsigned-char
a43681
 
a43681
 *cpp_options:
a43681
 + %(efivar_cpp_options)
a43681
 
a43681
 *cc1_options:
a43681
-+ %(efivar_cpp_options) -Wmaybe-uninitialized -fno-merge-constants -fvisibility=hidden %{!r:%{!fpie:%{!fPIE:%{!fpic:%{!fPIC:%{!fno-pic:-fPIE}}}}}} -grecord-gcc-switches
a43681
++ %(efivar_cpp_options) -Wmaybe-uninitialized -fno-merge-constants -funsigned-char -fvisibility=hidden %{!r:%{!fpie:%{!fPIE:%{!fpic:%{!fPIC:%{!fno-pic:-fPIE}}}}}} -grecord-gcc-switches
a43681
 
a43681
 *self_spec:
a43681
 + %{!shared:%{!static:%{!r:-pie}}} %{static:-Wl,-no-fatal-warnings -Wl,-static -static -Wl,-z,relro,-z,now} -grecord-gcc-switches
a43681
diff --git a/src/dp-acpi.c b/src/dp-acpi.c
a43681
index 2525fdfd073..02ec70eec7a 100644
a43681
--- a/src/dp-acpi.c
a43681
+++ b/src/dp-acpi.c
a43681
@@ -28,7 +28,7 @@
a43681
 #include "efivar.h"
a43681
 
a43681
 static ssize_t
a43681
-_format_acpi_adr(char *buf, size_t size,
a43681
+_format_acpi_adr(unsigned char *buf, size_t size,
a43681
 		 const char *dp_type UNUSED,
a43681
 		 const_efidp dp)
a43681
 {
a43681
@@ -45,9 +45,10 @@ _format_acpi_adr(char *buf, size_t size,
a43681
 	format_helper(_format_acpi_adr, buf, size, off, "AcpiAdr", dp)
a43681
 
a43681
 static ssize_t
a43681
-_format_acpi_hid_ex(char *buf, size_t size, const char *dp_type UNUSED,
a43681
-		    const_efidp dp,
a43681
-		    const char *hidstr, const char *cidstr, const char *uidstr)
a43681
+_format_acpi_hid_ex(unsigned char *buf, size_t size,
a43681
+		    const char *dp_type UNUSED, const_efidp dp,
a43681
+		    const char *hidstr, const char *cidstr,
a43681
+		    const char *uidstr)
a43681
 {
a43681
 	ssize_t off = 0;
a43681
 
a43681
@@ -98,7 +99,7 @@ _format_acpi_hid_ex(char *buf, size_t size, const char *dp_type UNUSED,
a43681
 		      hidstr, cidstr, uidstr)
a43681
 
a43681
 ssize_t
a43681
-_format_acpi_dn(char *buf, size_t size, const_efidp dp)
a43681
+_format_acpi_dn(unsigned char *buf, size_t size, const_efidp dp)
a43681
 {
a43681
 	ssize_t off = 0;
a43681
 	const char *hidstr = NULL;
a43681
diff --git a/src/dp-hw.c b/src/dp-hw.c
a43681
index 1fe0f66e871..28998316d9d 100644
a43681
--- a/src/dp-hw.c
a43681
+++ b/src/dp-hw.c
a43681
@@ -26,7 +26,8 @@
a43681
 #include "efivar.h"
a43681
 
a43681
 ssize_t
a43681
-format_edd10_guid(char *buf, size_t size, const char *dp_type, const_efidp dp)
a43681
+format_edd10_guid(unsigned char *buf, size_t size,
a43681
+		  const char *dp_type, const_efidp dp)
a43681
 {
a43681
 	ssize_t off = 0;
a43681
 	efidp_edd10 const *edd_dp = (efidp_edd10 *)dp;
a43681
@@ -36,7 +37,7 @@ format_edd10_guid(char *buf, size_t size, const char *dp_type, const_efidp dp)
a43681
 }
a43681
 
a43681
 ssize_t
a43681
-_format_hw_dn(char *buf, size_t size, const_efidp dp)
a43681
+_format_hw_dn(unsigned char *buf, size_t size, const_efidp dp)
a43681
 {
a43681
 	efi_guid_t edd10_guid = EDD10_HARDWARE_VENDOR_PATH_GUID;
a43681
 	ssize_t off = 0;
a43681
diff --git a/src/dp-media.c b/src/dp-media.c
a43681
index 4728c326100..7f5d1c678ce 100644
a43681
--- a/src/dp-media.c
a43681
+++ b/src/dp-media.c
a43681
@@ -28,7 +28,7 @@
a43681
 #include "efivar.h"
a43681
 
a43681
 ssize_t
a43681
-_format_media_dn(char *buf, size_t size, const_efidp dp)
a43681
+_format_media_dn(unsigned char *buf, size_t size, const_efidp dp)
a43681
 {
a43681
 	ssize_t off = 0;
a43681
 	switch (dp->subtype) {
a43681
diff --git a/src/dp-message.c b/src/dp-message.c
a43681
index b88f17fb712..d00b2ad5d67 100644
a43681
--- a/src/dp-message.c
a43681
+++ b/src/dp-message.c
a43681
@@ -28,7 +28,7 @@
a43681
 #include "efivar.h"
a43681
 
a43681
 static ssize_t
a43681
-format_ipv4_addr_helper(char *buf, size_t size, const char *dp_type,
a43681
+format_ipv4_addr_helper(unsigned char *buf, size_t size, const char *dp_type,
a43681
 			const uint8_t *ipaddr, int32_t port)
a43681
 {
a43681
 	ssize_t off = 0;
a43681
@@ -40,7 +40,7 @@ format_ipv4_addr_helper(char *buf, size_t size, const char *dp_type,
a43681
 }
a43681
 
a43681
 static ssize_t
a43681
-format_ipv6_addr_helper(char *buf, size_t size, const char *dp_type,
a43681
+format_ipv6_addr_helper(unsigned char *buf, size_t size, const char *dp_type,
a43681
 			const uint8_t *ipaddr, int32_t port)
a43681
 {
a43681
 	uint16_t *ip = (uint16_t *)ipaddr;
a43681
@@ -123,7 +123,7 @@ format_ipv6_addr_helper(char *buf, size_t size, const char *dp_type,
a43681
 		      "IPv6", addr, port)
a43681
 
a43681
 static ssize_t
a43681
-format_ip_addr_helper(char *buf, size_t size,
a43681
+format_ip_addr_helper(unsigned char *buf, size_t size,
a43681
 		      const char *dp_type UNUSED,
a43681
 		      int is_ipv6, const efi_ip_addr_t *addr)
a43681
 {
a43681
@@ -142,7 +142,7 @@ format_ip_addr_helper(char *buf, size_t size,
a43681
 		      dp_type, is_ipv6, addr)
a43681
 
a43681
 static ssize_t
a43681
-format_uart(char *buf, size_t size,
a43681
+format_uart(unsigned char *buf, size_t size,
a43681
 	    const char *dp_type UNUSED,
a43681
 	    const_efidp dp)
a43681
 {
a43681
@@ -162,7 +162,7 @@ format_uart(char *buf, size_t size,
a43681
 }
a43681
 
a43681
 static ssize_t
a43681
-format_sas(char *buf, size_t size,
a43681
+format_sas(unsigned char *buf, size_t size,
a43681
 	   const char *dp_type UNUSED,
a43681
 	   const_efidp dp)
a43681
 {
a43681
@@ -232,7 +232,7 @@ format_sas(char *buf, size_t size,
a43681
 	       dp->usb_class.device_protocol)
a43681
 
a43681
 static ssize_t
a43681
-format_usb_class(char *buf, size_t size,
a43681
+format_usb_class(unsigned char *buf, size_t size,
a43681
 		 const char *dp_type UNUSED,
a43681
 		 const_efidp dp)
a43681
 {
a43681
@@ -312,7 +312,7 @@ format_usb_class(char *buf, size_t size,
a43681
 }
a43681
 
a43681
 ssize_t
a43681
-_format_message_dn(char *buf, size_t size, const_efidp dp)
a43681
+_format_message_dn(unsigned char *buf, size_t size, const_efidp dp)
a43681
 {
a43681
 	ssize_t off = 0;
a43681
 	switch (dp->subtype) {
a43681
@@ -393,7 +393,7 @@ _format_message_dn(char *buf, size_t size, const_efidp dp)
a43681
 		struct {
a43681
 			efi_guid_t guid;
a43681
 			char label[40];
a43681
-			ssize_t (*formatter)(char *buf, size_t size,
a43681
+			ssize_t (*formatter)(unsigned char *buf, size_t size,
a43681
 				const char *dp_type UNUSED,
a43681
 				const_efidp dp);
a43681
 		} subtypes[] = {
a43681
@@ -417,7 +417,7 @@ _format_message_dn(char *buf, size_t size, const_efidp dp)
a43681
 			  .label = "" }
a43681
 		};
a43681
 		char *label = NULL;
a43681
-		ssize_t (*formatter)(char *buf, size_t size,
a43681
+		ssize_t (*formatter)(unsigned char *buf, size_t size,
a43681
 			const char *dp_type UNUSED,
a43681
 			const_efidp dp) = NULL;
a43681
 
a43681
@@ -455,8 +455,8 @@ _format_message_dn(char *buf, size_t size, const_efidp dp)
a43681
 			       }
a43681
 	case EFIDP_MSG_IPv6: {
a43681
 		efidp_ipv6_addr const *a = &dp->ipv6_addr;
a43681
-		char *addr0 = NULL;
a43681
-		char *addr1 = NULL;
a43681
+		unsigned char *addr0 = NULL;
a43681
+		unsigned char *addr1 = NULL;
a43681
 		ssize_t tmpoff = 0;
a43681
 		ssize_t sz;
a43681
 
a43681
diff --git a/src/dp.c b/src/dp.c
a43681
index b6eea74878c..f6a4b2ddafa 100644
a43681
--- a/src/dp.c
a43681
+++ b/src/dp.c
a43681
@@ -298,7 +298,8 @@ efidp_append_instance(const_efidp dp, const_efidp dpi, efidp *out)
a43681
 }
a43681
 
a43681
 ssize_t PUBLIC
a43681
-efidp_format_device_path(char *buf, size_t size, const_efidp dp, ssize_t limit)
a43681
+efidp_format_device_path(unsigned char *buf, size_t size, const_efidp dp,
a43681
+			 ssize_t limit)
a43681
 {
a43681
 	ssize_t off = 0;
a43681
 	int first = 1;
a43681
@@ -402,7 +403,8 @@ efidp_format_device_path(char *buf, size_t size, const_efidp dp, ssize_t limit)
a43681
 }
a43681
 
a43681
 ssize_t PUBLIC
a43681
-efidp_parse_device_node(char *path UNUSED, efidp out UNUSED, size_t size UNUSED)
a43681
+efidp_parse_device_node(unsigned char *path UNUSED,
a43681
+			efidp out UNUSED, size_t size UNUSED)
a43681
 {
a43681
 	efi_error("not implented");
a43681
 	errno = -ENOSYS;
a43681
@@ -410,7 +412,7 @@ efidp_parse_device_node(char *path UNUSED, efidp out UNUSED, size_t size UNUSED)
a43681
 }
a43681
 
a43681
 ssize_t PUBLIC
a43681
-efidp_parse_device_path(char *path UNUSED, efidp out UNUSED,
a43681
+efidp_parse_device_path(unsigned char *path UNUSED, efidp out UNUSED,
a43681
 			size_t size UNUSED)
a43681
 {
a43681
 	efi_error("not implented");
a43681
diff --git a/src/dp.h b/src/dp.h
a43681
index 33a29db0d5d..6609b0d827e 100644
a43681
--- a/src/dp.h
a43681
+++ b/src/dp.h
a43681
@@ -88,8 +88,9 @@
a43681
 	})
a43681
 
a43681
 static inline ssize_t UNUSED
a43681
-format_hex_helper(char *buf, size_t size, const char *dp_type, char *separator,
a43681
-		  int stride, const void * const addr, const size_t len)
a43681
+format_hex_helper(unsigned char *buf, size_t size, const char *dp_type,
a43681
+		  char *separator, int stride, const void * const addr,
a43681
+		  const size_t len)
a43681
 {
a43681
 	ssize_t off = 0;
a43681
 	for (size_t i = 0; i < len; i++) {
a43681
@@ -110,7 +111,8 @@ format_hex_helper(char *buf, size_t size, const char *dp_type, char *separator,
a43681
 		      addr, len)
a43681
 
a43681
 static inline ssize_t UNUSED
a43681
-format_vendor_helper(char *buf, size_t size, char *label, const_efidp dp)
a43681
+format_vendor_helper(unsigned char *buf, size_t size, char *label,
a43681
+		     const_efidp dp)
a43681
 {
a43681
 	ssize_t off = 0;
a43681
 	ssize_t bytes = efidp_node_size(dp)
a43681
@@ -157,11 +159,11 @@ format_vendor_helper(char *buf, size_t size, char *label, const_efidp dp)
a43681
 		off;							\
a43681
 	})
a43681
 
a43681
-extern ssize_t _format_hw_dn(char *buf, size_t size, const_efidp dp);
a43681
-extern ssize_t _format_acpi_dn(char *buf, size_t size, const_efidp dp);
a43681
-extern ssize_t _format_message_dn(char *buf, size_t size, const_efidp dp);
a43681
-extern ssize_t _format_media_dn(char *buf, size_t size, const_efidp dp);
a43681
-extern ssize_t _format_bios_boot_dn(char *buf, size_t size, const_efidp dp);
a43681
+extern ssize_t _format_hw_dn(unsigned char *buf, size_t size, const_efidp dp);
a43681
+extern ssize_t _format_acpi_dn(unsigned char *buf, size_t size, const_efidp dp);
a43681
+extern ssize_t _format_message_dn(unsigned char *buf, size_t size, const_efidp dp);
a43681
+extern ssize_t _format_media_dn(unsigned char *buf, size_t size, const_efidp dp);
a43681
+extern ssize_t _format_bios_boot_dn(unsigned char *buf, size_t size, const_efidp dp);
a43681
 
a43681
 #define format_helper_2(name, buf, size, off, dp) ({			\
a43681
 		ssize_t _sz;						\
a43681
diff --git a/src/export.c b/src/export.c
a43681
index 5b11ae883cf..6b78412cce1 100644
a43681
--- a/src/export.c
a43681
+++ b/src/export.c
a43681
@@ -35,7 +35,7 @@
a43681
 struct efi_variable {
a43681
 	uint64_t attrs;
a43681
 	efi_guid_t *guid;
a43681
-	char *name;
a43681
+	unsigned char *name;
a43681
 	uint8_t *data;
a43681
 	size_t data_size;
a43681
 };
a43681
@@ -149,7 +149,7 @@ efi_variable_import(uint8_t *data, size_t size, efi_variable_t **var_out)
a43681
 ssize_t NONNULL(1) PUBLIC
a43681
 efi_variable_export(efi_variable_t *var, uint8_t *data, size_t size)
a43681
 {
a43681
-	size_t name_len = strlen(var->name);
a43681
+	size_t name_len = strlen((char *)var->name);
a43681
 
a43681
 	size_t needed = sizeof (uint32_t)		/* magic */
a43681
 		      + sizeof (uint32_t)		/* version */
a43681
@@ -233,13 +233,13 @@ efi_variable_free(efi_variable_t *var, int free_data)
a43681
 }
a43681
 
a43681
 int NONNULL(1, 2) PUBLIC
a43681
-efi_variable_set_name(efi_variable_t *var, char *name)
a43681
+efi_variable_set_name(efi_variable_t *var, unsigned char *name)
a43681
 {
a43681
 	var->name = name;
a43681
 	return 0;
a43681
 }
a43681
 
a43681
-char PUBLIC NONNULL(1) *
a43681
+unsigned char PUBLIC NONNULL(1) *
a43681
 efi_variable_get_name(efi_variable_t *var)
a43681
 {
a43681
 	if (!var->name) {
a43681
@@ -329,10 +329,10 @@ efi_variable_realize(efi_variable_t *var)
a43681
 	}
a43681
 	uint32_t attrs = var->attrs & ATTRS_MASK;
a43681
 	if (attrs & EFI_VARIABLE_APPEND_WRITE) {
a43681
-		return efi_append_variable(*var->guid, var->name,
a43681
+		return efi_append_variable(*var->guid, (char *)var->name,
a43681
 					var->data, var->data_size, attrs);
a43681
 	}
a43681
-	return efi_set_variable(*var->guid, var->name, var->data,
a43681
+	return efi_set_variable(*var->guid, (char *)var->name, var->data,
a43681
 				var->data_size, attrs, 0600);
a43681
 }
a43681
 
a43681
diff --git a/src/include/efivar/efivar-dp.h b/src/include/efivar/efivar-dp.h
a43681
index 57453548701..706d25bdebd 100644
a43681
--- a/src/include/efivar/efivar-dp.h
a43681
+++ b/src/include/efivar/efivar-dp.h
a43681
@@ -1240,10 +1240,12 @@ efidp_is_valid(const_efidp dp, ssize_t limit)
a43681
 #endif
a43681
 
a43681
 /* and now, printing and parsing */
a43681
-extern ssize_t efidp_parse_device_node(char *path, efidp out, size_t size);
a43681
-extern ssize_t efidp_parse_device_path(char *path, efidp out, size_t size);
a43681
-extern ssize_t efidp_format_device_path(char *buf, size_t size, const_efidp dp,
a43681
-				       ssize_t limit);
a43681
+extern ssize_t efidp_parse_device_node(unsigned char *path,
a43681
+				       efidp out, size_t size);
a43681
+extern ssize_t efidp_parse_device_path(unsigned char *path,
a43681
+				       efidp out, size_t size);
a43681
+extern ssize_t efidp_format_device_path(unsigned char *buf, size_t size,
a43681
+					const_efidp dp, ssize_t limit);
a43681
 extern ssize_t efidp_make_vendor(uint8_t *buf, ssize_t size, uint8_t type,
a43681
 				 uint8_t subtype,  efi_guid_t vendor_guid,
a43681
 				 void *data, size_t data_size);
a43681
diff --git a/src/include/efivar/efivar.h b/src/include/efivar/efivar.h
a43681
index caa4adf056c..729b6fe80f7 100644
a43681
--- a/src/include/efivar/efivar.h
a43681
+++ b/src/include/efivar/efivar.h
a43681
@@ -144,9 +144,9 @@ extern efi_variable_t *efi_variable_alloc(void)
a43681
 			__attribute__((__visibility__ ("default")));
a43681
 extern void efi_variable_free(efi_variable_t *var, int free_data);
a43681
 
a43681
-extern int efi_variable_set_name(efi_variable_t *var, char *name)
a43681
+extern int efi_variable_set_name(efi_variable_t *var, unsigned char *name)
a43681
 			__attribute__((__nonnull__ (1, 2)));
a43681
-extern char *efi_variable_get_name(efi_variable_t *var)
a43681
+extern unsigned char *efi_variable_get_name(efi_variable_t *var)
a43681
 			__attribute__((__visibility__ ("default")))
a43681
 			__attribute__((__nonnull__ (1)));
a43681
 
a43681
diff --git a/src/ucs2.h b/src/ucs2.h
a43681
index 176f9ccac57..478de23b23f 100644
a43681
--- a/src/ucs2.h
a43681
+++ b/src/ucs2.h
a43681
@@ -47,7 +47,7 @@ ucs2size(const void *s, ssize_t limit)
a43681
 }
a43681
 
a43681
 static inline size_t UNUSED NONNULL(1)
a43681
-utf8len(uint8_t *s, ssize_t limit)
a43681
+utf8len(const unsigned char *s, ssize_t limit)
a43681
 {
a43681
 	ssize_t i, j;
a43681
 	for (i = 0, j = 0; i < (limit >= 0 ? limit : i+1) && s[i] != '\0';
a43681
@@ -64,7 +64,7 @@ utf8len(uint8_t *s, ssize_t limit)
a43681
 }
a43681
 
a43681
 static inline size_t UNUSED NONNULL(1)
a43681
-utf8size(uint8_t *s, ssize_t limit)
a43681
+utf8size(const unsigned char *s, ssize_t limit)
a43681
 {
a43681
 	size_t ret = utf8len(s,limit);
a43681
 	if (ret < (limit >= 0 ? (size_t)limit : ret+1))
a43681
@@ -129,7 +129,7 @@ ucs2_to_utf8(const void * const voidchars, ssize_t limit)
a43681
 }
a43681
 
a43681
 static inline ssize_t UNUSED NONNULL(4)
a43681
-utf8_to_ucs2(void *ucs2void, ssize_t size, int terminate, uint8_t *utf8)
a43681
+utf8_to_ucs2(void *ucs2void, ssize_t size, int terminate, const unsigned char *utf8)
a43681
 {
a43681
 	ssize_t req;
a43681
 	ssize_t i, j;
a43681
-- 
a43681
2.26.2
a43681