зеркало из https://github.com/github/ruby.git
Preserve already set options in `moreswitches`
This commit is contained in:
Родитель
1c2a4d9682
Коммит
dbbc3583ba
35
ruby.c
35
ruby.c
|
@ -887,6 +887,14 @@ moreswitches(const char *s, ruby_cmdline_options_t *opt, int envopt)
|
||||||
VALUE argstr, argary;
|
VALUE argstr, argary;
|
||||||
void *ptr;
|
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++;
|
while (ISSPACE(*s)) s++;
|
||||||
if (!*s) return;
|
if (!*s) return;
|
||||||
argstr = rb_str_tmp_new((len = strlen(s)) + (envopt!=0));
|
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);
|
ruby_xfree(ptr);
|
||||||
/* get rid of GC */
|
/* get rid of GC */
|
||||||
rb_str_resize(argary, 0);
|
rb_str_resize(argary, 0);
|
||||||
|
@ -2003,22 +2023,7 @@ process_options(int argc, char **argv, ruby_cmdline_options_t *opt)
|
||||||
argv += i;
|
argv += i;
|
||||||
|
|
||||||
if (FEATURE_SET_P(opt->features, rubyopt) && (s = getenv("RUBYOPT"))) {
|
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);
|
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)
|
if (opt->src.enc.name)
|
||||||
|
|
Загрузка…
Ссылка в новой задаче