flags.c.patch   [plain text]


--- flags.c.bsdnew	2009-11-11 13:33:06.000000000 -0800
+++ flags.c	2009-11-11 13:33:06.000000000 -0800
@@ -81,10 +81,17 @@ __sflags(mode, optr)
 	}
 
 	/* [rwa]\+ or [rwa]b\+ means read and write */
-	if (*mode == '+' || (*mode == 'b' && mode[1] == '+')) {
+	if (*mode == 'b')
+		mode++;
+	if (*mode == '+') {
 		ret = __SRW;
 		m = O_RDWR;
+		mode++;
+		if (*mode == 'b')
+			mode++;
 	}
+	if (*mode == 'x')
+		o |= O_EXCL;
 	*optr = m | o;
 	return (ret);
 }