Index: trunk/xcache.h
===================================================================
--- trunk/xcache.h	(revision 1)
+++ trunk/xcache.h	(revision 2)
@@ -51,5 +51,9 @@
 #define BUCKET_UKEY(b) (UNISW((b)->arKey, (b)->key.u.unicode))
 #define BUCKET_KEY_TYPE(b) (UNISW(0, (b)->key.type))
-#define BUCKET_HEAD_SIZE(b) XtOffsetOf(UNISW(sizeof((b)->arKey), sizeof((b)->key.u)))
+#ifdef IS_UNICODE
+#	define BUCKET_HEAD_SIZE(b) XtOffsetOf(typeof(b[0]), key)
+#else
+#	define BUCKET_HEAD_SIZE(b) XtOffsetOf(typeof(b[0]), arKey)
+#endif
 #define BUCKET_SIZE(b) (BUCKET_HEAD_SIZE(b) + BUCKET_KEY_SIZE(b))
 
