Simplify CT_CCL and CT_STRING inner loop.
Makes no difference to the benchmarks, but does make the code a bit
more readable.
Bug: http://b/68672236
Test: ran tests, benchmarks
Change-Id: I63fa5f78d077c86e4f4f194f2c76ab5510c29109
diff --git a/libc/Android.bp b/libc/Android.bp
index 78fcb12..c81e8e5 100644
--- a/libc/Android.bp
+++ b/libc/Android.bp
@@ -39,6 +39,7 @@
"-Wall",
"-Wextra",
"-Wunused",
+ "-Wno-char-subscripts",
"-Wno-deprecated-declarations",
"-Wno-gcc-compat",
"-Wframe-larger-than=2048",
diff --git a/libc/stdio/vfscanf.cpp b/libc/stdio/vfscanf.cpp
index f2e136c..49d6bf6 100644
--- a/libc/stdio/vfscanf.cpp
+++ b/libc/stdio/vfscanf.cpp
@@ -235,6 +235,8 @@
break;
case 's':
+ memset(ccltab, 1, 256);
+ ccltab['\t'] = ccltab['\n'] = ccltab['\v'] = ccltab['\f'] = ccltab['\r'] = ccltab[' '] = 0;
c = CT_STRING;
break;
@@ -482,7 +484,7 @@
}
} else if (flags & SUPPRESS) {
n = 0;
- while ((c == CT_CCL && ccltab[*fp->_p]) || (c == CT_STRING && !IsSpace(*fp->_p))) {
+ while (ccltab[*fp->_p]) {
n++, fp->_r--, fp->_p++;
if (--width == 0) break;
if (fp->_r <= 0 && __srefill(fp)) {
@@ -500,7 +502,7 @@
p = va_arg(ap, char*);
}
n = 0;
- while ((c == CT_CCL && ccltab[*fp->_p]) || (c == CT_STRING && !IsSpace(*fp->_p))) {
+ while (ccltab[*fp->_p]) {
fp->_r--;
p[n++] = *fp->_p++;
if (allocation != NULL && n == capacity) {
@@ -741,10 +743,10 @@
if (c == '^') {
v = 1; /* default => accept */
c = *fmt++; /* get new first char */
- } else
+ } else {
v = 0; /* default => reject */
- /* should probably use memset here */
- for (n = 0; n < 256; n++) tab[n] = v;
+ }
+ memset(tab, v, 256);
if (c == 0) return (fmt - 1); /* format ended before closing ] */
/*