fclose input file

parent ca704e54
...@@ -187,6 +187,7 @@ load_file(mrb_state *mrb, struct mrbc_args *args) ...@@ -187,6 +187,7 @@ load_file(mrb_state *mrb, struct mrbc_args *args)
mrb_value result; mrb_value result;
char *input = args->argv[args->idx]; char *input = args->argv[args->idx];
FILE *infile; FILE *infile;
int need_close = FALSE;
c = mrbc_context_new(mrb); c = mrbc_context_new(mrb);
if (args->verbose) if (args->verbose)
...@@ -195,17 +196,22 @@ load_file(mrb_state *mrb, struct mrbc_args *args) ...@@ -195,17 +196,22 @@ load_file(mrb_state *mrb, struct mrbc_args *args)
if (input[0] == '-' && input[1] == '\0') { if (input[0] == '-' && input[1] == '\0') {
infile = stdin; infile = stdin;
} }
else if ((infile = fopen(input, "r")) == NULL) { else {
need_close = TRUE;
if ((infile = fopen(input, "r")) == NULL) {
fprintf(stderr, "%s: cannot open program file. (%s)\n", args->prog, input); fprintf(stderr, "%s: cannot open program file. (%s)\n", args->prog, input);
return mrb_nil_value(); return mrb_nil_value();
} }
}
mrbc_filename(mrb, c, input); mrbc_filename(mrb, c, input);
args->idx++; args->idx++;
if (args->idx < args->argc) { if (args->idx < args->argc) {
need_close = FALSE;
mrbc_partial_hook(mrb, c, partial_hook, (void*)args); mrbc_partial_hook(mrb, c, partial_hook, (void*)args);
} }
result = mrb_load_file_cxt(mrb, infile, c); result = mrb_load_file_cxt(mrb, infile, c);
if (need_close) fclose(infile);
if (mrb_undef_p(result) || mrb_fixnum(result) < 0) { if (mrb_undef_p(result) || mrb_fixnum(result) < 0) {
mrbc_context_free(mrb, c); mrbc_context_free(mrb, c);
return mrb_nil_value(); return mrb_nil_value();
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment