[freenos] [freenos commit] r204 - Implemented FILE{MODE|TYPE}_FROM_ST().

  • From: codesite-noreply@xxxxxxxxxx
  • To: freenos@xxxxxxxxxxxxx
  • Date: Tue, 07 Jul 2009 13:48:52 +0000

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.
  */

Other related posts:

  • » [freenos] [freenos commit] r204 - Implemented FILE{MODE|TYPE}_FROM_ST(). - codesite-noreply