++int
++__svfscanf(FILE * __restrict fp, const char * __restrict fmt0, va_list ap)
++{
++ return __svfscanf_l(fp, __current_locale(), fmt0, ap);
++}
++
+ /*
+ * Fill in the given table from the scanset at the given format
+ * (just after `['). Return a pointer to the character past the
+@@ -807,9 +849,10 @@
+ * considered part of the scanset.
+ */
+ static const u_char *
+-__sccl(tab, fmt)
++__sccl(tab, fmt, loc)
+ char *tab;
+ const u_char *fmt;
++ locale_t loc;
+ {
+ int c, n, v, i;
+
+@@ -845,6 +888,7 @@
+ return (fmt - 1);
+
+ case '-':
++ {
+ /*
+ * A scanset of the form
+ * [01+-]
+@@ -865,8 +909,8 @@
+ */
+ n = *fmt;
+ if (n == ']'
+- || (__collate_load_error ? n < c :
+- __collate_range_cmp (n, c) < 0
++ || (loc->__collate_load_error ? n < c :
++ __collate_range_cmp (n, c, loc) < 0
+ )
+ ) {
+ c = '-';
+@@ -874,14 +918,14 @@
+ }
+ fmt++;
+ /* fill in the range */
+- if (__collate_load_error) {
++ if (loc->__collate_load_error) {
+ do {
+ tab[++c] = v;
+ } while (c < n);
+ } else {
+ for (i = 0; i < 256; i ++)
+- if ( __collate_range_cmp (c, i) < 0
+- && __collate_range_cmp (i, n) <= 0
++ if ( __collate_range_cmp (c, i, loc) < 0
++ && __collate_range_cmp (i, n, loc) <= 0
+ )
+ tab[i] = v;
+ }
+@@ -901,7 +945,7 @@
+ return (fmt);
+ #endif
+ break;
+-
++ }
+ case ']': /* end of scanset */
+ return (fmt);
+
+@@ -915,18 +959,42 @@
+
+ #ifndef NO_FLOATING_POINT