From 08e6bd47a02e2dbaf3d96f385caee102f95a26a1 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Wed, 13 Nov 2013 14:44:02 +0900 Subject: fclose input file --- tools/mrbc/mrbc.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) (limited to 'tools') diff --git a/tools/mrbc/mrbc.c b/tools/mrbc/mrbc.c index df64d6b7d..27e151ad2 100644 --- a/tools/mrbc/mrbc.c +++ b/tools/mrbc/mrbc.c @@ -187,6 +187,7 @@ load_file(mrb_state *mrb, struct mrbc_args *args) mrb_value result; char *input = args->argv[args->idx]; FILE *infile; + int need_close = FALSE; c = mrbc_context_new(mrb); if (args->verbose) @@ -195,17 +196,22 @@ load_file(mrb_state *mrb, struct mrbc_args *args) if (input[0] == '-' && input[1] == '\0') { infile = stdin; } - else if ((infile = fopen(input, "r")) == NULL) { - fprintf(stderr, "%s: cannot open program file. (%s)\n", args->prog, input); - return mrb_nil_value(); + else { + need_close = TRUE; + if ((infile = fopen(input, "r")) == NULL) { + fprintf(stderr, "%s: cannot open program file. (%s)\n", args->prog, input); + return mrb_nil_value(); + } } mrbc_filename(mrb, c, input); args->idx++; if (args->idx < args->argc) { + need_close = FALSE; mrbc_partial_hook(mrb, c, partial_hook, (void*)args); } result = mrb_load_file_cxt(mrb, infile, c); + if (need_close) fclose(infile); if (mrb_undef_p(result) || mrb_fixnum(result) < 0) { mrbc_context_free(mrb, c); return mrb_nil_value(); -- cgit v1.2.3