_S_IFMT
#if !defined(_S_IFMT) && defined(S_IFMT)
#define S_ISSOCK(mode) (((mode) & _S_IFMT) == S_IFSOCK)
#define S_ISLNK(mode) (((mode) & _S_IFMT) == S_IFLNK)
#elif defined _S_IFMT
#define S_ISDIR(MODE) (((MODE) & _S_IFMT) == _S_IFDIR)
# define S_ISDIR(mode) (((mode) & (_S_IFMT)) == (_S_IFDIR))
# define S_ISREG(mode) (((mode) & (_S_IFMT)) == (_S_IFREG))
#if defined(_S_IFMT) && defined(_S_IFDIR)
#define S_ISDIR(a) (((a) & _S_IFMT) == _S_IFDIR)
#define S_IFMT _S_IFMT