From 0de7d30656d905bde82974ea8a5edf523cea7654 Mon Sep 17 00:00:00 2001
From: jD91mZM2 <me@krake.one>
Date: Sun, 7 Oct 2018 13:00:51 +0200
Subject: [PATCH] Fix S_IS*

For some reason, C handles `==` before `&`.
So `a & b == c` is the same thing as `a & (b == c)`.
---
 include/bits/sys/stat.h | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/include/bits/sys/stat.h b/include/bits/sys/stat.h
index 199097aa7..1a27d243e 100644
--- a/include/bits/sys/stat.h
+++ b/include/bits/sys/stat.h
@@ -1,13 +1,13 @@
 #ifndef _BITS_STAT_H
 #define _BITS_STAT_H
 
-#define S_ISDIR(mode) mode & S_IFMT == S_IFDIR
-#define S_ISCHR(mode) mode & S_IFMT == S_IFCHR
-#define S_ISBLK(mode) mode & S_IFMT == S_IFBLK
-#define S_ISREG(mode) mode & S_IFMT == S_IFREG
-#define S_ISFIFO(mode) mode & S_IFMT == S_IFIFO
-#define S_ISLNK(mode) mode & S_IFMT == S_IFLNK
-#define S_ISSOCK(mode) mode & S_IFMT == S_IFSOCK
+#define S_ISDIR(mode)  (((mode) & S_IFMT) == S_IFDIR)
+#define S_ISCHR(mode)  (((mode) & S_IFMT) == S_IFCHR)
+#define S_ISBLK(mode)  (((mode) & S_IFMT) == S_IFBLK)
+#define S_ISREG(mode)  (((mode) & S_IFMT) == S_IFREG)
+#define S_ISFIFO(mode) (((mode) & S_IFMT) == S_IFIFO)
+#define S_ISLNK(mode)  (((mode) & S_IFMT) == S_IFLNK)
+#define S_ISSOCK(mode) (((mode) & S_IFMT) == S_IFSOCK)
 
 #define st_atime st_atim.tv_sec
 #define st_mtime st_mtim.tv_sec
-- 
GitLab