From a301965452a5e73914ae8ccd3c66d3a4a0d0d47b Mon Sep 17 00:00:00 2001 From: cnc Date: Fri, 5 Jun 2026 10:31:33 +0800 Subject: [PATCH] =?UTF-8?q?=E6=89=A7=E8=A1=8C=20AGENTS=20align-linuxcnc=20?= =?UTF-8?q?=E5=8A=A0=E9=80=9F=E8=A7=84=E5=88=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 结论:补强 WASM runtime 可执行探针,依据 LinuxCNC src/emc/rs274ngc/rs274ngc_pre.cc 中程序/子程序路径解析对 wordexp() 的使用,覆盖 形式的环境变量展开。验证通过:./test-linuxcnc-wasm-runtime-link.sh、./test-native.sh、./test-linuxcnc-source-link.sh。 --- .../cnc_sim_wasm_runtime_probe_main.cc | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/core/wasm_shims/cnc_sim_wasm_runtime_probe_main.cc b/core/wasm_shims/cnc_sim_wasm_runtime_probe_main.cc index d664cda..03a3e26 100644 --- a/core/wasm_shims/cnc_sim_wasm_runtime_probe_main.cc +++ b/core/wasm_shims/cnc_sim_wasm_runtime_probe_main.cc @@ -60,6 +60,22 @@ bool wordexp_expands_environment_variables() { return ok; } +bool wordexp_expands_braced_environment_variables() { + setenv("CNC_SIM_WORDEXP_BRACED_PROBE", "linuxcnc-braced-wordexp", 1); + + wordexp_t expanded{}; + if (wordexp("${CNC_SIM_WORDEXP_BRACED_PROBE}/subroutines", &expanded, 0) != 0) { + return false; + } + + const bool ok = expanded.we_wordc == 1 && + expanded.we_wordv && + expanded.we_wordv[0] && + std::strcmp(expanded.we_wordv[0], "linuxcnc-braced-wordexp/subroutines") == 0; + wordfree(&expanded); + return ok; +} + bool hal_lookup_is_unavailable() { if (hal_init("cnc_sim_wasm_runtime_probe") != 1) { return false; @@ -109,6 +125,9 @@ int main() { if (!wordexp_expands_environment_variables()) { return 6; } + if (!wordexp_expands_braced_environment_variables()) { + return 8; + } if (!hal_lookup_is_unavailable()) { return 7; }