]> de.git.xonotic.org Git - xonotic/darkplaces.git/commitdiff
make the utf8 casting strict aliasing-safe
authordivverent <divverent@d7cf8633-e32d-0410-b094-e92efae38249>
Tue, 29 Dec 2009 11:33:58 +0000 (11:33 +0000)
committerdivverent <divverent@d7cf8633-e32d-0410-b094-e92efae38249>
Tue, 29 Dec 2009 11:33:58 +0000 (11:33 +0000)
git-svn-id: svn://svn.icculus.org/twilight/trunk/darkplaces@9732 d7cf8633-e32d-0410-b094-e92efae38249

utf8lib.h

index 35bd5a6fe91e40695cfc3ab14b55d7b13fbc53e2..2c0380243f4cffd28ef673015790b27e234f8c5e 100644 (file)
--- a/utf8lib.h
+++ b/utf8lib.h
@@ -52,11 +52,11 @@ size_t u8_strpad(char *out, size_t outsize, const char *in, qboolean leftalign,
  */
 extern Uchar u8_quake2utf8map[256];
 // these defines get a bit tricky, as c and e may be aliased to the same variable
-#define u8_getchar(c,e) (utf8_enable.integer ? u8_getchar_utf8_enabled(c,e) : (u8_quake2utf8map[(*((unsigned char **)(e)) = ((unsigned char *)(c)) + 1)[-1]]))
-#define u8_getchar_noendptr(c) (utf8_enable.integer ? u8_getchar_utf8_enabled(c,NULL) : (u8_quake2utf8map[*((unsigned char *)(c))]))
+#define u8_getchar(c,e) (utf8_enable.integer ? u8_getchar_utf8_enabled(c,e) : (u8_quake2utf8map[(unsigned char)(*(e) = (c) + 1)[-1]]))
+#define u8_getchar_noendptr(c) (utf8_enable.integer ? u8_getchar_utf8_enabled(c,NULL) : (u8_quake2utf8map[(unsigned char)*(c)]))
 #define u8_getchar_check(c,e) ((e) ? u8_getchar((c),(e)) : u8_getchar_noendptr((c)))
-#define u8_getnchar(c,e,n) (utf8_enable.integer ? u8_getnchar_utf8_enabled(c,e,n) : ((n) <= 0 ? ((*(e) = c), 0) : (u8_quake2utf8map[(*((unsigned char **)(e)) = ((unsigned char *)(c)) + 1)[-1]])))
-#define u8_getnchar_noendptr(c,n) (utf8_enable.integer ? u8_getnchar_utf8_enabled(c,NULL,n) : ((n) <= 0 ? 0  : (u8_quake2utf8map[*((unsigned char *)(c))])))
+#define u8_getnchar(c,e,n) (utf8_enable.integer ? u8_getnchar_utf8_enabled(c,e,n) : ((n) <= 0 ? ((*(e) = c), 0) : (u8_quake2utf8map[(unsigned char)(*(e) = (c) + 1)[-1]])))
+#define u8_getnchar_noendptr(c,n) (utf8_enable.integer ? u8_getnchar_utf8_enabled(c,NULL,n) : ((n) <= 0 ? 0  : (u8_quake2utf8map[(unsigned char)*(c)])))
 #define u8_getnchar_check(c,e,n) ((e) ? u8_getchar((c),(e),(n)) : u8_getchar_noendptr((c),(n)))
 
 #endif // UTF8LIB_H__