lib/sod.h: Arrange that `SOD_XCHAIN' returns `void *'.
[sod] / lib / sod.h
index 8270895..efac06b 100644 (file)
--- a/lib/sod.h
+++ b/lib/sod.h
@@ -76,14 +76,15 @@ struct sod_chain {
  * Arguments:  @chead@ = nickname of target chain's head
  *             @obj@ = pointer to an instance chain
  *
- * Returns:    Pointer to target chain, as a @char *@.
+ * Returns:    Pointer to target chain, as a @void *@.
  *
  * Use:                Utility for implementing cross-chain upcasts.  It's probably
  *             not that clever to use this macro directly; it's used to make
  *             the automatically-generated upcast macros more palatable.
  */
 
-#define SOD_XCHAIN(chead, obj) ((char *)(obj) + (obj)->_vt->_off_##chead)
+#define SOD_XCHAIN(chead, obj)                                         \
+  ((void *)((char *)(obj) + (obj)->_vt->_off_##chead))
 
 /* --- @SOD_OFFSETDIFF@ --- *
  *
@@ -124,7 +125,7 @@ struct sod_chain {
   ((struct cls##__ilayout *)                                           \
    ((char *)(obj) - offsetof(struct cls##__ilayout, chead)))
 
-/* --- @SOD__CAR@ --- *
+/* --- @SOD_CAR@ --- *
  *
  * Arguments:  @...@ = a nonempty list of arguments
  *
@@ -132,7 +133,7 @@ struct sod_chain {
  */
 
 #if __STDC_VERSION__ >= 199901
-#  define SOD__CAR(...) SOD__CARx(__VA_LIST__, _)
+#  define SOD_CAR(...) SOD__CARx(__VA_LIST__, _)
 #  define SOD__CARx(a, ...) a
 #endif