diff --git a/pom.xml b/pom.xml index d7d6660..e30c171 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 org.cryptomator fuse-nio-adapter - 1.1.0 + 1.1.1 FUSE-NIO-Adapter Access resources at a given NIO path via FUSE. https://github.com/cryptomator/fuse-nio-adapter @@ -15,7 +15,7 @@ - 0.5.2.1 + 0.5.3 2.20 27.0-jre 1.7.25 diff --git a/src/main/java/org/cryptomator/frontend/fuse/OpenOptionsUtil.java b/src/main/java/org/cryptomator/frontend/fuse/OpenOptionsUtil.java index e8308f6..5af40c4 100644 --- a/src/main/java/org/cryptomator/frontend/fuse/OpenOptionsUtil.java +++ b/src/main/java/org/cryptomator/frontend/fuse/OpenOptionsUtil.java @@ -21,16 +21,19 @@ public OpenOptionsUtil(BitMaskEnumUtil bitMaskUtil) { public Set fuseOpenFlagsToNioOpenOptions(long mask) { Set flags = bitMaskUtil.bitMaskToSet(OpenFlags.class, mask); - return (fuseOpenFlagsToNioOpenOptions(flags)); + return fuseOpenFlagsToNioOpenOptions(flags); } public Set fuseOpenFlagsToNioOpenOptions(Set flags) { Set result = new HashSet<>(); - if (flags.contains(OpenFlags.O_RDONLY) || flags.contains(OpenFlags.O_RDWR)) { + // https://linux.die.net/man/3/open: + if (flags.contains(OpenFlags.O_RDWR)) { result.add(StandardOpenOption.READ); - } - if (flags.contains(OpenFlags.O_WRONLY) || flags.contains(OpenFlags.O_RDWR)) { result.add(StandardOpenOption.WRITE); + } else if (flags.contains(OpenFlags.O_WRONLY)) { + result.add(StandardOpenOption.WRITE); + } else if (flags.contains(OpenFlags.O_RDONLY)) { + result.add(StandardOpenOption.READ); } if (flags.contains(OpenFlags.O_APPEND)) { result.add(StandardOpenOption.APPEND); diff --git a/src/test/java/org/cryptomator/frontend/fuse/OpenOptionsUtilTest.java b/src/test/java/org/cryptomator/frontend/fuse/OpenOptionsUtilTest.java index c0a2236..b514c01 100644 --- a/src/test/java/org/cryptomator/frontend/fuse/OpenOptionsUtilTest.java +++ b/src/test/java/org/cryptomator/frontend/fuse/OpenOptionsUtilTest.java @@ -30,7 +30,9 @@ static Stream openOptionsProvider() { return Stream.of( // Arguments.of(Sets.newHashSet(StandardOpenOption.READ), EnumSet.of(OpenFlags.O_RDONLY)), // Arguments.of(Sets.newHashSet(StandardOpenOption.WRITE), EnumSet.of(OpenFlags.O_WRONLY)), // + Arguments.of(Sets.newHashSet(StandardOpenOption.WRITE), EnumSet.of(OpenFlags.O_WRONLY, OpenFlags.O_RDONLY)), // write wins Arguments.of(Sets.newHashSet(StandardOpenOption.READ, StandardOpenOption.WRITE), EnumSet.of(OpenFlags.O_RDWR)), // + Arguments.of(Sets.newHashSet(StandardOpenOption.READ, StandardOpenOption.WRITE), EnumSet.of(OpenFlags.O_RDWR, OpenFlags.O_WRONLY, OpenFlags.O_RDONLY)), // Arguments.of(Sets.newHashSet(StandardOpenOption.WRITE, StandardOpenOption.TRUNCATE_EXISTING), EnumSet.of(OpenFlags.O_WRONLY, OpenFlags.O_TRUNC)) // ); }