< prev index next >

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

Print this page
rev 53716 : 8213031: (zipfs) Add support for POSIX file permissions

@@ -1,7 +1,7 @@
 /*
- * Copyright (c) 2009, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2009, 2019, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
  * under the terms of the GNU General Public License version 2 only, as
  * published by the Free Software Foundation.  Oracle designates this

@@ -36,10 +36,11 @@
 import java.nio.file.*;
 import java.nio.file.DirectoryStream.Filter;
 import java.nio.file.attribute.BasicFileAttributes;
 import java.nio.file.attribute.FileAttribute;
 import java.nio.file.attribute.FileAttributeView;
+import java.nio.file.attribute.PosixFileAttributes;
 import java.nio.file.spi.FileSystemProvider;
 import java.security.AccessController;
 import java.security.PrivilegedActionException;
 import java.security.PrivilegedExceptionAction;
 import java.util.HashMap;

@@ -129,17 +130,17 @@
     @Override
     public FileSystem newFileSystem(Path path, Map<String, ?> env)
         throws IOException
     {
         ensureFile(path);
-         try {
-             ZipFileSystem zipfs;
-             if (env.containsKey("multi-release")) {
-                 zipfs = new JarFileSystem(this, path, env);
-             } else {
-                 zipfs = new ZipFileSystem(this, path, env);
-             }
+        try {
+            ZipFileSystem zipfs;
+            if (env.containsKey("multi-release")) {
+                zipfs = new JarFileSystem(this, path, env);
+            } else {
+                zipfs = new ZipFileSystem(this, path, env);
+            }
             return zipfs;
         } catch (ZipException ze) {
             String pname = path.toString();
             if (pname.endsWith(".zip") || pname.endsWith(".jar"))
                 throw ze;

@@ -289,21 +290,35 @@
     @SuppressWarnings("unchecked") // Cast to A
     public <A extends BasicFileAttributes> A
         readAttributes(Path path, Class<A> type, LinkOption... options)
         throws IOException
     {
-        if (type == BasicFileAttributes.class || type == ZipFileAttributes.class)
+        // unconditionally support BasicFileAttributes and ZipFileAttributes
+        if (type == BasicFileAttributes.class ||
+            type == ZipFileAttributes.class)
+        {
             return (A)toZipPath(path).getAttributes();
-        return null;
+        }
+
+        // support PosixFileAttributes when activated
+        if (type == PosixFileAttributes.class) {
+            ZipPath zpath = toZipPath(path);
+            if (zpath.zfs.supportPosix) {
+                return (A)zpath.getAttributes();
+            }
+        }
+
+        throw new UnsupportedOperationException("Attributes of type " +
+            type.getName() + " not supported");
     }
 
     @Override
     public Map<String, Object>
-        readAttributes(Path path, String attribute, LinkOption... options)
+        readAttributes(Path path, String attributes, LinkOption... options)
         throws IOException
     {
-        return toZipPath(path).readAttributes(attribute, options);
+        return toZipPath(path).readAttributes(attributes, options);
     }
 
     @Override
     public Path readSymbolicLink(Path link) throws IOException {
         throw new UnsupportedOperationException("Not supported.");
< prev index next >