ruby.c: abbreviated option name
* ruby.c (name_match_p): allow option argument names to be abbreviated for each words. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51951 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
7f13f878cf
commit
6b52b88d46
20
ruby.c
20
ruby.c
@ -693,8 +693,26 @@ moreswitches(const char *s, struct cmdline_options *opt, int envopt)
|
||||
rb_str_resize(argstr, 0);
|
||||
}
|
||||
|
||||
static int
|
||||
name_match_p(const char *name, const char *str, size_t len)
|
||||
{
|
||||
if (len == 0) return 0;
|
||||
do {
|
||||
while (TOLOWER(*str) == *name) {
|
||||
if (!--len || !*++str) return 1;
|
||||
++name;
|
||||
}
|
||||
if (*str != '-' && *str != '_') return 0;
|
||||
while (ISALNUM(*name)) name++;
|
||||
if (*name != '-' && *name != '_') return 0;
|
||||
++name;
|
||||
++str;
|
||||
} while (len > 0);
|
||||
return !*name;
|
||||
}
|
||||
|
||||
#define NAME_MATCH_P(name, str, len) \
|
||||
((len) < (int)sizeof(name) && strncmp((str), (name), (len)) == 0)
|
||||
((len) < (int)sizeof(name) && name_match_p((name), (str), (len)))
|
||||
|
||||
#define UNSET_WHEN(name, bit, str, len) \
|
||||
if (NAME_MATCH_P((name), (str), (len))) { \
|
||||
|
Loading…
x
Reference in New Issue
Block a user