/** * Translate posix file permissions to short mode. * * @param permission posix file permission * @return mode for file */ public static short translatePosixPermissionToMode(Set<PosixFilePermission> permission) { int mode = 0; for (PosixFilePermission action : PosixFilePermission.values()) { mode = mode << 1; mode += permission.contains(action) ? 1 : 0; } return (short) mode; }
@Restricted(NoExternalUse.class) public static int permissionsToMode(Set<PosixFilePermission> permissions) { PosixFilePermission[] allPermissions = PosixFilePermission.values(); int result = 0; for (int i = 0; i < allPermissions.length; i++) { result <<= 1; result |= permissions.contains(allPermissions[i]) ? 1 : 0; } return result; }
@Restricted(NoExternalUse.class) public static Set<PosixFilePermission> modeToPermissions(int mode) throws IOException { // Anything larger is a file type, not a permission. int PERMISSIONS_MASK = 07777; // setgid/setuid/sticky are not supported. int MAX_SUPPORTED_MODE = 0777; mode = mode & PERMISSIONS_MASK; if ((mode & MAX_SUPPORTED_MODE) != mode) { throw new IOException("Invalid mode: " + mode); } PosixFilePermission[] allPermissions = PosixFilePermission.values(); Set<PosixFilePermission> result = EnumSet.noneOf(PosixFilePermission.class); for (int i = 0; i < allPermissions.length; i++) { if ((mode & 1) == 1) { result.add(allPermissions[allPermissions.length - i - 1]); } mode >>= 1; } return result; }
/** * Translate posix file permissions to short mode. * * @param permission posix file permission * @return mode for file */ public static short translatePosixPermissionToMode(Set<PosixFilePermission> permission) { int mode = 0; for (PosixFilePermission action : PosixFilePermission.values()) { mode = mode << 1; mode += permission.contains(action) ? 1 : 0; } return (short) mode; }
static Set<PosixFilePermission> toSet(int mask) { Set<PosixFilePermission> set = EnumSet.noneOf(PosixFilePermission.class); for (PosixFilePermission permission : PosixFilePermission.values()) { int flag = 1 << permission.ordinal() & mask; if (flag != 0) { set.add(permission); } } return set; }
public PosixFilePermissionGenerator() { this.values = PosixFilePermission.values(); this.index_gen = new IntegerGenerator(0, this.values.length - 1); }