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)) //
);
}