- if (mode & S_IFREG) return '-';
- if (mode & S_IFDIR) return 'd';
- if (mode & S_IFLNK) return 'l';
- if (mode & S_IFBLK) return 'b';
- if (mode & S_IFCHR) return 'c';
- if (mode & S_IFSOCK) return 's';
- if (mode & S_IFIFO) return 'f';
+ if (S_ISREG(mode)) return '-';
+ if (S_ISDIR(mode)) return 'd';
+ if (S_ISLNK(mode)) return 'l';
+ if (S_ISBLK(mode)) return 'b';
+ if (S_ISCHR(mode)) return 'c';
+ if (S_ISSOCK(mode)) return 's';
+ if (S_ISFIFO(mode)) return 'f';