I am trying to identify file types for directory entries (Windows Unix etc..).
In sys/stat.h the high order nybble of the st_mode word have the coded values:
#define S_IFDIR 0x4000 /* directory */
#define S_IFIFO 0x1000 /* FIFO special */
#define S_IFCHR 0x2000 /* character special */
#define S_IFBLK 0x3000 /* block special */
#define S_IFREG 0x8000 /* or just 0x0000, regular */
From the comment it seems the nybble could be either 0 or 8 to represent a 'regular file'.
So this begs the question: in what circumstances is it 0 and not 8? If I had defined these codes, I would have reserved 0 to inidicate unknown/undefined/invalid/not-a-file or something like that.
Indeed the S_ISREG macro is:
#define S_ISREG(m) ((m) & S_IFREG)
This would seem to me to indicate that a regular file should always be expected to have the code 8 (and 0 would be an abberation?).
Would it be a valid assumption to interpret 0 as an unknown or invalid file and ignore the 'or just 0x0000' comment and always expect 8 to be used for all regular files?