diff options
| author | nsfisis <nsfisis@gmail.com> | 2026-08-09 06:50:56 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2026-08-09 06:50:56 +0900 |
| commit | 6b83e68d7961f150ec15dd59d457d519e0bf8663 (patch) | |
| tree | 8342c9d7d31679c669e14a76d0349c777f6c2566 /crates/shirabe/src | |
| parent | ff17dcdb757656c5e81b10070a7bbcc4ef3e97f7 (diff) | |
| download | php-shirabe-6b83e68d7961f150ec15dd59d457d519e0bf8663.tar.gz php-shirabe-6b83e68d7961f150ec15dd59d457d519e0bf8663.tar.zst php-shirabe-6b83e68d7961f150ec15dd59d457d519e0bf8663.zip | |
refactor(env): split and join PATH lists with std::env
The shim's PATH_SEPARATOR was hardcoded to ":", so every PATH list was
split and joined on the wrong character off Unix. std::env::split_paths
and join_paths use the platform's separator, which also lets the bin-dir
membership test in EventDispatcher compare list entries instead of
regex-matching the raw PATH string.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Diffstat (limited to 'crates/shirabe/src')
| -rw-r--r-- | crates/shirabe/src/event_dispatcher/event_dispatcher.rs | 25 |
1 files changed, 11 insertions, 14 deletions
diff --git a/crates/shirabe/src/event_dispatcher/event_dispatcher.rs b/crates/shirabe/src/event_dispatcher/event_dispatcher.rs index 3db924d4..f037f87d 100644 --- a/crates/shirabe/src/event_dispatcher/event_dispatcher.rs +++ b/crates/shirabe/src/event_dispatcher/event_dispatcher.rs @@ -31,7 +31,7 @@ use shirabe_php_rpc::{ }; use shirabe_php_shim::Catch as _; use shirabe_php_shim::{ - InvalidArgumentException, PATH_SEPARATOR, PhpMixed, RuntimeException, array_pop, array_push, + InvalidArgumentException, PhpMixed, RuntimeException, array_pop, array_push, array_search_in_vec, array_splice, file_exists, get_class, hash, implode, ini_get, is_array, is_callable, is_object, is_string, krsort, php_regex, preg_quote, realpath, spl_autoload_functions, spl_autoload_register, spl_autoload_unregister, spl_object_hash, @@ -1413,19 +1413,16 @@ try {{ if shirabe_php_shim::is_dir(&bin_dir) { let bin_dir = realpath(&bin_dir).unwrap_or(bin_dir); let path_value = Platform::get_env(path_env).unwrap_or_default(); - if !Preg::is_match( - format!( - "{{(^|{}){}($|{})}}", - PATH_SEPARATOR, - preg_quote(&bin_dir, None), - PATH_SEPARATOR - ), - &path_value, - ) { - Platform::put_env( - path_env, - &format!("{}{}{}", bin_dir, PATH_SEPARATOR, path_value), - ); + if !std::env::split_paths(&path_value).any(|dir| dir == std::path::Path::new(&bin_dir)) + { + let path_value = std::env::join_paths( + std::iter::once(std::path::PathBuf::from(&bin_dir)) + .chain(std::env::split_paths(&path_value)), + ) + .expect("bin-dir holds no path separator") + .into_string() + .unwrap(); + Platform::put_env(path_env, &path_value); } } } |
