Sortix
Sortix Download Manual Development Source Code News Blog More

os-test > fnmatch

Legend

Outcomes
Good Good Missing optional Outside libc
Partial Extension Previous posix
Neutral None
Bad Compile error Incompatible Missing header Undeclared Undefined reference Unknown type

Good. A cell is good if the declaration is present in the header and can be linked with libc. This outcome means the test succeeded with the appropriate -D_POSIX_C_SOURCE=202405 or -D_XOPEN_SOURCE=800 feature macros and the standard libraries libc, libpthread, libm, librt, and libxnet.

Missing optional. A cell is missing_optional if the test could not be compiled, but the declaration is optional in POSIX and need not be provided.

Outside libc. A cell is outside_libc if the test could be compiled, but had to be linked with another standard library than the ones prescribed by POSIX: libc, libpthread, libm, librt, and libxnet. This may not conform to POSIX depending on the linking options provided by getconf(1)/confstr(3).

Extension. A cell is extension if the test could not be compiled with the _POSIX_C_SOURCE and _XOPEN_SOURCE feature macros, but it could instead be compiled with other system-specific feature macros that provide the entire API. This outcome means the system header feature macro logic does not support the latest POSIX.1-2024 standard and only receives partial credit. This outcome typically indicates a declaration new to POSIX.1-2024.

Previous posix. A cell is previous_posix if the test could not be compiled with the -D_POSIX_C_SOURCE=202405 or -D_XOPEN_SOURCE=800 feature macros from the POSIX.1-2024 standard, but the test could instead be compiled with the older -D_POSIX_C_SOURCE=200809L or -D_XOPEN_SOURCE=700 feature macros from the older POSIX.1-2008 standard. This outcome means the system header feature macro logic does not support the latest POSIX.1-2024 standard and only receives partial credit. In particular, the header did not check if the value was higher than the supported value, but instead hard-coded the supported values, and failed to be forward compatible with new standard versions.

None. A cell is none if there is no test data result for that operating system.

Compile error. A cell is compile_error if the test could not be compiled and the error message was not recognized as a more precise error test outcome.

Incompatible. A cell is incompatible if the declaration existed in the header, but had a signature that is incompatible with the standardized declaration. This outcome typically indicates a type error in the declaration. Addressing the issue may require an incompatible ABI change or special compatibility logic.

Missing header. A cell is missing_header if the header did not exist.

Undeclared. A cell is undeclared if the header did not contain the declaration.

Undefined reference. A cell is undefined if the test could be compiled, but could not be linked with the standard library.

Unknown type. A cell is unknown_type if the test could not be compiled and failed because a required type was not declared. In some cases, functions fail because the header omitted a required type for a function and instead declared the function in an alternate fashion with an incompatible alias for the type.

§. The § link on the left of each row links to that row.

fnmatch

This suite tests fnmatch.

Each feature in the POSIX fnmatch pattern syntax is tested.

This suite is split into the strict base POSIX tests, which tests every sentence that is mandatory in POSIX; and the nonstandard tests, which tests all the optional behavior as well as common de facto extensions.

Each fnmatch feature is exhaustively combined with each other fnmatch feature to ensure that the features work together. More complicated tests combine multiple features in interesting cases. Each flag to fnmatch is tested as well with the relevant features.

The POSIX requirements on fnmatch can be tricky to understand. The POSIX.1-2024 chapter 2.14 text could not be written to be more confusing, as well as the relevant implications on the chapter 9 bracket expression syntax that is shared with regular expressions, but with additional special rules. Many tests use a truth table approach where every possible reasonable input is given to each pattern, so it's more likely that implementation bugs are discovered.

This suite has resolved the proper behaviors of as many unthinkably weird edge cases as possible. The backslash escaping rules have been an endless ride of curious questions about what happens if you put backslashes in unexpected places like [[:al\num:]], which the standard fails to consider explicitly, and we have to interpret what other language does apply to this case. POSIX.1-2024 changed a lot of the relevant language compared to the older POSIX.1-2008 in an effort to fix contradictions, and the resulting prose is endlessly difficult to interpret, and requires the rationale section to figure out what heck they even meant. Some patterns have unspecified behavior and are not tested.

The nonstandard tests check every extension I know of, along with UTF-8 and unicode support, including case sensitivity and the behavior on invalid UTF-8 sequences. It's technically fine to disagree with the nonstandard tests, and they mostly exist to study the availability of extensions, and to make sure they are implemented properly in a common way. There are very few extensions to the fnmatch pattern format, since POSIX is very strict unlike regular expressions, but POSIX does allow a few extensions like [^ behaving the same as [^.

Overall this test suite is very comprehensive and should provide a near exhaustive coverage of the fnmatch features. I read every relevant sentence in POSIX and made sure a test case covered each sentence.

aix
AIX 7.3 powerpc
dragonfly
DragonFly 6.4-RELEASE x86_64
freebsd
FreeBSD 15.0-RELEASE amd64
haiku
Haiku R1~beta5+development x86_64
hurd
GNU 0.9 i686-AT386
linux
Linux 7.1.12+deb14-amd64 x86_64
macos
macOS 26.5.2 Darwin 25.5.0 arm64
managarm
Managarm 0.0.1-rolling x86_64
minix
Minix 3.4.0 i386
musl
Linux 6.18.52-0-lts x86_64
netbsd
NetBSD 10.1 amd64
omnios
SunOS 5.11 r151056 i386
openbsd
OpenBSD 7.8 amd64
redox
Redox 0.5.12 x86_64
solaris
SunOS 5.11 11.4.95.227.1 sparc
sortix
Sortix 1.1.0-dev Oct 7 2026 x86_64
§ asterisk aix: good
exit: 0
dragonfly: good
exit: 0
freebsd: good
exit: 0
haiku: good
exit: 0
hurd: good
exit: 0
linux: good
exit: 0
macos: good
exit: 0
managarm: none minix: good
exit: 0
musl: good
exit: 0
netbsd: good
exit: 0
omnios: good
exit: 0
openbsd: good
exit: 0
redox: none solaris: good
exit: 0
sortix: good
exit: 0
§ asterisk-noescape aix: good
exit: 0
dragonfly: good
exit: 0
freebsd: good
exit: 0
haiku: good
exit: 0
hurd: good
exit: 0
linux: good
exit: 0
macos: good
exit: 0
managarm: none minix: good
exit: 0
musl: good
exit: 0
netbsd: good
exit: 0
omnios: good
exit: 0
openbsd: good
exit: 0
redox: none solaris: good
exit: 0
sortix: good
exit: 0
§ bracket aix: good
exit: 0
dragonfly: good
exit: 0
freebsd: good
exit: 0
haiku: good
exit: 0
hurd: good
exit: 0
linux: good
exit: 0
macos: good
exit: 0
managarm: none minix: good
exit: 0
musl: good
exit: 0
netbsd: good
exit: 0
omnios: good
exit: 0
openbsd: good
exit: 0
redox: none solaris: good
exit: 0
sortix: bad
'[]]' did not match "]"
§ bracket-charclass aix: good
exit: 0
dragonfly: bad
'[[:alnum:]]' did not match "a"
freebsd: good
exit: 0
haiku: good
exit: 0
hurd: good
exit: 0
linux: good
exit: 0
macos: good
exit: 0
managarm: none minix: bad
'[[:alnum:]]' did not match "a"
musl: good
exit: 0
netbsd: bad
'[[:alnum:]]' did not match "a"
omnios: bad
'[[:alnum:]]' did not match "a"
openbsd: good
exit: 0
redox: none solaris: good
exit: 0
sortix: bad
'[[:alnum:]]' did not match "a"
§ bracket-charclass-escape aix: bad
'[\[:alnum:]]' did not reject "a"
dragonfly: good
exit: 0
freebsd: good
exit: 0
haiku: bad
'[\[:alnum:]]' did not reject "a"
hurd: good
exit: 0
linux: good
exit: 0
macos: good
exit: 0
managarm: none minix: good
exit: 0
musl: bad
'[\[:alnum:]]' did not reject "a"
netbsd: good
exit: 0
omnios: good
exit: 0
openbsd: bad
'[\[:alnum:]]' did not reject "a"
redox: none solaris: bad
'[\[:alnum:]]' did not reject "a"
sortix: good
exit: 0
§ bracket-charclass-escape-mid aix: bad
'[[:al\num:]]' did not reject "#"
dragonfly: bad
'[[:alnum:]]' did not match "a"
freebsd: bad
'[[:al\num:]]' did not match "a"
haiku: bad
'[[:al\num:]]' did not match "a"
hurd: bad
'[[:al\num:]]' did not match "a"
linux: bad
'[[:al\num:]]' did not match "a"
macos: bad
'[[:al\num:]]' fnmatch returned weird result 2 on "a"
managarm: none minix: bad
'[[:alnum:]]' did not match "a"
musl: bad
'[[:al\num:]]' did not match "a"
netbsd: bad
'[[:alnum:]]' did not match "a"
omnios: bad
'[[:alnum:]]' did not match "a"
openbsd: bad
'[[:al\num:]]' did not match "a"
redox: none solaris: bad
'[[:al\num:]]' did not match "a"
sortix: bad
'[[:alnum:]]' did not match "a"
§ bracket-charclass-noescape aix: good
exit: 0
dragonfly: bad
'\[[:alnum:]]' FNM_NOESCAPE did not match "\a"
freebsd: good
exit: 0
haiku: good
exit: 0
hurd: good
exit: 0
linux: good
exit: 0
macos: good
exit: 0
managarm: none minix: bad
'\[[:alnum:]]' FNM_NOESCAPE did not match "\a"
musl: good
exit: 0
netbsd: bad
'\[[:alnum:]]' FNM_NOESCAPE did not match "\a"
omnios: bad
'\[[:alnum:]]' FNM_NOESCAPE did not match "\a"
openbsd: good
exit: 0
redox: none solaris: good
exit: 0
sortix: bad
'\[[:alnum:]]' FNM_NOESCAPE did not match "\a"
§ bracket-collate aix: good
exit: 0
dragonfly: bad
'[[.a.]]' did not match "a"
freebsd: good
exit: 0
haiku: bad
'[[.a.]]' did not match "a"
hurd: good
exit: 0
linux: good
exit: 0
macos: good
exit: 0
managarm: none minix: bad
'[[.a.]]' did not match "a"
musl: bad
'[[.a.]]' did not match "a"
netbsd: bad
'[[.a.]]' did not match "a"
omnios: bad
'[[.a.]]' did not match "a"
openbsd: bad
'[[.a.]]' did not match "a"
redox: none solaris: good
exit: 0
sortix: bad
'[[.a.]]' did not match "a"
§ bracket-collate-escape aix: bad
'[\[.a.]]' did not reject "\"
dragonfly: bad
'[[.a.]]' did not match "a"
freebsd: bad
'[[.\a.]]' did not match "a"
haiku: bad
'[[.a.]]' did not match "a"
hurd: bad
'[[.\a.]]' did not match "a"
linux: bad
'[[.\a.]]' did not match "a"
macos: bad
'[[.\a.]]' fnmatch returned weird result 2 on "a"
managarm: none minix: bad
'[[.a.]]' did not match "a"
musl: bad
'[[.a.]]' did not match "a"
netbsd: bad
'[[.a.]]' did not match "a"
omnios: bad
'[[.a.]]' did not match "a"
openbsd: bad
'[[.a.]]' did not match "a"
redox: none solaris: bad
'[\[.a.]]' did not reject "\"
sortix: bad
'[[.a.]]' did not match "a"
§ bracket-collate-noescape aix: good
exit: 0
dragonfly: bad
'[[.a.]]' FNM_NOESCAPE did not match "a"
freebsd: good
exit: 0
haiku: bad
'[[.a.]]' FNM_NOESCAPE did not match "a"
hurd: good
exit: 0
linux: good
exit: 0
macos: good
exit: 0
managarm: none minix: bad
'[[.a.]]' FNM_NOESCAPE did not match "a"
musl: bad
'[[.a.]]' FNM_NOESCAPE did not match "a"
netbsd: bad
'[[.a.]]' FNM_NOESCAPE did not match "a"
omnios: bad
'[[.a.]]' FNM_NOESCAPE did not match "a"
openbsd: bad
'[[.a.]]' FNM_NOESCAPE did not match "a"
redox: none solaris: good
exit: 0
sortix: bad
'[[.a.]]' FNM_NOESCAPE did not match "a"
§ bracket-equivclass aix: good
exit: 0
dragonfly: bad
'[[=a=]]' did not match "a"
freebsd: good
exit: 0
haiku: bad
'[[=a=]]' did not match "a"
hurd: good
exit: 0
linux: good
exit: 0
macos: good
exit: 0
managarm: none minix: bad
'[[=a=]]' did not match "a"
musl: bad
'[[=a=]]' did not match "a"
netbsd: bad
'[[=a=]]' did not match "a"
omnios: bad
'[[=a=]]' did not match "a"
openbsd: bad
'[[=a=]]' did not match "a"
redox: none solaris: good
exit: 0
sortix: bad
'[[=a=]]' did not match "a"
§ bracket-equivclass-escape aix: bad
'[\[=a=]]' did not reject "\"
dragonfly: bad
'[[=a=]]' did not match "a"
freebsd: bad
'[[=\a=]]' did not match "a"
haiku: bad
'[[=a=]]' did not match "a"
hurd: bad
'[[=\a=]]' did not match "a"
linux: bad
'[[=\a=]]' did not match "a"
macos: bad
'[[=\a=]]' fnmatch returned weird result 2 on "a"
managarm: none minix: bad
'[[=a=]]' did not match "a"
musl: bad
'[[=a=]]' did not match "a"
netbsd: bad
'[[=a=]]' did not match "a"
omnios: bad
'[[=a=]]' did not match "a"
openbsd: bad
'[[=a=]]' did not match "a"
redox: none solaris: bad
'[\[=a=]]' did not reject "\"
sortix: bad
'[[=a=]]' did not match "a"
§ bracket-equivclass-noescape aix: good
exit: 0
dragonfly: bad
'[[=a=]]' FNM_NOESCAPE did not match "a"
freebsd: good
exit: 0
haiku: bad
'[[=a=]]' FNM_NOESCAPE did not match "a"
hurd: good
exit: 0
linux: good
exit: 0
macos: good
exit: 0
managarm: none minix: bad
'[[=a=]]' FNM_NOESCAPE did not match "a"
musl: bad
'[[=a=]]' FNM_NOESCAPE did not match "a"
netbsd: bad
'[[=a=]]' FNM_NOESCAPE did not match "a"
omnios: bad
'[[=a=]]' FNM_NOESCAPE did not match "a"
openbsd: bad
'[[=a=]]' FNM_NOESCAPE did not match "a"
redox: none solaris: good
exit: 0
sortix: bad
'[[=a=]]' FNM_NOESCAPE did not match "a"
§ bracket-escape aix: bad
'[x\y]' did not reject "\"
dragonfly: good
exit: 0
freebsd: bad
'[x\]]' did not match "x"
haiku: bad
'[x\y]' did not reject "\"
hurd: good
exit: 0
linux: good
exit: 0
macos: bad
'[x\]]' did not match "x"
managarm: none minix: good
exit: 0
musl: bad
'[x\y]' did not reject "\"
netbsd: good
exit: 0
omnios: good
exit: 0
openbsd: good
exit: 0
redox: none solaris: bad
'[x\y]' did not reject "\"
sortix: bad
'\[foo]' did not reject "\f"
§ bracket-invalid aix: bad
'[foo\]' did not match "[foo]"
dragonfly: good
exit: 0
freebsd: bad
'[foo\]' did not reject "f"
haiku: bad
'[foo\]' did not match "[foo]"
hurd: good
exit: 0
linux: good
exit: 0
macos: bad
'[foo' fnmatch returned weird result 2 on "f"
managarm: none minix: bad
'[foo' did not match "[foo"
musl: bad
'[foo\]' did not match "[foo]"
netbsd: bad
'[foo' did not match "[foo"
omnios: good
exit: 0
openbsd: good
exit: 0
redox: none solaris: bad
'[foo\]' did not match "[foo]"
sortix: bad
'[foo\]' did not reject "[foo\]"
§ bracket-noescape aix: good
exit: 0
dragonfly: good
exit: 0
freebsd: good
exit: 0
haiku: good
exit: 0
hurd: good
exit: 0
linux: good
exit: 0
macos: good
exit: 0
managarm: none minix: good
exit: 0
musl: good
exit: 0
netbsd: good
exit: 0
omnios: good
exit: 0
openbsd: good
exit: 0
redox: none solaris: good
exit: 0
sortix: bad
'[foo\]' FNM_NOESCAPE did not reject "[foo\]"
§ bracket-range aix: good
exit: 0
dragonfly: good
exit: 0
freebsd: good
exit: 0
haiku: good
exit: 0
hurd: good
exit: 0
linux: good
exit: 0
macos: good
exit: 0
managarm: none minix: good
exit: 0
musl: good
exit: 0
netbsd: good
exit: 0
omnios: good
exit: 0
openbsd: good
exit: 0
redox: none solaris: good
exit: 0
sortix: bad
'[a-z]' did not match "b"
§ bracket-range-collate aix: good
exit: 0
dragonfly: bad
'[[.b.]-[.d.]]' did not match "b"
freebsd: good
exit: 0
haiku: bad
'[[.b.]-[.d.]]' did not match "b"
hurd: good
exit: 0
linux: good
exit: 0
macos: good
exit: 0
managarm: none minix: bad
'[[.b.]-[.d.]]' did not match "b"
musl: bad
'[[.b.]-[.d.]]' did not match "b"
netbsd: bad
'[[.b.]-[.d.]]' did not match "b"
omnios: bad
'[[.b.]-[.d.]]' did not match "b"
openbsd: bad
'[[.b.]-[.d.]]' did not match "b"
redox: none solaris: good
exit: 0
sortix: bad
'[[.b.]-[.d.]]' did not match "b"
§ bracket-range-collate-escape aix: bad
'[[.\\.]-[.a.]]' did not match "]"
dragonfly: bad
'[[.b.]-[.d.]]' did not match "c"
freebsd: bad
'[[.\\.]-[.a.]]' did not match "]"
haiku: bad
'[[.b.]-[.d.]]' did not match "c"
hurd: bad
'[[.\\.]-[.a.]]' did not match "]"
linux: bad
'[[.\\.]-[.a.]]' did not match "]"
macos: bad
'[[.\\.]-[.a.]]' fnmatch returned weird result 2 on "-"
managarm: none minix: bad
'[[.b.]-[.d.]]' did not match "c"
musl: bad
'[[.b.]-[.d.]]' did not match "c"
netbsd: bad
'[[.b.]-[.d.]]' did not match "c"
omnios: bad
'[[.b.]-[.d.]]' did not match "c"
openbsd: bad
'[[.b.]-[.d.]]' did not match "c"
redox: none solaris: bad
'[[.\\.]-[.a.]]' did not match "]"
sortix: bad
'[[.b.]-[.d.]]' did not match "c"
§ bracket-range-collate-negative aix: good
exit: 0
dragonfly: good
exit: 0
freebsd: good
exit: 0
haiku: bad
'[d-[.b.]]' did not reject "d"
hurd: good
exit: 0
linux: good
exit: 0
macos: good
exit: 0
managarm: none minix: good
exit: 0
musl: bad
'[d-[.b.]]' did not reject "d"
netbsd: good
exit: 0
omnios: good
exit: 0
openbsd: good
exit: 0
redox: none solaris: good
exit: 0
sortix: good
exit: 0
§ bracket-range-collate-noescape aix: good
exit: 0
dragonfly: bad
'[[.b.]-[.d.]]' FNM_NOESCAPE did not match "c"
freebsd: good
exit: 0
haiku: bad
'[[.b.]-[.d.]]' FNM_NOESCAPE did not match "c"
hurd: good
exit: 0
linux: good
exit: 0
macos: good
exit: 0
managarm: none minix: bad
'[[.b.]-[.d.]]' FNM_NOESCAPE did not match "c"
musl: bad
'[[.b.]-[.d.]]' FNM_NOESCAPE did not match "c"
netbsd: bad
'[[.b.]-[.d.]]' FNM_NOESCAPE did not match "c"
omnios: bad
'[[.b.]-[.d.]]' FNM_NOESCAPE did not match "c"
openbsd: bad
'[[.b.]-[.d.]]' FNM_NOESCAPE did not match "c"
redox: none solaris: good
exit: 0
sortix: bad
'[[.b.]-[.d.]]' FNM_NOESCAPE did not match "c"
§ bracket-range-escape aix: bad
'[a\-b]' did not match "-"
dragonfly: good
exit: 0
freebsd: good
exit: 0
haiku: bad
'[a\-b]' did not match "-"
hurd: good
exit: 0
linux: good
exit: 0
macos: good
exit: 0
managarm: none minix: good
exit: 0
musl: bad
'[a\-b]' did not match "-"
netbsd: good
exit: 0
omnios: good
exit: 0
openbsd: good
exit: 0
redox: none solaris: bad
'[a\-b]' did not match "-"
sortix: bad
'[Z-\]]' did not match "["
§ bracket-range-negative aix: good
exit: 0
dragonfly: good
exit: 0
freebsd: good
exit: 0
haiku: bad
'[d-b]' did not reject "b"
hurd: good
exit: 0
linux: good
exit: 0
macos: good
exit: 0
managarm: none minix: good
exit: 0
musl: bad
'[d-b]' did not reject "b"
netbsd: good
exit: 0
omnios: good
exit: 0
openbsd: good
exit: 0
redox: none solaris: good
exit: 0
sortix: bad
'[d-b]' did not reject "b"
§ bracket-range-noescape aix: good
exit: 0
dragonfly: good
exit: 0
freebsd: good
exit: 0
haiku: good
exit: 0
hurd: good
exit: 0
linux: good
exit: 0
macos: good
exit: 0
managarm: none minix: good
exit: 0
musl: good
exit: 0
netbsd: good
exit: 0
omnios: good
exit: 0
openbsd: good
exit: 0
redox: none solaris: good
exit: 0
sortix: bad
'[a\-b]' FNM_NOESCAPE did not reject "-"
§ casefold aix: undeclared dragonfly: good
exit: 0
freebsd: good
exit: 0
haiku: good
exit: 0
hurd: good
exit: 0
linux: good
exit: 0
macos: good
exit: 0
managarm: none minix: good
exit: 0
musl: good
exit: 0
netbsd: good
exit: 0
omnios: good
exit: 0
openbsd: good
exit: 0
redox: none solaris: good
exit: 0
sortix: good
exit: 0
§ casefold-bracket-collate aix: undeclared dragonfly: bad
'[[.a.]]' did not match "a"
freebsd: bad
'[[.A.]-[.f.]]' FNM_CASEFOLD did not match "G"
haiku: bad
'[[.a.]]' did not match "a"
hurd: bad
'[[.a.]]' FNM_CASEFOLD did not match "A"
linux: bad
'[[.a.]]' FNM_CASEFOLD did not match "A"
macos: bad
'[[.A.]-[.f.]]' FNM_CASEFOLD did not match "G"
managarm: none minix: bad
'[[.a.]]' did not match "a"
musl: bad
'[[.a.]]' did not match "a"
netbsd: bad
'[[.a.]]' did not match "a"
omnios: bad
'[[.a.]]' did not match "a"
openbsd: bad
'[[.a.]]' did not match "a"
redox: none solaris: bad
'[[.A.]-[.f.]]' FNM_CASEFOLD did not match "g"
sortix: bad
'[[.a.]]' did not match "a"
§ casefold-bracket-equivclass aix: undeclared dragonfly: bad
'[[=a=]]' did not match "a"
freebsd: good
exit: 0
haiku: bad
'[[=a=]]' did not match "a"
hurd: bad
'[[=a=]]' FNM_CASEFOLD did not match "A"
linux: bad
'[[=a=]]' FNM_CASEFOLD did not match "A"
macos: good
exit: 0
managarm: none minix: bad
'[[=a=]]' did not match "a"
musl: bad
'[[=a=]]' did not match "a"
netbsd: bad
'[[=a=]]' did not match "a"
omnios: bad
'[[=a=]]' did not match "a"
openbsd: bad
'[[=a=]]' did not match "a"
redox: none solaris: good
exit: 0
sortix: bad
'[[=a=]]' did not match "a"
§ casefold-bracket-range aix: undeclared dragonfly: bad
'[A-f]' FNM_CASEFOLD did not match "G"
freebsd: bad
'[A-f]' FNM_CASEFOLD did not match "G"
haiku: good
exit: 0
hurd: bad
'[A-f]' FNM_CASEFOLD did not match "G"
linux: bad
'[A-f]' FNM_CASEFOLD did not match "G"
macos: bad
'[A-f]' FNM_CASEFOLD did not match "G"
managarm: none minix: bad
'[A-f]' FNM_CASEFOLD did not match "G"
musl: good
exit: 0
netbsd: bad
'[A-f]' FNM_CASEFOLD did not match "G"
omnios: bad
'[A-f]' FNM_CASEFOLD did not match "G"
openbsd: bad
'[A-f]' FNM_CASEFOLD did not match "g"
redox: none solaris: bad
'[A-f]' FNM_CASEFOLD did not match "g"
sortix: bad
'[a-f]' did not match "d"
§ char aix: good
exit: 0
dragonfly: good
exit: 0
freebsd: good
exit: 0
haiku: good
exit: 0
hurd: good
exit: 0
linux: good
exit: 0
macos: good
exit: 0
managarm: none minix: good
exit: 0
musl: good
exit: 0
netbsd: good
exit: 0
omnios: good
exit: 0
openbsd: good
exit: 0
redox: none solaris: good
exit: 0
sortix: good
exit: 0
§ char-escape aix: good
exit: 0
dragonfly: good
exit: 0
freebsd: good
exit: 0
haiku: good
exit: 0
hurd: good
exit: 0
linux: good
exit: 0
macos: good
exit: 0
managarm: none minix: good
exit: 0
musl: good
exit: 0
netbsd: good
exit: 0
omnios: good
exit: 0
openbsd: good
exit: 0
redox: none solaris: good
exit: 0
sortix: bad
'\a' did not reject "\a"
§ char-noescape aix: good
exit: 0
dragonfly: good
exit: 0
freebsd: good
exit: 0
haiku: good
exit: 0
hurd: good
exit: 0
linux: good
exit: 0
macos: good
exit: 0
managarm: none minix: good
exit: 0
musl: good
exit: 0
netbsd: good
exit: 0
omnios: good
exit: 0
openbsd: good
exit: 0
redox: none solaris: good
exit: 0
sortix: good
exit: 0
§ periodslash aix: good
exit: 0
dragonfly: bad
'[[...][./.]]' did not match "."
freebsd: good
exit: 0
haiku: bad
'[[...][./.]]' did not match "."
hurd: good
exit: 0
linux: good
exit: 0
macos: good
exit: 0
managarm: none minix: bad
'[./]' did not match "."
musl: bad
'[[...][./.]]' did not match "."
netbsd: bad
'[./]' did not match "."
omnios: bad
'[[...][./.]]' did not match "."
openbsd: bad
'[[...][./.]]' did not match "."
redox: none solaris: good
exit: 0
sortix: bad
'[,-0]' did not match "."
§ periodslash-pathname aix: bad
'[./]' FNM_PATHNAME did not match "."
dragonfly: bad
'[./]' FNM_PATHNAME did not match "."
freebsd: bad
'[!./]' FNM_PATHNAME did not match "x"
haiku: bad
'[[...][./.]]' FNM_PATHNAME did not match "."
hurd: bad
'*\/' FNM_PATHNAME did not match "./"
linux: bad
'*\/' FNM_PATHNAME did not match "./"
macos: bad
'[!./]' FNM_PATHNAME did not match "x"
managarm: none minix: bad
'[./]' FNM_PATHNAME did not match "."
musl: bad
'[[...][./.]]' FNM_PATHNAME did not match "."
netbsd: bad
'[./]' FNM_PATHNAME did not match "."
omnios: bad
'[./]' FNM_PATHNAME did not match "."
openbsd: bad
'[./]' FNM_PATHNAME did not match "."
redox: none solaris: bad
'[./]' FNM_PATHNAME did not match "."
sortix: bad
'[./]' FNM_PATHNAME did not match "."
§ periodslash-period aix: good
exit: 0
dragonfly: bad
'[[...][./.]]' FNM_PERIOD did not match "/"
freebsd: good
exit: 0
haiku: bad
'\.' FNM_PERIOD did not match "."
hurd: good
exit: 0
linux: good
exit: 0
macos: good
exit: 0
managarm: none minix: bad
'[./]' FNM_PERIOD did not match "/"
musl: bad
'\.' FNM_PERIOD did not match "."
netbsd: bad
'[./]' FNM_PERIOD did not match "/"
omnios: bad
'[[...][./.]]' FNM_PERIOD did not match "/"
openbsd: bad
'[[...][./.]]' FNM_PERIOD did not match "/"
redox: none solaris: good
exit: 0
sortix: bad
'[,-0]' FNM_PERIOD did not match "/"
§ periodslash-period-pathname aix: bad
'[!./]' FNM_PATHNAME FNM_PERIOD did not match "x"
dragonfly: bad
'[!./]' FNM_PATHNAME FNM_PERIOD did not match "x"
freebsd: bad
'[!./]' FNM_PATHNAME FNM_PERIOD did not match "x"
haiku: bad
'\.' FNM_PATHNAME FNM_PERIOD did not match "."
hurd: bad
'\/?' FNM_PATHNAME FNM_PERIOD did not reject "/."
linux: bad
'\/?' FNM_PATHNAME FNM_PERIOD did not reject "/."
macos: bad
'[!./]' FNM_PATHNAME FNM_PERIOD did not match "x"
managarm: none minix: bad
'[,-0]' FNM_PATHNAME FNM_PERIOD did not reject "."
musl: bad
'\.' FNM_PATHNAME FNM_PERIOD did not match "."
netbsd: bad
'[,-0]' FNM_PATHNAME FNM_PERIOD did not reject "."
omnios: bad
'[!./]' FNM_PATHNAME FNM_PERIOD did not match "x"
openbsd: bad
'[!./]' FNM_PATHNAME FNM_PERIOD did not match "x"
redox: none solaris: bad
'[!./]' FNM_PATHNAME FNM_PERIOD did not match "x"
sortix: bad
'[!./]' FNM_PATHNAME FNM_PERIOD did not match "x"
§ question aix: good
exit: 0
dragonfly: good
exit: 0
freebsd: good
exit: 0
haiku: good
exit: 0
hurd: good
exit: 0
linux: good
exit: 0
macos: good
exit: 0
managarm: none minix: good
exit: 0
musl: good
exit: 0
netbsd: good
exit: 0
omnios: good
exit: 0
openbsd: good
exit: 0
redox: none solaris: good
exit: 0
sortix: good
exit: 0
§ question-noescape aix: good
exit: 0
dragonfly: good
exit: 0
freebsd: good
exit: 0
haiku: good
exit: 0
hurd: good
exit: 0
linux: good
exit: 0
macos: good
exit: 0
managarm: none minix: good
exit: 0
musl: good
exit: 0
netbsd: good
exit: 0
omnios: good
exit: 0
openbsd: good
exit: 0
redox: none solaris: good
exit: 0
sortix: good
exit: 0
Optional: nonstandard
Nonstandard Extensions
§ bracket-caret aix: bad
'[^x]' did not reject "x"
dragonfly: good
exit: 0
freebsd: good
exit: 0
haiku: good
exit: 0
hurd: good
exit: 0
linux: good
exit: 0
macos: good
exit: 0
managarm: none minix: good
exit: 0
musl: good
exit: 0
netbsd: good
exit: 0
omnios: good
exit: 0
openbsd: good
exit: 0
redox: none solaris: bad
'[^x]' did not reject "x"
sortix: good
exit: 0
§ bracket-charclass-invalid aix: good
'[[:invalid:]]' did not reject "a"
dragonfly: good
exit: 0
freebsd: good
exit: 0
haiku: good
exit: 0
hurd: good
exit: 0
linux: good
exit: 0
macos: good
'[[:invalid:]]' fnmatch returned weird result 2 on "[[:invalid:]]"
managarm: none minix: good
exit: 0
musl: good
exit: 0
netbsd: good
exit: 0
omnios: good
exit: 0
openbsd: good
exit: 0
redox: none solaris: good
exit: 0
sortix: good
exit: 0
§ bracket-charclass-invalid-neg aix: good
'[![:invalid:]]' did not match "a"
dragonfly: good
'[![:invalid:]]' did not match "a"
freebsd: good
'[![:invalid:]]' did not match "a"
haiku: good
exit: 0
hurd: good
'[![:invalid:]]' did not match "a"
linux: good
'[![:invalid:]]' did not match "a"
macos: good
'[![:invalid:]]' fnmatch returned weird result 2 on "[![:invalid:]]"
managarm: none minix: good
'[![:invalid:]]' did not match "a"
musl: good
exit: 0
netbsd: good
'[![:invalid:]]' did not match "a"
omnios: good
'[![:invalid:]]' did not match "a"
openbsd: good
'[![:invalid:]]' did not match "a"
redox: none solaris: good
exit: 0
sortix: good
'[![:invalid:]]' did not match "a"
§ bracket-charclass-invalid-x aix: good
exit: 0
dragonfly: good
'[[:invalid:]x]' did not match "x"
freebsd: good
'[[:invalid:]x]' did not match "x"
haiku: good
exit: 0
hurd: good
'[[:invalid:]x]' did not match "x"
linux: good
'[[:invalid:]x]' did not match "x"
macos: good
'[[:invalid:]x]' fnmatch returned weird result 2 on "[[:invalid:]x]"
managarm: none minix: good
'[[:invalid:]x]' did not match "x"
musl: good
exit: 0
netbsd: good
'[[:invalid:]x]' did not match "x"
omnios: good
'[[:invalid:]x]' did not match "x"
openbsd: good
'[[:invalid:]x]' did not match "x"
redox: none solaris: good
exit: 0
sortix: good
'[[:invalid:]x]' did not match "x"
§ bracket-charclass-invalid-x-neg aix: good
'[![:invalid:]x]' did not match "y"
dragonfly: good
'[![:invalid:]x]' did not match "y"
freebsd: good
'[![:invalid:]x]' did not match "y"
haiku: good
exit: 0
hurd: good
'[![:invalid:]x]' did not match "y"
linux: good
'[![:invalid:]x]' did not match "y"
macos: good
'[![:invalid:]x]' fnmatch returned weird result 2 on "[![:invalid:]x]"
managarm: none minix: good
'[![:invalid:]x]' did not match "y"
musl: good
exit: 0
netbsd: good
'[![:invalid:]x]' did not match "y"
omnios: good
'[![:invalid:]x]' did not match "y"
openbsd: good
'[![:invalid:]x]' did not match "y"
redox: none solaris: good
exit: 0
sortix: good
'[![:invalid:]x]' did not match "y"
§ bracket-equivclass-rsq aix: good
exit: 0
dragonfly: bad
'[[=]=]x]' did not match "x"
freebsd: good
exit: 0
haiku: bad
'[[=]=]x]' did not match "]"
hurd: good
exit: 0
linux: good
exit: 0
macos: good
exit: 0
managarm: none minix: bad
'[[=]=]x]' did not match "x"
musl: bad
'[[=]=]x]' did not match "]"
netbsd: bad
'[[=]=]x]' did not match "x"
omnios: bad
'[[=]=]x]' did not match "x"
openbsd: bad
'[[=]=]x]' did not match "x"
redox: none solaris: good
exit: 0
sortix: bad
'[[=]=]x]' did not match "x"
§ periodslash-period-ns aix: good
exit: 0
dragonfly: good
exit: 0
freebsd: good
exit: 0
haiku: good
exit: 0
hurd: good
exit: 0
linux: good
exit: 0
macos: good
exit: 0
managarm: none minix: bad
'[.abc]' FNM_PERIOD did not reject "."
musl: good
exit: 0
netbsd: bad
'[.abc]' FNM_PERIOD did not reject "."
omnios: good
exit: 0
openbsd: good
exit: 0
redox: none solaris: good
exit: 0
sortix: bad
'[.abc]' FNM_PERIOD did not reject "."
§ periodslash-period-pathname-ns aix: good
exit: 0
dragonfly: good
exit: 0
freebsd: good
exit: 0
haiku: good
exit: 0
hurd: good
exit: 0
linux: good
exit: 0
macos: good
exit: 0
managarm: none minix: bad
'[.abc]' FNM_PATHNAME FNM_PERIOD did not reject "."
musl: good
exit: 0
netbsd: bad
'[.abc]' FNM_PATHNAME FNM_PERIOD did not reject "."
omnios: good
exit: 0
openbsd: good
exit: 0
redox: none solaris: good
exit: 0
sortix: bad
'[.abc]' FNM_PATHNAME FNM_PERIOD did not reject "."
§ utf8-bracket aix: bad
setlocale LC_CTYPE failed: C.UTF-8
dragonfly: good
exit: 0
freebsd: good
exit: 0
haiku: bad
'[æø]' did not match "æ"
hurd: good
exit: 0
linux: good
exit: 0
macos: good
exit: 0
managarm: none minix: bad
setlocale LC_CTYPE failed: C.UTF-8
musl: good
exit: 0
netbsd: bad
'[æø]' did not match "æ"
omnios: good
exit: 0
openbsd: bad
'[æø]' did not match "æ"
redox: none solaris: bad
'[æø]' did not match "æ"
sortix: bad
'[æø]' did not match "æ"
§ utf8-bracket-casefold aix: undeclared dragonfly: good
exit: 0
freebsd: good
exit: 0
haiku: bad
'[æø]' FNM_CASEFOLD did not match "æ"
hurd: good
exit: 0
linux: good
exit: 0
macos: good
exit: 0
managarm: none minix: bad
setlocale LC_CTYPE failed: C.UTF-8
musl: good
exit: 0
netbsd: bad
'[æø]' FNM_CASEFOLD did not match "æ"
omnios: good
exit: 0
openbsd: bad
'[æø]' FNM_CASEFOLD did not match "æ"
redox: none solaris: bad
'[æø]' FNM_CASEFOLD did not match "æ"
sortix: bad
'[æø]' FNM_CASEFOLD did not match "æ"
§ utf8-bracket-charclass aix: bad
setlocale LC_CTYPE failed: C.UTF-8
dragonfly: bad
'[[:alpha:]]' did not match "a"
freebsd: good
exit: 0
haiku: bad
'[[:alpha:]]' did not match "ø"
hurd: good
exit: 0
linux: good
exit: 0
macos: good
exit: 0
managarm: none minix: bad
setlocale LC_CTYPE failed: C.UTF-8
musl: good
exit: 0
netbsd: bad
'[[:alpha:]]' did not match "a"
omnios: bad
'[[:alpha:]]' did not match "a"
openbsd: bad
'[[:alpha:]]' did not match "ø"
redox: none solaris: bad
'[[:alpha:]]' did not match "ø"
sortix: bad
'[[:alpha:]]' did not match "a"
§ utf8-bracket-charclass-casefold aix: undeclared dragonfly: bad
'[[:alpha:]]' FNM_CASEFOLD did not match "a"
freebsd: bad
'[[:upper:]]' FNM_CASEFOLD did not match "a"
haiku: bad
'[[:alpha:]]' FNM_CASEFOLD did not match "ø"
hurd: bad
'[[:lower:]]' FNM_CASEFOLD did not match "Λ"
linux: bad
'[[:lower:]]' FNM_CASEFOLD did not match "Λ"
macos: bad
'[[:upper:]]' FNM_CASEFOLD did not match "a"
managarm: none minix: bad
setlocale LC_CTYPE failed: C.UTF-8
musl: good
exit: 0
netbsd: bad
'[[:alpha:]]' FNM_CASEFOLD did not match "a"
omnios: bad
'[[:alpha:]]' FNM_CASEFOLD did not match "a"
openbsd: bad
'[[:alpha:]]' FNM_CASEFOLD did not match "ø"
redox: none solaris: bad
'[[:alpha:]]' FNM_CASEFOLD did not match "ø"
sortix: bad
'[[:alpha:]]' FNM_CASEFOLD did not match "a"
§ utf8-bracket-collate aix: bad
setlocale LC_CTYPE failed: C.UTF-8
dragonfly: bad
'[[.ø.]]' did not match "ø"
freebsd: bad
'[[.ø.]]' did not match "ø"
haiku: bad
'[[.ø.]]' did not match "ø"
hurd: good
exit: 0
linux: good
exit: 0
macos: bad
'[[.ø.]]' fnmatch returned weird result 2 on "ø"
managarm: none minix: bad
setlocale LC_CTYPE failed: C.UTF-8
musl: bad
'[[.ø.]]' did not match "ø"
netbsd: bad
'[[.ø.]]' did not match "ø"
omnios: bad
'[[.ø.]]' did not match "ø"
openbsd: bad
'[[.ø.]]' did not match "ø"
redox: none solaris: bad
'[[.ø.]]' did not match "ø"
sortix: bad
'[[.ø.]]' did not match "ø"
§ utf8-bracket-collate-casefold aix: undeclared dragonfly: bad
'[[.ø.]]' FNM_CASEFOLD did not match "ø"
freebsd: bad
'[[.ø.]]' FNM_CASEFOLD did not match "ø"
haiku: bad
'[[.ø.]]' FNM_CASEFOLD did not match "ø"
hurd: bad
'[[.ø.]]' FNM_CASEFOLD did not match "Ø"
linux: bad
'[[.ø.]]' FNM_CASEFOLD did not match "Ø"
macos: bad
'[[.ø.]]' FNM_CASEFOLD fnmatch returned weird result 2 on "ø"
managarm: none minix: bad
setlocale LC_CTYPE failed: C.UTF-8
musl: bad
'[[.ø.]]' FNM_CASEFOLD did not match "ø"
netbsd: bad
'[[.ø.]]' FNM_CASEFOLD did not match "ø"
omnios: bad
'[[.ø.]]' FNM_CASEFOLD did not match "ø"
openbsd: bad
'[[.ø.]]' FNM_CASEFOLD did not match "ø"
redox: none solaris: bad
'[[.ø.]]' FNM_CASEFOLD did not match "ø"
sortix: bad
'[[.ø.]]' FNM_CASEFOLD did not match "ø"
§ utf8-bracket-collate-range aix: bad
setlocale LC_CTYPE failed: C.UTF-8
dragonfly: bad
'[[.æ.]-[.ø.]]' did not match "æ"
freebsd: bad
'[[.æ.]-[.ø.]]' did not match "æ"
haiku: bad
'[[.æ.]-[.ø.]]' did not match "æ"
hurd: good
exit: 0
linux: good
exit: 0
macos: bad
'[[.æ.]-[.ø.]]' fnmatch returned weird result 2 on "æ"
managarm: none minix: bad
setlocale LC_CTYPE failed: C.UTF-8
musl: bad
'[[.æ.]-[.ø.]]' did not match "æ"
netbsd: bad
'[[.æ.]-[.ø.]]' did not match "æ"
omnios: bad
'[[.æ.]-[.ø.]]' did not match "æ"
openbsd: bad
'[[.æ.]-[.ø.]]' did not match "æ"
redox: none solaris: bad
'[[.æ.]-[.ø.]]' did not match "æ"
sortix: bad
'[[.æ.]-[.ø.]]' did not match "æ"
§ utf8-bracket-collate-range-casefold aix: undeclared dragonfly: bad
'[[.æ.]-[.ø.]]' FNM_CASEFOLD did not match "æ"
freebsd: bad
'[[.æ.]-[.ø.]]' FNM_CASEFOLD did not match "æ"
haiku: bad
'[[.æ.]-[.ø.]]' FNM_CASEFOLD did not match "æ"
hurd: good
exit: 0
linux: good
exit: 0
macos: bad
'[[.æ.]-[.ø.]]' FNM_CASEFOLD fnmatch returned weird result 2 on "æ"
managarm: none minix: bad
setlocale LC_CTYPE failed: C.UTF-8
musl: bad
'[[.æ.]-[.ø.]]' FNM_CASEFOLD did not match "æ"
netbsd: bad
'[[.æ.]-[.ø.]]' FNM_CASEFOLD did not match "æ"
omnios: bad
'[[.æ.]-[.ø.]]' FNM_CASEFOLD did not match "æ"
openbsd: bad
'[[.æ.]-[.ø.]]' FNM_CASEFOLD did not match "æ"
redox: none solaris: bad
'[[.æ.]-[.ø.]]' FNM_CASEFOLD did not match "æ"
sortix: bad
'[[.æ.]-[.ø.]]' FNM_CASEFOLD did not match "æ"
§ utf8-bracket-equivclass aix: bad
setlocale LC_CTYPE failed: C.UTF-8
dragonfly: bad
'[[=ø=]]' did not match "ø"
freebsd: bad
'[[=ø=]]' did not match "ø"
haiku: bad
'[[=ø=]]' did not match "ø"
hurd: good
exit: 0
linux: good
exit: 0
macos: bad
'[[=ø=]]' fnmatch returned weird result 2 on "ø"
managarm: none minix: bad
setlocale LC_CTYPE failed: C.UTF-8
musl: bad
'[[=ø=]]' did not match "ø"
netbsd: bad
'[[=ø=]]' did not match "ø"
omnios: bad
'[[=ø=]]' did not match "ø"
openbsd: bad
'[[=ø=]]' did not match "ø"
redox: none solaris: bad
'[[=ø=]]' did not match "ø"
sortix: bad
'[[=ø=]]' did not match "ø"
§ utf8-bracket-equivclass-casefold aix: undeclared dragonfly: bad
'[[=ø=]]' FNM_CASEFOLD did not match "ø"
freebsd: bad
'[[=ø=]]' FNM_CASEFOLD did not match "ø"
haiku: bad
'[[=ø=]]' FNM_CASEFOLD did not match "ø"
hurd: bad
'[[=ø=]]' FNM_CASEFOLD did not match "Ø"
linux: bad
'[[=ø=]]' FNM_CASEFOLD did not match "Ø"
macos: bad
'[[=ø=]]' FNM_CASEFOLD fnmatch returned weird result 2 on "ø"
managarm: none minix: bad
setlocale LC_CTYPE failed: C.UTF-8
musl: bad
'[[=ø=]]' FNM_CASEFOLD did not match "ø"
netbsd: bad
'[[=ø=]]' FNM_CASEFOLD did not match "ø"
omnios: bad
'[[=ø=]]' FNM_CASEFOLD did not match "ø"
openbsd: bad
'[[=ø=]]' FNM_CASEFOLD did not match "ø"
redox: none solaris: bad
'[[=ø=]]' FNM_CASEFOLD did not match "ø"
sortix: bad
'[[=ø=]]' FNM_CASEFOLD did not match "ø"
§ utf8-bracket-range aix: bad
setlocale LC_CTYPE failed: C.UTF-8
dragonfly: good
exit: 0
freebsd: good
exit: 0
haiku: bad
'[æ-ø]' did not match "æ"
hurd: good
exit: 0
linux: good
exit: 0
macos: good
exit: 0
managarm: none minix: bad
setlocale LC_CTYPE failed: C.UTF-8
musl: bad
'[!æ-ø]' did not match "Æ"
netbsd: bad
'[æ-ø]' did not match "æ"
omnios: good
exit: 0
openbsd: bad
'[æ-ø]' did not match "æ"
redox: none solaris: bad
'[æ-ø]' did not match "æ"
sortix: bad
'[æ-ø]' did not match "æ"
§ utf8-bracket-range-casefold aix: undeclared dragonfly: good
exit: 0
freebsd: good
exit: 0
haiku: bad
'[æ-ø]' FNM_CASEFOLD did not match "æ"
hurd: good
exit: 0
linux: good
exit: 0
macos: good
exit: 0
managarm: none minix: bad
setlocale LC_CTYPE failed: C.UTF-8
musl: bad
'[!æ-ø]' FNM_CASEFOLD did not match "a"
netbsd: bad
'[æ-ø]' FNM_CASEFOLD did not match "æ"
omnios: good
exit: 0
openbsd: bad
'[æ-ø]' FNM_CASEFOLD did not match "æ"
redox: none solaris: bad
'[æ-ø]' FNM_CASEFOLD did not match "æ"
sortix: bad
'[æ-ø]' FNM_CASEFOLD did not match "æ"
§ utf8-char aix: bad
setlocale LC_CTYPE failed: C.UTF-8
dragonfly: good
exit: 0
freebsd: good
exit: 0
haiku: bad
'æ' did not match "æ"
hurd: good
exit: 0
linux: good
exit: 0
macos: good
exit: 0
managarm: none minix: bad
setlocale LC_CTYPE failed: C.UTF-8
musl: good
exit: 0
netbsd: bad
'æ' did not match "æ"
omnios: good
exit: 0
openbsd: good
exit: 0
redox: none solaris: good
exit: 0
sortix: good
exit: 0
§ utf8-char-casefold aix: undeclared dragonfly: good
exit: 0
freebsd: good
exit: 0
haiku: bad
'æ' FNM_CASEFOLD did not match "æ"
hurd: good
exit: 0
linux: good
exit: 0
macos: good
exit: 0
managarm: none minix: bad
setlocale LC_CTYPE failed: C.UTF-8
musl: good
exit: 0
netbsd: bad
'æ' FNM_CASEFOLD did not match "æ"
omnios: good
exit: 0
openbsd: bad
'æ' FNM_CASEFOLD did not match "Æ"
redox: none solaris: bad
'æ' FNM_CASEFOLD did not match "Æ"
sortix: bad
'æ' FNM_CASEFOLD did not match "Æ"
§ utf8-invalid-continuation aix: bad
setlocale LC_CTYPE failed: C.UTF-8
dragonfly: bad
'?' did not reject "€"
freebsd: bad
'?' did not reject "€"
haiku: good
exit: 0
hurd: bad
'?' did not reject "€"
linux: bad
'?' did not reject "€"
macos: bad
'?' did not reject "€"
managarm: none minix: bad
setlocale LC_CTYPE failed: C.UTF-8
musl: good
exit: 0
netbsd: bad
'?' did not reject "€"
omnios: bad
'?' did not reject "€"
openbsd: bad
'?' did not reject "€"
redox: none solaris: bad
'?' did not reject "€"
sortix: bad
'?' did not reject "€"
§ utf8-invalid-missing aix: bad
setlocale LC_CTYPE failed: C.UTF-8
dragonfly: bad
'[!x]' did not reject "Ã"
freebsd: bad
'[!x]' did not reject "Ã"
haiku: good
exit: 0
hurd: bad
'[!x]' did not reject "Ã"
linux: bad
'[!x]' did not reject "Ã"
macos: bad
'[!x]' did not reject "Ã"
managarm: none minix: bad
setlocale LC_CTYPE failed: C.UTF-8
musl: good
exit: 0
netbsd: bad
'[!x]' did not reject "Ã"
omnios: bad
'[!x]' did not reject "Ã"
openbsd: bad
'[!x]' did not reject "Ã"
redox: none solaris: bad
'[!x]' did not reject "Ã"
sortix: bad
'[!x]' did not reject "Ã"
§ utf8-invalid-over-10ffff aix: bad
setlocale LC_CTYPE failed: C.UTF-8
dragonfly: bad
'[!x][!x][!x][!x]' did not reject "õ€€"
freebsd: bad
'[!x][!x][!x][!x]' did not reject "õ€€"
haiku: good
exit: 0
hurd: bad
'[!x][!x][!x][!x]' did not reject "õ€€"
linux: bad
'[!x][!x][!x][!x]' did not reject "õ€€"
macos: bad
'[!x][!x][!x][!x]' did not reject "õ€€"
managarm: none minix: bad
setlocale LC_CTYPE failed: C.UTF-8
musl: good
exit: 0
netbsd: bad
'[!x][!x][!x][!x]' did not reject "õ€€"
omnios: bad
'[!x][!x][!x][!x]' did not reject "õ€€"
openbsd: bad
'[!x][!x][!x][!x]' did not reject "õ€€"
redox: none solaris: bad
'[!x][!x][!x][!x]' did not reject "õ€€"
sortix: bad
'[!x][!x][!x][!x]' did not reject "õ€€"
§ utf8-invalid-overlong aix: bad
setlocale LC_CTYPE failed: C.UTF-8
dragonfly: bad
'[!x][!x]' did not reject "À¯"
freebsd: bad
'[!x][!x]' did not reject "À¯"
haiku: good
exit: 0
hurd: bad
'[!x][!x]' did not reject "À¯"
linux: bad
'[!x][!x]' did not reject "À¯"
macos: bad
'[!x][!x]' did not reject "À¯"
managarm: none minix: bad
setlocale LC_CTYPE failed: C.UTF-8
musl: good
exit: 0
netbsd: bad
'[!x][!x]' did not reject "À¯"
omnios: bad
'[!x][!x]' did not reject "À¯"
openbsd: bad
'[!x][!x]' did not reject "À¯"
redox: none solaris: bad
'[!x][!x]' did not reject "À¯"
sortix: bad
'[!x][!x]' did not reject "À¯"
§ utf8-invalid-recover aix: bad
setlocale LC_CTYPE failed: C.UTF-8
dragonfly: bad
'??' did not reject "Ã "
freebsd: bad
'??' did not reject "Ã "
haiku: good
exit: 0
hurd: bad
'??' did not reject "Ã "
linux: bad
'??' did not reject "Ã "
macos: bad
'??' did not reject "Ã "
managarm: none minix: bad
setlocale LC_CTYPE failed: C.UTF-8
musl: good
exit: 0
netbsd: bad
'??' did not reject "Ã "
omnios: bad
'??' did not reject "Ã "
openbsd: bad
'??' did not reject "Ã "
redox: none solaris: bad
'??' did not reject "Ã "
sortix: bad
'??' did not reject "Ã "
§ utf8-invalid-surrogate aix: bad
setlocale LC_CTYPE failed: C.UTF-8
dragonfly: bad
'[!x]' did not reject "í €"
freebsd: bad
'[!x][!x][!x]' did not reject "í €"
haiku: good
exit: 0
hurd: bad
'[!x][!x][!x]' did not reject "í €"
linux: bad
'[!x][!x][!x]' did not reject "í €"
macos: bad
'[!x][!x][!x]' did not reject "í €"
managarm: none minix: bad
setlocale LC_CTYPE failed: C.UTF-8
musl: good
exit: 0
netbsd: bad
'[!x][!x][!x]' did not reject "í €"
omnios: bad
'[!x]' did not reject "í €"
openbsd: bad
'[!x][!x][!x]' did not reject "í €"
redox: none solaris: bad
'[!x][!x][!x]' did not reject "í €"
sortix: bad
'[!x][!x][!x]' did not reject "í €"
§ utf8-question aix: bad
setlocale LC_CTYPE failed: C.UTF-8
dragonfly: good
exit: 0
freebsd: good
exit: 0
haiku: bad
'?' did not match "æ"
hurd: good
exit: 0
linux: good
exit: 0
macos: good
exit: 0
managarm: none minix: bad
setlocale LC_CTYPE failed: C.UTF-8
musl: good
exit: 0
netbsd: bad
'?' did not match "æ"
omnios: good
exit: 0
openbsd: bad
'?' did not match "æ"
redox: none solaris: bad
'?' did not match "æ"
sortix: bad
'?' did not match "æ"
§ utf8-question-casefold aix: undeclared dragonfly: good
exit: 0
freebsd: good
exit: 0
haiku: bad
'?' FNM_CASEFOLD did not match "æ"
hurd: good
exit: 0
linux: good
exit: 0
macos: good
exit: 0
managarm: none minix: bad
setlocale LC_CTYPE failed: C.UTF-8
musl: good
exit: 0
netbsd: bad
'?' FNM_CASEFOLD did not match "æ"
omnios: good
exit: 0
openbsd: bad
'?' FNM_CASEFOLD did not match "æ"
redox: none solaris: bad
'?' FNM_CASEFOLD did not match "æ"
sortix: bad
'?' FNM_CASEFOLD did not match "æ"
Copyright 2011-2026 Jonas 'Sortie' Termansen and contributors.
Sortix's source code is free software under the ISC license.
#sortix on irc.sortix.org
@sortix_org