Esempio n. 1
0
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;
}
Esempio n. 2
0
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;
}