Add __fseterr.

Trivial, obvious counterpart to the standard ferror(3) and clearerr(3),
and lets us build bison out of the box.

Bug: http://b/64273806
Test: ran tests
Change-Id: I20affabddb71210051165c41e86adfe5ae04f77f
diff --git a/libc/include/stdio_ext.h b/libc/include/stdio_ext.h
index 2f0f438..b8aa68d 100644
--- a/libc/include/stdio_ext.h
+++ b/libc/include/stdio_ext.h
@@ -45,6 +45,8 @@
 size_t __fpending(FILE* __fp) __INTRODUCED_IN(23);
 void _flushlbf(void) __INTRODUCED_IN(23);
 
+void __fseterr(FILE* __fp) __INTRODUCED_IN(28);
+
 #define FSETLOCKING_QUERY 0
 #define FSETLOCKING_INTERNAL 1
 #define FSETLOCKING_BYCALLER 2
diff --git a/libc/libc.arm.map b/libc/libc.arm.map
index 4586fdac..dc0eb93 100644
--- a/libc/libc.arm.map
+++ b/libc/libc.arm.map
@@ -1322,6 +1322,7 @@
   global:
     __freading;
     __free_hook;
+    __fseterr;
     __fwriting;
     __malloc_hook;
     __memalign_hook;
diff --git a/libc/libc.arm64.map b/libc/libc.arm64.map
index 75436ff..fdae8f1 100644
--- a/libc/libc.arm64.map
+++ b/libc/libc.arm64.map
@@ -1242,6 +1242,7 @@
   global:
     __freading;
     __free_hook;
+    __fseterr;
     __fwriting;
     __malloc_hook;
     __memalign_hook;
diff --git a/libc/libc.map.txt b/libc/libc.map.txt
index a8a52c3..07241d5 100644
--- a/libc/libc.map.txt
+++ b/libc/libc.map.txt
@@ -1347,6 +1347,7 @@
   global:
     __freading;
     __free_hook;
+    __fseterr;
     __fwriting;
     __malloc_hook;
     __memalign_hook;
diff --git a/libc/libc.mips.map b/libc/libc.mips.map
index 584807e..bbd599a 100644
--- a/libc/libc.mips.map
+++ b/libc/libc.mips.map
@@ -1306,6 +1306,7 @@
   global:
     __freading;
     __free_hook;
+    __fseterr;
     __fwriting;
     __malloc_hook;
     __memalign_hook;
diff --git a/libc/libc.mips64.map b/libc/libc.mips64.map
index 75436ff..fdae8f1 100644
--- a/libc/libc.mips64.map
+++ b/libc/libc.mips64.map
@@ -1242,6 +1242,7 @@
   global:
     __freading;
     __free_hook;
+    __fseterr;
     __fwriting;
     __malloc_hook;
     __memalign_hook;
diff --git a/libc/libc.x86.map b/libc/libc.x86.map
index 4498d6d..6e9acc0 100644
--- a/libc/libc.x86.map
+++ b/libc/libc.x86.map
@@ -1304,6 +1304,7 @@
   global:
     __freading;
     __free_hook;
+    __fseterr;
     __fwriting;
     __malloc_hook;
     __memalign_hook;
diff --git a/libc/libc.x86_64.map b/libc/libc.x86_64.map
index 75436ff..fdae8f1 100644
--- a/libc/libc.x86_64.map
+++ b/libc/libc.x86_64.map
@@ -1242,6 +1242,7 @@
   global:
     __freading;
     __free_hook;
+    __fseterr;
     __fwriting;
     __malloc_hook;
     __memalign_hook;
diff --git a/libc/stdio/stdio_ext.cpp b/libc/stdio/stdio_ext.cpp
index 8cf4f4b..e17b62a 100644
--- a/libc/stdio/stdio_ext.cpp
+++ b/libc/stdio/stdio_ext.cpp
@@ -72,6 +72,10 @@
   fflush(NULL);
 }
 
+void __fseterr(FILE* fp) {
+  fp->_flags |= __SERR;
+}
+
 int __fsetlocking(FILE* fp, int type) {
   int old_state = _EXT(fp)->_caller_handles_locking ? FSETLOCKING_BYCALLER : FSETLOCKING_INTERNAL;
   if (type == FSETLOCKING_QUERY) {