/* *Loopovereachtoken(characterorclass)inpat,matching *itagainsttheremainingunmatchedtailofstr.Returnfalse *onmismatch,ortrueaftermatchingthetrailingnulbytes.
*/ for (;;) { unsignedchar c = *str++; unsignedchar d = *pat++;
switch (d) { case'?': /* Wildcard: anything but nul */ if (c == '\0') returnfalse; break; case'*': /* Any-length wildcard */ if (*pat == '\0') /* Optimize trailing * case */ returntrue;
back_pat = pat;
back_str = --str; /* Allow zero-length match */ break; case'[': { /* Character class */ if (c == '\0') /* No possible match */ returnfalse; bool match = false, inverted = (*pat == '!'); charconst *class = pat + inverted; unsignedchar a = *class++;
/* *Iterateovereachspaninthecharacterclass. *Aspaniseitherasinglecharactera,ora *rangea-b.Thefirstspanmaybeginwith']'.
*/ do { unsignedchar b = a;
if (a == '\0') /* Malformed */ goto literal;
if (class[0] == '-' && class[1] != ']') {
b = class[1];
if (b == '\0') goto literal;
class += 2; /* Any special action if a > b? */
}
match |= (a <= c && c <= b);
} while ((a = *class++) != ']');
if (match == inverted) goto backtrack;
pat = class;
} break; case'\\':
d = *pat++;
fallthrough; default: /* Literal character */
literal: if (c == d) { if (d == '\0') returntrue; break;
}
backtrack: if (c == '\0' || !back_pat) returnfalse; /* No point continuing */ /* Try again from last *, one character later in str. */
pat = back_pat;
str = ++back_str; break;
}
}
}
EXPORT_SYMBOL(glob_match);
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.12 Sekunden
(vorverarbeitet am 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.