]> granicus.if.org Git - sudo/commitdiff
Back out he XOR swap trick, it is slower than a temp variable on
authorTodd C. Miller <Todd.Miller@courtesan.com>
Fri, 24 Aug 2007 00:28:57 +0000 (00:28 +0000)
committerTodd C. Miller <Todd.Miller@courtesan.com>
Fri, 24 Aug 2007 00:28:57 +0000 (00:28 +0000)
modern CPUs.

parse.h

diff --git a/parse.h b/parse.h
index fe18e6e140e3ff5e4c0e0a65662767a8586c0973..6d14ca3c8356600c663b3bececbed96fe221fccc 100644 (file)
--- a/parse.h
+++ b/parse.h
@@ -146,13 +146,12 @@ struct defaults {
 /*
  * Append one queue (or single entry) to another using the
  * circular properties of the prev pointer to simplify the logic.
- * We use XOR to swap the two prev pointers to avoid a temp variable.
  */
 #define LIST_APPEND(h, e) do {                         \
+    void *_tail = (e)->prev;                           \
     (h)->prev->next = (e);                             \
-    (long)(e)->prev ^= (long)(h)->prev;                        \
-    (long)(h)->prev ^= (long)(e)->prev;                        \
-    (long)(e)->prev ^= (long)(h)->prev;                        \
+    (e)->prev = (h)->prev;                             \
+    (h)->prev = _tail;                                 \
 } while (0)
 
 /*