aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBenoit Daloze <eregontp@gmail.com>2023-08-02 17:08:19 +0200
committerBenoit Daloze <eregontp@gmail.com>2023-08-02 17:13:38 +0200
commit3c41a04b6cedbace1406d46a20a673f59b1502de (patch)
treecc48ba17ca43145456f13421267f3d5a0c0bb51f
parenta502cd80a592c90dc76daf06687ce67bdb183d02 (diff)
downloadruby-3c41a04b6cedbace1406d46a20a673f59b1502de.tar.gz
Fix encoding switches when RUBYOPT is empty or only spaces
* Follow-up of dbbc3583ba432c279f07b1fa0afb0a8a9ba50c91 which broke this.
-rw-r--r--ruby.c5
-rw-r--r--spec/ruby/command_line/dash_upper_u_spec.rb7
2 files changed, 10 insertions, 2 deletions
diff --git a/ruby.c b/ruby.c
index 30e0e68360..2b2a91ecac 100644
--- a/ruby.c
+++ b/ruby.c
@@ -895,10 +895,11 @@ moreswitches(const char *s, ruby_cmdline_options_t *opt, int envopt)
ruby_features_t warn = opt->warn;
int backtrace_length_limit = opt->backtrace_length_limit;
- opt->src.enc.name = opt->ext.enc.name = opt->intern.enc.name = 0;
-
while (ISSPACE(*s)) s++;
if (!*s) return;
+
+ opt->src.enc.name = opt->ext.enc.name = opt->intern.enc.name = 0;
+
argstr = rb_str_tmp_new((len = strlen(s)) + (envopt!=0));
argary = rb_str_tmp_new(0);
diff --git a/spec/ruby/command_line/dash_upper_u_spec.rb b/spec/ruby/command_line/dash_upper_u_spec.rb
index d62718b095..15854e7b73 100644
--- a/spec/ruby/command_line/dash_upper_u_spec.rb
+++ b/spec/ruby/command_line/dash_upper_u_spec.rb
@@ -6,6 +6,13 @@ describe "ruby -U" do
options: '-U').should == 'UTF-8'
end
+ it "sets Encoding.default_internal to UTF-8 when RUBYOPT is empty or only spaces" do
+ ruby_exe('p Encoding.default_internal',
+ options: '-U', env: { 'RUBYOPT' => '' }).should == "#<Encoding:UTF-8>\n"
+ ruby_exe('p Encoding.default_internal',
+ options: '-U', env: { 'RUBYOPT' => ' ' }).should == "#<Encoding:UTF-8>\n"
+ end
+
it "does nothing different if specified multiple times" do
ruby_exe('print Encoding.default_internal.name',
options: '-U -U').should == 'UTF-8'