diff --git a/include/sys/_types.h b/include/sys/_types.h index e5ed18e..b8aeb97 100644 --- a/include/sys/_types.h +++ b/include/sys/_types.h @@ -47,6 +47,30 @@ typedef long __suseconds_t; /* microseconds (signed) */ typedef __int32_t __pid_t;/* process [group] */ + +/* + * Unusual type definitions. + */ +/* + * rune_t is declared to be an ``int'' instead of the more natural + * ``unsigned long'' or ``long''. Two things are happening here. It is not + * unsigned so that EOF (-1) can be naturally assigned to it and used. Also, + * it looks like 10646 will be a 31 bit standard. This means that if your + * ints cannot hold 32 bits, you will be in trouble. The reason an int was + * chosen over a long is that the is*() and to*() routines take ints (says + * ANSI C), but they use __ct_rune_t instead of int. + * + * NOTE: rune_t is not covered by ANSI nor other standards, and should not + * be instantiated outside of lib/libc/locale. Use wchar_t. wint_t and + * rune_t must be the same type. Also, wint_t should be able to hold all + * members of the largest character set plus one extra value (WEOF), and + * must be at least 16 bits. + */ +typedef int __ct_rune_t; /* arg type for ctype funcs */ +typedef __ct_rune_t __rune_t; /* rune_t (see above) */ +typedef __ct_rune_t __wint_t; /* wint_t (see above) */ + + #if !defined(__clang__) || !defined(__cplusplus) typedef __uint_least16_t __char16_t; typedef __uint_least32_t __char32_t; diff --git a/sys/net/core/def.c b/sys/net/core/def.c index 643b095..d1dbb9e 100644 --- a/sys/net/core/def.c +++ b/sys/net/core/def.c @@ -61,6 +61,7 @@ #include "net/opt.h" #include "net/def.h" +#include #include #include