]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
Macro SKIP_BACK now evaluates its argument only once.
authorMaria Matejka <mq@ucw.cz>
Fri, 24 Nov 2023 11:11:21 +0000 (12:11 +0100)
committerMaria Matejka <mq@ucw.cz>
Mon, 4 Dec 2023 09:39:32 +0000 (10:39 +0100)
lib/birdlib.h

index 9e60da39808c8ed315801d5664b6a428e361067a..9004704c9cb2000521205b56c7e494da6dbc800a 100644 (file)
 #define OFFSETOF(s, i) ((size_t) &((s *)0)->i)
 #endif
 
-#define SKIP_BACK(s, i, p) ({ s *_ptr = ((s *)((char *)p - OFFSETOF(s, i))); SAME_TYPE(&_ptr->i, p); _ptr; })
+#define SKIP_BACK(s, i, p) ({ \
+    typeof(p) _orig = p; \
+    s *_ptr = ((s *)((char *)_orig - OFFSETOF(s, i))); \
+    SAME_TYPE(&_ptr->i, _orig); \
+    _ptr; })
 #define BIRD_ALIGN(s, a) (((s)+a-1)&~(a-1))
 #define CPU_STRUCT_ALIGN  (MAX_(_Alignof(void*), _Alignof(u64)))
 #define BIRD_CPU_ALIGN(s) BIRD_ALIGN((s), CPU_STRUCT_ALIGN)