[PATCH] ctype: Fix bitfield types on 16-bit targets

Sebastian Huber sebastian.huber@embedded-brains.de
Fri Jul 20 11:57:00 GMT 2018


This prevents errors like this:

newlib/libc/ctype/categories.c:6:3: error: width of 'first' exceeds its type
   unsigned int first: 24;
   ^

Signed-off-by: Sebastian Huber <sebastian.huber@embedded-brains.de>
---
 newlib/libc/ctype/categories.c  | 5 +++--
 newlib/libc/ctype/towctrans_l.c | 9 +++++----
 2 files changed, 8 insertions(+), 6 deletions(-)

diff --git a/newlib/libc/ctype/categories.c b/newlib/libc/ctype/categories.c
index c237324ec..85328ef2e 100644
--- a/newlib/libc/ctype/categories.c
+++ b/newlib/libc/ctype/categories.c
@@ -1,10 +1,11 @@
 #include <wctype.h>
+#include <stdint.h>
 #include "categories.h"
 
 struct _category {
   enum category cat: 8;
-  unsigned int first: 24;
-  unsigned short delta;
+  uint_least32_t first: 24;
+  uint_least16_t delta;
 } __attribute__((packed));
 
 static const struct _category categories[] = {
diff --git a/newlib/libc/ctype/towctrans_l.c b/newlib/libc/ctype/towctrans_l.c
index 9759cf7bc..42085ac78 100644
--- a/newlib/libc/ctype/towctrans_l.c
+++ b/newlib/libc/ctype/towctrans_l.c
@@ -1,6 +1,7 @@
 /* Modified (m) 2017 Thomas Wolff: revise Unicode and locale/wchar handling */
 #include <_ansi.h>
 #include <wctype.h>
+#include <stdint.h>
 //#include <errno.h>
 #include "local.h"
 
@@ -35,10 +36,10 @@
 enum {TO1, TOLO, TOUP, TOBOTH};
 enum {EVENCAP, ODDCAP};
 static struct caseconv_entry {
-  unsigned int first: 21;
-  unsigned short diff: 8;
-  unsigned char mode: 2;
-  int delta: 17;
+  uint_least32_t first: 21;
+  uint_least8_t diff: 8;
+  uint_least8_t mode: 2;
+  uint_least32_t delta: 17;
 } __attribute__ ((packed))
 caseconv_table [] = {
 #include "caseconv.t"
-- 
2.13.7



More information about the Newlib mailing list