summaryrefslogtreecommitdiffhomepage
path: root/mrbgems/mruby-bin-mruby
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2020-11-21 19:22:49 +0900
committerGitHub <[email protected]>2020-11-21 19:22:49 +0900
commit544784effd251656f7b406bc94880e1ef75af7b5 (patch)
treefdd4f269992d92bc35fb8c3cf67127d1573fb22c /mrbgems/mruby-bin-mruby
parente3b91b8d415852777f9a10224efeb92edc37c19a (diff)
parenta045b6b8d93f70d7bf57a94ed5c7e0432190d584 (diff)
downloadmruby-544784effd251656f7b406bc94880e1ef75af7b5.tar.gz
mruby-544784effd251656f7b406bc94880e1ef75af7b5.zip
Merge pull request #5157 from dearblue/detect-rb-mrb
Allow to mixed and specify `*.rb` and `*.mrb` in `bin/mruby`
Diffstat (limited to 'mrbgems/mruby-bin-mruby')
-rw-r--r--mrbgems/mruby-bin-mruby/bintest/mruby.rb6
-rw-r--r--mrbgems/mruby-bin-mruby/tools/mruby/mruby.c18
2 files changed, 17 insertions, 7 deletions
diff --git a/mrbgems/mruby-bin-mruby/bintest/mruby.rb b/mrbgems/mruby-bin-mruby/bintest/mruby.rb
index e8b4c6d0f..35a108a9d 100644
--- a/mrbgems/mruby-bin-mruby/bintest/mruby.rb
+++ b/mrbgems/mruby-bin-mruby/bintest/mruby.rb
@@ -19,7 +19,7 @@ assert('regression for #1572') do
script, bin = Tempfile.new('test.rb'), Tempfile.new('test.mrb')
File.write script.path, 'p "ok"'
system "#{cmd('mrbc')} -g -o #{bin.path} #{script.path}"
- o = `#{cmd('mruby')} -b #{bin.path}`.strip
+ o = `#{cmd('mruby')} #{bin.path}`.strip
assert_equal '"ok"', o
end
@@ -33,7 +33,7 @@ assert '$0 value' do
# .mrb file
`#{cmd('mrbc')} -o "#{bin.path}" "#{script.path}"`
- assert_equal "\"#{bin.path}\"", `#{cmd('mruby')} -b "#{bin.path}"`.chomp
+ assert_equal "\"#{bin.path}\"", `#{cmd('mruby')} "#{bin.path}"`.chomp
# one liner
assert_equal '"-e"', `#{cmd('mruby')} -e #{shellquote('p $0')}`.chomp
@@ -48,7 +48,7 @@ assert('float literal') do
script, bin = Tempfile.new('test.rb'), Tempfile.new('test.mrb')
File.write script.path, 'p [3.21, 2e308.infinite?, -2e308.infinite?]'
system "#{cmd('mrbc')} -g -o #{bin.path} #{script.path}"
- assert_equal "[3.21, 1, -1]", `#{cmd('mruby')} -b #{bin.path}`.chomp!
+ assert_equal "[3.21, 1, -1]", `#{cmd('mruby')} #{bin.path}`.chomp!
end
assert '__END__', '8.6' do
diff --git a/mrbgems/mruby-bin-mruby/tools/mruby/mruby.c b/mrbgems/mruby-bin-mruby/tools/mruby/mruby.c
index e9bd4c326..c60a0945b 100644
--- a/mrbgems/mruby-bin-mruby/tools/mruby/mruby.c
+++ b/mrbgems/mruby-bin-mruby/tools/mruby/mruby.c
@@ -12,6 +12,11 @@
#include <mruby/variable.h>
#include <mruby/proc.h>
+#if defined(_WIN32) || defined(_WIN64)
+# include <io.h> /* for setmode */
+# include <fcntl.h>
+#endif
+
struct _args {
FILE *rfp;
char *cmdline;
@@ -218,7 +223,7 @@ parse_args(mrb_state *mrb, int argc, char **argv, struct _args *args)
}
else {
args->rfp = strcmp(argv[0], "-") == 0 ?
- stdin : fopen(argv[0], args->mrbfile ? "rb" : "r");
+ stdin : fopen(argv[0], "rb");
if (args->rfp == NULL) {
fprintf(stderr, "%s: Cannot open program file: %s\n", opts->program, argv[0]);
return EXIT_FAILURE;
@@ -228,6 +233,11 @@ parse_args(mrb_state *mrb, int argc, char **argv, struct _args *args)
argc--; argv++;
}
}
+#if defined(_WIN32) || defined(_WIN64)
+ if (args->rfp == stdin) {
+ setmode(_fileno(stdin), O_BINARY);
+ }
+#endif
args->argv = (char **)mrb_realloc(mrb, args->argv, sizeof(char*) * (argc + 1));
memcpy(args->argv, argv, (argc+1) * sizeof(char*));
args->argc = argc;
@@ -309,7 +319,7 @@ main(int argc, char **argv)
/* Load libraries */
for (i = 0; i < args.libc; i++) {
struct REnv *e;
- FILE *lfp = fopen(args.libv[i], args.mrbfile ? "rb" : "r");
+ FILE *lfp = fopen(args.libv[i], "rb");
if (lfp == NULL) {
fprintf(stderr, "%s: Cannot open library file: %s\n", *argv, args.libv[i]);
mrbc_context_free(mrb, c);
@@ -320,7 +330,7 @@ main(int argc, char **argv)
v = mrb_load_irep_file_cxt(mrb, lfp, c);
}
else {
- v = mrb_load_file_cxt(mrb, lfp, c);
+ v = mrb_load_detect_file_cxt(mrb, lfp, c);
}
fclose(lfp);
e = mrb->c->cibase->env;
@@ -334,7 +344,7 @@ main(int argc, char **argv)
v = mrb_load_irep_file_cxt(mrb, args.rfp, c);
}
else if (args.rfp) {
- v = mrb_load_file_cxt(mrb, args.rfp, c);
+ v = mrb_load_detect_file_cxt(mrb, args.rfp, c);
}
else {
char* utf8 = mrb_utf8_from_locale(args.cmdline, -1);