[libcxx-commits] [libcxx] [libcxx] Work around picolibc argv handling in tests. (PR #127662)
Louis Dionne via libcxx-commits
libcxx-commits at lists.llvm.org
Tue Feb 18 11:52:45 PST 2025
================
@@ -274,14 +274,39 @@ def hasAnyLocale(config, locales):
%{exec} -- this means that the command may be executed on a remote host
depending on the %{exec} substitution.
"""
+
+ # Some locale names contain spaces, and some embedded use cases
+ # (in particular picolibc under Arm semihosting) can't support
+ # spaces in argv words. Work around this by applying URL-style
+ # %-encoding to the locale names, and undoing it in our test
+ # program.
+ percent_encode = lambda s: "".join(
+ "%{:02x}".format(c) if c in b" %\\\"'" or c >= 128 else chr(c)
+ for c in s.encode()
+ )
+
program = """
#include <stddef.h>
#if defined(_LIBCPP_VERSION) && !_LIBCPP_HAS_LOCALIZATION
int main(int, char**) { return 1; }
#else
+ #include <stdlib.h>
#include <locale.h>
int main(int argc, char** argv) {
for (int i = 1; i < argc; i++) {
----------------
ldionne wrote:
Instead, perhaps we could hardcode the locales we're testing in the program itself, and then run that program without any argument?
https://github.com/llvm/llvm-project/pull/127662
More information about the libcxx-commits
mailing list