Hi list.
In or/networkstatus.c there is a "#if 0" block inside the macro
"SMARTLIST_FOREACH_JOIN". Not all compilers handle such contructs.
In the prosess of making solution/projects file for "MS Visual C++ 2010 Express",
I hit this problem (cl Version 16.00.30319.01). Can you please accept the
following patch:
diff --git a/src/or/networkstatus.c b/src/or/networkstatus.c
index 2586ce6..d8d6680 100644
--- a/src/or/networkstatus.c
+++ b/src/or/networkstatus.c
@@ -2001,19 +2001,25 @@ routers_update_status_from_consensus_networkstatus(smartlist_t *routers,
routers_sort_by_identity(routers);
+ /* Since not all compilers handles '#' inside macros, we use a helper-macro. */
+#if 0
+ #define CHECK_ROUTER_PURPOSE() do { \
+ /* We have no routerstatus for this router. Clear flags and skip it. */ \
+ if (!authdir) { \
+ if (router->purpose == ROUTER_PURPOSE_GENERAL) \
+ router_clear_status_flags(router); \
+ } \
+ } while (0)
+#else
+ #define CHECK_ROUTER_PURPOSE()
+#endif
+
SMARTLIST_FOREACH_JOIN(ns->routerstatus_list, routerstatus_t *, rs,
routers, routerinfo_t *, router,
tor_memcmp(rs->identity_digest,
router->cache_info.identity_digest, DIGEST_LEN),
+ { CHECK_ROUTER_PURPOSE(); })
{
-#if 0
- /* We have no routerstatus for this router. Clear flags and skip it. */
- if (!authdir) {
- if (router->purpose == ROUTER_PURPOSE_GENERAL)
- router_clear_status_flags(router);
- }
-#endif
- }) {
/* We have a routerstatus for this router. */
const char *digest = router->cache_info.identity_digest;
------------------------
--gv