-#ifdef HAVE_WIN32
-/* Extra ***& workaround for VisualC Studio */
-#define foreach_dlist(var, list) \
- for((var)=NULL; (*((void **)&(var))=(void*)((list)->next(var))); )
-#else
-/*
+/*
+ * There is a lot of extra casting here to work around the fact
+ * that some compilers (Sun and Visual C++) do not accept
+ * (void *) as an lvalue on the left side of an equal.
+ *