Author: nieklinnenbank Date: Tue Jul 7 06:48:23 2009 New Revision: 204 Modified: trunk/srv/filesystem/FileMode.h trunk/srv/filesystem/FileType.h Log: Implemented FILE{MODE|TYPE}_FROM_ST(). These macros interpret an POSIX-compliant struct stat, possibly from the host system, and convert it into an FileType or FileMode respectively. Modified: trunk/srv/filesystem/FileMode.h ============================================================================== --- trunk/srv/filesystem/FileMode.h (original) +++ trunk/srv/filesystem/FileMode.h Tue Jul 7 06:48:23 2009 @@ -27,6 +27,14 @@ #define FILEMODE_MASK 0777 /** + * Converts an (host system's) POSIX struct st into a FileMode. + * @param st struct st pointer. + * @return FileMode value. + */ +#define FILEMODE_FROM_ST(st) \ + (FileMode)((st)->st_mode & FILEMODE_MASK) + +/** * File access permissions. */ typedef enum FileMode Modified: trunk/srv/filesystem/FileType.h ============================================================================== --- trunk/srv/filesystem/FileType.h (original) +++ trunk/srv/filesystem/FileType.h Tue Jul 7 06:48:23 2009 @@ -24,6 +24,29 @@ /** Masker value for all FileTypes. */ #define FILETYPE_MASK 7 +/** + * Convert from a (host system's) POSIX struct stat into a FileType. + * @param st struct stat pointer. + * @return FileType value. + */ +#define FILETYPE_FROM_ST(st) \ +({ \ + FileType t = UnknownFile; \ + \ + switch ((st)->st_mode & S_IFMT) \ + { \ + case S_IFBLK: t = BlockDeviceFile; break; \ + case S_IFCHR: t = CharacterDeviceFile; break; \ + case S_IFIFO: t = FIFOFile; break; \ + case S_IFREG: t = RegularFile; break; \ + case S_IFDIR: t = DirectoryFile; break; \ + case S_IFLNK: t = SymlinkFile; break; \ + case S_IFSOCK: t = SocketFile; break; \ + default: break; \ + } \ + t; \ +}) + /** * All possible filetypes. */