From af8f039b90bc34a0d6d7d0b0fbd6f2e8fe3d183b Mon Sep 17 00:00:00 2001 From: Yukihiro Matsumoto Date: Sun, 30 Sep 2012 08:41:36 +0900 Subject: mruby should exit with 0 on success --- tools/mruby/mruby.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'tools') diff --git a/tools/mruby/mruby.c b/tools/mruby/mruby.c index 444170270..c36e76066 100644 --- a/tools/mruby/mruby.c +++ b/tools/mruby/mruby.c @@ -215,6 +215,7 @@ main(int argc, char **argv) if (!mrb_undef_p(v)) { p(mrb, mrb_obj_value(mrb->exc)); } + n = -1; } else if (args.check_syntax) { printf("Syntax OK\n"); @@ -222,5 +223,5 @@ main(int argc, char **argv) } cleanup(mrb, &args); - return n > 0 ? 0 : 1; + return n == 0 ? EXIT_SUCCESS : EXIT_FAILURE; } -- cgit v1.2.3 From 0d9b91083b93ec0abd10031dcb5bb892551d5c66 Mon Sep 17 00:00:00 2001 From: Yukihiro Matsumoto Date: Thu, 4 Oct 2012 14:39:44 +0900 Subject: specify know capacity of an array --- tools/mruby/mruby.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'tools') diff --git a/tools/mruby/mruby.c b/tools/mruby/mruby.c index c36e76066..a45d86526 100644 --- a/tools/mruby/mruby.c +++ b/tools/mruby/mruby.c @@ -176,7 +176,7 @@ main(int argc, char **argv) return n; } - ARGV = mrb_ary_new(mrb); + ARGV = mrb_ary_new_capa(mrb, args.argc); for (i = 0; i < args.argc; i++) { mrb_ary_push(mrb, ARGV, mrb_str_new(mrb, args.argv[i], strlen(args.argv[i]))); } -- cgit v1.2.3 From 70916d030cc6f29e34fe3c07afddc07c7fa7c29b Mon Sep 17 00:00:00 2001 From: Yukihiro Matsumoto Date: Thu, 4 Oct 2012 14:56:24 +0900 Subject: script file name should not be in ARGV --- tools/mruby/mruby.c | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) (limited to 'tools') 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) { -- cgit v1.2.3 From cf2bd3469a08ac20cffa62fe00c54fd69844fcfa Mon Sep 17 00:00:00 2001 From: Yukihiro Matsumoto Date: Fri, 5 Oct 2012 10:55:29 +0900 Subject: preserve script file name --- tools/mruby/mruby.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'tools') diff --git a/tools/mruby/mruby.c b/tools/mruby/mruby.c index 2ab9e845c..c1ac0d778 100644 --- a/tools/mruby/mruby.c +++ b/tools/mruby/mruby.c @@ -139,6 +139,7 @@ append_cmdline: return 0; } args->fname = 1; + args->cmdline = argv[0]; argc--; argv++; } } @@ -154,7 +155,7 @@ cleanup(mrb_state *mrb, struct _args *args) { if (args->rfp && args->rfp != stdin) fclose(args->rfp); - if (args->cmdline) + if (args->cmdline && !args->fname) mrb_free(mrb, args->cmdline); if (args->argv) mrb_free(mrb, args->argv); -- cgit v1.2.3 From 76f28241f1a6eb76070d470779fc17d43ca838e3 Mon Sep 17 00:00:00 2001 From: Yukihiro Matsumoto Date: Tue, 16 Oct 2012 20:54:06 +0900 Subject: "mrbc -" should take input from stdin; close #489 --- tools/mrbc/mrbc.c | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) (limited to 'tools') diff --git a/tools/mrbc/mrbc.c b/tools/mrbc/mrbc.c index 5382b90a8..3c6352f80 100644 --- a/tools/mrbc/mrbc.c +++ b/tools/mrbc/mrbc.c @@ -77,8 +77,11 @@ parse_args(mrb_state *mrb, int argc, char **argv, struct _args *args) for (argc--,argv++; argc > 0; argc--,argv++) { if (**argv == '-') { - if (strlen(*argv) <= 1) - return -1; + if (strlen(*argv) == 1) { + args->filename = infile = "-"; + args->rfp = stdin; + break; + } switch ((*argv)[1]) { case 'o': @@ -134,9 +137,14 @@ parse_args(mrb_state *mrb, int argc, char **argv, struct _args *args) if (args->check_syntax) return 0; - if (outfile == NULL) - outfile = get_outfilename(infile, args->ext); - + if (outfile == NULL) { + if (strcmp("-", infile) == 0) { + outfile = infile; + } + else { + outfile = get_outfilename(infile, args->ext); + } + } if (strcmp("-", outfile) == 0) { args->wfp = stdout; } -- cgit v1.2.3 From 19cd9c6e2eaa4849f37228babdbc2868d6750bad Mon Sep 17 00:00:00 2001 From: Yukihiro Matsumoto Date: Thu, 18 Oct 2012 06:05:59 +0900 Subject: print error message on mrb load error --- tools/mruby/mruby.c | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) (limited to 'tools') diff --git a/tools/mruby/mruby.c b/tools/mruby/mruby.c index c1ac0d778..cbe170e7f 100644 --- a/tools/mruby/mruby.c +++ b/tools/mruby/mruby.c @@ -172,7 +172,7 @@ main(int argc, char **argv) mrb_value ARGV; if (mrb == NULL) { - fprintf(stderr, "Invalid mrb_state, exiting mruby"); + fprintf(stderr, "Invalid mrb_state, exiting mruby\n"); return EXIT_FAILURE; } @@ -191,12 +191,13 @@ main(int argc, char **argv) if (args.mrbfile) { n = mrb_load_irep(mrb, args.rfp); - if (n >= 0) { - if (!args.check_syntax) { - mrb_run(mrb, mrb_proc_new(mrb, mrb->irep[n]), mrb_top_self(mrb)); - if (mrb->exc) { - p(mrb, mrb_obj_value(mrb->exc)); - } + if (n < 0) { + fprintf(stderr, "failed to load mrb file: %s\n", args.cmdline); + } + else if (!args.check_syntax) { + mrb_run(mrb, mrb_proc_new(mrb, mrb->irep[n]), mrb_top_self(mrb)); + if (mrb->exc) { + p(mrb, mrb_obj_value(mrb->exc)); } } } -- cgit v1.2.3 From 52d39e6224382e669b959cf020164d6bb90b9844 Mon Sep 17 00:00:00 2001 From: Yukihiro Matsumoto Date: Tue, 23 Oct 2012 19:01:37 +0900 Subject: prevent resource leak (outfile) --- tools/mrbc/mrbc.c | 51 ++++++++++++++++++++++++++++----------------------- 1 file changed, 28 insertions(+), 23 deletions(-) (limited to 'tools') diff --git a/tools/mrbc/mrbc.c b/tools/mrbc/mrbc.c index 3c6352f80..2ecb00623 100644 --- a/tools/mrbc/mrbc.c +++ b/tools/mrbc/mrbc.c @@ -70,6 +70,7 @@ parse_args(mrb_state *mrb, int argc, char **argv, struct _args *args) char *infile = NULL; char *outfile = NULL; char **origargv = argv; + int result = 0; static const struct _args args_zero = { 0 }; *args = args_zero; @@ -93,7 +94,8 @@ parse_args(mrb_state *mrb, int argc, char **argv, struct _args *args) args->initname = (*argv) + 2; if (*args->initname == '\0') { printf("%s: Function name is not specified.\n", *origargv); - return -2; + result = -2; + goto exit; } args->dump_type = ((*argv)[1] == 'B') ? DUMP_TYPE_BIN : DUMP_TYPE_CODE; break; @@ -117,8 +119,8 @@ parse_args(mrb_state *mrb, int argc, char **argv, struct _args *args) mrb_show_copyright(mrb); exit(0); } - else return -3; - return 0; + result = -3; + goto exit; default: break; } @@ -127,33 +129,36 @@ parse_args(mrb_state *mrb, int argc, char **argv, struct _args *args) args->filename = infile = *argv; if ((args->rfp = fopen(infile, "r")) == NULL) { printf("%s: Cannot open program file. (%s)\n", *origargv, infile); - return 0; + goto exit; } } } - if (infile == NULL) - return -4; - if (args->check_syntax) - return 0; - - if (outfile == NULL) { - if (strcmp("-", infile) == 0) { - outfile = infile; + if (infile == NULL) { + result = -4; + goto exit; + } + if (!args->check_syntax) { + if (outfile == NULL) { + if (strcmp("-", infile) == 0) { + outfile = infile; + } + else { + outfile = get_outfilename(infile, args->ext); + } } - else { - outfile = get_outfilename(infile, args->ext); + if (strcmp("-", outfile) == 0) { + args->wfp = stdout; + } + else if ((args->wfp = fopen(outfile, "wb")) == NULL) { + printf("%s: Cannot open output file. (%s)\n", *origargv, outfile); + result = -1; + goto exit; } } - if (strcmp("-", outfile) == 0) { - args->wfp = stdout; - } - else if ((args->wfp = fopen(outfile, "wb")) == NULL) { - printf("%s: Cannot open output file. (%s)\n", *origargv, outfile); - return 0; - } - - return 0; + exit: + if (outfile && infile != outfile) free(outfile); + return result; } static void -- cgit v1.2.3 From 38fb8b07c6c39f42898b4e1c14a8cd524cc022b8 Mon Sep 17 00:00:00 2001 From: Akira Yumiyama Date: Tue, 30 Oct 2012 23:43:19 +0900 Subject: fix mruby exit status with mrb file. --- tools/mruby/mruby.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) (limited to 'tools') diff --git a/tools/mruby/mruby.c b/tools/mruby/mruby.c index cbe170e7f..db26d23a1 100644 --- a/tools/mruby/mruby.c +++ b/tools/mruby/mruby.c @@ -113,7 +113,7 @@ append_cmdline: case '-': if (strcmp((*argv) + 2, "version") == 0) { mrb_show_version(mrb); - exit(0); + exit(0); } else if (strcmp((*argv) + 2, "verbose") == 0) { args->verbose = 1; @@ -121,7 +121,7 @@ append_cmdline: } else if (strcmp((*argv) + 2, "copyright") == 0) { mrb_show_copyright(mrb); - exit(0); + exit(0); } else return -3; return 0; @@ -135,8 +135,8 @@ append_cmdline: 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; + printf("%s: Cannot open program file. (%s)\n", *origargv, *argv); + return 0; } args->fname = 1; args->cmdline = argv[0]; @@ -196,8 +196,10 @@ main(int argc, char **argv) } else if (!args.check_syntax) { mrb_run(mrb, mrb_proc_new(mrb, mrb->irep[n]), mrb_top_self(mrb)); + n = 0; if (mrb->exc) { - p(mrb, mrb_obj_value(mrb->exc)); + p(mrb, mrb_obj_value(mrb->exc)); + n = -1; } } } @@ -221,7 +223,7 @@ main(int argc, char **argv) mrbc_context_free(mrb, c); if (mrb->exc) { if (!mrb_undef_p(v)) { - p(mrb, mrb_obj_value(mrb->exc)); + p(mrb, mrb_obj_value(mrb->exc)); } n = -1; } -- cgit v1.2.3