[Skiboot] [PATCH 6/6] ccan: Update short_types module to fix warning

Joel Stanley joel at jms.id.au
Tue Jul 21 13:23:15 AEST 2015


Back in 9f64cb2028f8612daa8556cc4831b9b7ce91b171 the ccan/endian module
was updated. Unknown at the time, there were changes made to both the
endian and short_types modules that depnded on each other, or certain
types would be redefined.

 skiboot/ccan/endian/endian.h:336:19: error: redefinition of typedef 'be32' is a
 C11 feature [-Werror,-Wtypedef-redefinition]
 typedef beint32_t be32;
                  ^
 skiboot/ccan/short_types/short_types.h:22:18: note: previous definition is here
 typedef uint32_t be32;
                 ^

By updating the short_types to the latest, we no longer redefine these
types when a module uses both short_types and endian.

Signed-off-by: Joel Stanley <joel at jms.id.au>
---
 ccan/short_types/_info             | 12 +++++++++---
 ccan/short_types/short_types.h     | 15 +++++++++------
 ccan/short_types/test/run-endian.c | 20 ++++++++++++++++++++
 ccan/short_types/test/run.c        | 15 ++-------------
 4 files changed, 40 insertions(+), 22 deletions(-)
 create mode 100644 ccan/short_types/test/run-endian.c

diff --git a/ccan/short_types/_info b/ccan/short_types/_info
index cfd439e..909e4e3 100644
--- a/ccan/short_types/_info
+++ b/ccan/short_types/_info
@@ -1,6 +1,6 @@
+#include "config.h"
 #include <stdio.h>
 #include <string.h>
-#include "config.h"
 
 /**
  * short_types - shorter names for standard integer types
@@ -9,8 +9,9 @@
  *	-- Linus Torvalds
  *
  * The short_types header provides for convenient abbreviations for the
- * posixly-damned uint32_t types.  It also provides be32/le32 for explicitly
- * annotating types of specific endian.
+ * posixly-damned uint32_t types.  If ccan/endian/endian.h is included,
+ * it also provides be32/le32 for explicitly annotating types of specific
+ * endian.
  *
  * Include this header, if only to stop people using these identifiers
  * for other things!
@@ -77,5 +78,10 @@ int main(int argc, char *argv[])
 		return 0;
 	}
 
+	if (strcmp(argv[1], "testdepends") == 0) {
+		printf("ccan/endian\n");
+		return 0;
+	}
+
 	return 1;
 }
diff --git a/ccan/short_types/short_types.h b/ccan/short_types/short_types.h
index f94ec09..175377e 100644
--- a/ccan/short_types/short_types.h
+++ b/ccan/short_types/short_types.h
@@ -15,18 +15,21 @@ typedef int16_t s16;
 typedef uint8_t u8;
 typedef int8_t s8;
 
+/* Whichever they include first, they get these definitions. */
+#ifdef CCAN_ENDIAN_H
 /**
  * be64/be32/be16 - 64/32/16 bit big-endian representation.
  */
-typedef uint64_t be64;
-typedef uint32_t be32;
-typedef uint16_t be16;
+typedef beint64_t be64;
+typedef beint32_t be32;
+typedef beint16_t be16;
 
 /**
  * le64/le32/le16 - 64/32/16 bit little-endian representation.
  */
-typedef uint64_t le64;
-typedef uint32_t le32;
-typedef uint16_t le16;
+typedef leint64_t le64;
+typedef leint32_t le32;
+typedef leint16_t le16;
+#endif
 
 #endif /* CCAN_SHORT_TYPES_H */
diff --git a/ccan/short_types/test/run-endian.c b/ccan/short_types/test/run-endian.c
new file mode 100644
index 0000000..108e3ab
--- /dev/null
+++ b/ccan/short_types/test/run-endian.c
@@ -0,0 +1,20 @@
+#include <ccan/endian/endian.h>
+#include <ccan/short_types/short_types.h>
+#include <ccan/tap/tap.h>
+#include <stdlib.h>
+#include <err.h>
+
+int main(void)
+{
+	plan_tests(6);
+
+	ok1(sizeof(be64) == 8);
+	ok1(sizeof(be32) == 4);
+	ok1(sizeof(be16) == 2);
+
+	ok1(sizeof(le64) == 8);
+	ok1(sizeof(le32) == 4);
+	ok1(sizeof(le16) == 2);
+
+	return exit_status();
+}
diff --git a/ccan/short_types/test/run.c b/ccan/short_types/test/run.c
index 99f2138..2bff4b7 100644
--- a/ccan/short_types/test/run.c
+++ b/ccan/short_types/test/run.c
@@ -3,12 +3,9 @@
 #include <stdlib.h>
 #include <err.h>
 
-int main(int argc, char *argv[])
+int main(void)
 {
-	(void)argc;
-	(void)argv;
-
-	plan_tests(22);
+	plan_tests(16);
 
 	ok1(sizeof(u64) == 8);
 	ok1(sizeof(s64) == 8);
@@ -19,14 +16,6 @@ int main(int argc, char *argv[])
 	ok1(sizeof(u8) == 1);
 	ok1(sizeof(s8) == 1);
 
-	ok1(sizeof(be64) == 8);
-	ok1(sizeof(be32) == 4);
-	ok1(sizeof(be16) == 2);
-
-	ok1(sizeof(le64) == 8);
-	ok1(sizeof(le32) == 4);
-	ok1(sizeof(le16) == 2);
-
 	/* Signedness tests. */
 	ok1((u64)-1 > 0);
 	ok1((u32)-1 > 0);
-- 
2.1.4



More information about the Skiboot mailing list