[tor-commits] [obfsproxy/master] don't reinvent offsetof

nickm at torproject.org nickm at torproject.org
Fri Sep 9 17:08:55 UTC 2011


commit a3e63eaed8ad4a55352cc945fdf126435d6b6581
Author: Zack Weinberg <zackw at panix.com>
Date:   Thu Jul 14 13:23:58 2011 -0700

    don't reinvent offsetof
---
 src/network.c |    4 ++--
 src/util.h    |   12 +++---------
 2 files changed, 5 insertions(+), 11 deletions(-)

diff --git a/src/network.c b/src/network.c
index ea06bc2..6a8afa6 100644
--- a/src/network.c
+++ b/src/network.c
@@ -93,7 +93,7 @@ close_all_connections(void)
 {
   /** Traverse the dll and close all connections */
   while (conn_list.head) {
-    conn_t *conn = UPCAST(conn_t, dll_node, conn_list.head);
+    conn_t *conn = DOWNCAST(conn_t, dll_node, conn_list.head);
     conn_free(conn); /* removes it */
   }
   assert(!n_connections);
@@ -169,7 +169,7 @@ free_all_listeners(void)
 
   /* Iterate listener doubly linked list and free them all. */
   while (listener_list.head) {
-    listener_t *listener = UPCAST(listener_t, dll_node, listener_list.head);
+    listener_t *listener = DOWNCAST(listener_t, dll_node, listener_list.head);
     listener_free(listener);
   }
 
diff --git a/src/util.h b/src/util.h
index ff9df22..b526dbf 100644
--- a/src/util.h
+++ b/src/util.h
@@ -6,7 +6,7 @@
 #define UTIL_H
 
 #include <stdarg.h> /* for va_list */
-#include <stddef.h> /* for size_t etc */
+#include <stddef.h> /* size_t, offsetof, NULL, etc */
 
 #ifndef __GNUC__
 #define __attribute__(x) /* nothing */
@@ -37,14 +37,8 @@ int obfs_snprintf(char *str, size_t size,
 
 /***** Doubly Linked List stuff. *****/
 
-#define OFFSETOF(container_type, element) \
-  (((char*)&((container_type*)0)->element) - ((char*) ((container_type*)0)))
-
-#define UPCAST(container_type, element, ptr) \
-  (container_type*) (                                                   \
-         ((char*)ptr) - OFFSETOF(container_type, element)   \
-                    )
-
+#define DOWNCAST(container_type, element, ptr) \
+  (container_type*)( ((char*)ptr) - offsetof(container_type, element) )
 
 /** A doubly linked list node.
     [algorithms ripped off Wikipedia (Doubly_linked_list) ] */





More information about the tor-commits mailing list