mirror of
https://github.com/AuxXxilium/eudev.git
synced 2025-03-11 17:31:10 +07:00
Repository for eudev development
![]() If you stack container_of() macros, you will get warnings due to shadowing variables of the parent context. To avoid this, use unique names for variables. Two new helpers are added: UNIQ: This evaluates to a truly unique value never returned by any evaluation of this macro. It's a shortcut for __COUNTER__. UNIQ_T: Takes two arguments and concatenates them. It is a shortcut for CONCATENATE, but meant to defined typed local variables. As you usually want to use variables that you just defined, you need to reference the same unique value at least two times. However, UNIQ returns a new value on each evaluation, therefore, you have to pass the unique values into the macro like this: #define my_macro(a, b) __max_macro(UNIQ, UNIQ, (a), (b)) #define __my_macro(uniqa, uniqb, a, b) ({ typeof(a) UNIQ_T(A, uniqa) = (a); typeof(b) UNIQ_T(B, uniqb) = (b); MY_UNSAFE_MACRO(UNIQ_T(A, uniqa), UNIQ_T(B, uniqb)); }) This way, MY_UNSAFE_MACRO() can safely evaluate it's arguments multiple times as they are local variables. But you can also stack invocations to the macro my_macro() without clashing names. This is the same as if you did: #define my_macro(a, b) __max_macro(__COUNTER__, __COUNTER__, (a), (b)) #define __my_macro(prefixa, prefixb, a, b) ({ typeof(a) CONCATENATE(A, prefixa) = (a); typeof(b) CONCATENATE(B, prefixb) = (b); MY_UNSAFE_MACRO(CONCATENATE(A, prefixa), CONCATENATE(B, prefixb)); }) ...but in my opinion, the first macro is easier to write and read. This patch starts by converting container_of() to use this new helper. Other macros may follow (like MIN, MAX, CLAMP, ...). Signed-off-by: Anthony G. Basile <blueness@gentoo.org> |
||
---|---|---|
docs | ||
hwdb | ||
m4 | ||
man | ||
rule_generator | ||
rules | ||
src | ||
test | ||
.gitignore | ||
autogen.sh | ||
configure.ac | ||
CONTRIBUTING | ||
COPYING | ||
Makefile.am | ||
README |
This git repo is a fork of git://anongit.freedesktop.org/systemd/systemd with the aim of isolating udev from any particular flavor of system initialization. In this case, the isolation is from systemd. This is a project started by Gentoo developers and testing is currently being done mostly on OpenRC. We welcome contribution from others using a variety of system initializations to ensure eudev remains system initialization and distribution neutral. Homepage: http://www.gentoo.org/proj/en/eudev/ Tarballs of releases: http://dev.gentoo.org/~blueness/eudev/ Contact: You can email us as a group below. IRC: Freenode/#gentoo-udev Committers (alphabetical order by last name): Luca Barbato (lu_zero) <lu_zero@gentoo.org> Anthony G. Basile (blueness) <blueness@gentoo.org> Francisco Izquierdo (klondike) <klondike@gentoo.org> Ian Stakenvicius (axs) <axs@gentoo.org> Matthew Thode (prometheanfire) <prometheanfire@gentoo.org> Tony Vroon (chainsaw) <tony@linx.net> Richard Yao (ryao) <ryao@gentoo.org>