aboutsummaryrefslogtreecommitdiff
path: root/jim.c
diff options
context:
space:
mode:
Diffstat (limited to 'jim.c')
-rw-r--r--jim.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/jim.c b/jim.c
index 8ca27cb..c9147f4 100644
--- a/jim.c
+++ b/jim.c
@@ -9870,7 +9870,7 @@ int Jim_EvalFile(Jim_Interp *interp, const char *filename)
int readlen;
char missing;
- if (stat(filename, &sb) != 0 || (fp = fopen(filename, "r")) == NULL) {
+ if (stat(filename, &sb) != 0 || (fp = fopen(filename, "rt")) == NULL) {
Jim_SetResultFormatted(interp, "couldn't read file \"%s\": %s", filename, strerror(errno));
return JIM_ERR;
}
@@ -9880,13 +9880,15 @@ int Jim_EvalFile(Jim_Interp *interp, const char *filename)
}
buf = Jim_Alloc(sb.st_size + 1);
- readlen = fread(buf, sb.st_size, 1, fp);
- fclose(fp);
- if (readlen != 1) {
+ readlen = fread(buf, 1, sb.st_size, fp);
+ if (ferror(fp)) {
+ fclose(fp);
Jim_Free(buf);
+ Jim_SetResultFormatted(interp, "failed to load file \"%s\": %s", filename, strerror(errno));
return JIM_ERR;
}
- buf[sb.st_size] = 0;
+ fclose(fp);
+ buf[readlen] = 0;
if (!Jim_ScriptIsComplete(buf, sb.st_size, &missing)) {
Jim_SetResultFormatted(interp, "missing %s in \"%s\"",
@@ -9895,7 +9897,7 @@ int Jim_EvalFile(Jim_Interp *interp, const char *filename)
return JIM_ERR;
}
- scriptObjPtr = Jim_NewStringObjNoAlloc(interp, buf, sb.st_size);
+ scriptObjPtr = Jim_NewStringObjNoAlloc(interp, buf, readlen);
JimSetSourceInfo(interp, scriptObjPtr, filename, 1);
Jim_IncrRefCount(scriptObjPtr);