[or-cvs] r10645: Sun CC likes to give warnings for the do { } while(0) constr (in tor/trunk: . src/common src/or src/tools)

nickm at seul.org nickm at seul.org
Sun Jun 17 18:22:39 UTC 2007


Author: nickm
Date: 2007-06-17 14:22:39 -0400 (Sun, 17 Jun 2007)
New Revision: 10645

Modified:
   tor/trunk/
   tor/trunk/src/common/compat.h
   tor/trunk/src/common/container.c
   tor/trunk/src/common/container.h
   tor/trunk/src/common/ht.h
   tor/trunk/src/common/log.h
   tor/trunk/src/common/test.h
   tor/trunk/src/common/util.h
   tor/trunk/src/or/buffers.c
   tor/trunk/src/or/config.c
   tor/trunk/src/or/dns.c
   tor/trunk/src/or/main.c
   tor/trunk/src/or/or.h
   tor/trunk/src/or/policies.c
   tor/trunk/src/or/routerparse.c
   tor/trunk/src/or/test.c
   tor/trunk/src/tools/tor-resolve.c
Log:
 r13477 at catbus:  nickm | 2007-06-17 14:22:03 -0400
 Sun CC likes to give warnings for the do { } while(0) construction for making statement-like macros.  Define STMT_BEGIN/STMT_END macros that do the right thing, and use them everywhere.



Property changes on: tor/trunk
___________________________________________________________________
 svk:merge ticket from /tor/trunk [r13477] on 8246c3cf-6607-4228-993b-4d95d33730f1

Modified: tor/trunk/src/common/compat.h
===================================================================
--- tor/trunk/src/common/compat.h	2007-06-17 18:22:35 UTC (rev 10644)
+++ tor/trunk/src/common/compat.h	2007-06-17 18:22:39 UTC (rev 10645)
@@ -120,6 +120,21 @@
 #define PREDICT_UNLIKELY(exp) (exp)
 #endif
 
+/* Ways to declare macros. */
+#define STMT_NIL (void)0
+#ifdef __GNUC__
+#define STMT_BEGIN (void) ({
+#define STMT_END })
+#else
+#if defined(sun) || defined(__sun__)
+#define STMT_BEGIN if (1) {
+#define STMT_END } else STMT_NIL
+#else
+#define STMT_BEGIN do {
+#define STMT_END } while(0)
+#endif
+#endif
+
 /* ===== String compatibility */
 #ifdef MS_WINDOWS
 /* Windows names string functions differently from most other platforms. */
@@ -339,9 +354,9 @@
 unsigned long tor_get_thread_id(void);
 #else
 #define tor_mutex_new() ((tor_mutex_t*)tor_malloc(sizeof(int)))
-#define tor_mutex_acquire(m) do { } while (0)
-#define tor_mutex_release(m) do { } while (0)
-#define tor_mutex_free(m) do { tor_free(m); } while (0)
+#define tor_mutex_acquire(m) STMT_NIL
+#define tor_mutex_release(m) STMT_NIL
+#define tor_mutex_free(m) STMT_BEGIN tor_free(m); STMT_END
 #define tor_get_thread_id() (1UL)
 #endif
 

Modified: tor/trunk/src/common/container.c
===================================================================
--- tor/trunk/src/common/container.c	2007-06-17 18:22:35 UTC (rev 10644)
+++ tor/trunk/src/common/container.c	2007-06-17 18:22:39 UTC (rev 10645)
@@ -665,8 +665,8 @@
     HT_HEAD(prefix ## impl, prefix ## entry_t) head;      \
   }
 
-DEFINE_MAP_STRUCTS(strmap_t, char *key, strmap_)
-DEFINE_MAP_STRUCTS(digestmap_t, char key[DIGEST_LEN], digestmap_)
+DEFINE_MAP_STRUCTS(strmap_t, char *key, strmap_);
+DEFINE_MAP_STRUCTS(digestmap_t, char key[DIGEST_LEN], digestmap_);
 
 /** Helper: compare strmap_entry_t objects by key value. */
 static INLINE int

Modified: tor/trunk/src/common/container.h
===================================================================
--- tor/trunk/src/common/container.h	2007-06-17 18:22:35 UTC (rev 10644)
+++ tor/trunk/src/common/container.h	2007-06-17 18:22:39 UTC (rev 10645)
@@ -159,24 +159,24 @@
  * </pre>
  */
 #define SMARTLIST_FOREACH(sl, type, var, cmd)                   \
-  do {                                                          \
+  STMT_BEGIN                                                    \
     int var ## _sl_idx, var ## _sl_len=(sl)->num_used;          \
     type var;                                                   \
     for (var ## _sl_idx = 0; var ## _sl_idx < var ## _sl_len;   \
          ++var ## _sl_idx) {                                    \
       var = (sl)->list[var ## _sl_idx];                         \
       cmd;                                                      \
-    } } while (0)
+    } STMT_END
 
 /** Helper: While in a SMARTLIST_FOREACH loop over the list <b>sl</b> indexed
  * with the variable <b>var</b>, remove the current element in a way that
  * won't confuse the loop. */
 #define SMARTLIST_DEL_CURRENT(sl, var)          \
-  do {                                          \
+  STMT_BEGIN                                    \
     smartlist_del(sl, var ## _sl_idx);          \
     --var ## _sl_idx;                           \
     --var ## _sl_len;                           \
-  } while (0);
+  STMT_END
 
 #define DECLARE_MAP_FNS(maptype, keytype, prefix)                       \
   typedef struct maptype maptype;                                       \

Modified: tor/trunk/src/common/ht.h
===================================================================
--- tor/trunk/src/common/ht.h	2007-06-17 18:22:35 UTC (rev 10644)
+++ tor/trunk/src/common/ht.h	2007-06-17 18:22:39 UTC (rev 10645)
@@ -79,9 +79,7 @@
 }
 
 #define _HT_SET_HASH(elm, field, hashfn)        \
-  do {                                          \
-    (elm)->field.hte_hash = hashfn(elm);        \
-  } while (0)
+    (elm)->field.hte_hash = hashfn(elm)
 
 #define HT_FOREACH(x, name, head)                 \
   for ((x) = HT_START(name, head);                \

Modified: tor/trunk/src/common/log.h
===================================================================
--- tor/trunk/src/common/log.h	2007-06-17 18:22:35 UTC (rev 10644)
+++ tor/trunk/src/common/log.h	2007-06-17 18:22:39 UTC (rev 10645)
@@ -131,10 +131,10 @@
 #define log_fn(severity, domain, args...)               \
   _log_fn(severity, domain, __PRETTY_FUNCTION__, args)
 #define log_debug(domain, args...)                                      \
-  do {                                                                  \
+  STMT_BEGIN                                                            \
     if (PREDICT_UNLIKELY(_log_global_min_severity == LOG_DEBUG))        \
       _log_fn(LOG_DEBUG, domain, __PRETTY_FUNCTION__, args);            \
-  } while (0)
+  STMT_END
 #define log_info(domain, args...)                           \
   _log_fn(LOG_INFO, domain, __PRETTY_FUNCTION__, args)
 #define log_notice(domain, args...)                         \

Modified: tor/trunk/src/common/test.h
===================================================================
--- tor/trunk/src/common/test.h	2007-06-17 18:22:35 UTC (rev 10644)
+++ tor/trunk/src/common/test.h	2007-06-17 18:22:39 UTC (rev 10645)
@@ -16,9 +16,6 @@
 #include <stdio.h>
 #include "compat.h"
 
-#define STMT_BEGIN  do {
-#define STMT_END    } while (0)
-
 #ifdef __GNUC__
 #define PRETTY_FUNCTION __PRETTY_FUNCTION__
 #else

Modified: tor/trunk/src/common/util.h
===================================================================
--- tor/trunk/src/common/util.h	2007-06-17 18:22:35 UTC (rev 10644)
+++ tor/trunk/src/common/util.h	2007-06-17 18:22:39 UTC (rev 10645)
@@ -47,14 +47,14 @@
 
 /** Like assert(3), but send assertion failures to the log as well as to
  * stderr. */
-#define tor_assert(expr) do {                                           \
+#define tor_assert(expr) STMT_BEGIN                                     \
     if (PREDICT_UNLIKELY(IS_FALSE_AS_INT(expr))) {                      \
       log(LOG_ERR, LD_BUG, "%s:%d: %s: Assertion %s failed; aborting.", \
           _SHORT_FILE_, __LINE__, __func__, #expr);                     \
       fprintf(stderr,"%s:%d %s: Assertion %s failed; aborting.\n",      \
               _SHORT_FILE_, __LINE__, __func__, #expr);                 \
       abort();                                                          \
-    } } while (0)
+    } STMT_END
 #endif
 
 #ifdef USE_DMALLOC
@@ -83,19 +83,19 @@
 #ifdef USE_DMALLOC
 extern int dmalloc_free(const char *file, const int line, void *pnt,
                         const int func_id);
-#define tor_free(p) do { \
+#define tor_free(p) STMT_BEGIN \
     if (PREDICT_LIKELY((p)!=NULL)) {                \
       dmalloc_free(_SHORT_FILE_, __LINE__, (p), 0); \
       (p)=NULL;                                     \
     }                                               \
-  } while (0)
+  STMT_END
 #else
-#define tor_free(p) do {                                       \
+#define tor_free(p) STMT_BEGIN                                 \
     if (PREDICT_LIKELY((p)!=NULL)) {                           \
       free(p);                                                 \
       (p)=NULL;                                                \
     }                                                          \
-  } while (0)
+  STMT_END
 #endif
 
 #define tor_malloc(size)       _tor_malloc(size DMALLOC_ARGS)

Modified: tor/trunk/src/or/buffers.c
===================================================================
--- tor/trunk/src/or/buffers.c	2007-06-17 18:22:35 UTC (rev 10644)
+++ tor/trunk/src/or/buffers.c	2007-06-17 18:22:39 UTC (rev 10645)
@@ -40,18 +40,21 @@
 /** Initialize the sentinel values on <b>m</b> (a value of buf-&gt;mem), which
  * has <b>ln</b> useful bytes. */
 #define SET_GUARDS(m, ln) \
-  do { set_uint32((m)-4,START_MAGIC); set_uint32((m)+ln,END_MAGIC); } while (0)
+  STMT_BEGIN                         \
+    set_uint32((m)-4,START_MAGIC);   \
+    set_uint32((m)+ln,END_MAGIC);    \
+  STMT_END
 #else
 #define RAW_MEM(m) (m)
 #define GUARDED_MEM(m) (m)
 #define ALLOC_LEN(ln) (ln)
-#define SET_GUARDS(m,ln) do {} while (0)
+#define SET_GUARDS(m,ln) STMT_NIL
 #endif
 
 #ifdef PARANOIA
-#define check() do { assert_buf_ok(buf); } while (0)
+#define check() STMT_BEGIN assert_buf_ok(buf); STMT_END
 #else
-#define check() do { } while (0)
+#define check() STMT_NIL
 #endif
 
 #ifdef NOINLINE

Modified: tor/trunk/src/or/config.c
===================================================================
--- tor/trunk/src/or/config.c	2007-06-17 18:22:35 UTC (rev 10644)
+++ tor/trunk/src/or/config.c	2007-06-17 18:22:39 UTC (rev 10645)
@@ -552,11 +552,11 @@
 
 /** Macro: assert that <b>cfg</b> has the right magic field for format
  * <b>fmt</b>. */
-#define CHECK(fmt, cfg) do {                                            \
+#define CHECK(fmt, cfg) STMT_BEGIN                                      \
     tor_assert(fmt && cfg);                                             \
     tor_assert((fmt)->magic ==                                          \
                *(uint32_t*)STRUCT_VAR_P(cfg,fmt->magic_offset));        \
-  } while (0)
+  STMT_END
 
 static void config_line_append(config_line_t **lst,
                                const char *key, const char *val);
@@ -2419,8 +2419,8 @@
   const char *uname = get_uname();
   char buf[1024];
 #define REJECT(arg) \
-  do { *msg = tor_strdup(arg); return -1; } while (0)
-#define COMPLAIN(arg) do { log(LOG_WARN, LD_CONFIG, arg); } while (0)
+  STMT_BEGIN *msg = tor_strdup(arg); return -1; STMT_END
+#define COMPLAIN(arg) STMT_BEGIN log(LOG_WARN, LD_CONFIG, arg); STMT_END
 
   tor_assert(msg);
   *msg = NULL;

Modified: tor/trunk/src/or/dns.c
===================================================================
--- tor/trunk/src/or/dns.c	2007-06-17 18:22:35 UTC (rev 10644)
+++ tor/trunk/src/or/dns.c	2007-06-17 18:22:39 UTC (rev 10645)
@@ -103,7 +103,7 @@
 static void _assert_cache_ok(void);
 #define assert_cache_ok() _assert_cache_ok()
 #else
-#define assert_cache_ok() do {} while (0)
+#define assert_cache_ok() STMT_NIL
 #endif
 static void assert_resolve_ok(cached_resolve_t *resolve);
 

Modified: tor/trunk/src/or/main.c
===================================================================
--- tor/trunk/src/or/main.c	2007-06-17 18:22:35 UTC (rev 10644)
+++ tor/trunk/src/or/main.c	2007-06-17 18:22:39 UTC (rev 10645)
@@ -1965,7 +1965,7 @@
     goto err;
   }
 
-#define LOAD(f) do {                                                    \
+#define LOAD(f) STMT_BEGIN                                              \
     if (!(fn = GetProcAddress(library, #f))) {                          \
       log_err(LD_BUG,                                                   \
               "Couldn't find %s in advapi32.dll! We probably got the "  \
@@ -1974,7 +1974,7 @@
     } else {                                                            \
       service_fns.f ## _fn = fn;                                        \
     }                                                                   \
-  } while (0)
+  STMT_END
 
   LOAD(ChangeServiceConfig2A);
   LOAD(CloseServiceHandle);

Modified: tor/trunk/src/or/or.h
===================================================================
--- tor/trunk/src/or/or.h	2007-06-17 18:22:35 UTC (rev 10644)
+++ tor/trunk/src/or/or.h	2007-06-17 18:22:39 UTC (rev 10645)
@@ -2576,14 +2576,14 @@
  * Stmt must not contain any return or goto statements.
  */
 #define CONN_LOG_PROTECT(conn, stmt)                                    \
-  do {                                                                  \
+  STMT_BEGIN                                                            \
     int _log_conn_is_control = (conn && conn->type == CONN_TYPE_CONTROL); \
     if (_log_conn_is_control)                                           \
       disable_control_logging();                                        \
-    do {stmt;} while (0);                                               \
+  STMT_BEGIN stmt; STMT_END;                                            \
     if (_log_conn_is_control)                                           \
       enable_control_logging();                                         \
-  } while (0)
+  STMT_END
 
 /** Log information about the connection <b>conn</b>, protecting it as with
  * CONN_LOG_PROTECT. Example:

Modified: tor/trunk/src/or/policies.c
===================================================================
--- tor/trunk/src/or/policies.c	2007-06-17 18:22:35 UTC (rev 10644)
+++ tor/trunk/src/or/policies.c	2007-06-17 18:22:39 UTC (rev 10645)
@@ -220,7 +220,7 @@
 }
 
 #define REJECT(arg) \
-  do { *msg = tor_strdup(arg); goto err; } while (0)
+  STMT_BEGIN *msg = tor_strdup(arg); goto err; STMT_END
 
 /** Config helper: If there's any problem with the policy configuration
  * options in <b>options</b>, return -1 and set <b>msg</b> to a newly

Modified: tor/trunk/src/or/routerparse.c
===================================================================
--- tor/trunk/src/or/routerparse.c	2007-06-17 18:22:35 UTC (rev 10644)
+++ tor/trunk/src/or/routerparse.c	2007-06-17 18:22:39 UTC (rev 10645)
@@ -2282,12 +2282,13 @@
 }
 
 #define RET_ERR(msg)                                               \
-  do {                                                             \
+  STMT_BEGIN                                                       \
     if (tok) token_free(tok);                                      \
     tok = tor_malloc_zero(sizeof(directory_token_t));              \
     tok->tp = _ERR;                                                \
     tok->error = tor_strdup(msg);                                  \
-    goto done_tokenizing; } while (0)
+    goto done_tokenizing;                                          \
+  STMT_END
 
 static INLINE directory_token_t *
 token_check_object(const char *kwd,
@@ -2346,12 +2347,13 @@
   const char *kwd = "";
 
 #define RET_ERR(msg)                                               \
-  do {                                                             \
+  STMT_BEGIN                                                       \
     if (tok) token_free(tok);                                      \
     tok = tor_malloc_zero(sizeof(directory_token_t));              \
     tok->tp = _ERR;                                                \
     tok->error = tor_strdup(msg);                                  \
-    goto done_tokenizing; } while (0)
+    goto done_tokenizing;                                          \
+  STMT_END
 
   tok = tor_malloc_zero(sizeof(directory_token_t));
   tok->tp = _ERR;

Modified: tor/trunk/src/or/test.c
===================================================================
--- tor/trunk/src/or/test.c	2007-06-17 18:22:35 UTC (rev 10644)
+++ tor/trunk/src/or/test.c	2007-06-17 18:22:39 UTC (rev 10645)
@@ -1007,25 +1007,25 @@
 }
 #define test_eq_ip6(a,b) _test_eq_ip6((a),(b),#a,#b,__LINE__)
 
-#define test_pton6_same(a,b) do {                 \
+#define test_pton6_same(a,b) STMT_BEGIN          \
     r = tor_inet_pton(AF_INET6, a, &a1);         \
     test_assert(r==1);                           \
     r = tor_inet_pton(AF_INET6, b, &a2);         \
     test_assert(r==1);                           \
     test_eq_ip6(&a1,&a2);                        \
-  } while (0)
+  STMT_END
 
 #define test_pton6_bad(a)                       \
   test_eq(0, tor_inet_pton(AF_INET6, a, &a1))
 
-#define test_ntop6_reduces(a,b) do {                                    \
+#define test_ntop6_reduces(a,b) STMT_BEGIN                              \
     r = tor_inet_pton(AF_INET6, a, &a1);                                \
     test_assert(r==1);                                                  \
     test_streq(tor_inet_ntop(AF_INET6, &a1, buf, sizeof(buf)), b);      \
     r = tor_inet_pton(AF_INET6, b, &a2);                                \
     test_assert(r==1);                                                  \
     test_eq_ip6(&a1, &a2);                                              \
-  } while (0)
+  STMT_END
 
 static void
 test_ip6_helpers(void)

Modified: tor/trunk/src/tools/tor-resolve.c
===================================================================
--- tor/trunk/src/tools/tor-resolve.c	2007-06-17 18:22:35 UTC (rev 10644)
+++ tor/trunk/src/tools/tor-resolve.c	2007-06-17 18:22:39 UTC (rev 10645)
@@ -41,8 +41,8 @@
 
 #define RESPONSE_LEN_4 8
 #define log_sock_error(act, _s)                                         \
-  do { log_fn(LOG_ERR, LD_NET, "Error while %s: %s", act,              \
-              tor_socket_strerror(tor_socket_errno(_s))); } while (0)
+  STMT_BEGIN log_fn(LOG_ERR, LD_NET, "Error while %s: %s", act,         \
+              tor_socket_strerror(tor_socket_errno(_s))); STMT_END
 
 static void usage(void) ATTR_NORETURN;
 



More information about the tor-commits mailing list