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/mrbc') 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 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/mrbc') 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