diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2016-10-10 03:40:56 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2016-10-10 03:40:56 +0000 |
commit | 3ef1149bbe7afc411214a41d125497ac8fd2d859 (patch) | |
tree | 8bf6fdecafe641f40cbb93f9cd676ddb40ce524f | |
parent | 18d0bf952a55348e191804307e459df6da6368a4 (diff) |
ruby.c: compare with EXEEXT
* ruby.c (open_load_file): compare with EXEEXT instead of hard
coded name, and do not match with mere EXEEXT.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@56386 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | ruby.c | 10 |
2 files changed, 11 insertions, 4 deletions
@@ -1,4 +1,7 @@ -Mon Oct 10 12:40:04 2016 Nobuyoshi Nakada <nobu@ruby-lang.org> +Mon Oct 10 12:40:54 2016 Nobuyoshi Nakada <nobu@ruby-lang.org> + + * ruby.c (open_load_file): compare with EXEEXT instead of hard + coded name, and do not match with mere EXEEXT. * ruby.c (open_load_file): open in binary mode if available, as parser deals with EOLs. @@ -1865,10 +1865,11 @@ static VALUE open_load_file(VALUE fname_v, int *xflag) { const char *fname = StringValueCStr(fname_v); + long flen = RSTRING_LEN(fname_v); VALUE f; int e; - if (RSTRING_LEN(fname_v) == 1 && fname[0] == '-') { + if (flen == 1 && fname[0] == '-') { f = rb_stdin; } else { @@ -1889,9 +1890,12 @@ open_load_file(VALUE fname_v, int *xflag) #endif MODE_TO_LOAD; #if defined DOSISH || defined __CYGWIN__ +# define isdirsep(x) ((x) == '/' || (x) == FILE_ALT_SEPARATOR) { - const char *ext = strrchr(fname, '.'); - if (ext && STRCASECMP(ext, ".exe") == 0) { + static const char exeext[] = EXEEXT; + enum {extlen = sizeof(exeext)-1}; + if (flen > extlen && !isdirsep(fname[flen-extlen-1]) && + STRNCASECMP(fname+flen-extlen, exeext, extlen) == 0) { *xflag = 1; } } |