diff options
author | Nobuyoshi Nakada <nobu@ruby-lang.org> | 2023-07-13 17:08:55 +0900 |
---|---|---|
committer | Nobuyoshi Nakada <nobu@ruby-lang.org> | 2023-07-13 22:59:26 +0900 |
commit | dbbc3583ba432c279f07b1fa0afb0a8a9ba50c91 (patch) | |
tree | 7621b8c145594d30d2093f964caf18868cb23d47 /ruby.c | |
parent | 1c2a4d9682decf3fc56fe16470b51f7290f2ae1c (diff) | |
download | ruby-dbbc3583ba432c279f07b1fa0afb0a8a9ba50c91.tar.gz |
Preserve already set options in `moreswitches`
Diffstat (limited to 'ruby.c')
-rw-r--r-- | ruby.c | 35 |
1 files changed, 20 insertions, 15 deletions
@@ -887,6 +887,14 @@ moreswitches(const char *s, ruby_cmdline_options_t *opt, int envopt) VALUE argstr, argary; void *ptr; + VALUE src_enc_name = opt->src.enc.name; + VALUE ext_enc_name = opt->ext.enc.name; + VALUE int_enc_name = opt->intern.enc.name; + ruby_features_t feat = opt->features; + ruby_features_t warn = opt->warn; + + opt->src.enc.name = opt->ext.enc.name = opt->intern.enc.name = 0; + while (ISSPACE(*s)) s++; if (!*s) return; argstr = rb_str_tmp_new((len = strlen(s)) + (envopt!=0)); @@ -922,6 +930,18 @@ moreswitches(const char *s, ruby_cmdline_options_t *opt, int envopt) } } + if (src_enc_name) { + opt->src.enc.name = src_enc_name; + } + if (ext_enc_name) { + opt->ext.enc.name = ext_enc_name; + } + if (int_enc_name) { + opt->intern.enc.name = int_enc_name; + } + FEATURE_SET_RESTORE(opt->features, feat); + FEATURE_SET_RESTORE(opt->warn, warn); + ruby_xfree(ptr); /* get rid of GC */ rb_str_resize(argary, 0); @@ -2003,22 +2023,7 @@ process_options(int argc, char **argv, ruby_cmdline_options_t *opt) argv += i; if (FEATURE_SET_P(opt->features, rubyopt) && (s = getenv("RUBYOPT"))) { - VALUE src_enc_name = opt->src.enc.name; - VALUE ext_enc_name = opt->ext.enc.name; - VALUE int_enc_name = opt->intern.enc.name; - ruby_features_t feat = opt->features; - ruby_features_t warn = opt->warn; - - opt->src.enc.name = opt->ext.enc.name = opt->intern.enc.name = 0; moreswitches(s, opt, 1); - if (src_enc_name) - opt->src.enc.name = src_enc_name; - if (ext_enc_name) - opt->ext.enc.name = ext_enc_name; - if (int_enc_name) - opt->intern.enc.name = int_enc_name; - FEATURE_SET_RESTORE(opt->features, feat); - FEATURE_SET_RESTORE(opt->warn, warn); } if (opt->src.enc.name) |