diff --git a/src/sbbs3/nopen.c b/src/sbbs3/nopen.c
index 0a04b854e322109802ba0b79c5d1e55350aa3012..0701fad391ea2334219c327420f7aab2ccd499c4 100644
--- a/src/sbbs3/nopen.c
+++ b/src/sbbs3/nopen.c
@@ -50,10 +50,13 @@ int nopen(const char* str, int access)
     if(access&O_DENYNONE) {
         share=SH_DENYNO;
         access&=~O_DENYNONE; }
-    else if(access==O_RDONLY) share=SH_DENYWR;
+    else if((access&~O_BINARY)==O_RDONLY) share=SH_DENYWR;
     else share=SH_DENYRW;
+
+#if !defined(__unix__)	/* Basically, a no-op on Unix anyway */
 	if(!(access&O_TEXT))
 		access|=O_BINARY;
+#endif
     while(((file=sopen(str,access,share,S_IREAD|S_IWRITE))==-1)
         && (errno==EACCES || errno==EAGAIN || errno==EDEADLOCK) && count++<LOOP_NOPEN)
         if(count)