diff options
-rw-r--r-- | CODING_STYLE | 6 | ||||
-rw-r--r-- | src/libsystemd/sd-bus/bus-kernel.c | 7 | ||||
-rw-r--r-- | src/machine/machinectl.c | 5 | ||||
-rw-r--r-- | src/shared/util.c | 6 |
4 files changed, 22 insertions, 2 deletions
diff --git a/CODING_STYLE b/CODING_STYLE index 1d1d970492..5574013487 100644 --- a/CODING_STYLE +++ b/CODING_STYLE @@ -202,3 +202,9 @@ b) socket() and socketpair() must get SOCK_CLOEXEC passed c) recvmsg() must get MSG_CMSG_CLOEXEC set d) F_DUPFD_CLOEXEC should be used instead of F_DUPFD, and so on + +- We never use the XDG version of basename(). glibc defines it in + libgen.h. The only reason to include that file is because dirname() + is needed. Everytime you need that please immediately undefine + basename(), and add a comment about it, so that no code ever ends up + using the XDG version! diff --git a/src/libsystemd/sd-bus/bus-kernel.c b/src/libsystemd/sd-bus/bus-kernel.c index 1714188ffd..b884074d95 100644 --- a/src/libsystemd/sd-bus/bus-kernel.c +++ b/src/libsystemd/sd-bus/bus-kernel.c @@ -25,10 +25,15 @@ #include <fcntl.h> #include <malloc.h> -#include <libgen.h> #include <sys/mman.h> #include <sys/prctl.h> +/* When we include libgen.h because we need dirname() we immediately + * undefine basename() since libgen.h defines it as a macro to the XDG + * version which is really broken. */ +#include <libgen.h> +#undef basename + #include "util.h" #include "strv.h" #include "memfd-util.h" diff --git a/src/machine/machinectl.c b/src/machine/machinectl.c index 16ce2f424b..9f8c68b184 100644 --- a/src/machine/machinectl.c +++ b/src/machine/machinectl.c @@ -31,8 +31,13 @@ #include <arpa/inet.h> #include <net/if.h> #include <sys/mount.h> + +/* When we include libgen.h because we need dirname() we immediately + * undefine basename() since libgen.h defines it as a macro to the XDG + * version which is really broken. */ #include <libgen.h> #undef basename + #include "sd-bus.h" #include "log.h" #include "util.h" diff --git a/src/shared/util.c b/src/shared/util.c index c53f9cdb6a..f5fcebebe7 100644 --- a/src/shared/util.c +++ b/src/shared/util.c @@ -60,10 +60,14 @@ #include <locale.h> #include <sys/personality.h> #include <sys/xattr.h> -#include <libgen.h> #include <sys/statvfs.h> #include <sys/file.h> #include <linux/fs.h> + +/* When we include libgen.h because we need dirname() we immediately + * undefine basename() since libgen.h defines it as a macro to the XDG + * version which is really broken. */ +#include <libgen.h> #undef basename #ifdef HAVE_SYS_AUXV_H |