summaryrefslogtreecommitdiffhomepage
path: root/tools
diff options
context:
space:
mode:
authorYukihiro Matsumoto <[email protected]>2012-10-04 14:56:24 +0900
committerYukihiro Matsumoto <[email protected]>2012-10-04 14:56:24 +0900
commit70916d030cc6f29e34fe3c07afddc07c7fa7c29b (patch)
tree7ed7a27a56091c5661102b4e1f9885c0de8f3477 /tools
parent0d9b91083b93ec0abd10031dcb5bb892551d5c66 (diff)
downloadmruby-70916d030cc6f29e34fe3c07afddc07c7fa7c29b.tar.gz
mruby-70916d030cc6f29e34fe3c07afddc07c7fa7c29b.zip
script file name should not be in ARGV
Diffstat (limited to 'tools')
-rw-r--r--tools/mruby/mruby.c22
1 files changed, 14 insertions, 8 deletions
diff --git a/tools/mruby/mruby.c b/tools/mruby/mruby.c
index a45d86526..2ab9e845c 100644
--- a/tools/mruby/mruby.c
+++ b/tools/mruby/mruby.c
@@ -25,6 +25,7 @@ void mrb_show_copyright(mrb_state *);
struct _args {
FILE *rfp;
char* cmdline;
+ int fname : 1;
int mrbfile : 1;
int check_syntax : 1;
int verbose : 1;
@@ -131,9 +132,14 @@ append_cmdline:
if (args->rfp == NULL && args->cmdline == NULL) {
if (*argv == NULL) args->rfp = stdin;
- else if ((args->rfp = fopen(*argv, args->mrbfile ? "rb" : "r")) == NULL) {
- printf("%s: Cannot open program file. (%s)\n", *origargv, *argv);
- return 0;
+ else {
+ args->rfp = fopen(argv[0], args->mrbfile ? "rb" : "r");
+ if (args->rfp == NULL) {
+ printf("%s: Cannot open program file. (%s)\n", *origargv, *argv);
+ return 0;
+ }
+ args->fname = 1;
+ argc--; argv++;
}
}
args->argv = (char **)mrb_realloc(mrb, args->argv, sizeof(char*) * (argc + 1));
@@ -202,13 +208,13 @@ main(int argc, char **argv)
if (args.check_syntax)
c->no_exec = 1;
- if (args.cmdline) {
- mrbc_filename(mrb, c, "-e");
- v = mrb_load_string_cxt(mrb, (char*)args.cmdline, c);
+ if (args.rfp) {
+ mrbc_filename(mrb, c, args.cmdline ? args.cmdline : "-");
+ v = mrb_load_file_cxt(mrb, args.rfp, c);
}
else {
- mrbc_filename(mrb, c, args.argv[0]);
- v = mrb_load_file_cxt(mrb, args.rfp, c);
+ mrbc_filename(mrb, c, "-e");
+ v = mrb_load_string_cxt(mrb, args.cmdline, c);
}
mrbc_context_free(mrb, c);
if (mrb->exc) {