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