< prev index next >

src/jdk.zipfs/share/classes/jdk/nio/zipfs/ZipPath.java

Print this page
rev 53081 : 8213031: (zipfs) Add support for POSIX file permissions
Reviewed-by: simonis

@@ -32,13 +32,13 @@
 import java.net.URI;
 import java.nio.channels.FileChannel;
 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.PosixFilePermission;
 import java.util.Arrays;
 import java.util.Iterator;
 import java.util.Map;
 import java.util.NoSuchElementException;
 import java.util.Objects;

@@ -766,13 +766,18 @@
         throws IOException
     {
         zfs.setTimes(getResolvedPath(), mtime, atime, ctime);
     }
 
-    Map<String, Object> readAttributes(String attributes, LinkOption... options)
+    void setPermissions(Set<PosixFilePermission> perms)
         throws IOException
+    {
+        zfs.setPermissions(getResolvedPath(), perms);
+    }
 
+    Map<String, Object> readAttributes(String attributes, LinkOption... options)
+        throws IOException
     {
         String view = null;
         String attrs = null;
         int colonPos = attributes.indexOf(':');
         if (colonPos == -1) {

@@ -933,16 +938,22 @@
             } finally {
                 is.close();
             }
         }
         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 if available
+                try {
+                    view.setPermissions(zfas.permissions());
+                } catch (UnsupportedOperationException uoe) {
+                    // the current entry may have no permissions.
+                }
             } catch (IOException x) {
                 // rollback?
                 try {
                     target.delete();
                 } catch (IOException ignore) { }
< prev index next >