RFR: JDK-8260966 (fs) Consolidate Linux and macOS implementations of UserDefinedFileAttributeView

Sebastian Stenzel github.com+1204330+overheadhunter at openjdk.java.net
Wed Feb 17 08:58:09 UTC 2021


Deduplicated code in these classes:
- `LinuxUserDefinedAttributeView` + `BsdUserDefinedAttributeView` → `UnixUserDefinedAttributeView`. Due to different supported length of attribute names, I added an abstract method `UnixUserDefinedAttributeView.maxNameLength()`.
- `LinuxNativeDispatcher` + `BsdNativeDispatcher` → `UnixNativeDispatcher`. I basically just moved the Linux implementation up to Unix and added preprocessor directives to distinguish Linux/BSD/Other. Others will throw ENOTSUP UnixExceptions.
- `LinuxFileStore.isExtendedAttributesEnabled()` + `BsdFileStore.isExtendedAttributesEnabled()` → `UnixFileStore.isExtendedAttributesEnabled()`

For the latter I introduced `UnixConstants.XATTR_NOT_FOUND`, which is `ENODATA` on Linux and `ENOATTR` on BSD. Note that `UnixConstants.ENODATA` is still present, as @AlanBateman "would prefer if we left ENODATA so that it can be used in Linux specific code" (Quote from https://github.com/openjdk/jdk/pull/2363#issuecomment-772534587)

This also fixes `Files.copy(src, dst, StandardCopyOption.COPY_ATTRIBUTES)` on macOS/BSD. Previosly an [invocation was missing](https://github.com/openjdk/jdk/blob/jdk-17%2B7/src/java.base/macosx/classes/sun/nio/fs/BsdFileSystem.java#L70-L72).

I plan to add further commits to clean up this code, once the deduplication is reviewed.

-------------

Commit messages:
 - deduplicate FileStore.isExtendedAttributesEnabled(...)
 - Deduplicate LinuxUserDefinedFileAttributeView + BsdUserDefinedFileAttributeView

Changes: https://git.openjdk.java.net/jdk/pull/2604/files
 Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=2604&range=00
  Issue: https://bugs.openjdk.java.net/browse/JDK-8260966
  Stats: 1163 lines in 16 files changed: 162 ins; 964 del; 37 mod
  Patch: https://git.openjdk.java.net/jdk/pull/2604.diff
  Fetch: git fetch https://git.openjdk.java.net/jdk pull/2604/head:pull/2604

PR: https://git.openjdk.java.net/jdk/pull/2604


More information about the nio-dev mailing list