mode_t to_platform_mode(fssh_mode_t fsshMode) { #define SET_ST_MODE_BIT(flag, fsshFlag) \ if (fsshMode & fsshFlag) \ mode |= flag; mode_t mode = 0; // BeOS/Haiku only #if (defined(__BEOS__) || defined(__HAIKU__)) SET_ST_MODE_BIT(FSSH_S_ATTR_DIR, S_ATTR_DIR); SET_ST_MODE_BIT(FSSH_S_ATTR, S_ATTR); SET_ST_MODE_BIT(FSSH_S_INDEX_DIR, S_INDEX_DIR); SET_ST_MODE_BIT(FSSH_S_INT_INDEX, S_INT_INDEX); SET_ST_MODE_BIT(FSSH_S_UINT_INDEX, S_UINT_INDEX); SET_ST_MODE_BIT(FSSH_S_LONG_LONG_INDEX, S_LONG_LONG_INDEX); SET_ST_MODE_BIT(FSSH_S_ULONG_LONG_INDEX, S_ULONG_LONG_INDEX); SET_ST_MODE_BIT(FSSH_S_FLOAT_INDEX, S_FLOAT_INDEX); SET_ST_MODE_BIT(FSSH_S_DOUBLE_INDEX, S_DOUBLE_INDEX); SET_ST_MODE_BIT(FSSH_S_ALLOW_DUPS, S_ALLOW_DUPS); SET_ST_MODE_BIT(FSSH_S_LINK_SELF_HEALING, S_LINK_SELF_HEALING); SET_ST_MODE_BIT(FSSH_S_LINK_AUTO_DELETE, S_LINK_AUTO_DELETE); #endif switch (fsshMode & FSSH_S_IFMT) { case FSSH_S_IFLNK: mode |= S_IFLNK; break; case FSSH_S_IFREG: mode |= S_IFREG; break; case FSSH_S_IFBLK: mode |= S_IFBLK; break; case FSSH_S_IFDIR: mode |= S_IFDIR; break; case FSSH_S_IFIFO: mode |= S_IFIFO; break; } SET_ST_MODE_BIT(FSSH_S_ISUID, S_ISUID); SET_ST_MODE_BIT(FSSH_S_ISGID, S_ISGID); SET_ST_MODE_BIT(FSSH_S_ISVTX, S_ISVTX); SET_ST_MODE_BIT(FSSH_S_IRUSR, S_IRUSR); SET_ST_MODE_BIT(FSSH_S_IWUSR, S_IWUSR); SET_ST_MODE_BIT(FSSH_S_IXUSR, S_IXUSR); SET_ST_MODE_BIT(FSSH_S_IRGRP, S_IRGRP); SET_ST_MODE_BIT(FSSH_S_IWGRP, S_IWGRP); SET_ST_MODE_BIT(FSSH_S_IXGRP, S_IXGRP); SET_ST_MODE_BIT(FSSH_S_IROTH, S_IROTH); SET_ST_MODE_BIT(FSSH_S_IWOTH, S_IWOTH); SET_ST_MODE_BIT(FSSH_S_IXOTH, S_IXOTH); #undef SET_ST_MODE_BIT return mode; }
my_mode_t from_platform_mode(mode_t mode) { #define SET_ST_MODE_BIT(flag, myFlag) \ if (mode & flag) \ myMode |= myFlag; my_mode_t myMode = 0; SET_ST_MODE_BIT(MY_S_ATTR_DIR, S_ATTR_DIR); SET_ST_MODE_BIT(MY_S_ATTR, S_ATTR); SET_ST_MODE_BIT(MY_S_INDEX_DIR, S_INDEX_DIR); SET_ST_MODE_BIT(MY_S_INT_INDEX, S_INT_INDEX); SET_ST_MODE_BIT(MY_S_UINT_INDEX, S_UINT_INDEX); SET_ST_MODE_BIT(MY_S_LONG_LONG_INDEX, S_LONG_LONG_INDEX); SET_ST_MODE_BIT(MY_S_ULONG_LONG_INDEX, S_ULONG_LONG_INDEX); SET_ST_MODE_BIT(MY_S_FLOAT_INDEX, S_FLOAT_INDEX); SET_ST_MODE_BIT(MY_S_DOUBLE_INDEX, S_DOUBLE_INDEX); SET_ST_MODE_BIT(MY_S_ALLOW_DUPS, S_ALLOW_DUPS); SET_ST_MODE_BIT(MY_S_LINK_SELF_HEALING, S_LINK_SELF_HEALING); SET_ST_MODE_BIT(MY_S_LINK_AUTO_DELETE, S_LINK_AUTO_DELETE); switch (mode & S_IFMT) { case S_IFLNK: myMode |= MY_S_IFLNK; break; case S_IFREG: myMode |= MY_S_IFREG; break; case S_IFBLK: myMode |= MY_S_IFBLK; break; case S_IFDIR: myMode |= MY_S_IFDIR; break; case S_IFIFO: myMode |= MY_S_IFIFO; break; } SET_ST_MODE_BIT(MY_S_ISUID, S_ISUID); SET_ST_MODE_BIT(MY_S_ISGID, S_ISGID); SET_ST_MODE_BIT(MY_S_ISVTX, S_ISVTX); SET_ST_MODE_BIT(MY_S_IRUSR, S_IRUSR); SET_ST_MODE_BIT(MY_S_IWUSR, S_IWUSR); SET_ST_MODE_BIT(MY_S_IXUSR, S_IXUSR); SET_ST_MODE_BIT(MY_S_IRGRP, S_IRGRP); SET_ST_MODE_BIT(MY_S_IWGRP, S_IWGRP); SET_ST_MODE_BIT(MY_S_IXGRP, S_IXGRP); SET_ST_MODE_BIT(MY_S_IROTH, S_IROTH); SET_ST_MODE_BIT(MY_S_IWOTH, S_IWOTH); SET_ST_MODE_BIT(MY_S_IXOTH, S_IXOTH); #undef SET_ST_MODE_BIT return myMode; }