summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2015-02-11 18:50:38 +0100
committerLennart Poettering <lennart@poettering.net>2015-02-11 18:50:38 +0100
commiteef46c372f64f40dd75415b2c504c73138719c8d (patch)
treed13d0d3b02025f837ccc360e2e6adc259d61ec9a
parente89fe484df6b94fcd775b923327b54eaf0a116e2 (diff)
tree-wide: whenever we include libgen.h, immediately undefine basename()
Also, document in adjacent comments and in CODING_STYLE why we do that.
-rw-r--r--CODING_STYLE6
-rw-r--r--src/libsystemd/sd-bus/bus-kernel.c7
-rw-r--r--src/machine/machinectl.c5
-rw-r--r--src/shared/util.c6
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