summaryrefslogtreecommitdiffhomepage
path: root/mrbgems/mruby-bin-mruby/tools
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/tools
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/tools')
-rw-r--r--mrbgems/mruby-bin-mruby/tools/mruby/mruby.c18
1 files changed, 14 insertions, 4 deletions
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);