mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* ruby.c (set_option_encoding_once): dry.
* ruby.c (proc_options): checks extra argument for -E/--encoding. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@20575 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
a41eedddd3
commit
ecc83033ba
3 changed files with 46 additions and 34 deletions
|
@ -1,3 +1,9 @@
|
|||
Mon Dec 8 10:32:33 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||
|
||||
* ruby.c (set_option_encoding_once): dry.
|
||||
|
||||
* ruby.c (proc_options): checks extra argument for -E/--encoding.
|
||||
|
||||
Sun Dec 7 23:47:37 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||
|
||||
* configure.in (LIBPATHFLAG): use numbered specifier if RPATHFLAG
|
||||
|
|
68
ruby.c
68
ruby.c
|
@ -622,36 +622,27 @@ dump_option(const char *str, int len, void *arg)
|
|||
}
|
||||
|
||||
static void
|
||||
set_internal_encoding_once(struct cmdline_options *opt, const char *e, int elen)
|
||||
set_option_encoding_once(const char *type, VALUE *name, const char *e, int elen)
|
||||
{
|
||||
VALUE ename;
|
||||
|
||||
if (!elen) elen = strlen(e);
|
||||
ename = rb_str_new(e, elen);
|
||||
|
||||
if (opt->intern.enc.name &&
|
||||
rb_funcall(ename, rb_intern("casecmp"), 1, opt->intern.enc.name) != INT2FIX(0)) {
|
||||
if (*name &&
|
||||
rb_funcall(ename, rb_intern("casecmp"), 1, *name) != INT2FIX(0)) {
|
||||
rb_raise(rb_eRuntimeError,
|
||||
"default_internal already set to %s", RSTRING_PTR(opt->intern.enc.name));
|
||||
"%s already set to %s", type, RSTRING_PTR(*name));
|
||||
}
|
||||
opt->intern.enc.name = ename;
|
||||
*name = ename;
|
||||
}
|
||||
|
||||
static void
|
||||
set_external_encoding_once(struct cmdline_options *opt, const char *e, int elen)
|
||||
{
|
||||
VALUE ename;
|
||||
|
||||
if (!elen) elen = strlen(e);
|
||||
ename = rb_str_new(e, elen);
|
||||
|
||||
if (opt->ext.enc.name &&
|
||||
rb_funcall(ename, rb_intern("casecmp"), 1, opt->ext.enc.name) != INT2FIX(0)) {
|
||||
rb_raise(rb_eRuntimeError,
|
||||
"default_external already set to %s", RSTRING_PTR(opt->ext.enc.name));
|
||||
}
|
||||
opt->ext.enc.name = ename;
|
||||
}
|
||||
#define set_internal_encoding_once(opt, e, elen) \
|
||||
set_option_encoding_once("default_intenal", &opt->intern.enc.name, e, elen)
|
||||
#define set_external_encoding_once(opt, e, elen) \
|
||||
set_option_encoding_once("default_extenal", &opt->ext.enc.name, e, elen)
|
||||
#define set_source_encoding_once(opt, e, elen) \
|
||||
set_option_encoding_once("source", &opt->src.enc.name, e, elen)
|
||||
|
||||
static int
|
||||
proc_options(int argc, char **argv, struct cmdline_options *opt, int envopt)
|
||||
|
@ -663,10 +654,11 @@ proc_options(int argc, char **argv, struct cmdline_options *opt, int envopt)
|
|||
return 0;
|
||||
|
||||
for (argc--, argv++; argc > 0; argc--, argv++) {
|
||||
if (argv[0][0] != '-' || !argv[0][1])
|
||||
const char *const arg = argv[0];
|
||||
if (arg[0] != '-' || !arg[1])
|
||||
break;
|
||||
|
||||
s = argv[0] + 1;
|
||||
s = arg + 1;
|
||||
reswitch:
|
||||
switch (*s) {
|
||||
case 'a':
|
||||
|
@ -955,15 +947,29 @@ proc_options(int argc, char **argv, struct cmdline_options *opt, int envopt)
|
|||
else if (is_option_with_arg("encoding", Qfalse, Qtrue)) {
|
||||
char *p;
|
||||
encoding:
|
||||
p = strchr(s, ':');
|
||||
if (p) {
|
||||
if (p > s)
|
||||
set_external_encoding_once(opt, s, p-s);
|
||||
if (*++p)
|
||||
set_internal_encoding_once(opt, p, 0);
|
||||
}
|
||||
else
|
||||
set_external_encoding_once(opt, s, 0);
|
||||
do {
|
||||
# define set_encoding_part(type) \
|
||||
if (!(p = strchr(s, ':'))) { \
|
||||
set_##type##_encoding_once(opt, s, 0); \
|
||||
break; \
|
||||
} \
|
||||
else if (p > s) { \
|
||||
set_##type##_encoding_once(opt, s, p-s); \
|
||||
}
|
||||
set_encoding_part(external);
|
||||
if (!*(s = ++p)) break;
|
||||
set_encoding_part(internal);
|
||||
if (!*(s = ++p)) break;
|
||||
rb_raise(rb_eRuntimeError, "extra argument for %s: %s",
|
||||
(arg[1] == '-' ? "--encoding" : "-E"), s);
|
||||
# undef set_encoding_part
|
||||
} while (0);
|
||||
}
|
||||
else if (is_option_with_arg("internal-encoding", Qfalse, Qtrue)) {
|
||||
set_internal_encoding_once(opt, s, 0);
|
||||
}
|
||||
else if (is_option_with_arg("external-encoding", Qfalse, Qtrue)) {
|
||||
set_external_encoding_once(opt, s, 0);
|
||||
}
|
||||
else if (strcmp("version", s) == 0) {
|
||||
if (envopt) goto noenvopt_long;
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#define RUBY_VERSION "1.9.1"
|
||||
#define RUBY_RELEASE_DATE "2008-12-07"
|
||||
#define RUBY_RELEASE_DATE "2008-12-08"
|
||||
#define RUBY_VERSION_CODE 191
|
||||
#define RUBY_RELEASE_CODE 20081207
|
||||
#define RUBY_RELEASE_CODE 20081208
|
||||
#define RUBY_PATCHLEVEL 5000
|
||||
|
||||
#define RUBY_VERSION_MAJOR 1
|
||||
|
@ -9,7 +9,7 @@
|
|||
#define RUBY_VERSION_TEENY 1
|
||||
#define RUBY_RELEASE_YEAR 2008
|
||||
#define RUBY_RELEASE_MONTH 12
|
||||
#define RUBY_RELEASE_DAY 7
|
||||
#define RUBY_RELEASE_DAY 8
|
||||
|
||||
#ifdef RUBY_EXTERN
|
||||
RUBY_EXTERN const char ruby_version[];
|
||||
|
|
Loading…
Reference in a new issue