printk(message, pat, str, mismatch + 3*match); return success;
}
/* * The tests are all jammed together in one array to make it simpler * to place that array in the .init.rodata section. The obvious * "array of structures containing char *" has no way to force the * pointed-to strings to be in a particular section. * * Anyway, a test consists of: * 1. Expected glob_match result: '1' or '0'. * 2. Pattern to match: null-terminated string * 3. String to match against: null-terminated string * * The list of tests is terminated with a final '\0' instead of * a glob_match result character.
*/ staticcharconst glob_tests[] __initconst = /* Some basic tests */ "1""a\0""a\0" "0""a\0""b\0" "0""a\0""aa\0" "0""a\0""\0" "1""\0""\0" "0""\0""a\0" /* Simple character class tests */ "1""[a]\0""a\0" "0""[a]\0""b\0" "0""[!a]\0""a\0" "1""[!a]\0""b\0" "1""[ab]\0""a\0" "1""[ab]\0""b\0" "0""[ab]\0""c\0" "1""[!ab]\0""c\0" "1""[a-c]\0""b\0" "0""[a-c]\0""d\0" /* Corner cases in character class parsing */ "1""[a-c-e-g]\0""-\0" "0""[a-c-e-g]\0""d\0" "1""[a-c-e-g]\0""f\0" "1""[]a-ceg-ik[]\0""a\0" "1""[]a-ceg-ik[]\0""]\0" "1""[]a-ceg-ik[]\0""[\0" "1""[]a-ceg-ik[]\0""h\0" "0""[]a-ceg-ik[]\0""f\0" "0""[!]a-ceg-ik[]\0""h\0" "0""[!]a-ceg-ik[]\0""]\0" "1""[!]a-ceg-ik[]\0""f\0" /* Simple wild cards */ "1""?\0""a\0" "0""?\0""aa\0" "0""??\0""a\0" "1""?x?\0""axb\0" "0""?x?\0""abx\0" "0""?x?\0""xab\0" /* Asterisk wild cards (backtracking) */ "0""*??\0""a\0" "1""*??\0""ab\0" "1""*??\0""abc\0" "1""*??\0""abcd\0" "0""??*\0""a\0" "1""??*\0""ab\0" "1""??*\0""abc\0" "1""??*\0""abcd\0" "0""?*?\0""a\0" "1""?*?\0""ab\0" "1""?*?\0""abc\0" "1""?*?\0""abcd\0" "1""*b\0""b\0" "1""*b\0""ab\0" "0""*b\0""ba\0" "1""*b\0""bb\0" "1""*b\0""abb\0" "1""*b\0""bab\0" "1""*bc\0""abbc\0" "1""*bc\0""bc\0" "1""*bc\0""bbc\0" "1""*bc\0""bcbc\0" /* Multiple asterisks (complex backtracking) */ "1""*ac*\0""abacadaeafag\0" "1""*ac*ae*ag*\0""abacadaeafag\0" "1""*a*b*[bc]*[ef]*g*\0""abacadaeafag\0" "0""*a*b*[ef]*[cd]*g*\0""abacadaeafag\0" "1""*abcd*\0""abcabcabcabcdefg\0" "1""*ab*cd*\0""abcabcabcabcdefg\0" "1""*abcd*abcdef*\0""abcabcdabcdeabcdefg\0" "0""*abcd*\0""abcabcabcabcefg\0" "0""*ab*cd*\0""abcabcabcabcefg\0";
/* * Tests are jammed together in a string. The first byte is '1' * or '0' to indicate the expected outcome, or '\0' to indicate the * end of the tests. Then come two null-terminated strings: the * pattern and the string to match it against.
*/ while (*p) { bool expected = *p++ & 1; charconst *pat = p;
p += strlen(p) + 1;
successes += test(pat, p, expected);
p += strlen(p) + 1;
n++;
}
n -= successes;
printk(message, successes, n);
/* What's the errno for "kernel bug detected"? Guess... */ return n ? -ECANCELED : 0;
}
/* We need a dummy exit function to allow unload */ staticvoid __exit glob_fini(void) { }
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.