diff --git a/src/java.base/aix/classes/sun/nio/fs/AixFileSystemProvider.java b/src/java.base/aix/classes/sun/nio/fs/AixFileSystemProvider.java index 9ceb2ac2fbf02..fabd2086fa5c0 100644 --- a/src/java.base/aix/classes/sun/nio/fs/AixFileSystemProvider.java +++ b/src/java.base/aix/classes/sun/nio/fs/AixFileSystemProvider.java @@ -52,9 +52,9 @@ AixFileStore getFileStore(UnixPath path) throws IOException { return new AixFileStore(path); } - static boolean supportsUserDefinedFileAttributeView(Path obj) { + private static boolean supportsUserDefinedFileAttributeView(UnixPath file) { try { - FileStore store = Files.getFileStore(obj); + FileStore store = new AixFileStore(file); return store.supportsFileAttributeView(UserDefinedFileAttributeView.class); } catch (IOException e) { return false; @@ -68,8 +68,10 @@ public V getFileAttributeView(Path obj, LinkOption... options) { if (type == UserDefinedFileAttributeView.class) { - return !supportsUserDefinedFileAttributeView(obj) ? null : - (V) new AixUserDefinedFileAttributeView(UnixPath.toUnixPath(obj), Util.followLinks(options)); + UnixPath file = UnixPath.toUnixPath(obj); + return supportsUserDefinedFileAttributeView(file) ? + (V) new AixUserDefinedFileAttributeView(file, Util.followLinks(options)) + : null; } return super.getFileAttributeView(obj, type, options); } @@ -80,8 +82,10 @@ public DynamicFileAttributeView getFileAttributeView(Path obj, LinkOption... options) { if (name.equals("user")) { - return !supportsUserDefinedFileAttributeView(obj) ? null : - new AixUserDefinedFileAttributeView(UnixPath.toUnixPath(obj), Util.followLinks(options)); + UnixPath file = UnixPath.toUnixPath(obj); + return supportsUserDefinedFileAttributeView(file) ? + new AixUserDefinedFileAttributeView(file, Util.followLinks(options)) + : null; } return super.getFileAttributeView(obj, name, options); } diff --git a/test/jdk/java/nio/file/FileStore/Basic.java b/test/jdk/java/nio/file/FileStore/Basic.java index 1b7793246c90d..0a7b3d5e2f663 100644 --- a/test/jdk/java/nio/file/FileStore/Basic.java +++ b/test/jdk/java/nio/file/FileStore/Basic.java @@ -67,6 +67,16 @@ static void checkWithin1GB(String space, long expected, long actual) { } } + static void testFileAttributes(Path file, + Class viewClass, + String viewName) throws IOException { + FileStore store = Files.getFileStore(file); + boolean supported = store.supportsFileAttributeView(viewClass); + assertTrue(store.supportsFileAttributeView(viewName) == supported); + boolean haveView = Files.getFileAttributeView(file, viewClass) != null; + assertTrue(haveView == supported); + } + static void doTests(Path dir) throws IOException { /** * Test: Directory should be on FileStore that is writable @@ -97,21 +107,11 @@ static void doTests(Path dir) throws IOException { * Test: File and FileStore attributes */ assertTrue(store1.supportsFileAttributeView("basic")); - assertTrue(store1.supportsFileAttributeView(BasicFileAttributeView.class)); - assertTrue(store1.supportsFileAttributeView("posix") == - store1.supportsFileAttributeView(PosixFileAttributeView.class)); - assertTrue(store1.supportsFileAttributeView("dos") == - store1.supportsFileAttributeView(DosFileAttributeView.class)); - assertTrue(store1.supportsFileAttributeView("acl") == - store1.supportsFileAttributeView(AclFileAttributeView.class)); - assertTrue(store1.supportsFileAttributeView("user") == - store1.supportsFileAttributeView(UserDefinedFileAttributeView.class)); - - // check if getFileAttributeView behaves as specified if the user defined view is unsupported - if (!store1.supportsFileAttributeView(UserDefinedFileAttributeView.class) && - Files.getFileAttributeView(dir, UserDefinedFileAttributeView.class) != null) { - throw new RuntimeException("UserDefinedFileAttributeView not supported, getFileAttributeView should return null"); - } + testFileAttributes(dir, BasicFileAttributeView.class, "basic"); + testFileAttributes(dir, PosixFileAttributeView.class, "posix"); + testFileAttributes(dir, DosFileAttributeView.class, "dos"); + testFileAttributes(dir, AclFileAttributeView.class, "acl"); + testFileAttributes(dir, UserDefinedFileAttributeView.class, "user"); /** * Test: Space atributes