1 /* 2 * Copyright (c) 2008, 2009, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26 package sun.nio.fs; 27 28 import java.nio.file.attribute.*; 29 import java.util.*; 30 31 class UnixFileModeAttribute { 32 static final int ALL_PERMISSIONS = 33 UnixConstants.S_IRUSR | UnixConstants.S_IWUSR | UnixConstants.S_IXUSR | 34 UnixConstants.S_IRGRP | UnixConstants.S_IWGRP | UnixConstants.S_IXGRP | 35 UnixConstants.S_IROTH | UnixConstants.S_IWOTH | UnixConstants. S_IXOTH; 36 37 static final int ALL_READWRITE = 38 UnixConstants.S_IRUSR | UnixConstants.S_IWUSR | 39 UnixConstants.S_IRGRP | UnixConstants.S_IWGRP | 40 UnixConstants.S_IROTH | UnixConstants.S_IWOTH; 41 42 static final int TEMPFILE_PERMISSIONS = 43 UnixConstants.S_IRUSR | UnixConstants.S_IWUSR | UnixConstants.S_IXUSR; 44 UnixFileModeAttribute()45 private UnixFileModeAttribute() { 46 } 47 toUnixMode(Set<PosixFilePermission> perms)48 static int toUnixMode(Set<PosixFilePermission> perms) { 49 int mode = 0; 50 for (PosixFilePermission perm: perms) { 51 if (perm == null) 52 throw new NullPointerException(); 53 switch (perm) { 54 case OWNER_READ : mode |= UnixConstants.S_IRUSR; break; 55 case OWNER_WRITE : mode |= UnixConstants.S_IWUSR; break; 56 case OWNER_EXECUTE : mode |= UnixConstants.S_IXUSR; break; 57 case GROUP_READ : mode |= UnixConstants.S_IRGRP; break; 58 case GROUP_WRITE : mode |= UnixConstants.S_IWGRP; break; 59 case GROUP_EXECUTE : mode |= UnixConstants.S_IXGRP; break; 60 case OTHERS_READ : mode |= UnixConstants.S_IROTH; break; 61 case OTHERS_WRITE : mode |= UnixConstants.S_IWOTH; break; 62 case OTHERS_EXECUTE : mode |= UnixConstants.S_IXOTH; break; 63 } 64 } 65 return mode; 66 } 67 68 @SuppressWarnings("unchecked") toUnixMode(int defaultMode, FileAttribute<?>... attrs)69 static int toUnixMode(int defaultMode, FileAttribute<?>... attrs) { 70 int mode = defaultMode; 71 for (FileAttribute<?> attr: attrs) { 72 String name = attr.name(); 73 if (!name.equals("posix:permissions") && !name.equals("unix:permissions")) { 74 throw new UnsupportedOperationException("'" + attr.name() + 75 "' not supported as initial attribute"); 76 } 77 mode = toUnixMode((Set<PosixFilePermission>)attr.value()); 78 } 79 return mode; 80 } 81 } 82