mtd/fs/jffs2/ecos/src os-ecos.h,1.4,1.5
David Woodhouse
dwmw2 at infradead.org
Tue Jan 21 13:14:29 EST 2003
Update of /home/cvs/mtd/fs/jffs2/ecos/src
In directory phoenix.infradead.org:/tmp/cvs-serv958/ecos/src
Modified Files:
os-ecos.h
Log Message:
jffs2_to_os_mode(), os_to_jffs2_mode()
Index: os-ecos.h
===================================================================
RCS file: /home/cvs/mtd/fs/jffs2/ecos/src/os-ecos.h,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- os-ecos.h 21 Jan 2003 14:34:39 -0000 1.4
+++ os-ecos.h 21 Jan 2003 18:14:27 -0000 1.5
@@ -17,9 +17,92 @@
#include <cyg/io/io.h>
#include <sys/types.h>
#include <asm/atomic.h>
+#include <linux/stat.h>
#include "jffs2port.h"
#define CONFIG_JFFS2_FS_DEBUG 0
+
+static inline uint32_t os_to_jffs2_mode(uint32_t osmode)
+{
+ uint32_t jmode = ((osmode & S_IRUSR)?00400:0) |
+ ((osmode & S_IWUSR)?00200:0) |
+ ((osmode & S_IXUSR)?00100:0) |
+ ((osmode & S_IRGRP)?00040:0) |
+ ((osmode & S_IWGRP)?00020:0) |
+ ((osmode & S_IXGRP)?00010:0) |
+ ((osmode & S_IROTH)?00004:0) |
+ ((osmode & S_IWOTH)?00002:0) |
+ ((osmode & S_IXOTH)?00001:0);
+
+ switch (osmode & S_IFMT) {
+ case S_IFSOCK:
+ return jmode | 0140000;
+ case S_IFLNK:
+ return jmode | 0120000;
+ case S_IFREG:
+ return jmode | 0100000;
+ case S_IFBLK:
+ return jmode | 0060000;
+ case S_IFDIR:
+ return jmode | 0040000;
+ case S_IFCHR:
+ return jmode | 0020000;
+ case S_IFIFO:
+ return jmode | 0010000;
+ case S_ISUID:
+ return jmode | 0004000;
+ case S_ISGID:
+ return jmode | 0002000;
+#ifdef S_ISVTX
+ case S_ISVTX:
+ return jmode | 0001000;
+#endif
+ }
+ printf("os_to_jffs2_mode() cannot convert 0x%x\n", osmode);
+ BUG();
+ return 0;
+}
+
+static inline uint32_t jffs2_to_os_mode (uint32_t jmode)
+{
+ uint32_t osmode = ((jmode & 00400)?S_IRUSR:0) |
+ ((jmode & 00200)?S_IWUSR:0) |
+ ((jmode & 00100)?S_IXUSR:0) |
+ ((jmode & 00040)?S_IRGRP:0) |
+ ((jmode & 00020)?S_IWGRP:0) |
+ ((jmode & 00010)?S_IXGRP:0) |
+ ((jmode & 00004)?S_IROTH:0) |
+ ((jmode & 00002)?S_IWOTH:0) |
+ ((jmode & 00001)?S_IXOTH:0);
+
+ switch(jmode & 00170000) {
+ case 0140000:
+ return osmode | S_IFSOCK;
+ case 0120000:
+ return osmode | S_IFLNK;
+ case 0100000:
+ return osmode | S_IFREG;
+ case 0060000:
+ return osmode | S_IFBLK;
+ case 0040000:
+ return osmode | S_IFDIR;
+ case 0020000:
+ return osmode | S_IFCHR;
+ case 0010000:
+ return osmode | S_IFIFO;
+ case 0004000:
+ return osmode | S_ISUID;
+ case 0002000:
+ return osmode | S_ISGID;
+#ifdef S_ISVTX
+ case 0001000:
+ return osmode | S_ISVTX;
+#endif
+ }
+ printf("jffs2_to_os_mode() cannot convert 0x%x\n", osmode);
+ BUG();
+ return 0;
+}
/* Read-only operation not currently implemented on eCos */
#define jffs2_is_readonly(c) (0)
More information about the linux-mtd-cvs
mailing list