diff --git a/glnx-fdio.h b/glnx-fdio.h
index 688eeb252747218ee39c355f4c1661de7b556450..19f938c719f868cf1cfba82f4701572accb48a0c 100644
--- a/glnx-fdio.h
+++ b/glnx-fdio.h
@@ -26,9 +26,24 @@
 #include <sys/stat.h>
 #include <fcntl.h>
 #include <attr/xattr.h>
+/* From systemd/src/shared/util.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
 
 G_BEGIN_DECLS
 
+/* Irritatingly, g_basename() which is what we want
+ * is deprecated.
+ */
+static inline
+const char *glnx_basename (const char *path)
+{
+  return (basename) (path);
+}
+
 GBytes *
 glnx_fd_readall_bytes (int               fd,
                        GCancellable     *cancellable,