// An interpretive version of __sccl from vfscanf.c --- a table of all wchar_t values would // be a little too expensive, and some kind of compressed version isn't worth the trouble. staticinlinebool in_ccl(wchar_t wc, constwchar_t* ccl) { // Is this a negated set? bool member_result = true; if (*ccl == '^') {
member_result = false;
++ccl;
}
// The first character may be ']' or '-' without being special. if (*ccl == '-' || *ccl == ']') { // A literal match? if (*ccl == wc) return member_result;
++ccl;
}
while (*ccl && *ccl != ']') { // The last character may be '-' without being special. if (*ccl == '-' && ccl[1] != '\0' && ccl[1] != ']') { wchar_t first = *(ccl - 1); wchar_t last = *(ccl + 1); if (first <= last) { // In the range? if (wc >= first && wc <= last) return member_result;
ccl += 2; continue;
} // A '-' is not considered to be part of a range if the character after // is not greater than the character before, so fall through...
} // A literal match? if (*ccl == wc) return member_result;
++ccl;
} return !member_result;
}
/* *vfwscanf
*/ int __vfwscanf(FILE* __restrict fp, constwchar_t* __restrict fmt, __va_list ap) {
wint_t c; /* character from format, or conversion */
size_t width; /* field width, or 0 */ wchar_t* p; /* points into all kinds of strings */ int n; /* handy integer */ int flags; /* flags as defined above */ wchar_t* p0; /* saves original value of p when necessary */ int nassigned; /* number of fields assigned */ int nconversions; /* number of conversions */ int nread; /* number of characters consumed from fp */ int base; /* base argument to strtoimax/strtouimax */ wchar_t buf[BUF]; /* buffer for numeric conversions */ constwchar_t* ccl;
wint_t wi; /* handy wint_t */ char* mbp; /* multibyte string pointer for %c %s %[ */
size_t nconv; /* number of bytes in mb. conversion */ char mbbuf[MB_LEN_MAX]; /* temporary mb. character buffer */
mbstate_t mbs;
_SET_ORIENTATION(fp, ORIENT_CHARS);
nassigned = 0;
nconversions = 0;
nread = 0;
base = 0; /* XXX just to keep gcc happy */ for (;;) {
c = *fmt++; if (c == 0) { return (nassigned);
} if (iswspace(c)) { while ((c = __fgetwc_unlock(fp)) != WEOF && iswspace(c))
; if (c != WEOF) __ungetwc(c, fp); continue;
} if (c != '%') goto literal;
width = 0;
flags = 0; /* *switchontheformat.continueifdone; *breakonceformattypeisderived.
*/
again:
c = *fmt++;
reswitch: switch (c) { case'%':
literal: if ((wi = __fgetwc_unlock(fp)) == WEOF) goto input_failure; if (wi != c) {
__ungetwc(wi, fp); goto match_failure;
}
nread++; continue;
case CT_FLOAT: /* scan a floating point number as if by strtod */ if (width == 0 || width > sizeof(buf) / sizeof(*buf) - 1)
width = sizeof(buf) / sizeof(*buf) - 1; if ((width = wparsefloat(fp, buf, buf + width)) == 0) goto match_failure; if ((flags & SUPPRESS) == 0) { if (flags & LONGDBL) { longdouble res = wcstold(buf, &p);
*va_arg(ap, longdouble*) = res;
} elseif (flags & LONG) { double res = wcstod(buf, &p);
*va_arg(ap, double*) = res;
} else { float res = wcstof(buf, &p);
*va_arg(ap, float*) = res;
} if (static_cast<size_t>(p - buf) != width) abort();
nassigned++;
}
nread += width;
nconversions++; break;
}
}
input_failure: return (nconversions != 0 ? nassigned : EOF);
match_failure: return (nassigned);
} #pragma clang diagnostic pop
Messung V0.5 in Prozent
¤ Diese beiden folgenden Angebotsgruppen bietet das Unternehmen0.36Angebot
(Wie Sie bei der Firma Beratungs- und Dienstleistungen beauftragen können 2026-09-28)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.