ref: 38016d871780c343aeba12f9ab10f9c59224b5e4
parent: bb3a3db29db8b3c84e54aa820fe3f37b2b979794
author: Hiltjo Posthuma <[email protected]>
date: Mon Feb 26 08:48:24 EST 2018
libc: fopen(), allow for example r+b and rb+
--- a/lib/c/_fpopen.c
+++ b/lib/c/_fpopen.c
@@ -14,14 +14,25 @@
flags = rw = bin = 0;
- if (mode[0] == '\0)
+ if (mode[0] == '\0')
goto einval;
- if (mode[i = 1] == '+')
- i++, rw = 1;
- if (mode[i] == 'b')
- i++, bin = 1;
- if (mode[i] != '\0')
- goto einval;
+
+ for (i = 1; mode[i]; ++i) {
+ switch (mode[i]) {
+ case '+':
+ if (rw)
+ goto einval;
+ rw = 1;
+ break;
+ case 'b':
+ if (bin)
+ goto einval;
+ bin = 1;
+ break;
+ default:
+ goto einval;
+ }
+ }
switch (mode[0]) {
case 'a':