--- old/src/jdk.zipfs/share/classes/jdk/nio/zipfs/ZipPath.java 2019-03-20 17:23:14.280251700 +0100 +++ new/src/jdk.zipfs/share/classes/jdk/nio/zipfs/ZipPath.java 2019-03-20 17:23:13.275477400 +0100 @@ -34,9 +34,11 @@ import java.nio.channels.SeekableByteChannel; import java.nio.file.*; import java.nio.file.DirectoryStream.Filter; -import java.nio.file.attribute.BasicFileAttributeView; import java.nio.file.attribute.FileAttribute; import java.nio.file.attribute.FileTime; +import java.nio.file.attribute.GroupPrincipal; +import java.nio.file.attribute.PosixFilePermission; +import java.nio.file.attribute.UserPrincipal; import java.util.Arrays; import java.util.Iterator; import java.util.Map; @@ -57,7 +59,7 @@ */ final class ZipPath implements Path { - private final ZipFileSystem zfs; + final ZipFileSystem zfs; private final byte[] path; private volatile int[] offsets; private int hashcode = 0; // cached hashcode (created lazily) @@ -756,10 +758,7 @@ type = attribute.substring(0, colonPos++); attr = attribute.substring(colonPos); } - ZipFileAttributeView view = ZipFileAttributeView.get(this, type); - if (view == null) - throw new UnsupportedOperationException("view <" + view + "> is not supported"); - view.setAttribute(attr, value); + ZipFileAttributeView.get(this, type).setAttribute(attr, value); } void setTimes(FileTime mtime, FileTime atime, FileTime ctime) @@ -768,9 +767,22 @@ zfs.setTimes(getResolvedPath(), mtime, atime, ctime); } - Map readAttributes(String attributes, LinkOption... options) + void setOwner(UserPrincipal owner) throws IOException { + zfs.setOwner(getResolvedPath(), owner); + } + + void setPermissions(Set perms) throws IOException + { + zfs.setPermissions(getResolvedPath(), perms); + } + void setGroup(GroupPrincipal group) throws IOException { + zfs.setGroup(getResolvedPath(), group); + } + + Map readAttributes(String attributes, LinkOption... options) + throws IOException { String view = null; String attrs = null; @@ -782,11 +794,7 @@ view = attributes.substring(0, colonPos++); attrs = attributes.substring(colonPos); } - ZipFileAttributeView zfv = ZipFileAttributeView.get(this, view); - if (zfv == null) { - throw new UnsupportedOperationException("view not supported"); - } - return zfv.readAttributes(attrs); + return ZipFileAttributeView.get(this, view).readAttributes(attrs); } FileStore getFileStore() throws IOException { @@ -935,12 +943,14 @@ } } if (copyAttrs) { - BasicFileAttributeView view = - ZipFileAttributeView.get(target, BasicFileAttributeView.class); + ZipFileAttributeView view = + ZipFileAttributeView.get(target, ZipFileAttributeView.class); try { view.setTimes(zfas.lastModifiedTime(), zfas.lastAccessTime(), zfas.creationTime()); + // copy permissions + view.setPermissions(zfas.storedPermissions().orElse(null)); } catch (IOException x) { // rollback? try {